; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (dorglq)

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

@c__1 = external hidden global i32, align 4
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_n1 = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4
@c__2 = external hidden global i32, align 4
@.str.2 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dorglq_(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) #0 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %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 i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  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 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  %39 = load ptr, ptr %14, align 8, !tbaa !5
  %40 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %40, ptr %19, align 4, !tbaa !9
  %41 = load i32, ptr %19, align 4, !tbaa !9
  %42 = mul nsw i32 %41, 1
  %43 = add nsw i32 1, %42
  store i32 %43, ptr %20, align 4, !tbaa !9
  %44 = load i32, ptr %20, align 4, !tbaa !9
  %45 = load ptr, ptr %13, align 8, !tbaa !5
  %46 = sext i32 %44 to i64
  %47 = sub i64 0, %46
  %48 = getelementptr inbounds double, ptr %45, i64 %47
  store ptr %48, ptr %13, align 8, !tbaa !5
  %49 = load ptr, ptr %15, align 8, !tbaa !5
  %50 = getelementptr inbounds double, ptr %49, i32 -1
  store ptr %50, ptr %15, align 8, !tbaa !5
  %51 = load ptr, ptr %16, align 8, !tbaa !5
  %52 = getelementptr inbounds double, ptr %51, i32 -1
  store ptr %52, ptr %16, align 8, !tbaa !5
  %53 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 0, ptr %53, align 4, !tbaa !9
  %54 = load ptr, ptr %10, align 8, !tbaa !5
  %55 = load ptr, ptr %11, align 8, !tbaa !5
  %56 = load ptr, ptr %12, align 8, !tbaa !5
  %57 = call i32 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %54, ptr noundef %55, ptr noundef %56, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  store i32 %57, ptr %30, align 4, !tbaa !9
  %58 = load ptr, ptr %10, align 8, !tbaa !5
  %59 = load i32, ptr %58, align 4, !tbaa !9
  %60 = icmp sge i32 1, %59
  br i1 %60, label %61, label %62

61:                                               ; preds = %9
  br label %65

62:                                               ; preds = %9
  %63 = load ptr, ptr %10, align 8, !tbaa !5
  %64 = load i32, ptr %63, align 4, !tbaa !9
  br label %65

65:                                               ; preds = %62, %61
  %66 = phi i32 [ 1, %61 ], [ %64, %62 ]
  %67 = load i32, ptr %30, align 4, !tbaa !9
  %68 = mul nsw i32 %66, %67
  store i32 %68, ptr %35, align 4, !tbaa !9
  %69 = load i32, ptr %35, align 4, !tbaa !9
  %70 = sitofp i32 %69 to double
  %71 = load ptr, ptr %16, align 8, !tbaa !5
  %72 = getelementptr inbounds double, ptr %71, i64 1
  store double %70, ptr %72, align 8, !tbaa !11
  %73 = load ptr, ptr %17, align 8, !tbaa !5
  %74 = load i32, ptr %73, align 4, !tbaa !9
  %75 = icmp eq i32 %74, -1
  %76 = zext i1 %75 to i32
  store i32 %76, ptr %36, align 4, !tbaa !9
  %77 = load ptr, ptr %10, align 8, !tbaa !5
  %78 = load i32, ptr %77, align 4, !tbaa !9
  %79 = icmp slt i32 %78, 0
  br i1 %79, label %80, label %82

80:                                               ; preds = %65
  %81 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 -1, ptr %81, align 4, !tbaa !9
  br label %139

82:                                               ; preds = %65
  %83 = load ptr, ptr %11, align 8, !tbaa !5
  %84 = load i32, ptr %83, align 4, !tbaa !9
  %85 = load ptr, ptr %10, align 8, !tbaa !5
  %86 = load i32, ptr %85, align 4, !tbaa !9
  %87 = icmp slt i32 %84, %86
  br i1 %87, label %88, label %90

88:                                               ; preds = %82
  %89 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 -2, ptr %89, align 4, !tbaa !9
  br label %138

90:                                               ; preds = %82
  %91 = load ptr, ptr %12, align 8, !tbaa !5
  %92 = load i32, ptr %91, align 4, !tbaa !9
  %93 = icmp slt i32 %92, 0
  br i1 %93, label %100, label %94

94:                                               ; preds = %90
  %95 = load ptr, ptr %12, align 8, !tbaa !5
  %96 = load i32, ptr %95, align 4, !tbaa !9
  %97 = load ptr, ptr %10, align 8, !tbaa !5
  %98 = load i32, ptr %97, align 4, !tbaa !9
  %99 = icmp sgt i32 %96, %98
  br i1 %99, label %100, label %102

100:                                              ; preds = %94, %90
  %101 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 -3, ptr %101, align 4, !tbaa !9
  br label %137

102:                                              ; preds = %94
  %103 = load ptr, ptr %14, align 8, !tbaa !5
  %104 = load i32, ptr %103, align 4, !tbaa !9
  %105 = load ptr, ptr %10, align 8, !tbaa !5
  %106 = load i32, ptr %105, align 4, !tbaa !9
  %107 = icmp sge i32 1, %106
  br i1 %107, label %108, label %109

108:                                              ; preds = %102
  br label %112

109:                                              ; preds = %102
  %110 = load ptr, ptr %10, align 8, !tbaa !5
  %111 = load i32, ptr %110, align 4, !tbaa !9
  br label %112

112:                                              ; preds = %109, %108
  %113 = phi i32 [ 1, %108 ], [ %111, %109 ]
  %114 = icmp slt i32 %104, %113
  br i1 %114, label %115, label %117

115:                                              ; preds = %112
  %116 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 -5, ptr %116, align 4, !tbaa !9
  br label %136

117:                                              ; preds = %112
  %118 = load ptr, ptr %17, align 8, !tbaa !5
  %119 = load i32, ptr %118, align 4, !tbaa !9
  %120 = load ptr, ptr %10, align 8, !tbaa !5
  %121 = load i32, ptr %120, align 4, !tbaa !9
  %122 = icmp sge i32 1, %121
  br i1 %122, label %123, label %124

123:                                              ; preds = %117
  br label %127

124:                                              ; preds = %117
  %125 = load ptr, ptr %10, align 8, !tbaa !5
  %126 = load i32, ptr %125, align 4, !tbaa !9
  br label %127

127:                                              ; preds = %124, %123
  %128 = phi i32 [ 1, %123 ], [ %126, %124 ]
  %129 = icmp slt i32 %119, %128
  br i1 %129, label %130, label %135

130:                                              ; preds = %127
  %131 = load i32, ptr %36, align 4, !tbaa !9
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %135, label %133

133:                                              ; preds = %130
  %134 = load ptr, ptr %18, align 8, !tbaa !5
  store i32 -8, ptr %134, align 4, !tbaa !9
  br label %135

