; LLVM IR from Try/Tempest :: Engine/thirdparty/libpng (png)

; 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.66 = external hidden unnamed_addr constant [34 x i8], align 1

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

; Function Attrs: noreturn
declare void @png_error(ptr noundef, ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @png_ascii_from_fp(ptr noalias noundef %0, ptr noundef %1, i64 noundef %2, double noundef %3, i32 noundef %4) #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca double, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca [10 x i8], align 1
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i64 %2, ptr %8, align 8, !tbaa !9
  store double %3, ptr %9, align 8, !tbaa !11
  store i32 %4, ptr %10, align 4, !tbaa !13
  %23 = load i32, ptr %10, align 4, !tbaa !13
  %24 = icmp ult i32 %23, 1
  br i1 %24, label %25, label %26

25:                                               ; preds = %5
  store i32 15, ptr %10, align 4, !tbaa !13
  br label %26

26:                                               ; preds = %25, %5
  %27 = load i32, ptr %10, align 4, !tbaa !13
  %28 = icmp ugt i32 %27, 16
  br i1 %28, label %29, label %30

29:                                               ; preds = %26
  store i32 16, ptr %10, align 4, !tbaa !13
  br label %30

30:                                               ; preds = %29, %26
  %31 = load i64, ptr %8, align 8, !tbaa !9
  %32 = load i32, ptr %10, align 4, !tbaa !13
  %33 = add i32 %32, 5
  %34 = zext i32 %33 to i64
  %35 = icmp uge i64 %31, %34
  br i1 %35, label %36, label %371

36:                                               ; preds = %30
  %37 = load double, ptr %9, align 8, !tbaa !11
  %38 = fcmp olt double %37, 0.000000e+00
  br i1 %38, label %39, label %46

39:                                               ; preds = %36
  %40 = load double, ptr %9, align 8, !tbaa !11
  %41 = fneg double %40
  store double %41, ptr %9, align 8, !tbaa !11
  %42 = load ptr, ptr %7, align 8, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %42, i32 1
  store ptr %43, ptr %7, align 8, !tbaa !5
  store i8 45, ptr %42, align 1, !tbaa !15
  %44 = load i64, ptr %8, align 8, !tbaa !9
  %45 = add i64 %44, -1
  store i64 %45, ptr %8, align 8, !tbaa !9
  br label %46

46:                                               ; preds = %39, %36
  %47 = load double, ptr %9, align 8, !tbaa !11
  %48 = fcmp oge double %47, 0x10000000000000
  br i1 %48, label %49, label %355

49:                                               ; preds = %46
  %50 = load double, ptr %9, align 8, !tbaa !11
  %51 = fcmp ole double %50, 0x7FEFFFFFFFFFFFFF
  br i1 %51, label %52, label %355

52:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %53 = load double, ptr %9, align 8, !tbaa !11
  %54 = call double @frexp(double noundef %53, ptr noundef %11) #5
  %55 = load i32, ptr %11, align 4, !tbaa !13
  %56 = mul nsw i32 %55, 77
  %57 = ashr i32 %56, 8
  store i32 %57, ptr %11, align 4, !tbaa !13
  %58 = load i32, ptr %11, align 4, !tbaa !13
  %59 = call double @png_pow10(i32 noundef %58)
  store double %59, ptr %12, align 8, !tbaa !11
  br label %60

60:                                               ; preds = %83, %52
  %61 = load double, ptr %12, align 8, !tbaa !11
  %62 = fcmp olt double %61, 0x10000000000000
  br i1 %62, label %67, label %63

63:                                               ; preds = %60
  %64 = load double, ptr %12, align 8, !tbaa !11
  %65 = load double, ptr %9, align 8, !tbaa !11
  %66 = fcmp olt double %64, %65
  br label %67

67:                                               ; preds = %63, %60
  %68 = phi i1 [ true, %60 ], [ %66, %63 ]
  br i1 %68, label %69, label %84

69:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %70 = load i32, ptr %11, align 4, !tbaa !13
  %71 = add nsw i32 %70, 1
  %72 = call double @png_pow10(i32 noundef %71)
  store double %72, ptr %13, align 8, !tbaa !11
  %73 = load double, ptr %13, align 8, !tbaa !11
  %74 = fcmp ole double %73, 0x7FEFFFFFFFFFFFFF
  br i1 %74, label %75, label %79

75:                                               ; preds = %69
  %76 = load i32, ptr %11, align 4, !tbaa !13
  %77 = add nsw i32 %76, 1
  store i32 %77, ptr %11, align 4, !tbaa !13
  %78 = load double, ptr %13, align 8, !tbaa !11
  store double %78, ptr %12, align 8, !tbaa !11
  br label %80

79:                                               ; preds = %69
  store i32 3, ptr %14, align 4
  br label %81

80:                                               ; preds = %75
  store i32 0, ptr %14, align 4
  br label %81

81:                                               ; preds = %80, %79
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  %82 = load i32, ptr %14, align 4
  switch i32 %82, label %374 [
    i32 0, label %83
    i32 3, label %84
  ]

83:                                               ; preds = %81
  br label %60, !llvm.loop !16

84:                                               ; preds = %81, %67
  %85 = load double, ptr %12, align 8, !tbaa !11
  %86 = load double, ptr %9, align 8, !tbaa !11
  %87 = fdiv double %86, %85
  store double %87, ptr %9, align 8, !tbaa !11
  br label %88

88:                                               ; preds = %91, %84
  %89 = load double, ptr %9, align 8, !tbaa !11
  %90 = fcmp oge double %89, 1.000000e+00
  br i1 %90, label %91, label %96

91:                                               ; preds = %88
  %92 = load double, ptr %9, align 8, !tbaa !11
  %93 = fdiv double %92, 1.000000e+01
  store double %93, ptr %9, align 8, !tbaa !11
  %94 = load i32, ptr %11, align 4, !tbaa !13
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %11, align 4, !tbaa !13
  br label %88, !llvm.loop !18

96:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 10, ptr %18) #5
  %97 = load i32, ptr %11, align 4, !tbaa !13
  %98 = icmp slt i32 %97, 0
  br i1 %98, label %99, label %105

99:                                               ; preds = %96
  %100 = load i32, ptr %11, align 4, !tbaa !13
  %101 = icmp sgt i32 %100, -3
  br i1 %101, label %102, label %105

102:                                              ; preds = %99
  %103 = load i32, ptr %11, align 4, !tbaa !13
  %104 = sub i32 0, %103
  store i32 %104, ptr %15, align 4, !tbaa !13
  store i32 0, ptr %11, align 4, !tbaa !13
  br label %106

105:                                              ; preds = %99, %96
  store i32 0, ptr %15, align 4, !tbaa !13
  br label %106

106:                                              ; preds = %105, %102
  %107 = load i32, ptr %15, align 4, !tbaa !13
  store i32 %107, ptr %16, align 4, !tbaa !13
  store i32 0, ptr %17, align 4, !tbaa !13
  br label %108

108:                                              ; preds = %275, %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %109 = load double, ptr %9, align 8, !tbaa !11
  %110 = fmul double %109, 1.000000e+01
  store double %110, ptr %9, align 8, !tbaa !11
  %111 = load i32, ptr %17, align 4, !tbaa !13
  %112 = load i32, ptr %15, align 4, !tbaa !13
  %113 = add i32 %111, %112
  %114 = add i32 %113, 1
  %115 = load i32, ptr %10, align 4, !tbaa !13
  %116 = load i32, ptr %16, align 4, !tbaa !13
  %117 = add i32 %115, %116
  %118 = icmp ult i32 %114, %117
  br i1 %118, label %119, label %122

119:                                              ; preds = %108
  %120 = load double, ptr %9, align 8, !tbaa !11
  %121 = call double @modf(double noundef %120, ptr noundef %19) #5
  store double %121, ptr %9, align 8, !tbaa !11
  br label %200