135:                                              ; preds = %133, %130, %127
  br label %136

136:                                              ; preds = %135, %115
  br label %137

137:                                              ; preds = %136, %100
  br label %138

138:                                              ; preds = %137, %88
  br label %139

139:                                              ; preds = %138, %80
  %140 = load ptr, ptr %18, align 8, !tbaa !5
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = icmp ne i32 %141, 0
  br i1 %142, label %143, label %148

143:                                              ; preds = %139
  %144 = load ptr, ptr %18, align 8, !tbaa !5
  %145 = load i32, ptr %144, align 4, !tbaa !9
  %146 = sub nsw i32 0, %145
  store i32 %146, ptr %21, align 4, !tbaa !9
  %147 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %21, i32 noundef 6)
  store i32 1, ptr %38, align 4
  br label %492

148:                                              ; preds = %139
  %149 = load i32, ptr %36, align 4, !tbaa !9
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %152

151:                                              ; preds = %148
  store i32 1, ptr %38, align 4
  br label %492

152:                                              ; preds = %148
  br label %153

153:                                              ; preds = %152
  %154 = load ptr, ptr %10, align 8, !tbaa !5
  %155 = load i32, ptr %154, align 4, !tbaa !9
  %156 = icmp sle i32 %155, 0
  br i1 %156, label %157, label %160

157:                                              ; preds = %153
  %158 = load ptr, ptr %16, align 8, !tbaa !5
  %159 = getelementptr inbounds double, ptr %158, i64 1
  store double 1.000000e+00, ptr %159, align 8, !tbaa !11
  store i32 1, ptr %38, align 4
  br label %492

160:                                              ; preds = %153
  store i32 2, ptr %27, align 4, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !9
  %161 = load ptr, ptr %10, align 8, !tbaa !5
  %162 = load i32, ptr %161, align 4, !tbaa !9
  store i32 %162, ptr %37, align 4, !tbaa !9
  %163 = load i32, ptr %30, align 4, !tbaa !9
  %164 = icmp sgt i32 %163, 1
  br i1 %164, label %165, label %218

165:                                              ; preds = %160
  %166 = load i32, ptr %30, align 4, !tbaa !9
  %167 = load ptr, ptr %12, align 8, !tbaa !5
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = icmp slt i32 %166, %168
  br i1 %169, label %170, label %218

170:                                              ; preds = %165
  store i32 0, ptr %21, align 4, !tbaa !9
  %171 = load ptr, ptr %10, align 8, !tbaa !5
  %172 = load ptr, ptr %11, align 8, !tbaa !5
  %173 = load ptr, ptr %12, align 8, !tbaa !5
  %174 = call i32 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %171, ptr noundef %172, ptr noundef %173, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  store i32 %174, ptr %22, align 4, !tbaa !9
  %175 = load i32, ptr %21, align 4, !tbaa !9
  %176 = load i32, ptr %22, align 4, !tbaa !9
  %177 = icmp sge i32 %175, %176
  br i1 %177, label %178, label %180

178:                                              ; preds = %170
  %179 = load i32, ptr %21, align 4, !tbaa !9
  br label %182

180:                                              ; preds = %170
  %181 = load i32, ptr %22, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %180, %178
  %183 = phi i32 [ %179, %178 ], [ %181, %180 ]
  store i32 %183, ptr %33, align 4, !tbaa !9
  %184 = load i32, ptr %33, align 4, !tbaa !9
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp slt i32 %184, %186
  br i1 %187, label %188, label %217

188:                                              ; preds = %182
  %189 = load ptr, ptr %10, align 8, !tbaa !5
  %190 = load i32, ptr %189, align 4, !tbaa !9
  store i32 %190, ptr %34, align 4, !tbaa !9
  %191 = load i32, ptr %34, align 4, !tbaa !9
  %192 = load i32, ptr %30, align 4, !tbaa !9
  %193 = mul nsw i32 %191, %192
  store i32 %193, ptr %37, align 4, !tbaa !9
  %194 = load ptr, ptr %17, align 8, !tbaa !5
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = load i32, ptr %37, align 4, !tbaa !9
  %197 = icmp slt i32 %195, %196
  br i1 %197, label %198, label %216

198:                                              ; preds = %188
  %199 = load ptr, ptr %17, align 8, !tbaa !5
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = load i32, ptr %34, align 4, !tbaa !9
  %202 = sdiv i32 %200, %201
  store i32 %202, ptr %30, align 4, !tbaa !9
  store i32 2, ptr %21, align 4, !tbaa !9
  %203 = load ptr, ptr %10, align 8, !tbaa !5
  %204 = load ptr, ptr %11, align 8, !tbaa !5
  %205 = load ptr, ptr %12, align 8, !tbaa !5
  %206 = call i32 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %203, ptr noundef %204, ptr noundef %205, ptr noundef @c_n1, i32 noundef 6, i32 noundef 1)
  store i32 %206, ptr %22, align 4, !tbaa !9
  %207 = load i32, ptr %21, align 4, !tbaa !9
  %208 = load i32, ptr %22, align 4, !tbaa !9
  %209 = icmp sge i32 %207, %208
  br i1 %209, label %210, label %212

210:                                              ; preds = %198
  %211 = load i32, ptr %21, align 4, !tbaa !9
  br label %214

212:                                              ; preds = %198
  %213 = load i32, ptr %22, align 4, !tbaa !9
  br label %214

214:                                              ; preds = %212, %210
  %215 = phi i32 [ %211, %210 ], [ %213, %212 ]
  store i32 %215, ptr %27, align 4, !tbaa !9
  br label %216

216:                                              ; preds = %214, %188
  br label %217

217:                                              ; preds = %216, %182
  br label %218

218:                                              ; preds = %217, %165, %160
  %219 = load i32, ptr %30, align 4, !tbaa !9
  %220 = load i32, ptr %27, align 4, !tbaa !9
  %221 = icmp sge i32 %219, %220
  br i1 %221, label %222, label %287

222:                                              ; preds = %218
  %223 = load i32, ptr %30, align 4, !tbaa !9
  %224 = load ptr, ptr %12, align 8, !tbaa !5
  %225 = load i32, ptr %224, align 4, !tbaa !9
  %226 = icmp slt i32 %223, %225
  br i1 %226, label %227, label %287

227:                                              ; preds = %222
  %228 = load i32, ptr %33, align 4, !tbaa !9
  %229 = load ptr, ptr %12, align 8, !tbaa !5
  %230 = load i32, ptr %229, align 4, !tbaa !9
  %231 = icmp slt i32 %228, %230
  br i1 %231, label %232, label %287