122:                                              ; preds = %108
  %123 = load double, ptr %9, align 8, !tbaa !11
  %124 = fadd double %123, 5.000000e-01
  %125 = call double @llvm.floor.f64(double %124)
  store double %125, ptr %19, align 8, !tbaa !11
  %126 = load double, ptr %19, align 8, !tbaa !11
  %127 = fcmp ogt double %126, 9.000000e+00
  br i1 %127, label %128, label %199

128:                                              ; preds = %122
  %129 = load i32, ptr %15, align 4, !tbaa !13
  %130 = icmp ugt i32 %129, 0
  br i1 %130, label %131, label %140

131:                                              ; preds = %128
  %132 = load i32, ptr %15, align 4, !tbaa !13
  %133 = add i32 %132, -1
  store i32 %133, ptr %15, align 4, !tbaa !13
  store double 1.000000e+00, ptr %19, align 8, !tbaa !11
  %134 = load i32, ptr %17, align 4, !tbaa !13
  %135 = icmp eq i32 %134, 0
  br i1 %135, label %136, label %139

136:                                              ; preds = %131
  %137 = load i32, ptr %16, align 4, !tbaa !13
  %138 = add i32 %137, -1
  store i32 %138, ptr %16, align 4, !tbaa !13
  br label %139

139:                                              ; preds = %136, %131
  br label %198

140:                                              ; preds = %128
  br label %141

141:                                              ; preds = %170, %140
  %142 = load i32, ptr %17, align 4, !tbaa !13
  %143 = icmp ugt i32 %142, 0
  br i1 %143, label %144, label %147

144:                                              ; preds = %141
  %145 = load double, ptr %19, align 8, !tbaa !11
  %146 = fcmp ogt double %145, 9.000000e+00
  br label %147

147:                                              ; preds = %144, %141
  %148 = phi i1 [ false, %141 ], [ %146, %144 ]
  br i1 %148, label %149, label %176

149:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i32 -1
  store ptr %151, ptr %7, align 8, !tbaa !5
  %152 = load i8, ptr %151, align 1, !tbaa !15
  %153 = sext i8 %152 to i32
  store i32 %153, ptr %20, align 4, !tbaa !13
  %154 = load i32, ptr %11, align 4, !tbaa !13
  %155 = icmp ne i32 %154, -1
  br i1 %155, label %156, label %159

156:                                              ; preds = %149
  %157 = load i32, ptr %11, align 4, !tbaa !13
  %158 = add nsw i32 %157, 1
  store i32 %158, ptr %11, align 4, !tbaa !13
  br label %170

159:                                              ; preds = %149
  %160 = load i32, ptr %20, align 4, !tbaa !13
  %161 = icmp eq i32 %160, 46
  br i1 %161, label %162, label %169

162:                                              ; preds = %159
  %163 = load ptr, ptr %7, align 8, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %163, i32 -1
  store ptr %164, ptr %7, align 8, !tbaa !5
  %165 = load i8, ptr %164, align 1, !tbaa !15
  %166 = sext i8 %165 to i32
  store i32 %166, ptr %20, align 4, !tbaa !13
  %167 = load i64, ptr %8, align 8, !tbaa !9
  %168 = add i64 %167, 1
  store i64 %168, ptr %8, align 8, !tbaa !9
  store i32 1, ptr %11, align 4, !tbaa !13
  br label %169

169:                                              ; preds = %162, %159
  br label %170

170:                                              ; preds = %169, %156
  %171 = load i32, ptr %17, align 4, !tbaa !13
  %172 = add i32 %171, -1
  store i32 %172, ptr %17, align 4, !tbaa !13
  %173 = load i32, ptr %20, align 4, !tbaa !13
  %174 = sub nsw i32 %173, 47
  %175 = sitofp i32 %174 to double
  store double %175, ptr %19, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %141, !llvm.loop !19

176:                                              ; preds = %147
  %177 = load double, ptr %19, align 8, !tbaa !11
  %178 = fcmp ogt double %177, 9.000000e+00
  br i1 %178, label %179, label %197

179:                                              ; preds = %176
  %180 = load i32, ptr %11, align 4, !tbaa !13
  %181 = icmp eq i32 %180, -1
  br i1 %181, label %182, label %193

182:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds i8, ptr %183, i32 -1
  store ptr %184, ptr %7, align 8, !tbaa !5
  %185 = load i8, ptr %184, align 1, !tbaa !15
  %186 = sext i8 %185 to i32
  store i32 %186, ptr %21, align 4, !tbaa !13
  %187 = load i32, ptr %21, align 4, !tbaa !13
  %188 = icmp eq i32 %187, 46
  br i1 %188, label %189, label %192

189:                                              ; preds = %182
  %190 = load i64, ptr %8, align 8, !tbaa !9
  %191 = add i64 %190, 1
  store i64 %191, ptr %8, align 8, !tbaa !9
  store i32 1, ptr %11, align 4, !tbaa !13
  br label %192

192:                                              ; preds = %189, %182
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  br label %196

193:                                              ; preds = %179
  %194 = load i32, ptr %11, align 4, !tbaa !13
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr %11, align 4, !tbaa !13
  br label %196

196:                                              ; preds = %193, %192
  store double 1.000000e+00, ptr %19, align 8, !tbaa !11
  br label %197

197:                                              ; preds = %196, %176
  br label %198

198:                                              ; preds = %197, %139
  br label %199

199:                                              ; preds = %198, %122
  store double 0.000000e+00, ptr %9, align 8, !tbaa !11
  br label %200

200:                                              ; preds = %199, %119
  %201 = load double, ptr %19, align 8, !tbaa !11
  %202 = fcmp oeq double %201, 0.000000e+00
  br i1 %202, label %203, label %212

203:                                              ; preds = %200
  %204 = load i32, ptr %15, align 4, !tbaa !13
  %205 = add i32 %204, 1
  store i32 %205, ptr %15, align 4, !tbaa !13
  %206 = load i32, ptr %17, align 4, !tbaa !13
  %207 = icmp eq i32 %206, 0
  br i1 %207, label %208, label %211

208:                                              ; preds = %203
  %209 = load i32, ptr %16, align 4, !tbaa !13
  %210 = add i32 %209, 1
  store i32 %210, ptr %16, align 4, !tbaa !13
  br label %211

211:                                              ; preds = %208, %203
  br label %263

212:                                              ; preds = %200
  %213 = load i32, ptr %15, align 4, !tbaa !13
  %214 = load i32, ptr %16, align 4, !tbaa !13
  %215 = sub i32 %213, %214
  %216 = load i32, ptr %17, align 4, !tbaa !13
  %217 = add i32 %216, %215
  store i32 %217, ptr %17, align 4, !tbaa !13
  store i32 0, ptr %16, align 4, !tbaa !13
  br label %218

218:                                              ; preds = %235, %212
  %219 = load i32, ptr %15, align 4, !tbaa !13
  %220 = icmp ugt i32 %219, 0
  br i1 %220, label %221, label %240

221:                                              ; preds = %218
  %222 = load i32, ptr %11, align 4, !tbaa !13
  %223 = icmp ne i32 %222, -1
  br i1 %223, label %224, label %235

224:                                              ; preds = %221
  %225 = load i32, ptr %11, align 4, !tbaa !13
  %226 = icmp eq i32 %225, 0
  br i1 %226, label %227, label %232

227:                                              ; preds = %224
  %228 = load ptr, ptr %7, align 8, !tbaa !5
  %229 = getelementptr inbounds i8, ptr %228, i32 1
  store ptr %229, ptr %7, align 8, !tbaa !5
  store i8 46, ptr %228, align 1, !tbaa !15
  %230 = load i64, ptr %8, align 8, !tbaa !9
  %231 = add i64 %230, -1
  store i64 %231, ptr %8, align 8, !tbaa !9
  br label %232

232:                                              ; preds = %227, %224
  %233 = load i32, ptr %11, align 4, !tbaa !13
  %234 = add nsw i32 %233, -1
  store i32 %234, ptr %11, align 4, !tbaa !13
  br label %235