232:                                              ; preds = %227
  %233 = load ptr, ptr %12, align 8, !tbaa !5
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = load i32, ptr %33, align 4, !tbaa !9
  %236 = sub nsw i32 %234, %235
  %237 = sub nsw i32 %236, 1
  %238 = load i32, ptr %30, align 4, !tbaa !9
  %239 = sdiv i32 %237, %238
  %240 = load i32, ptr %30, align 4, !tbaa !9
  %241 = mul nsw i32 %239, %240
  store i32 %241, ptr %31, align 4, !tbaa !9
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  %243 = load i32, ptr %242, align 4, !tbaa !9
  store i32 %243, ptr %21, align 4, !tbaa !9
  %244 = load i32, ptr %31, align 4, !tbaa !9
  %245 = load i32, ptr %30, align 4, !tbaa !9
  %246 = add nsw i32 %244, %245
  store i32 %246, ptr %22, align 4, !tbaa !9
  %247 = load i32, ptr %21, align 4, !tbaa !9
  %248 = load i32, ptr %22, align 4, !tbaa !9
  %249 = icmp sle i32 %247, %248
  br i1 %249, label %250, label %252

250:                                              ; preds = %232
  %251 = load i32, ptr %21, align 4, !tbaa !9
  br label %254

252:                                              ; preds = %232
  %253 = load i32, ptr %22, align 4, !tbaa !9
  br label %254

254:                                              ; preds = %252, %250
  %255 = phi i32 [ %251, %250 ], [ %253, %252 ]
  store i32 %255, ptr %32, align 4, !tbaa !9
  %256 = load i32, ptr %32, align 4, !tbaa !9
  store i32 %256, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %257

257:                                              ; preds = %283, %254
  %258 = load i32, ptr %25, align 4, !tbaa !9
  %259 = load i32, ptr %21, align 4, !tbaa !9
  %260 = icmp sle i32 %258, %259
  br i1 %260, label %261, label %286

261:                                              ; preds = %257
  %262 = load ptr, ptr %10, align 8, !tbaa !5
  %263 = load i32, ptr %262, align 4, !tbaa !9
  store i32 %263, ptr %22, align 4, !tbaa !9
  %264 = load i32, ptr %32, align 4, !tbaa !9
  %265 = add nsw i32 %264, 1
  store i32 %265, ptr %24, align 4, !tbaa !9
  br label %266

266:                                              ; preds = %279, %261
  %267 = load i32, ptr %24, align 4, !tbaa !9
  %268 = load i32, ptr %22, align 4, !tbaa !9
  %269 = icmp sle i32 %267, %268
  br i1 %269, label %270, label %282

270:                                              ; preds = %266
  %271 = load ptr, ptr %13, align 8, !tbaa !5
  %272 = load i32, ptr %24, align 4, !tbaa !9
  %273 = load i32, ptr %25, align 4, !tbaa !9
  %274 = load i32, ptr %19, align 4, !tbaa !9
  %275 = mul nsw i32 %273, %274
  %276 = add nsw i32 %272, %275
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %271, i64 %277
  store double 0.000000e+00, ptr %278, align 8, !tbaa !11
  br label %279

279:                                              ; preds = %270
  %280 = load i32, ptr %24, align 4, !tbaa !9
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %24, align 4, !tbaa !9
  br label %266, !llvm.loop !13

282:                                              ; preds = %266
  br label %283

283:                                              ; preds = %282
  %284 = load i32, ptr %25, align 4, !tbaa !9
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %25, align 4, !tbaa !9
  br label %257, !llvm.loop !15

286:                                              ; preds = %257
  br label %288

287:                                              ; preds = %227, %222, %218
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %287, %286
  %289 = load i32, ptr %32, align 4, !tbaa !9
  %290 = load ptr, ptr %10, align 8, !tbaa !5
  %291 = load i32, ptr %290, align 4, !tbaa !9
  %292 = icmp slt i32 %289, %291
  br i1 %292, label %293, label %324

293:                                              ; preds = %288
  %294 = load ptr, ptr %10, align 8, !tbaa !5
  %295 = load i32, ptr %294, align 4, !tbaa !9
  %296 = load i32, ptr %32, align 4, !tbaa !9
  %297 = sub nsw i32 %295, %296
  store i32 %297, ptr %21, align 4, !tbaa !9
  %298 = load ptr, ptr %11, align 8, !tbaa !5
  %299 = load i32, ptr %298, align 4, !tbaa !9
  %300 = load i32, ptr %32, align 4, !tbaa !9
  %301 = sub nsw i32 %299, %300
  store i32 %301, ptr %22, align 4, !tbaa !9
  %302 = load ptr, ptr %12, align 8, !tbaa !5
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = load i32, ptr %32, align 4, !tbaa !9
  %305 = sub nsw i32 %303, %304
  store i32 %305, ptr %23, align 4, !tbaa !9
  %306 = load ptr, ptr %13, align 8, !tbaa !5
  %307 = load i32, ptr %32, align 4, !tbaa !9
  %308 = add nsw i32 %307, 1
  %309 = load i32, ptr %32, align 4, !tbaa !9
  %310 = add nsw i32 %309, 1
  %311 = load i32, ptr %19, align 4, !tbaa !9
  %312 = mul nsw i32 %310, %311
  %313 = add nsw i32 %308, %312
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds double, ptr %306, i64 %314
  %316 = load ptr, ptr %14, align 8, !tbaa !5
  %317 = load ptr, ptr %15, align 8, !tbaa !5
  %318 = load i32, ptr %32, align 4, !tbaa !9
  %319 = add nsw i32 %318, 1
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds double, ptr %317, i64 %320
  %322 = load ptr, ptr %16, align 8, !tbaa !5
  %323 = getelementptr inbounds double, ptr %322, i64 1
  call void @dorgl2_(ptr noundef %21, ptr noundef %22, ptr noundef %23, ptr noundef %315, ptr noundef %316, ptr noundef %321, ptr noundef %323, ptr noundef %28)
  br label %324

324:                                              ; preds = %293, %288
  %325 = load i32, ptr %32, align 4, !tbaa !9
  %326 = icmp sgt i32 %325, 0
  br i1 %326, label %327, label %487

327:                                              ; preds = %324
  %328 = load i32, ptr %30, align 4, !tbaa !9
  %329 = sub nsw i32 0, %328
  store i32 %329, ptr %21, align 4, !tbaa !9
  %330 = load i32, ptr %31, align 4, !tbaa !9
  %331 = add nsw i32 %330, 1
  store i32 %331, ptr %24, align 4, !tbaa !9
  br label %332

332:                                              ; preds = %482, %327
  %333 = load i32, ptr %21, align 4, !tbaa !9
  %334 = icmp slt i32 %333, 0
  br i1 %334, label %335, label %339

335:                                              ; preds = %332
  %336 = load i32, ptr %24, align 4, !tbaa !9
  %337 = icmp sge i32 %336, 1
  %338 = zext i1 %337 to i32
  br label %343

339:                                              ; preds = %332
  %340 = load i32, ptr %24, align 4, !tbaa !9
  %341 = icmp sle i32 %340, 1
  %342 = zext i1 %341 to i32
  br label %343

343:                                              ; preds = %339, %335
  %344 = phi i32 [ %338, %335 ], [ %342, %339 ]
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %346, label %486

346:                                              ; preds = %343
  %347 = load i32, ptr %30, align 4, !tbaa !9
  store i32 %347, ptr %22, align 4, !tbaa !9
  %348 = load ptr, ptr %12, align 8, !tbaa !5
  %349 = load i32, ptr %348, align 4, !tbaa !9
  %350 = load i32, ptr %24, align 4, !tbaa !9
  %351 = sub nsw i32 %349, %350
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %23, align 4, !tbaa !9
  %353 = load i32, ptr %22, align 4, !tbaa !9
  %354 = load i32, ptr %23, align 4, !tbaa !9
  %355 = icmp sle i32 %353, %354
  br i1 %355, label %356, label %358

356:                                              ; preds = %346
  %357 = load i32, ptr %22, align 4, !tbaa !9
  br label %360

358:                                              ; preds = %346
  %359 = load i32, ptr %23, align 4, !tbaa !9
  br label %360

360:                                              ; preds = %358, %356
  %361 = phi i32 [ %357, %356 ], [ %359, %358 ]
  store i32 %361, ptr %29, align 4, !tbaa !9
  %362 = load i32, ptr %24, align 4, !tbaa !9
  %363 = load i32, ptr %29, align 4, !tbaa !9
  %364 = add nsw i32 %362, %363
  %365 = load ptr, ptr %10, align 8, !tbaa !5
  %366 = load i32, ptr %365, align 4, !tbaa !9
  %367 = icmp sle i32 %364, %366
  br i1 %367, label %368, label %428

368:                                              ; preds = %360
  %369 = load ptr, ptr %11, align 8, !tbaa !5
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = load i32, ptr %24, align 4, !tbaa !9
  %372 = sub nsw i32 %370, %371
  %373 = add nsw i32 %372, 1
  store i32 %373, ptr %22, align 4, !tbaa !9
  %374 = load ptr, ptr %13, align 8, !tbaa !5
  %375 = load i32, ptr %24, align 4, !tbaa !9
  %376 = load i32, ptr %24, align 4, !tbaa !9
  %377 = load i32, ptr %19, align 4, !tbaa !9
  %378 = mul nsw i32 %376, %377
  %379 = add nsw i32 %375, %378
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds double, ptr %374, i64 %380
  %382 = load ptr, ptr %14, align 8, !tbaa !5
  %383 = load ptr, ptr %15, align 8, !tbaa !5
  %384 = load i32, ptr %24, align 4, !tbaa !9
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds double, ptr %383, i64 %385
  %387 = load ptr, ptr %16, align 8, !tbaa !5
  %388 = getelementptr inbounds double, ptr %387, i64 1
  call void @dlarft_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %22, ptr noundef %29, ptr noundef %381, ptr noundef %382, ptr noundef %386, ptr noundef %388, ptr noundef %34)
  %389 = load ptr, ptr %10, align 8, !tbaa !5
  %390 = load i32, ptr %389, align 4, !tbaa !9
  %391 = load i32, ptr %24, align 4, !tbaa !9
  %392 = sub nsw i32 %390, %391
  %393 = load i32, ptr %29, align 4, !tbaa !9
  %394 = sub nsw i32 %392, %393
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %22, align 4, !tbaa !9
  %396 = load ptr, ptr %11, align 8, !tbaa !5
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = load i32, ptr %24, align 4, !tbaa !9
  %399 = sub nsw i32 %397, %398
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %23, align 4, !tbaa !9
  %401 = load ptr, ptr %13, align 8, !tbaa !5
  %402 = load i32, ptr %24, align 4, !tbaa !9
  %403 = load i32, ptr %24, align 4, !tbaa !9
  %404 = load i32, ptr %19, align 4, !tbaa !9
  %405 = mul nsw i32 %403, %404
  %406 = add nsw i32 %402, %405
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds double, ptr %401, i64 %407
  %409 = load ptr, ptr %14, align 8, !tbaa !5
  %410 = load ptr, ptr %16, align 8, !tbaa !5
  %411 = getelementptr inbounds double, ptr %410, i64 1
  %412 = load ptr, ptr %13, align 8, !tbaa !5
  %413 = load i32, ptr %24, align 4, !tbaa !9
  %414 = load i32, ptr %29, align 4, !tbaa !9
  %415 = add nsw i32 %413, %414
  %416 = load i32, ptr %24, align 4, !tbaa !9
  %417 = load i32, ptr %19, align 4, !tbaa !9
  %418 = mul nsw i32 %416, %417
  %419 = add nsw i32 %415, %418
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds double, ptr %412, i64 %420
  %422 = load ptr, ptr %14, align 8, !tbaa !5
  %423 = load ptr, ptr %16, align 8, !tbaa !5
  %424 = load i32, ptr %29, align 4, !tbaa !9
  %425 = add nsw i32 %424, 1
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %423, i64 %426
  call void @dlarfb_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %22, ptr noundef %23, ptr noundef %29, ptr noundef %408, ptr noundef %409, ptr noundef %411, ptr noundef %34, ptr noundef %421, ptr noundef %422, ptr noundef %427, ptr noundef %34)
  br label %428

428:                                              ; preds = %368, %360
  %429 = load ptr, ptr %11, align 8, !tbaa !5
  %430 = load i32, ptr %429, align 4, !tbaa !9
  %431 = load i32, ptr %24, align 4, !tbaa !9
  %432 = sub nsw i32 %430, %431
  %433 = add nsw i32 %432, 1
  store i32 %433, ptr %22, align 4, !tbaa !9
  %434 = load ptr, ptr %13, align 8, !tbaa !5
  %435 = load i32, ptr %24, align 4, !tbaa !9
  %436 = load i32, ptr %24, align 4, !tbaa !9
  %437 = load i32, ptr %19, align 4, !tbaa !9
  %438 = mul nsw i32 %436, %437
  %439 = add nsw i32 %435, %438
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds double, ptr %434, i64 %440
  %442 = load ptr, ptr %14, align 8, !tbaa !5
  %443 = load ptr, ptr %15, align 8, !tbaa !5
  %444 = load i32, ptr %24, align 4, !tbaa !9
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds double, ptr %443, i64 %445
  %447 = load ptr, ptr %16, align 8, !tbaa !5
  %448 = getelementptr inbounds double, ptr %447, i64 1
  call void @dorgl2_(ptr noundef %29, ptr noundef %22, ptr noundef %29, ptr noundef %441, ptr noundef %442, ptr noundef %446, ptr noundef %448, ptr noundef %28)
  %449 = load i32, ptr %24, align 4, !tbaa !9
  %450 = sub nsw i32 %449, 1
  store i32 %450, ptr %22, align 4, !tbaa !9
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %451