235:                                              ; preds = %232, %221
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = getelementptr inbounds i8, ptr %236, i32 1
  store ptr %237, ptr %7, align 8, !tbaa !5
  store i8 48, ptr %236, align 1, !tbaa !15
  %238 = load i32, ptr %15, align 4, !tbaa !13
  %239 = add i32 %238, -1
  store i32 %239, ptr %15, align 4, !tbaa !13
  br label %218, !llvm.loop !20

240:                                              ; preds = %218
  %241 = load i32, ptr %11, align 4, !tbaa !13
  %242 = icmp ne i32 %241, -1
  br i1 %242, label %243, label %254

243:                                              ; preds = %240
  %244 = load i32, ptr %11, align 4, !tbaa !13
  %245 = icmp eq i32 %244, 0
  br i1 %245, label %246, label %251

246:                                              ; preds = %243
  %247 = load ptr, ptr %7, align 8, !tbaa !5
  %248 = getelementptr inbounds i8, ptr %247, i32 1
  store ptr %248, ptr %7, align 8, !tbaa !5
  store i8 46, ptr %247, align 1, !tbaa !15
  %249 = load i64, ptr %8, align 8, !tbaa !9
  %250 = add i64 %249, -1
  store i64 %250, ptr %8, align 8, !tbaa !9
  br label %251

251:                                              ; preds = %246, %243
  %252 = load i32, ptr %11, align 4, !tbaa !13
  %253 = add nsw i32 %252, -1
  store i32 %253, ptr %11, align 4, !tbaa !13
  br label %254

254:                                              ; preds = %251, %240
  %255 = load double, ptr %19, align 8, !tbaa !11
  %256 = fptosi double %255 to i32
  %257 = add nsw i32 48, %256
  %258 = trunc i32 %257 to i8
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = getelementptr inbounds i8, ptr %259, i32 1
  store ptr %260, ptr %7, align 8, !tbaa !5
  store i8 %258, ptr %259, align 1, !tbaa !15
  %261 = load i32, ptr %17, align 4, !tbaa !13
  %262 = add i32 %261, 1
  store i32 %262, ptr %17, align 4, !tbaa !13
  br label %263

263:                                              ; preds = %254, %211
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %264

264:                                              ; preds = %263
  %265 = load i32, ptr %17, align 4, !tbaa !13
  %266 = load i32, ptr %15, align 4, !tbaa !13
  %267 = add i32 %265, %266
  %268 = load i32, ptr %10, align 4, !tbaa !13
  %269 = load i32, ptr %16, align 4, !tbaa !13
  %270 = add i32 %268, %269
  %271 = icmp ult i32 %267, %270
  br i1 %271, label %272, label %275

272:                                              ; preds = %264
  %273 = load double, ptr %9, align 8, !tbaa !11
  %274 = fcmp ogt double %273, 0x10000000000000
  br label %275

275:                                              ; preds = %272, %264
  %276 = phi i1 [ false, %264 ], [ %274, %272 ]
  br i1 %276, label %108, label %277, !llvm.loop !21

277:                                              ; preds = %275
  %278 = load i32, ptr %11, align 4, !tbaa !13
  %279 = icmp sge i32 %278, -1
  br i1 %279, label %280, label %293

280:                                              ; preds = %277
  %281 = load i32, ptr %11, align 4, !tbaa !13
  %282 = icmp sle i32 %281, 2
  br i1 %282, label %283, label %293

283:                                              ; preds = %280
  br label %284

284:                                              ; preds = %288, %283
  %285 = load i32, ptr %11, align 4, !tbaa !13
  %286 = add nsw i32 %285, -1
  store i32 %286, ptr %11, align 4, !tbaa !13
  %287 = icmp sgt i32 %285, 0
  br i1 %287, label %288, label %291

288:                                              ; preds = %284
  %289 = load ptr, ptr %7, align 8, !tbaa !5
  %290 = getelementptr inbounds i8, ptr %289, i32 1
  store ptr %290, ptr %7, align 8, !tbaa !5
  store i8 48, ptr %289, align 1, !tbaa !15
  br label %284, !llvm.loop !22

291:                                              ; preds = %284
  %292 = load ptr, ptr %7, align 8, !tbaa !5
  store i8 0, ptr %292, align 1, !tbaa !15
  store i32 1, ptr %14, align 4
  br label %349

293:                                              ; preds = %280, %277
  %294 = load i32, ptr %17, align 4, !tbaa !13
  %295 = zext i32 %294 to i64
  %296 = load i64, ptr %8, align 8, !tbaa !9
  %297 = sub i64 %296, %295
  store i64 %297, ptr %8, align 8, !tbaa !9
  %298 = load ptr, ptr %7, align 8, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %298, i32 1
  store ptr %299, ptr %7, align 8, !tbaa !5
  store i8 69, ptr %298, align 1, !tbaa !15
  %300 = load i64, ptr %8, align 8, !tbaa !9
  %301 = add i64 %300, -1
  store i64 %301, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %302 = load i32, ptr %11, align 4, !tbaa !13
  %303 = icmp slt i32 %302, 0
  br i1 %303, label %304, label %311

304:                                              ; preds = %293
  %305 = load ptr, ptr %7, align 8, !tbaa !5
  %306 = getelementptr inbounds i8, ptr %305, i32 1
  store ptr %306, ptr %7, align 8, !tbaa !5
  store i8 45, ptr %305, align 1, !tbaa !15
  %307 = load i64, ptr %8, align 8, !tbaa !9
  %308 = add i64 %307, -1
  store i64 %308, ptr %8, align 8, !tbaa !9
  %309 = load i32, ptr %11, align 4, !tbaa !13
  %310 = sub i32 0, %309
  store i32 %310, ptr %22, align 4, !tbaa !13
  br label %314

311:                                              ; preds = %293
  %312 = load i32, ptr %11, align 4, !tbaa !13
  %313 = add i32 0, %312
  store i32 %313, ptr %22, align 4, !tbaa !13
  br label %314

314:                                              ; preds = %311, %304
  store i32 0, ptr %17, align 4, !tbaa !13
  br label %315

315:                                              ; preds = %318, %314
  %316 = load i32, ptr %22, align 4, !tbaa !13
  %317 = icmp ugt i32 %316, 0
  br i1 %317, label %318, label %329

318:                                              ; preds = %315
  %319 = load i32, ptr %22, align 4, !tbaa !13
  %320 = urem i32 %319, 10
  %321 = add i32 48, %320
  %322 = trunc i32 %321 to i8
  %323 = load i32, ptr %17, align 4, !tbaa !13
  %324 = add i32 %323, 1
  store i32 %324, ptr %17, align 4, !tbaa !13
  %325 = zext i32 %323 to i64
  %326 = getelementptr inbounds [10 x i8], ptr %18, i64 0, i64 %325
  store i8 %322, ptr %326, align 1, !tbaa !15
  %327 = load i32, ptr %22, align 4, !tbaa !13
  %328 = udiv i32 %327, 10
  store i32 %328, ptr %22, align 4, !tbaa !13
  br label %315, !llvm.loop !23

329:                                              ; preds = %315
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  %330 = load i64, ptr %8, align 8, !tbaa !9
  %331 = load i32, ptr %17, align 4, !tbaa !13
  %332 = zext i32 %331 to i64
  %333 = icmp ugt i64 %330, %332
  br i1 %333, label %334, label %348

334:                                              ; preds = %329
  br label %335

335:                                              ; preds = %338, %334
  %336 = load i32, ptr %17, align 4, !tbaa !13
  %337 = icmp ugt i32 %336, 0
  br i1 %337, label %338, label %346

338:                                              ; preds = %335
  %339 = load i32, ptr %17, align 4, !tbaa !13
  %340 = add i32 %339, -1
  store i32 %340, ptr %17, align 4, !tbaa !13
  %341 = zext i32 %340 to i64
  %342 = getelementptr inbounds [10 x i8], ptr %18, i64 0, i64 %341
  %343 = load i8, ptr %342, align 1, !tbaa !15
  %344 = load ptr, ptr %7, align 8, !tbaa !5
  %345 = getelementptr inbounds i8, ptr %344, i32 1
  store ptr %345, ptr %7, align 8, !tbaa !5
  store i8 %343, ptr %344, align 1, !tbaa !15
  br label %335, !llvm.loop !24