451:                                              ; preds = %478, %428
  %452 = load i32, ptr %25, align 4, !tbaa !9
  %453 = load i32, ptr %22, align 4, !tbaa !9
  %454 = icmp sle i32 %452, %453
  br i1 %454, label %455, label %481

455:                                              ; preds = %451
  %456 = load i32, ptr %24, align 4, !tbaa !9
  %457 = load i32, ptr %29, align 4, !tbaa !9
  %458 = add nsw i32 %456, %457
  %459 = sub nsw i32 %458, 1
  store i32 %459, ptr %23, align 4, !tbaa !9
  %460 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %460, ptr %26, align 4, !tbaa !9
  br label %461

461:                                              ; preds = %474, %455
  %462 = load i32, ptr %26, align 4, !tbaa !9
  %463 = load i32, ptr %23, align 4, !tbaa !9
  %464 = icmp sle i32 %462, %463
  br i1 %464, label %465, label %477

465:                                              ; preds = %461
  %466 = load ptr, ptr %13, align 8, !tbaa !5
  %467 = load i32, ptr %26, align 4, !tbaa !9
  %468 = load i32, ptr %25, align 4, !tbaa !9
  %469 = load i32, ptr %19, align 4, !tbaa !9
  %470 = mul nsw i32 %468, %469
  %471 = add nsw i32 %467, %470
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds double, ptr %466, i64 %472
  store double 0.000000e+00, ptr %473, align 8, !tbaa !11
  br label %474

474:                                              ; preds = %465
  %475 = load i32, ptr %26, align 4, !tbaa !9
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %26, align 4, !tbaa !9
  br label %461, !llvm.loop !16

477:                                              ; preds = %461
  br label %478

478:                                              ; preds = %477
  %479 = load i32, ptr %25, align 4, !tbaa !9
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %25, align 4, !tbaa !9
  br label %451, !llvm.loop !17

481:                                              ; preds = %451
  br label %482

482:                                              ; preds = %481
  %483 = load i32, ptr %21, align 4, !tbaa !9
  %484 = load i32, ptr %24, align 4, !tbaa !9
  %485 = add nsw i32 %484, %483
  store i32 %485, ptr %24, align 4, !tbaa !9
  br label %332, !llvm.loop !18

486:                                              ; preds = %343
  br label %487

487:                                              ; preds = %486, %324
  %488 = load i32, ptr %37, align 4, !tbaa !9
  %489 = sitofp i32 %488 to double
  %490 = load ptr, ptr %16, align 8, !tbaa !5
  %491 = getelementptr inbounds double, ptr %490, i64 1
  store double %489, ptr %491, align 8, !tbaa !11
  store i32 1, ptr %38, align 4
  br label %492

492:                                              ; preds = %487, %157, %151, %143
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, 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 @ilaenv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

declare i32 @xerbla_(ptr noundef, ptr noundef, i32 noundef) #2

declare void @dorgl2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dlarft_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dlarfb_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

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


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

@c__1 = external hidden global i32, align 4
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_n1 = external hidden global i32, align 4
@c__3 = external hidden global i32, align 4
@c__2 = external hidden global i32, align 4
@.str.2 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dorglq_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef readonly %7, ptr nocapture noundef %8) local_unnamed_addr #0 {
  %10 = alloca i32, align 4
  %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
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #5
  %16 = load i32, ptr %4, align 4, !tbaa !5
  %narrow = xor i32 %16, -1
  %17 = sext i32 %narrow to i64
  %18 = getelementptr inbounds double, ptr %3, i64 %17
  %19 = getelementptr inbounds i8, ptr %5, i64 -8
  store i32 0, ptr %8, align 4, !tbaa !5
  %20 = tail call i32 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #5
  %21 = load i32, ptr %0, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.smax.i32(i32 %21, i32 1)
  %22 = mul nsw i32 %spec.select, %20
  %23 = sitofp i32 %22 to double
  store double %23, ptr %6, align 8, !tbaa !9
  %24 = load i32, ptr %7, align 4, !tbaa !5
  %25 = icmp eq i32 %24, -1
  %26 = icmp slt i32 %21, 0
  br i1 %26, label %.thread.sink.split, label %27

27:                                               ; preds = %9
  %28 = load i32, ptr %1, align 4, !tbaa !5
  %29 = icmp slt i32 %28, %21
  br i1 %29, label %.thread.sink.split, label %30

30:                                               ; preds = %27
  %31 = load i32, ptr %2, align 4, !tbaa !5
  %or.cond190 = icmp ugt i32 %31, %21
  br i1 %or.cond190, label %.thread.sink.split, label %32

32:                                               ; preds = %30
  %33 = load i32, ptr %4, align 4, !tbaa !5
  %34 = icmp slt i32 %33, %spec.select
  br i1 %34, label %.thread.sink.split, label %35

35:                                               ; preds = %32
  %36 = icmp sge i32 %24, %spec.select
  %or.cond = or i1 %36, %25
  br i1 %or.cond, label %37, label %.thread.sink.split

37:                                               ; preds = %35
  %.pr = load i32, ptr %8, align 4, !tbaa !5
  %.not = icmp eq i32 %.pr, 0
  br i1 %.not, label %41, label %.thread

.thread.sink.split:                               ; preds = %35, %32, %30, %27, %9
  %.sink = phi i32 [ -1, %9 ], [ -2, %27 ], [ -3, %30 ], [ -5, %32 ], [ -8, %35 ]
  store i32 %.sink, ptr %8, align 4, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %37
  %38 = phi i32 [ %.pr, %37 ], [ %.sink, %.thread.sink.split ]
  %39 = sub nsw i32 0, %38
  store i32 %39, ptr %10, align 4, !tbaa !5
  %40 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %10, i32 noundef 6) #5
  br label %202

41:                                               ; preds = %37
  br i1 %25, label %202, label %42

42:                                               ; preds = %41
  %43 = icmp eq i32 %21, 0
  br i1 %43, label %44, label %45

44:                                               ; preds = %42
  store double 1.000000e+00, ptr %6, align 8, !tbaa !9
  br label %202

45:                                               ; preds = %42
  %46 = icmp sgt i32 %20, 1
  br i1 %46, label %47, label %.thread207

47:                                               ; preds = %45
  %48 = icmp ult i32 %20, %31
  br i1 %48, label %49, label %.thread196

49:                                               ; preds = %47
  %50 = tail call i32 @ilaenv_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #5
  %51 = tail call i32 @llvm.smax.i32(i32 %50, i32 0)
  %52 = load i32, ptr %2, align 4, !tbaa !5
  %53 = icmp slt i32 %51, %52
  br i1 %53, label %54, label %.thread196

54:                                               ; preds = %49
  %55 = load i32, ptr %0, align 4, !tbaa !5
  store i32 %55, ptr %15, align 4, !tbaa !5
  %56 = mul nsw i32 %55, %20
  %57 = load i32, ptr %7, align 4, !tbaa !5
  %58 = icmp slt i32 %57, %56
  br i1 %58, label %59, label %.thread196

59:                                               ; preds = %54
  %60 = sdiv i32 %57, %55
  %61 = tail call i32 @ilaenv_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1, i32 noundef 6, i32 noundef 1) #5
  %62 = tail call i32 @llvm.smax.i32(i32 %61, i32 2)
  %.not182 = icmp slt i32 %60, %62
  br i1 %.not182, label %.thread207, label %..thread196_crit_edge

..thread196_crit_edge:                            ; preds = %59
  %.pre = load i32, ptr %2, align 4, !tbaa !5
  br label %.thread196

.thread196:                                       ; preds = %..thread196_crit_edge, %47, %49, %54
  %63 = phi i32 [ %.pre, %..thread196_crit_edge ], [ %31, %47 ], [ %52, %49 ], [ %52, %54 ]
  %.0205 = phi i32 [ %56, %..thread196_crit_edge ], [ %21, %47 ], [ %21, %49 ], [ %56, %54 ]
  %.0156204 = phi i32 [ %51, %..thread196_crit_edge ], [ 0, %47 ], [ %51, %49 ], [ %51, %54 ]
  %.0159202 = phi i32 [ %60, %..thread196_crit_edge ], [ %20, %47 ], [ %20, %49 ], [ %20, %54 ]
  %64 = icmp slt i32 %.0159202, %63
  %65 = icmp slt i32 %.0156204, %63
  %or.cond193 = and i1 %64, %65
  br i1 %or.cond193, label %66, label %.thread207

66:                                               ; preds = %.thread196
  %67 = xor i32 %.0156204, -1
  %68 = add nsw i32 %63, %67
  %.fr = freeze i32 %68
  %69 = srem i32 %.fr, %.0159202
  %70 = sub nsw i32 %.fr, %69
  %71 = add nsw i32 %70, %.0159202
  store i32 %71, ptr %11, align 4, !tbaa !5
  %72 = tail call i32 @llvm.smin.i32(i32 %63, i32 %71)
  store i32 %72, ptr %10, align 4, !tbaa !5
  %.not184215 = icmp slt i32 %72, 1
  br i1 %.not184215, label %.thread207.loopexit, label %.lr.ph218

.lr.ph218:                                        ; preds = %66
  %73 = load i32, ptr %0, align 4, !tbaa !5
  %.not189.not213 = icmp slt i32 %72, %73
  br i1 %.not189.not213, label %.lr.ph.us.preheader, label %.thread207.loopexit

.lr.ph.us.preheader:                              ; preds = %.lr.ph218
  %74 = shl nsw i64 %17, 3
  %scevgep = getelementptr i8, ptr %3, i64 %74
  %75 = add i32 %16, %72
  %76 = add i32 %75, 1
  %77 = xor i32 %72, -1
  %78 = add nsw i32 %73, %77
  %79 = zext i32 %78 to i64
  %80 = shl nuw nsw i64 %79, 3
  %81 = add nuw nsw i64 %80, 8
  %wide.trip.count = zext nneg i32 %72 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %82 = icmp ult i32 %72, 4
  br i1 %82, label %.thread207.loopexit.loopexit.unr-lcssa, label %.lr.ph.us.preheader.new

.lr.ph.us.preheader.new:                          ; preds = %.lr.ph.us.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483644
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us, %.lr.ph.us.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.us.preheader.new ], [ %indvars.iv.next.3, %.lr.ph.us ]
  %niter = phi i64 [ 0, %.lr.ph.us.preheader.new ], [ %niter.next.3, %.lr.ph.us ]
  %83 = trunc nuw nsw i64 %indvars.iv to i32
  %84 = mul i32 %16, %83
  %85 = add i32 %76, %84
  %86 = sext i32 %85 to i64
  %87 = shl nsw i64 %86, 3
  %scevgep237 = getelementptr i8, ptr %scevgep, i64 %87
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep237, i8 0, i64 %81, i1 false), !tbaa !9
  %88 = trunc i64 %indvars.iv to i32
  %89 = or disjoint i32 %88, 1
  %90 = mul i32 %16, %89
  %91 = add i32 %76, %90
  %92 = sext i32 %91 to i64
  %93 = shl nsw i64 %92, 3
  %scevgep237.1 = getelementptr i8, ptr %scevgep, i64 %93
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep237.1, i8 0, i64 %81, i1 false), !tbaa !9
  %94 = trunc i64 %indvars.iv to i32
  %95 = or disjoint i32 %94, 2
  %96 = mul i32 %16, %95
  %97 = add i32 %76, %96
  %98 = sext i32 %97 to i64
  %99 = shl nsw i64 %98, 3
  %scevgep237.2 = getelementptr i8, ptr %scevgep, i64 %99
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep237.2, i8 0, i64 %81, i1 false), !tbaa !9
  %100 = trunc i64 %indvars.iv to i32
  %101 = or disjoint i32 %100, 3
  %102 = mul i32 %16, %101
  %103 = add i32 %76, %102
  %104 = sext i32 %103 to i64
  %105 = shl nsw i64 %104, 3
  %scevgep237.3 = getelementptr i8, ptr %scevgep, i64 %105
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep237.3, i8 0, i64 %81, i1 false), !tbaa !9
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 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 %.thread207.loopexit.loopexit.unr-lcssa, label %.lr.ph.us, !llvm.loop !11

.thread207.loopexit.loopexit.unr-lcssa:           ; preds = %.lr.ph.us, %.lr.ph.us.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvars.iv.next.3, %.lr.ph.us ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.thread207.loopexit, label %.lr.ph.us.epil

.lr.ph.us.epil:                                   ; preds = %.thread207.loopexit.loopexit.unr-lcssa, %.lr.ph.us.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.us.epil ], [ %indvars.iv.unr, %.thread207.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.us.epil ], [ 0, %.thread207.loopexit.loopexit.unr-lcssa ]
  %106 = trunc nuw nsw i64 %indvars.iv.epil to i32
  %107 = mul i32 %16, %106
  %108 = add i32 %76, %107
  %109 = sext i32 %108 to i64
  %110 = shl nsw i64 %109, 3
  %scevgep237.epil = getelementptr i8, ptr %scevgep, i64 %110
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep237.epil, i8 0, i64 %81, i1 false), !tbaa !9
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.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 %.thread207.loopexit, label %.lr.ph.us.epil, !llvm.loop !13