346:                                              ; preds = %335
  %347 = load ptr, ptr %7, align 8, !tbaa !5
  store i8 0, ptr %347, align 1, !tbaa !15
  store i32 1, ptr %14, align 4
  br label %349

348:                                              ; preds = %329
  store i32 0, ptr %14, align 4
  br label %349

349:                                              ; preds = %348, %346, %291
  call void @llvm.lifetime.end.p0(i64 10, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  %350 = load i32, ptr %14, align 4
  switch i32 %350, label %352 [
    i32 0, label %351
  ]

351:                                              ; preds = %349
  store i32 0, ptr %14, align 4
  br label %352

352:                                              ; preds = %351, %349
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  %353 = load i32, ptr %14, align 4
  switch i32 %353, label %374 [
    i32 0, label %354
    i32 1, label %373
  ]

354:                                              ; preds = %352
  br label %370

355:                                              ; preds = %49, %46
  %356 = load double, ptr %9, align 8, !tbaa !11
  %357 = fcmp oge double %356, 0x10000000000000
  br i1 %357, label %362, label %358

358:                                              ; preds = %355
  %359 = load ptr, ptr %7, align 8, !tbaa !5
  %360 = getelementptr inbounds i8, ptr %359, i32 1
  store ptr %360, ptr %7, align 8, !tbaa !5
  store i8 48, ptr %359, align 1, !tbaa !15
  %361 = load ptr, ptr %7, align 8, !tbaa !5
  store i8 0, ptr %361, align 1, !tbaa !15
  br label %373

362:                                              ; preds = %355
  %363 = load ptr, ptr %7, align 8, !tbaa !5
  %364 = getelementptr inbounds i8, ptr %363, i32 1
  store ptr %364, ptr %7, align 8, !tbaa !5
  store i8 105, ptr %363, align 1, !tbaa !15
  %365 = load ptr, ptr %7, align 8, !tbaa !5
  %366 = getelementptr inbounds i8, ptr %365, i32 1
  store ptr %366, ptr %7, align 8, !tbaa !5
  store i8 110, ptr %365, align 1, !tbaa !15
  %367 = load ptr, ptr %7, align 8, !tbaa !5
  %368 = getelementptr inbounds i8, ptr %367, i32 1
  store ptr %368, ptr %7, align 8, !tbaa !5
  store i8 102, ptr %367, align 1, !tbaa !15
  %369 = load ptr, ptr %7, align 8, !tbaa !5
  store i8 0, ptr %369, align 1, !tbaa !15
  br label %373

370:                                              ; preds = %354
  br label %371

371:                                              ; preds = %370, %30
  %372 = load ptr, ptr %6, align 8, !tbaa !5
  call void @png_error(ptr noundef %372, ptr noundef @.str.66) #6
  unreachable

373:                                              ; preds = %362, %358, %352
  ret void

374:                                              ; preds = %352, %81
  unreachable
}