.thread207.loopexit:                              ; preds = %.thread207.loopexit.loopexit.unr-lcssa, %.lr.ph.us.epil, %.lr.ph218, %66
  %111 = add nsw i32 %70, 1
  br label %.thread207

.thread207:                                       ; preds = %.thread207.loopexit, %45, %59, %.thread196
  %.0206 = phi i32 [ %.0205, %.thread196 ], [ %56, %59 ], [ %21, %45 ], [ %.0205, %.thread207.loopexit ]
  %.0159203 = phi i32 [ %.0159202, %.thread196 ], [ %60, %59 ], [ %20, %45 ], [ %.0159202, %.thread207.loopexit ]
  %.0158 = phi i32 [ undef, %.thread196 ], [ undef, %59 ], [ undef, %45 ], [ %111, %.thread207.loopexit ]
  %.0157 = phi i32 [ 0, %.thread196 ], [ 0, %59 ], [ 0, %45 ], [ %72, %.thread207.loopexit ]
  %112 = load i32, ptr %0, align 4, !tbaa !5
  %113 = icmp slt i32 %.0157, %112
  br i1 %113, label %114, label %127

114:                                              ; preds = %.thread207
  %115 = sub nsw i32 %112, %.0157
  store i32 %115, ptr %10, align 4, !tbaa !5
  %116 = load i32, ptr %1, align 4, !tbaa !5
  %117 = sub nsw i32 %116, %.0157
  store i32 %117, ptr %11, align 4, !tbaa !5
  %118 = load i32, ptr %2, align 4, !tbaa !5
  %119 = sub nsw i32 %118, %.0157
  store i32 %119, ptr %12, align 4, !tbaa !5
  %120 = add nsw i32 %.0157, 1
  %121 = add i32 %16, 1
  %122 = mul i32 %120, %121
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %18, i64 %123
  %125 = sext i32 %120 to i64
  %126 = getelementptr inbounds double, ptr %19, i64 %125
  call void @dorgl2_(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %124, ptr noundef nonnull %4, ptr noundef nonnull %126, ptr noundef nonnull %6, ptr noundef nonnull %13) #5
  br label %127

127:                                              ; preds = %114, %.thread207
  %128 = icmp sgt i32 %.0157, 0
  br i1 %128, label %129, label %.loopexit

129:                                              ; preds = %127
  %130 = sub nsw i32 0, %.0159203
  store i32 %130, ptr %10, align 4, !tbaa !5
  %131 = icmp sgt i32 %.0159203, 0
  %132 = icmp sgt i32 %.0158, 0
  %133 = icmp slt i32 %.0158, 2
  %.in229 = select i1 %131, i1 %132, i1 %133
  br i1 %.in229, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %129
  %134 = add i32 %16, 1
  %135 = sext i32 %16 to i64
  %136 = shl nsw i64 %135, 3
  br label %137

137:                                              ; preds = %.lr.ph, %._crit_edge225
  %.1164230 = phi i32 [ %.0158, %.lr.ph ], [ %197, %._crit_edge225 ]
  %138 = load i32, ptr %2, align 4, !tbaa !5
  %139 = sub nsw i32 %138, %.1164230
  %140 = add nsw i32 %139, 1
  store i32 %140, ptr %12, align 4, !tbaa !5
  %141 = call i32 @llvm.smin.i32(i32 %.0159203, i32 %140)
  store i32 %141, ptr %14, align 4, !tbaa !5
  %142 = add nsw i32 %141, %.1164230
  %143 = load i32, ptr %0, align 4, !tbaa !5
  %.not186 = icmp sgt i32 %142, %143
  %.pre246 = load i32, ptr %1, align 4, !tbaa !5
  br i1 %.not186, label %._crit_edge, label %144

._crit_edge:                                      ; preds = %137
  %.pre247 = sext i32 %.1164230 to i64
  br label %163

144:                                              ; preds = %137
  %reass.sub = sub i32 %.pre246, %.1164230
  %145 = add i32 %reass.sub, 1
  store i32 %145, ptr %11, align 4, !tbaa !5
  %146 = mul nsw i32 %.1164230, %16
  %147 = add nsw i32 %146, %.1164230
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds double, ptr %18, i64 %148
  %150 = sext i32 %.1164230 to i64
  %151 = getelementptr inbounds double, ptr %19, i64 %150
  call void @dlarft_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %14, ptr noundef %149, ptr noundef nonnull %4, ptr noundef nonnull %151, ptr noundef nonnull %6, ptr noundef nonnull %15) #5
  %152 = load i32, ptr %0, align 4, !tbaa !5
  %153 = load i32, ptr %14, align 4, !tbaa !5
  %154 = add i32 %153, %.1164230
  %155 = add i32 %152, 1
  %156 = sub i32 %155, %154
  store i32 %156, ptr %11, align 4, !tbaa !5
  %157 = load i32, ptr %1, align 4, !tbaa !5
  %reass.sub233 = sub i32 %157, %.1164230
  %158 = add i32 %reass.sub233, 1
  store i32 %158, ptr %12, align 4, !tbaa !5
  %159 = add nsw i32 %154, %146
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds double, ptr %18, i64 %160
  %162 = sext i32 %153 to i64
  %gep = getelementptr double, ptr %6, i64 %162
  call void @dlarfb_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %14, ptr noundef %149, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %15, ptr noundef %161, ptr noundef nonnull %4, ptr noundef %gep, ptr noundef nonnull %15) #5
  %.pre245 = load i32, ptr %1, align 4, !tbaa !5
  br label %163

163:                                              ; preds = %._crit_edge, %144
  %.pre-phi = phi i64 [ %.pre247, %._crit_edge ], [ %150, %144 ]
  %164 = phi i32 [ %.pre246, %._crit_edge ], [ %.pre245, %144 ]
  %reass.sub234 = sub i32 %164, %.1164230
  %165 = add i32 %reass.sub234, 1
  store i32 %165, ptr %11, align 4, !tbaa !5
  %166 = mul i32 %.1164230, %134
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds double, ptr %18, i64 %167
  %169 = getelementptr inbounds double, ptr %19, i64 %.pre-phi
  call void @dorgl2_(ptr noundef nonnull %14, ptr noundef nonnull %11, ptr noundef nonnull %14, ptr noundef %168, ptr noundef nonnull %4, ptr noundef nonnull %169, ptr noundef nonnull %6, ptr noundef nonnull %13) #5
  %170 = add nsw i32 %.1164230, -1
  store i32 %170, ptr %11, align 4, !tbaa !5
  %.not187.not221 = icmp sgt i32 %.1164230, 1
  br i1 %.not187.not221, label %.lr.ph224, label %._crit_edge225