; Function Attrs: nounwind
declare double @frexp(double noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden double @png_pow10(i32 noundef) #2

; Function Attrs: nounwind
declare double @modf(double noundef, ptr noundef) #3

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

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

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

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


; 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.66 = external hidden unnamed_addr constant [34 x i8], align 1

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

; Function Attrs: noreturn
declare void @png_error(ptr noundef, ptr noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local void @png_ascii_from_fp(ptr noalias noundef %0, ptr nocapture noundef %1, i64 noundef %2, double noundef %3, i32 noundef %4) local_unnamed_addr #2 {
  %6 = alloca i32, align 4
  %7 = alloca [10 x i8], align 1
  %8 = alloca double, align 8
  %9 = icmp eq i32 %4, 0
  %10 = tail call i32 @llvm.umin.i32(i32 %4, i32 16)
  %spec.store.select7 = select i1 %9, i32 15, i32 %10
  %11 = add nuw nsw i32 %spec.store.select7, 5
  %12 = zext nneg i32 %11 to i64
  %.not = icmp ugt i64 %12, %2
  br i1 %.not, label %233, label %13

13:                                               ; preds = %5
  %14 = fcmp olt double %3, 0.000000e+00
  br i1 %14, label %15, label %19

15:                                               ; preds = %13
  %16 = fneg double %3
  %17 = getelementptr inbounds i8, ptr %1, i64 1
  store i8 45, ptr %1, align 1, !tbaa !5
  %18 = add i64 %2, -1
  br label %19

19:                                               ; preds = %15, %13
  %.0137 = phi double [ %16, %15 ], [ %3, %13 ]
  %.0119 = phi i64 [ %18, %15 ], [ %2, %13 ]
  %.097 = phi ptr [ %17, %15 ], [ %1, %13 ]
  %20 = fcmp oge double %.0137, 0x10000000000000
  %21 = fcmp ole double %.0137, 0x7FEFFFFFFFFFFFFF
  %or.cond = and i1 %20, %21
  br i1 %or.cond, label %22, label %229

22:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #6
  %23 = call double @frexp(double noundef %.0137, ptr noundef nonnull %6) #6
  %24 = load i32, ptr %6, align 4, !tbaa !8
  %25 = mul nsw i32 %24, 77
  %26 = ashr i32 %25, 8
  %27 = tail call double @png_pow10(i32 noundef %26)
  %28 = fcmp olt double %27, 0x10000000000000
  %29 = fcmp olt double %27, %.0137
  %30 = or i1 %28, %29
  br i1 %30, label %.lr.ph.preheader, label %.thread

.lr.ph.preheader:                                 ; preds = %22
  %31 = add nsw i32 %26, 1
  %32 = tail call double @png_pow10(i32 noundef %31)
  %33 = fcmp ugt double %32, 0x7FEFFFFFFFFFFFFF
  br i1 %33, label %.thread, label %.lr.ph294

.lr.ph294:                                        ; preds = %.lr.ph.preheader, %.lr.ph
  %34 = phi double [ %40, %.lr.ph ], [ %32, %.lr.ph.preheader ]
  %35 = phi i32 [ %39, %.lr.ph ], [ %31, %.lr.ph.preheader ]
  %36 = fcmp olt double %34, 0x10000000000000
  %37 = fcmp olt double %34, %.0137
  %38 = or i1 %36, %37
  br i1 %38, label %.lr.ph, label %.thread

.lr.ph:                                           ; preds = %.lr.ph294
  %39 = add nsw i32 %35, 1
  %40 = tail call double @png_pow10(i32 noundef %39)
  %41 = fcmp ugt double %40, 0x7FEFFFFFFFFFFFFF
  br i1 %41, label %.thread, label %.lr.ph294

.thread:                                          ; preds = %.lr.ph, %.lr.ph294, %.lr.ph.preheader, %22
  %.lcssa191 = phi i32 [ %26, %22 ], [ %26, %.lr.ph.preheader ], [ %35, %.lr.ph294 ], [ %35, %.lr.ph ]
  %.0134.lcssa = phi double [ %27, %22 ], [ %27, %.lr.ph.preheader ], [ %34, %.lr.ph294 ], [ %34, %.lr.ph ]
  %42 = fdiv double %.0137, %.0134.lcssa
  %43 = fcmp ult double %42, 1.000000e+00
  br i1 %43, label %._crit_edge, label %.lr.ph200

.lr.ph200:                                        ; preds = %.thread, %.lr.ph200
  %.1138199 = phi double [ %45, %.lr.ph200 ], [ %42, %.thread ]
  %44 = phi i32 [ %46, %.lr.ph200 ], [ %.lcssa191, %.thread ]
  %45 = fdiv double %.1138199, 1.000000e+01
  %46 = add nsw i32 %44, 1
  %47 = fcmp ult double %45, 1.000000e+00
  br i1 %47, label %._crit_edge, label %.lr.ph200, !llvm.loop !10

._crit_edge:                                      ; preds = %.lr.ph200, %.thread
  %.lcssa198 = phi i32 [ %.lcssa191, %.thread ], [ %46, %.lr.ph200 ]
  %.1138.lcssa = phi double [ %42, %.thread ], [ %45, %.lr.ph200 ]
  store i32 %.lcssa198, ptr %6, align 4, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 10, ptr nonnull %7) #6
  %or.cond3 = icmp ugt i32 %.lcssa198, -3
  br i1 %or.cond3, label %48, label %.preheader308

48:                                               ; preds = %._crit_edge
  %49 = sub nsw i32 0, %.lcssa198
  store i32 0, ptr %6, align 4, !tbaa !8
  br label %.preheader308

.preheader308:                                    ; preds = %._crit_edge, %48
  %.0107.ph = phi i32 [ %49, %48 ], [ 0, %._crit_edge ]
  br label %50

50:                                               ; preds = %.preheader308, %147
  %.2139 = phi double [ %.3140177, %147 ], [ %.1138.lcssa, %.preheader308 ]
  %.1120 = phi i64 [ %.13132, %147 ], [ %.0119, %.preheader308 ]
  %.1112 = phi i32 [ %.5116, %147 ], [ %.0107.ph, %.preheader308 ]
  %.0107 = phi i32 [ %.3110, %147 ], [ %.0107.ph, %.preheader308 ]
  %.0100 = phi i32 [ %.4104, %147 ], [ 0, %.preheader308 ]
  %.198 = phi ptr [ %.12, %147 ], [ %.097, %.preheader308 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %51 = fmul double %.2139, 1.000000e+01
  %52 = add i32 %.1112, 1
  %53 = add i32 %52, %.0100
  %54 = add i32 %.0107, %spec.store.select7
  %55 = icmp ult i32 %53, %54
  br i1 %55, label %56, label %58

56:                                               ; preds = %50
  %57 = call double @modf(double noundef %51, ptr noundef nonnull %8) #6
  %.pr.pre = load double, ptr %8, align 8, !tbaa !12
  br label %thread-pre-split

58:                                               ; preds = %50
  %59 = fadd double %51, 5.000000e-01
  %60 = tail call double @llvm.floor.f64(double %59)
  store double %60, ptr %8, align 8, !tbaa !12
  %61 = fcmp ogt double %60, 9.000000e+00
  br i1 %61, label %62, label %thread-pre-split

62:                                               ; preds = %58
  %.not152 = icmp eq i32 %.1112, 0
  br i1 %.not152, label %.preheader190, label %63

.preheader190:                                    ; preds = %62
  %.promoted203 = load i32, ptr %6, align 4, !tbaa !8
  %.not250 = icmp eq i32 %.0100, 0
  br i1 %.not250, label %._crit_edge208.thread, label %.lr.ph207

63:                                               ; preds = %62
  %64 = add i32 %.1112, -1
  store double 1.000000e+00, ptr %8, align 8, !tbaa !12
  %65 = icmp eq i32 %.0100, 0
  %66 = sext i1 %65 to i32
  %spec.select = add i32 %.0107, %66
  br label %.thread170

.lr.ph207:                                        ; preds = %.preheader190, %79
  %67 = phi i32 [ %80, %79 ], [ %.promoted203, %.preheader190 ]
  %.2206 = phi ptr [ %.3, %79 ], [ %.198, %.preheader190 ]
  %.1101205 = phi i32 [ %82, %79 ], [ %.0100, %.preheader190 ]
  %.2121204 = phi i64 [ %.3122, %79 ], [ %.1120, %.preheader190 ]
  %68 = phi i32 [ %81, %79 ], [ %.promoted203, %.preheader190 ]
  %69 = getelementptr inbounds i8, ptr %.2206, i64 -1
  %70 = load i8, ptr %69, align 1, !tbaa !5
  %.not153 = icmp eq i32 %68, -1
  br i1 %.not153, label %73, label %71

71:                                               ; preds = %.lr.ph207
  %72 = add nuw nsw i32 %68, 1
  store i32 %72, ptr %6, align 4, !tbaa !8
  br label %79

73:                                               ; preds = %.lr.ph207
  %74 = icmp eq i8 %70, 46
  br i1 %74, label %75, label %79

75:                                               ; preds = %73
  %76 = getelementptr inbounds i8, ptr %.2206, i64 -2
  %77 = load i8, ptr %76, align 1, !tbaa !5
  %78 = add i64 %.2121204, 1
  store i32 1, ptr %6, align 4, !tbaa !8
  br label %79

79:                                               ; preds = %73, %75, %71
  %80 = phi i32 [ %72, %71 ], [ 1, %75 ], [ %67, %73 ]
  %81 = phi i32 [ %72, %71 ], [ 1, %75 ], [ -1, %73 ]
  %.3122 = phi i64 [ %.2121204, %71 ], [ %78, %75 ], [ %.2121204, %73 ]
  %.099.in = phi i8 [ %70, %71 ], [ %77, %75 ], [ %70, %73 ]
  %.3 = phi ptr [ %69, %71 ], [ %76, %75 ], [ %69, %73 ]
  %.099 = sext i8 %.099.in to i32
  %82 = add i32 %.1101205, -1
  %83 = add nsw i32 %.099, -47
  %84 = sitofp i32 %83 to double
  store double %84, ptr %8, align 8, !tbaa !12
  %85 = icmp ne i32 %82, 0
  %86 = icmp sgt i8 %.099.in, 56
  %87 = select i1 %85, i1 %86, i1 false
  br i1 %87, label %.lr.ph207, label %._crit_edge208, !llvm.loop !14

._crit_edge208:                                   ; preds = %79
  br i1 %86, label %._crit_edge208.thread, label %thread-pre-split

._crit_edge208.thread:                            ; preds = %.preheader190, %._crit_edge208
  %.2.lcssa258 = phi ptr [ %.3, %._crit_edge208 ], [ %.198, %.preheader190 ]
  %.1101.lcssa257 = phi i32 [ %82, %._crit_edge208 ], [ 0, %.preheader190 ]
  %.2121.lcssa256 = phi i64 [ %.3122, %._crit_edge208 ], [ %.1120, %.preheader190 ]
  %88 = phi i32 [ %80, %._crit_edge208 ], [ %.promoted203, %.preheader190 ]
  %89 = icmp eq i32 %88, -1
  br i1 %89, label %90, label %96

90:                                               ; preds = %._crit_edge208.thread
  %91 = getelementptr inbounds i8, ptr %.2.lcssa258, i64 -1
  %92 = load i8, ptr %91, align 1, !tbaa !5
  %93 = icmp eq i8 %92, 46
  br i1 %93, label %94, label %.thread170.thread

94:                                               ; preds = %90
  %95 = add i64 %.2121.lcssa256, 1
  store i32 1, ptr %6, align 4, !tbaa !8
  br label %.thread170.thread

96:                                               ; preds = %._crit_edge208.thread
  %97 = add nuw nsw i32 %88, 1
  store i32 %97, ptr %6, align 4, !tbaa !8
  br label %.thread170.thread

.thread170.thread:                                ; preds = %96, %94, %90
  %.5124 = phi i64 [ %.2121.lcssa256, %96 ], [ %95, %94 ], [ %.2121.lcssa256, %90 ]
  %.4 = phi ptr [ %.2.lcssa258, %96 ], [ %91, %94 ], [ %91, %90 ]
  store double 1.000000e+00, ptr %8, align 8, !tbaa !12
  br label %._crit_edge218

thread-pre-split:                                 ; preds = %._crit_edge208, %56, %58
  %98 = phi double [ %60, %58 ], [ %84, %._crit_edge208 ], [ %.pr.pre, %56 ]
  %.3140 = phi double [ 0.000000e+00, %58 ], [ 0.000000e+00, %._crit_edge208 ], [ %57, %56 ]
  %.7126 = phi i64 [ %.1120, %58 ], [ %.3122, %._crit_edge208 ], [ %.1120, %56 ]
  %.3103 = phi i32 [ %.0100, %58 ], [ %82, %._crit_edge208 ], [ %.0100, %56 ]
  %.6 = phi ptr [ %.198, %58 ], [ %.3, %._crit_edge208 ], [ %.198, %56 ]
  %99 = fcmp oeq double %98, 0.000000e+00
  br i1 %99, label %100, label %.thread170

100:                                              ; preds = %thread-pre-split
  %101 = icmp eq i32 %.3103, 0
  %102 = zext i1 %101 to i32
  %spec.select160 = add i32 %.0107, %102
  br label %147

.thread170:                                       ; preds = %63, %thread-pre-split
  %.6183 = phi ptr [ %.6, %thread-pre-split ], [ %.198, %63 ]
  %.3103182 = phi i32 [ %.3103, %thread-pre-split ], [ %.0100, %63 ]
  %.2109181 = phi i32 [ %.0107, %thread-pre-split ], [ %spec.select, %63 ]
  %.3114180 = phi i32 [ %.1112, %thread-pre-split ], [ %64, %63 ]
  %.7126179 = phi i64 [ %.7126, %thread-pre-split ], [ %.1120, %63 ]
  %.3140178 = phi double [ %.3140, %thread-pre-split ], [ 0.000000e+00, %63 ]
  %.not154213 = icmp eq i32 %.3114180, 0
  br i1 %.not154213, label %._crit_edge218, label %.lr.ph217.preheader

.lr.ph217.preheader:                              ; preds = %.thread170
  %xtraiter = and i32 %.3114180, 1
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph217.prol.loopexit, label %.lr.ph217.prol

.lr.ph217.prol:                                   ; preds = %.lr.ph217.preheader
  %103 = load i32, ptr %6, align 4, !tbaa !8
  switch i32 %103, label %107 [
    i32 -1, label %.lr.ph217.prol.loopexit.unr-lcssa
    i32 0, label %104
  ]

104:                                              ; preds = %.lr.ph217.prol
  %105 = getelementptr inbounds i8, ptr %.6183, i64 1
  store i8 46, ptr %.6183, align 1, !tbaa !5
  %106 = add i64 %.7126179, -1
  %.pre.prol = load i32, ptr %6, align 4, !tbaa !8
  br label %107

107:                                              ; preds = %104, %.lr.ph217.prol
  %108 = phi i32 [ %.pre.prol, %104 ], [ %103, %.lr.ph217.prol ]
  %.9128.prol = phi i64 [ %106, %104 ], [ %.7126179, %.lr.ph217.prol ]
  %.8.prol = phi ptr [ %105, %104 ], [ %.6183, %.lr.ph217.prol ]
  %109 = add nsw i32 %108, -1
  store i32 %109, ptr %6, align 4, !tbaa !8
  br label %.lr.ph217.prol.loopexit.unr-lcssa

.lr.ph217.prol.loopexit.unr-lcssa:                ; preds = %107, %.lr.ph217.prol
  %.10129.prol = phi i64 [ %.9128.prol, %107 ], [ %.7126179, %.lr.ph217.prol ]
  %.9.prol = phi ptr [ %.8.prol, %107 ], [ %.6183, %.lr.ph217.prol ]
  %110 = getelementptr inbounds i8, ptr %.9.prol, i64 1
  store i8 48, ptr %.9.prol, align 1, !tbaa !5
  %111 = add nsw i32 %.3114180, -1
  br label %.lr.ph217.prol.loopexit

.lr.ph217.prol.loopexit:                          ; preds = %.lr.ph217.prol.loopexit.unr-lcssa, %.lr.ph217.preheader
  %.10129.lcssa.unr = phi i64 [ poison, %.lr.ph217.preheader ], [ %.10129.prol, %.lr.ph217.prol.loopexit.unr-lcssa ]
  %.lcssa313.unr = phi ptr [ poison, %.lr.ph217.preheader ], [ %110, %.lr.ph217.prol.loopexit.unr-lcssa ]
  %.7216.unr = phi ptr [ %.6183, %.lr.ph217.preheader ], [ %110, %.lr.ph217.prol.loopexit.unr-lcssa ]
  %.4115215.unr = phi i32 [ %.3114180, %.lr.ph217.preheader ], [ %111, %.lr.ph217.prol.loopexit.unr-lcssa ]
  %.8127214.unr = phi i64 [ %.7126179, %.lr.ph217.preheader ], [ %.10129.prol, %.lr.ph217.prol.loopexit.unr-lcssa ]
  %112 = icmp eq i32 %.3114180, 1
  br i1 %112, label %._crit_edge218, label %.lr.ph217

.lr.ph217:                                        ; preds = %.lr.ph217.prol.loopexit, %128
  %.7216 = phi ptr [ %129, %128 ], [ %.7216.unr, %.lr.ph217.prol.loopexit ]
  %.4115215 = phi i32 [ %130, %128 ], [ %.4115215.unr, %.lr.ph217.prol.loopexit ]
  %.8127214 = phi i64 [ %.10129.1, %128 ], [ %.8127214.unr, %.lr.ph217.prol.loopexit ]
  %113 = load i32, ptr %6, align 4, !tbaa !8
  switch i32 %113, label %117 [
    i32 -1, label %.lr.ph217.1
    i32 0, label %114
  ]

114:                                              ; preds = %.lr.ph217
  %115 = getelementptr inbounds i8, ptr %.7216, i64 1
  store i8 46, ptr %.7216, align 1, !tbaa !5
  %116 = add i64 %.8127214, -1
  %.pre = load i32, ptr %6, align 4, !tbaa !8
  br label %117

117:                                              ; preds = %.lr.ph217, %114
  %118 = phi i32 [ %.pre, %114 ], [ %113, %.lr.ph217 ]
  %.9128 = phi i64 [ %116, %114 ], [ %.8127214, %.lr.ph217 ]
  %.8 = phi ptr [ %115, %114 ], [ %.7216, %.lr.ph217 ]
  %119 = add nsw i32 %118, -1
  store i32 %119, ptr %6, align 4, !tbaa !8
  br label %.lr.ph217.1

.lr.ph217.1:                                      ; preds = %.lr.ph217, %117
  %.10129 = phi i64 [ %.9128, %117 ], [ %.8127214, %.lr.ph217 ]
  %.9 = phi ptr [ %.8, %117 ], [ %.7216, %.lr.ph217 ]
  %120 = getelementptr inbounds i8, ptr %.9, i64 1
  store i8 48, ptr %.9, align 1, !tbaa !5
  %121 = load i32, ptr %6, align 4, !tbaa !8
  switch i32 %121, label %125 [
    i32 -1, label %128
    i32 0, label %122
  ]

122:                                              ; preds = %.lr.ph217.1
  %123 = getelementptr inbounds i8, ptr %.9, i64 2
  store i8 46, ptr %120, align 1, !tbaa !5
  %124 = add i64 %.10129, -1
  %.pre.1 = load i32, ptr %6, align 4, !tbaa !8
  br label %125

125:                                              ; preds = %122, %.lr.ph217.1
  %126 = phi i32 [ %.pre.1, %122 ], [ %121, %.lr.ph217.1 ]
  %.9128.1 = phi i64 [ %124, %122 ], [ %.10129, %.lr.ph217.1 ]
  %.8.1 = phi ptr [ %123, %122 ], [ %120, %.lr.ph217.1 ]
  %127 = add nsw i32 %126, -1
  store i32 %127, ptr %6, align 4, !tbaa !8
  br label %128

128:                                              ; preds = %125, %.lr.ph217.1
  %.10129.1 = phi i64 [ %.9128.1, %125 ], [ %.10129, %.lr.ph217.1 ]
  %.9.1 = phi ptr [ %.8.1, %125 ], [ %120, %.lr.ph217.1 ]
  %129 = getelementptr inbounds i8, ptr %.9.1, i64 1
  store i8 48, ptr %.9.1, align 1, !tbaa !5
  %130 = add i32 %.4115215, -2
  %.not154.1 = icmp eq i32 %130, 0
  br i1 %.not154.1, label %._crit_edge218, label %.lr.ph217, !llvm.loop !15

._crit_edge218:                                   ; preds = %.lr.ph217.prol.loopexit, %128, %.thread170.thread, %.thread170
  %.3140178269 = phi double [ %.3140178, %.thread170 ], [ 0.000000e+00, %.thread170.thread ], [ %.3140178, %128 ], [ %.3140178, %.lr.ph217.prol.loopexit ]
  %.3114180268 = phi i32 [ 0, %.thread170 ], [ 0, %.thread170.thread ], [ %.3114180, %128 ], [ %.3114180, %.lr.ph217.prol.loopexit ]
  %.2109181267 = phi i32 [ %.2109181, %.thread170 ], [ %.0107, %.thread170.thread ], [ %.2109181, %128 ], [ %.2109181, %.lr.ph217.prol.loopexit ]
  %.3103182266 = phi i32 [ %.3103182, %.thread170 ], [ %.1101.lcssa257, %.thread170.thread ], [ %.3103182, %128 ], [ %.3103182, %.lr.ph217.prol.loopexit ]
  %.8127.lcssa = phi i64 [ %.7126179, %.thread170 ], [ %.5124, %.thread170.thread ], [ %.10129.lcssa.unr, %.lr.ph217.prol.loopexit ], [ %.10129.1, %128 ]
  %.7.lcssa = phi ptr [ %.6183, %.thread170 ], [ %.4, %.thread170.thread ], [ %.lcssa313.unr, %.lr.ph217.prol.loopexit ], [ %129, %128 ]
  %131 = load i32, ptr %6, align 4, !tbaa !8
  switch i32 %131, label %135 [
    i32 -1, label %138
    i32 0, label %132
  ]

132:                                              ; preds = %._crit_edge218
  %133 = getelementptr inbounds i8, ptr %.7.lcssa, i64 1
  store i8 46, ptr %.7.lcssa, align 1, !tbaa !5
  %134 = add i64 %.8127.lcssa, -1
  %.pre249 = load i32, ptr %6, align 4, !tbaa !8
  br label %135

135:                                              ; preds = %._crit_edge218, %132
  %136 = phi i32 [ %.pre249, %132 ], [ %131, %._crit_edge218 ]
  %.11130 = phi i64 [ %134, %132 ], [ %.8127.lcssa, %._crit_edge218 ]
  %.10 = phi ptr [ %133, %132 ], [ %.7.lcssa, %._crit_edge218 ]
  %137 = add nsw i32 %136, -1
  store i32 %137, ptr %6, align 4, !tbaa !8
  br label %138

138:                                              ; preds = %._crit_edge218, %135
  %.12131 = phi i64 [ %.11130, %135 ], [ %.8127.lcssa, %._crit_edge218 ]
  %.11 = phi ptr [ %.10, %135 ], [ %.7.lcssa, %._crit_edge218 ]
  %139 = load double, ptr %8, align 8, !tbaa !12
  %140 = fptosi double %139 to i32
  %141 = trunc i32 %140 to i8
  %142 = add i8 %141, 48
  %143 = getelementptr inbounds i8, ptr %.11, i64 1
  store i8 %142, ptr %.11, align 1, !tbaa !5
  %144 = add i32 %.3103182266, 1
  %145 = sub i32 %144, %.2109181267
  %146 = add i32 %145, %.3114180268
  br label %147

147:                                              ; preds = %100, %138
  %.3140177 = phi double [ %.3140178269, %138 ], [ %.3140, %100 ]
  %.13132 = phi i64 [ %.12131, %138 ], [ %.7126, %100 ]
  %.5116 = phi i32 [ 0, %138 ], [ %52, %100 ]
  %.3110 = phi i32 [ 0, %138 ], [ %spec.select160, %100 ]
  %.4104 = phi i32 [ %146, %138 ], [ %.3103, %100 ]
  %.12 = phi ptr [ %143, %138 ], [ %.6, %100 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  %148 = add i32 %.4104, %.5116
  %149 = add i32 %.3110, %spec.store.select7
  %150 = icmp ult i32 %148, %149
  %151 = fcmp ogt double %.3140177, 0x10000000000000
  %152 = select i1 %150, i1 %151, i1 false
  br i1 %152, label %50, label %153, !llvm.loop !16

153:                                              ; preds = %147
  %154 = load i32, ptr %6, align 4
  %155 = add i32 %154, 1
  %or.cond5 = icmp ult i32 %155, 4
  br i1 %or.cond5, label %.preheader, label %161

.preheader:                                       ; preds = %153
  %156 = add nsw i32 %154, -1
  store i32 %156, ptr %6, align 4, !tbaa !8
  %157 = icmp sgt i32 %154, 0
  br i1 %157, label %.lr.ph235, label %.thread186

.lr.ph235:                                        ; preds = %.preheader, %.lr.ph235
  %.13234 = phi ptr [ %158, %.lr.ph235 ], [ %.12, %.preheader ]
  %158 = getelementptr inbounds i8, ptr %.13234, i64 1
  store i8 48, ptr %.13234, align 1, !tbaa !5
  %.pr184 = load i32, ptr %6, align 4, !tbaa !8
  %159 = add nsw i32 %.pr184, -1
  store i32 %159, ptr %6, align 4, !tbaa !8
  %160 = icmp sgt i32 %.pr184, 0
  br i1 %160, label %.lr.ph235, label %.thread186, !llvm.loop !17

161:                                              ; preds = %153
  %162 = zext i32 %.4104 to i64
  %163 = getelementptr inbounds i8, ptr %.12, i64 1
  store i8 69, ptr %.12, align 1, !tbaa !5
  %164 = xor i64 %162, -1
  %165 = add i64 %.13132, %164
  %166 = load i32, ptr %6, align 4, !tbaa !8
  %167 = icmp slt i32 %166, 0
  br i1 %167, label %168, label %173

168:                                              ; preds = %161
  %169 = getelementptr inbounds i8, ptr %.12, i64 2
  store i8 45, ptr %163, align 1, !tbaa !5
  %170 = add i64 %165, -1
  %171 = load i32, ptr %6, align 4, !tbaa !8
  %172 = sub i32 0, %171
  br label %173

173:                                              ; preds = %161, %168
  %.14133 = phi i64 [ %170, %168 ], [ %165, %161 ]
  %.14 = phi ptr [ %169, %168 ], [ %163, %161 ]
  %.0 = phi i32 [ %172, %168 ], [ %166, %161 ]
  %.not157221 = icmp eq i32 %.0, 0
  br i1 %.not157221, label %._crit_edge226.thread, label %.lr.ph225

.lr.ph225:                                        ; preds = %173, %.lr.ph225
  %.1223 = phi i32 [ %180, %.lr.ph225 ], [ %.0, %173 ]
  %.5105222 = phi i32 [ %177, %.lr.ph225 ], [ 0, %173 ]
  %174 = urem i32 %.1223, 10
  %175 = trunc nuw nsw i32 %174 to i8
  %176 = or disjoint i8 %175, 48
  %177 = add i32 %.5105222, 1
  %178 = zext i32 %.5105222 to i64
  %179 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %178
  store i8 %176, ptr %179, align 1, !tbaa !5
  %180 = udiv i32 %.1223, 10
  %.not157 = icmp ult i32 %.1223, 10
  br i1 %.not157, label %._crit_edge226, label %.lr.ph225, !llvm.loop !18

._crit_edge226:                                   ; preds = %.lr.ph225
  %181 = zext i32 %177 to i64
  %182 = icmp ugt i64 %.14133, %181
  br i1 %182, label %.preheader189, label %228

._crit_edge226.thread:                            ; preds = %173
  %.not283 = icmp eq i64 %.14133, 0
  br i1 %.not283, label %228, label %.thread186

.preheader189:                                    ; preds = %._crit_edge226
  %.not158228 = icmp eq i32 %177, 0
  br i1 %.not158228, label %.thread186, label %.lr.ph231.preheader

.lr.ph231.preheader:                              ; preds = %.preheader189
  %min.iters.check = icmp ult i32 %177, 32
  br i1 %min.iters.check, label %.lr.ph231.preheader304, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph231.preheader
  %scevgep = getelementptr i8, ptr %.14, i64 %181
  %scevgep298 = getelementptr i8, ptr %7, i64 %181
  %bound0 = icmp ult ptr %.14, %scevgep298
  %bound1 = icmp ult ptr %7, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph231.preheader304, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %181, 4294967264
  %ind.end = and i64 %181, 31
  %ind.end299 = getelementptr i8, ptr %.14, i64 %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %.14, i64 %index
  %183 = xor i64 %index, -1
  %184 = add i64 %183, %181
  %185 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %184
  %186 = getelementptr inbounds i8, ptr %185, i64 -15
  %187 = getelementptr inbounds i8, ptr %185, i64 -31
  %wide.load = load <16 x i8>, ptr %186, align 1, !tbaa !5, !alias.scope !19
  %reverse = shufflevector <16 x i8> %wide.load, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  %wide.load302 = load <16 x i8>, ptr %187, align 1, !tbaa !5, !alias.scope !19
  %reverse303 = shufflevector <16 x i8> %wide.load302, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  %188 = getelementptr i8, ptr %next.gep, i64 16
  store <16 x i8> %reverse, ptr %next.gep, align 1, !tbaa !5, !alias.scope !22, !noalias !19
  store <16 x i8> %reverse303, ptr %188, align 1, !tbaa !5, !alias.scope !22, !noalias !19
  %index.next = add nuw i64 %index, 32
  %189 = icmp eq i64 %index.next, %n.vec
  br i1 %189, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %181
  br i1 %cmp.n, label %.thread186, label %.lr.ph231.preheader304

.lr.ph231.preheader304:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph231.preheader
  %indvars.iv.ph = phi i64 [ %181, %vector.memcheck ], [ %181, %.lr.ph231.preheader ], [ %ind.end, %middle.block ]
  %.15230.ph = phi ptr [ %.14, %vector.memcheck ], [ %.14, %.lr.ph231.preheader ], [ %ind.end299, %middle.block ]
  %190 = add nsw i64 %indvars.iv.ph, -1
  %xtraiter318 = and i64 %indvars.iv.ph, 7
  %lcmp.mod319.not = icmp eq i64 %xtraiter318, 0
  br i1 %lcmp.mod319.not, label %.lr.ph231.prol.loopexit, label %.lr.ph231.prol

.lr.ph231.prol:                                   ; preds = %.lr.ph231.preheader304, %.lr.ph231.prol
  %indvars.iv.prol = phi i64 [ %191, %.lr.ph231.prol ], [ %indvars.iv.ph, %.lr.ph231.preheader304 ]
  %.15230.prol = phi ptr [ %194, %.lr.ph231.prol ], [ %.15230.ph, %.lr.ph231.preheader304 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph231.prol ], [ 0, %.lr.ph231.preheader304 ]
  %191 = add nsw i64 %indvars.iv.prol, -1
  %192 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %191
  %193 = load i8, ptr %192, align 1, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %.15230.prol, i64 1
  store i8 %193, ptr %.15230.prol, align 1, !tbaa !5
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter318
  br i1 %prol.iter.cmp.not, label %.lr.ph231.prol.loopexit, label %.lr.ph231.prol, !llvm.loop !27

.lr.ph231.prol.loopexit:                          ; preds = %.lr.ph231.prol, %.lr.ph231.preheader304
  %.lcssa306.unr = phi ptr [ poison, %.lr.ph231.preheader304 ], [ %194, %.lr.ph231.prol ]
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.lr.ph231.preheader304 ], [ %191, %.lr.ph231.prol ]
  %.15230.unr = phi ptr [ %.15230.ph, %.lr.ph231.preheader304 ], [ %194, %.lr.ph231.prol ]
  %195 = icmp ult i64 %190, 7
  br i1 %195, label %.thread186, label %.lr.ph231

.lr.ph231:                                        ; preds = %.lr.ph231.prol.loopexit, %.lr.ph231
  %indvars.iv = phi i64 [ %224, %.lr.ph231 ], [ %indvars.iv.unr, %.lr.ph231.prol.loopexit ]
  %.15230 = phi ptr [ %227, %.lr.ph231 ], [ %.15230.unr, %.lr.ph231.prol.loopexit ]
  %196 = add nsw i64 %indvars.iv, -1
  %197 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %196
  %198 = load i8, ptr %197, align 1, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %.15230, i64 1
  store i8 %198, ptr %.15230, align 1, !tbaa !5
  %200 = add nsw i64 %indvars.iv, -2
  %201 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %200
  %202 = load i8, ptr %201, align 1, !tbaa !5
  %203 = getelementptr inbounds i8, ptr %.15230, i64 2
  store i8 %202, ptr %199, align 1, !tbaa !5
  %204 = add nsw i64 %indvars.iv, -3
  %205 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %204
  %206 = load i8, ptr %205, align 1, !tbaa !5
  %207 = getelementptr inbounds i8, ptr %.15230, i64 3
  store i8 %206, ptr %203, align 1, !tbaa !5
  %208 = add nsw i64 %indvars.iv, -4
  %209 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %208
  %210 = load i8, ptr %209, align 1, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %.15230, i64 4
  store i8 %210, ptr %207, align 1, !tbaa !5
  %212 = add nsw i64 %indvars.iv, -5
  %213 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %212
  %214 = load i8, ptr %213, align 1, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %.15230, i64 5
  store i8 %214, ptr %211, align 1, !tbaa !5
  %216 = add nsw i64 %indvars.iv, -6
  %217 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %216
  %218 = load i8, ptr %217, align 1, !tbaa !5
  %219 = getelementptr inbounds i8, ptr %.15230, i64 6
  store i8 %218, ptr %215, align 1, !tbaa !5
  %220 = add nsw i64 %indvars.iv, -7
  %221 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %220
  %222 = load i8, ptr %221, align 1, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %.15230, i64 7
  store i8 %222, ptr %219, align 1, !tbaa !5
  %224 = add nsw i64 %indvars.iv, -8
  %225 = getelementptr inbounds [10 x i8], ptr %7, i64 0, i64 %224
  %226 = load i8, ptr %225, align 1, !tbaa !5
  %227 = getelementptr inbounds i8, ptr %.15230, i64 8
  store i8 %226, ptr %223, align 1, !tbaa !5
  %.not158.wide.7 = icmp eq i64 %224, 0
  br i1 %.not158.wide.7, label %.thread186, label %.lr.ph231, !llvm.loop !29

.thread186:                                       ; preds = %.lr.ph231.prol.loopexit, %.lr.ph231, %.lr.ph235, %middle.block, %.preheader189, %._crit_edge226.thread, %.preheader
  %.13.lcssa.sink = phi ptr [ %.12, %.preheader ], [ %.14, %.preheader189 ], [ %.14, %._crit_edge226.thread ], [ %ind.end299, %middle.block ], [ %158, %.lr.ph235 ], [ %.lcssa306.unr, %.lr.ph231.prol.loopexit ], [ %227, %.lr.ph231 ]
  store i8 0, ptr %.13.lcssa.sink, align 1, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 10, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  br label %234

228:                                              ; preds = %._crit_edge226.thread, %._crit_edge226
  call void @llvm.lifetime.end.p0(i64 10, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  br label %233

229:                                              ; preds = %19
  br i1 %20, label %232, label %230

230:                                              ; preds = %229
  %231 = getelementptr inbounds i8, ptr %.097, i64 1
  store i8 48, ptr %.097, align 1, !tbaa !5
  store i8 0, ptr %231, align 1, !tbaa !5
  br label %234

232:                                              ; preds = %229
  store <4 x i8> <i8 105, i8 110, i8 102, i8 0>, ptr %.097, align 1, !tbaa !5
  br label %234

233:                                              ; preds = %228, %5
  tail call void @png_error(ptr noundef %0, ptr noundef nonnull @.str.66) #7
  unreachable

234:                                              ; preds = %.thread186, %232, %230
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: write)
declare double @frexp(double noundef, ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden double @png_pow10(i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: write)
declare double @modf(double noundef, ptr nocapture noundef) local_unnamed_addr #3

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

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

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


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