.lr.ph224:                                        ; preds = %163
  %171 = load i32, ptr %14, align 4, !tbaa !5
  %172 = add i32 %171, %.1164230
  %173 = add nsw i32 %172, -1
  store i32 %173, ptr %12, align 4, !tbaa !5
  %.not188.not219 = icmp sgt i32 %171, 0
  br i1 %.not188.not219, label %.lr.ph.us226.preheader, label %._crit_edge225

.lr.ph.us226.preheader:                           ; preds = %.lr.ph224
  %174 = add i32 %16, %.1164230
  %175 = sext i32 %174 to i64
  %176 = add nsw i64 %17, %175
  %177 = shl nsw i64 %176, 3
  %178 = add nuw i32 %.1164230, 1
  %smax = call i32 @llvm.smax.i32(i32 %172, i32 %178)
  %179 = xor i32 %.1164230, -1
  %180 = add i32 %smax, %179
  %181 = zext i32 %180 to i64
  %182 = shl nuw nsw i64 %181, 3
  %183 = add nuw nsw i64 %182, 8
  %wide.trip.count243 = zext nneg i32 %170 to i64
  %184 = getelementptr i8, ptr %3, i64 %177
  %185 = add nsw i64 %wide.trip.count243, -1
  %xtraiter248 = and i64 %wide.trip.count243, 7
  %186 = icmp ult i64 %185, 7
  br i1 %186, label %._crit_edge225.loopexit.unr-lcssa, label %.lr.ph.us226.preheader.new

.lr.ph.us226.preheader.new:                       ; preds = %.lr.ph.us226.preheader
  %unroll_iter251 = and i64 %wide.trip.count243, 2147483640
  br label %.lr.ph.us226

.lr.ph.us226:                                     ; preds = %.lr.ph.us226, %.lr.ph.us226.preheader.new
  %indvar = phi i64 [ 0, %.lr.ph.us226.preheader.new ], [ %indvar.next.7, %.lr.ph.us226 ]
  %niter252 = phi i64 [ 0, %.lr.ph.us226.preheader.new ], [ %niter252.next.7, %.lr.ph.us226 ]
  %187 = mul i64 %136, %indvar
  %scevgep239 = getelementptr i8, ptr %184, i64 %187
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next = or disjoint i64 %indvar, 1
  %188 = mul i64 %136, %indvar.next
  %scevgep239.1 = getelementptr i8, ptr %184, i64 %188
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.1, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.1 = or disjoint i64 %indvar, 2
  %189 = mul i64 %136, %indvar.next.1
  %scevgep239.2 = getelementptr i8, ptr %184, i64 %189
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.2, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.2 = or disjoint i64 %indvar, 3
  %190 = mul i64 %136, %indvar.next.2
  %scevgep239.3 = getelementptr i8, ptr %184, i64 %190
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.3, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.3 = or disjoint i64 %indvar, 4
  %191 = mul i64 %136, %indvar.next.3
  %scevgep239.4 = getelementptr i8, ptr %184, i64 %191
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.4, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.4 = or disjoint i64 %indvar, 5
  %192 = mul i64 %136, %indvar.next.4
  %scevgep239.5 = getelementptr i8, ptr %184, i64 %192
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.5, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.5 = or disjoint i64 %indvar, 6
  %193 = mul i64 %136, %indvar.next.5
  %scevgep239.6 = getelementptr i8, ptr %184, i64 %193
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.6, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.6 = or disjoint i64 %indvar, 7
  %194 = mul i64 %136, %indvar.next.6
  %scevgep239.7 = getelementptr i8, ptr %184, i64 %194
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.7, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.7 = add nuw nsw i64 %indvar, 8
  %niter252.next.7 = add i64 %niter252, 8
  %niter252.ncmp.7 = icmp eq i64 %niter252.next.7, %unroll_iter251
  br i1 %niter252.ncmp.7, label %._crit_edge225.loopexit.unr-lcssa, label %.lr.ph.us226, !llvm.loop !15

._crit_edge225.loopexit.unr-lcssa:                ; preds = %.lr.ph.us226, %.lr.ph.us226.preheader
  %indvar.unr = phi i64 [ 0, %.lr.ph.us226.preheader ], [ %indvar.next.7, %.lr.ph.us226 ]
  %lcmp.mod250.not = icmp eq i64 %xtraiter248, 0
  br i1 %lcmp.mod250.not, label %._crit_edge225, label %.lr.ph.us226.epil

.lr.ph.us226.epil:                                ; preds = %._crit_edge225.loopexit.unr-lcssa, %.lr.ph.us226.epil
  %indvar.epil = phi i64 [ %indvar.next.epil, %.lr.ph.us226.epil ], [ %indvar.unr, %._crit_edge225.loopexit.unr-lcssa ]
  %epil.iter249 = phi i64 [ %epil.iter249.next, %.lr.ph.us226.epil ], [ 0, %._crit_edge225.loopexit.unr-lcssa ]
  %195 = mul i64 %136, %indvar.epil
  %scevgep239.epil = getelementptr i8, ptr %184, i64 %195
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep239.epil, i8 0, i64 %183, i1 false), !tbaa !9
  %indvar.next.epil = add nuw nsw i64 %indvar.epil, 1
  %epil.iter249.next = add i64 %epil.iter249, 1
  %epil.iter249.cmp.not = icmp eq i64 %epil.iter249.next, %xtraiter248
  br i1 %epil.iter249.cmp.not, label %._crit_edge225, label %.lr.ph.us226.epil, !llvm.loop !16

._crit_edge225:                                   ; preds = %._crit_edge225.loopexit.unr-lcssa, %.lr.ph.us226.epil, %.lr.ph224, %163
  %196 = load i32, ptr %10, align 4, !tbaa !5
  %197 = add nsw i32 %196, %.1164230
  %198 = icmp slt i32 %196, 0
  %199 = icmp sgt i32 %197, 0
  %200 = icmp slt i32 %197, 2
  %.in = select i1 %198, i1 %199, i1 %200
  br i1 %.in, label %137, label %.loopexit, !llvm.loop !17

.loopexit:                                        ; preds = %._crit_edge225, %129, %127
  %201 = sitofp i32 %.0206 to double
  store double %201, ptr %6, align 8, !tbaa !9
  br label %202

202:                                              ; preds = %41, %.loopexit, %44, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #5
  ret void
}

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

declare i32 @ilaenv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare i32 @xerbla_(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare void @dorgl2_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dlarft_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dlarfb_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.unroll.disable"}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !12}


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