; LLVM IR from h2o/h2o :: deps/mruby/src (fmt_fp)

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

@g_pos_pow = external hidden constant [9 x double], align 16
@g_neg_pow = external hidden constant [9 x double], align 16

; Function Attrs: nounwind uwtable
define dso_local i32 @mrb_format_float(double noundef %0, ptr noundef %1, i64 noundef %2, i8 noundef signext %3, i32 noundef %4, i8 noundef signext %5) #0 {
  %7 = alloca i32, align 4
  %8 = alloca double, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i8, align 1
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i8, align 1
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i8, align 1
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca i8, align 1
  %30 = alloca i32, align 4
  %31 = alloca i8, align 1
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  store double %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !9
  store i64 %2, ptr %10, align 8, !tbaa !11
  store i8 %3, ptr %11, align 1, !tbaa !13
  store i32 %4, ptr %12, align 4, !tbaa !14
  store i8 %5, ptr %13, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %34 = load ptr, ptr %9, align 8, !tbaa !9
  store ptr %34, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %35 = load i64, ptr %10, align 8, !tbaa !11
  %36 = trunc i64 %35 to i32
  %37 = sub nsw i32 %36, 1
  store i32 %37, ptr %15, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  store i32 0, ptr %16, align 4, !tbaa !14
  %38 = load i8, ptr %11, align 1, !tbaa !13
  %39 = zext i8 %38 to i32
  %40 = and i32 %39, 128
  %41 = icmp ne i32 %40, 0
  br i1 %41, label %42, label %47

42:                                               ; preds = %6
  %43 = load i8, ptr %11, align 1, !tbaa !13
  %44 = sext i8 %43 to i32
  %45 = and i32 %44, 127
  %46 = trunc i32 %45 to i8
  store i8 %46, ptr %11, align 1, !tbaa !13
  store i32 1, ptr %16, align 4, !tbaa !14
  br label %47

47:                                               ; preds = %42, %6
  %48 = load i64, ptr %10, align 8, !tbaa !11
  %49 = icmp ule i64 %48, 7
  br i1 %49, label %50, label %66

50:                                               ; preds = %47
  %51 = load i64, ptr %10, align 8, !tbaa !11
  %52 = icmp uge i64 %51, 2
  br i1 %52, label %53, label %56

53:                                               ; preds = %50
  %54 = load ptr, ptr %14, align 8, !tbaa !9
  %55 = getelementptr inbounds i8, ptr %54, i32 1
  store ptr %55, ptr %14, align 8, !tbaa !9
  store i8 63, ptr %54, align 1, !tbaa !13
  br label %56

56:                                               ; preds = %53, %50
  %57 = load i64, ptr %10, align 8, !tbaa !11
  %58 = icmp uge i64 %57, 1
  br i1 %58, label %59, label %62

59:                                               ; preds = %56
  %60 = load ptr, ptr %14, align 8, !tbaa !9
  %61 = getelementptr inbounds i8, ptr %60, i32 1
  store ptr %61, ptr %14, align 8, !tbaa !9
  store i8 0, ptr %60, align 1, !tbaa !13
  br label %62

62:                                               ; preds = %59, %56
  %63 = load i64, ptr %10, align 8, !tbaa !11
  %64 = icmp uge i64 %63, 2
  %65 = zext i1 %64 to i32
  store i32 %65, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %653

66:                                               ; preds = %47
  %67 = load double, ptr %8, align 8, !tbaa !5
  %68 = bitcast double %67 to i64
  %69 = icmp slt i64 %68, 0
  br i1 %69, label %70, label %75

70:                                               ; preds = %66
  %71 = load ptr, ptr %14, align 8, !tbaa !9
  %72 = getelementptr inbounds i8, ptr %71, i32 1
  store ptr %72, ptr %14, align 8, !tbaa !9
  store i8 45, ptr %71, align 1, !tbaa !13
  %73 = load double, ptr %8, align 8, !tbaa !5
  %74 = fneg double %73
  store double %74, ptr %8, align 8, !tbaa !5
  br label %83

75:                                               ; preds = %66
  %76 = load i8, ptr %13, align 1, !tbaa !13
  %77 = icmp ne i8 %76, 0
  br i1 %77, label %78, label %82

78:                                               ; preds = %75
  %79 = load i8, ptr %13, align 1, !tbaa !13
  %80 = load ptr, ptr %14, align 8, !tbaa !9
  %81 = getelementptr inbounds i8, ptr %80, i32 1
  store ptr %81, ptr %14, align 8, !tbaa !9
  store i8 %79, ptr %80, align 1, !tbaa !13
  br label %82

82:                                               ; preds = %78, %75
  br label %83

83:                                               ; preds = %82, %70
  %84 = load ptr, ptr %14, align 8, !tbaa !9
  %85 = load ptr, ptr %9, align 8, !tbaa !9
  %86 = ptrtoint ptr %84 to i64
  %87 = ptrtoint ptr %85 to i64
  %88 = sub i64 %86, %87
  %89 = trunc i64 %88 to i32
  %90 = load i32, ptr %15, align 4, !tbaa !14
  %91 = sub nsw i32 %90, %89
  store i32 %91, ptr %15, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #3
  %92 = load i8, ptr %11, align 1, !tbaa !13
  %93 = sext i8 %92 to i32
  %94 = and i32 %93, 32
  %95 = trunc i32 %94 to i8
  store i8 %95, ptr %18, align 1, !tbaa !13
  %96 = load double, ptr %8, align 8, !tbaa !5
  %97 = call double @llvm.fabs.f64(double %96) #4
  %98 = fcmp oeq double %97, 0x7FF0000000000000
  %99 = bitcast double %96 to i64
  %100 = icmp slt i64 %99, 0
  %101 = select i1 %100, i32 -1, i32 1
  %102 = select i1 %98, i32 %101, i32 0
  %103 = icmp ne i32 %102, 0
  br i1 %103, label %104, label %123

104:                                              ; preds = %83
  %105 = load i8, ptr %18, align 1, !tbaa !13
  %106 = sext i8 %105 to i32
  %107 = xor i32 73, %106
  %108 = trunc i32 %107 to i8
  %109 = load ptr, ptr %14, align 8, !tbaa !9
  %110 = getelementptr inbounds i8, ptr %109, i32 1
  store ptr %110, ptr %14, align 8, !tbaa !9
  store i8 %108, ptr %109, align 1, !tbaa !13
  %111 = load i8, ptr %18, align 1, !tbaa !13
  %112 = sext i8 %111 to i32
  %113 = xor i32 78, %112
  %114 = trunc i32 %113 to i8
  %115 = load ptr, ptr %14, align 8, !tbaa !9
  %116 = getelementptr inbounds i8, ptr %115, i32 1
  store ptr %116, ptr %14, align 8, !tbaa !9
  store i8 %114, ptr %115, align 1, !tbaa !13
  %117 = load i8, ptr %18, align 1, !tbaa !13
  %118 = sext i8 %117 to i32
  %119 = xor i32 70, %118
  %120 = trunc i32 %119 to i8
  %121 = load ptr, ptr %14, align 8, !tbaa !9
  %122 = getelementptr inbounds i8, ptr %121, i32 1
  store ptr %122, ptr %14, align 8, !tbaa !9
  store i8 %120, ptr %121, align 1, !tbaa !13
  br label %145

123:                                              ; preds = %83
  %124 = load double, ptr %8, align 8, !tbaa !5
  %125 = call i1 @llvm.is.fpclass.f64(double %124, i32 3)
  br i1 %125, label %126, label %153

126:                                              ; preds = %123
  %127 = load i8, ptr %18, align 1, !tbaa !13
  %128 = sext i8 %127 to i32
  %129 = xor i32 78, %128
  %130 = trunc i32 %129 to i8
  %131 = load ptr, ptr %14, align 8, !tbaa !9
  %132 = getelementptr inbounds i8, ptr %131, i32 1
  store ptr %132, ptr %14, align 8, !tbaa !9
  store i8 %130, ptr %131, align 1, !tbaa !13
  %133 = load i8, ptr %18, align 1, !tbaa !13
  %134 = sext i8 %133 to i32
  %135 = xor i32 65, %134
  %136 = trunc i32 %135 to i8
  %137 = load ptr, ptr %14, align 8, !tbaa !9
  %138 = getelementptr inbounds i8, ptr %137, i32 1
  store ptr %138, ptr %14, align 8, !tbaa !9
  store i8 %136, ptr %137, align 1, !tbaa !13
  %139 = load i8, ptr %18, align 1, !tbaa !13
  %140 = sext i8 %139 to i32
  %141 = xor i32 78, %140
  %142 = trunc i32 %141 to i8
  %143 = load ptr, ptr %14, align 8, !tbaa !9
  %144 = getelementptr inbounds i8, ptr %143, i32 1
  store ptr %144, ptr %14, align 8, !tbaa !9
  store i8 %142, ptr %143, align 1, !tbaa !13
  br label %145

145:                                              ; preds = %126, %104
  %146 = load ptr, ptr %14, align 8, !tbaa !9
  store i8 0, ptr %146, align 1, !tbaa !13
  %147 = load ptr, ptr %14, align 8, !tbaa !9
  %148 = load ptr, ptr %9, align 8, !tbaa !9
  %149 = ptrtoint ptr %147 to i64
  %150 = ptrtoint ptr %148 to i64
  %151 = sub i64 %149, %150
  %152 = trunc i64 %151 to i32
  store i32 %152, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %155

153:                                              ; preds = %123
  br label %154

154:                                              ; preds = %153
  store i32 0, ptr %17, align 4
  br label %155

155:                                              ; preds = %154, %145
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #3
  %156 = load i32, ptr %17, align 4
  switch i32 %156, label %653 [
    i32 0, label %157
  ]

157:                                              ; preds = %155
  %158 = load i32, ptr %12, align 4, !tbaa !14
  %159 = icmp slt i32 %158, 0
  br i1 %159, label %160, label %161

160:                                              ; preds = %157
  store i32 6, ptr %12, align 4, !tbaa !14
  br label %161

161:                                              ; preds = %160, %157
  %162 = load i8, ptr %11, align 1, !tbaa !13
  %163 = sext i8 %162 to i32
  %164 = and i32 %163, 32
  %165 = or i32 69, %164
  %166 = trunc i32 %165 to i8
  store i8 %166, ptr %19, align 1, !tbaa !13
  %167 = load i8, ptr %11, align 1, !tbaa !13
  %168 = sext i8 %167 to i32
  %169 = or i32 %168, 32
  %170 = trunc i32 %169 to i8
  store i8 %170, ptr %11, align 1, !tbaa !13
  %171 = load i8, ptr %11, align 1, !tbaa !13
  store i8 %171, ptr %20, align 1, !tbaa !13
  %172 = load i8, ptr %11, align 1, !tbaa !13
  %173 = sext i8 %172 to i32
  %174 = icmp eq i32 %173, 103
  br i1 %174, label %175, label %179

175:                                              ; preds = %161
  %176 = load i32, ptr %12, align 4, !tbaa !14
  %177 = icmp eq i32 %176, 0
  br i1 %177, label %178, label %179

178:                                              ; preds = %175
  store i32 1, ptr %12, align 4, !tbaa !14
  br label %179

179:                                              ; preds = %178, %175, %161
  store i32 0, ptr %23, align 4, !tbaa !14
  store i8 0, ptr %24, align 1, !tbaa !13
  store i32 0, ptr %25, align 4, !tbaa !14
  store ptr @g_pos_pow, ptr %26, align 8, !tbaa !9
  store ptr @g_neg_pow, ptr %27, align 8, !tbaa !9
  %180 = load double, ptr %8, align 8, !tbaa !5
  %181 = fcmp oeq double %180, 0.000000e+00
  br i1 %181, label %182, label %196

182:                                              ; preds = %179
  store i32 0, ptr %21, align 4, !tbaa !14
  %183 = load i8, ptr %11, align 1, !tbaa !13
  %184 = sext i8 %183 to i32
  %185 = icmp eq i32 %184, 101
  br i1 %185, label %186, label %187

186:                                              ; preds = %182
  store i8 43, ptr %24, align 1, !tbaa !13
  br label %195

187:                                              ; preds = %182
  %188 = load i8, ptr %11, align 1, !tbaa !13
  %189 = sext i8 %188 to i32
  %190 = icmp eq i32 %189, 102
  br i1 %190, label %191, label %194

191:                                              ; preds = %187
  %192 = load i32, ptr %12, align 4, !tbaa !14
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %25, align 4, !tbaa !14
  br label %194

194:                                              ; preds = %191, %187
  br label %195

195:                                              ; preds = %194, %186
  br label %412

196:                                              ; preds = %179
  %197 = load double, ptr %8, align 8, !tbaa !5
  %198 = fcmp olt double %197, 1.000000e+00
  br i1 %198, label %199, label %320

199:                                              ; preds = %196
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #3
  store i8 48, ptr %28, align 1, !tbaa !13
  %200 = load double, ptr %8, align 8, !tbaa !5
  %201 = fcmp oge double %200, 0x3FEFFFFFFFFF5014
  br i1 %201, label %202, label %203

202:                                              ; preds = %199
  store i8 49, ptr %28, align 1, !tbaa !13
  br label %203

203:                                              ; preds = %202, %199
  store i32 0, ptr %21, align 4, !tbaa !14
  store i32 256, ptr %22, align 4, !tbaa !14
  br label %204

204:                                              ; preds = %221, %203
  %205 = load i32, ptr %22, align 4, !tbaa !14
  %206 = icmp ne i32 %205, 0
  br i1 %206, label %207, label %228

207:                                              ; preds = %204
  %208 = load ptr, ptr %27, align 8, !tbaa !9
  %209 = load double, ptr %208, align 8, !tbaa !5
  %210 = load double, ptr %8, align 8, !tbaa !5
  %211 = fcmp ogt double %209, %210
  br i1 %211, label %212, label %220

212:                                              ; preds = %207
  %213 = load i32, ptr %22, align 4, !tbaa !14
  %214 = load i32, ptr %21, align 4, !tbaa !14
  %215 = add nsw i32 %214, %213
  store i32 %215, ptr %21, align 4, !tbaa !14
  %216 = load ptr, ptr %26, align 8, !tbaa !9
  %217 = load double, ptr %216, align 8, !tbaa !5
  %218 = load double, ptr %8, align 8, !tbaa !5
  %219 = fmul double %218, %217
  store double %219, ptr %8, align 8, !tbaa !5
  br label %220

220:                                              ; preds = %212, %207
  br label %221

221:                                              ; preds = %220
  %222 = load i32, ptr %22, align 4, !tbaa !14
  %223 = ashr i32 %222, 1
  store i32 %223, ptr %22, align 4, !tbaa !14
  %224 = load ptr, ptr %26, align 8, !tbaa !9
  %225 = getelementptr inbounds double, ptr %224, i32 1
  store ptr %225, ptr %26, align 8, !tbaa !9
  %226 = load ptr, ptr %27, align 8, !tbaa !9
  %227 = getelementptr inbounds double, ptr %226, i32 1
  store ptr %227, ptr %27, align 8, !tbaa !9
  br label %204, !llvm.loop !16

228:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #3
  store i8 45, ptr %29, align 1, !tbaa !13
  %229 = load double, ptr %8, align 8, !tbaa !5
  %230 = fcmp olt double %229, 1.000000e+00
  br i1 %230, label %231, label %245

231:                                              ; preds = %228
  %232 = load double, ptr %8, align 8, !tbaa !5
  %233 = fcmp oge double %232, 0x3FEFFFFFFFFF5014
  br i1 %233, label %234, label %239

234:                                              ; preds = %231
  store double 1.000000e+00, ptr %8, align 8, !tbaa !5
  %235 = load i32, ptr %21, align 4, !tbaa !14
  %236 = icmp eq i32 %235, 0
  br i1 %236, label %237, label %238

237:                                              ; preds = %234
  store i8 43, ptr %29, align 1, !tbaa !13
  br label %238

238:                                              ; preds = %237, %234
  br label %244

239:                                              ; preds = %231
  %240 = load i32, ptr %21, align 4, !tbaa !14
  %241 = add nsw i32 %240, 1
  store i32 %241, ptr %21, align 4, !tbaa !14
  %242 = load double, ptr %8, align 8, !tbaa !5
  %243 = fmul double %242, 1.000000e+01
  store double %243, ptr %8, align 8, !tbaa !5
  br label %244

244:                                              ; preds = %239, %238
  br label %245

245:                                              ; preds = %244, %228
  %246 = load i8, ptr %11, align 1, !tbaa !13
  %247 = sext i8 %246 to i32
  %248 = icmp eq i32 %247, 102
  br i1 %248, label %256, label %249

249:                                              ; preds = %245
  %250 = load i8, ptr %11, align 1, !tbaa !13
  %251 = sext i8 %250 to i32
  %252 = icmp eq i32 %251, 103
  br i1 %252, label %253, label %302

253:                                              ; preds = %249
  %254 = load i32, ptr %21, align 4, !tbaa !14
  %255 = icmp sle i32 %254, 4
  br i1 %255, label %256, label %302

256:                                              ; preds = %253, %245
  store i8 102, ptr %11, align 1, !tbaa !13
  store i32 -1, ptr %23, align 4, !tbaa !14
  %257 = load i8, ptr %28, align 1, !tbaa !13
  %258 = load ptr, ptr %14, align 8, !tbaa !9
  %259 = getelementptr inbounds i8, ptr %258, i32 1
  store ptr %259, ptr %14, align 8, !tbaa !9
  store i8 %257, ptr %258, align 1, !tbaa !13
  %260 = load i8, ptr %20, align 1, !tbaa !13
  %261 = sext i8 %260 to i32
  %262 = icmp eq i32 %261, 103
  br i1 %262, label %263, label %268

263:                                              ; preds = %256
  %264 = load i32, ptr %21, align 4, !tbaa !14
  %265 = sub nsw i32 %264, 1
  %266 = load i32, ptr %12, align 4, !tbaa !14
  %267 = add nsw i32 %266, %265
  store i32 %267, ptr %12, align 4, !tbaa !14
  br label %268

268:                                              ; preds = %263, %256
  %269 = load i32, ptr %12, align 4, !tbaa !14
  %270 = add nsw i32 %269, 2
  %271 = load i32, ptr %15, align 4, !tbaa !14
  %272 = icmp sgt i32 %270, %271
  br i1 %272, label %273, label %276

273:                                              ; preds = %268
  %274 = load i32, ptr %15, align 4, !tbaa !14
  %275 = sub nsw i32 %274, 2
  store i32 %275, ptr %12, align 4, !tbaa !14
  br label %276

276:                                              ; preds = %273, %268
  %277 = load i32, ptr %12, align 4, !tbaa !14
  store i32 %277, ptr %25, align 4, !tbaa !14
  %278 = load i32, ptr %25, align 4, !tbaa !14
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %283, label %280

280:                                              ; preds = %276
  %281 = load i32, ptr %16, align 4, !tbaa !14
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %283, label %301

283:                                              ; preds = %280, %276
  %284 = load ptr, ptr %14, align 8, !tbaa !9
  %285 = getelementptr inbounds i8, ptr %284, i32 1
  store ptr %285, ptr %14, align 8, !tbaa !9
  store i8 46, ptr %284, align 1, !tbaa !13
  br label %286

286:                                              ; preds = %295, %283
  %287 = load i32, ptr %21, align 4, !tbaa !14
  %288 = add nsw i32 %287, -1
  store i32 %288, ptr %21, align 4, !tbaa !14
  %289 = icmp ne i32 %288, 0
  br i1 %289, label %290, label %293

290:                                              ; preds = %286
  %291 = load i32, ptr %25, align 4, !tbaa !14
  %292 = icmp ne i32 %291, 0
  br label %293

293:                                              ; preds = %290, %286
  %294 = phi i1 [ false, %286 ], [ %292, %290 ]
  br i1 %294, label %295, label %300

295:                                              ; preds = %293
  %296 = load ptr, ptr %14, align 8, !tbaa !9
  %297 = getelementptr inbounds i8, ptr %296, i32 1
  store ptr %297, ptr %14, align 8, !tbaa !9
  store i8 48, ptr %296, align 1, !tbaa !13
  %298 = load i32, ptr %25, align 4, !tbaa !14
  %299 = add nsw i32 %298, -1
  store i32 %299, ptr %25, align 4, !tbaa !14
  br label %286, !llvm.loop !18

300:                                              ; preds = %293
  br label %301

301:                                              ; preds = %300, %280
  br label %319

302:                                              ; preds = %253, %249
  %303 = load i8, ptr %29, align 1, !tbaa !13
  store i8 %303, ptr %24, align 1, !tbaa !13
  store i32 0, ptr %23, align 4, !tbaa !14
  %304 = load i32, ptr %12, align 4, !tbaa !14
  %305 = load i32, ptr %15, align 4, !tbaa !14
  %306 = sub nsw i32 %305, 7
  %307 = icmp sgt i32 %304, %306
  br i1 %307, label %308, label %318

308:                                              ; preds = %302
  %309 = load i32, ptr %15, align 4, !tbaa !14
  %310 = sub nsw i32 %309, 7
  store i32 %310, ptr %12, align 4, !tbaa !14
  %311 = load i8, ptr %11, align 1, !tbaa !13
  %312 = sext i8 %311 to i32
  %313 = icmp eq i32 %312, 103
  br i1 %313, label %314, label %317

314:                                              ; preds = %308
  %315 = load i32, ptr %12, align 4, !tbaa !14
  %316 = add nsw i32 %315, 1
  store i32 %316, ptr %12, align 4, !tbaa !14
  br label %317

317:                                              ; preds = %314, %308
  br label %318

318:                                              ; preds = %317, %302
  br label %319

319:                                              ; preds = %318, %301
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #3
  br label %411

320:                                              ; preds = %196
  store i32 0, ptr %21, align 4, !tbaa !14
  store i32 256, ptr %22, align 4, !tbaa !14
  br label %321

321:                                              ; preds = %338, %320
  %322 = load i32, ptr %22, align 4, !tbaa !14
  %323 = icmp ne i32 %322, 0
  br i1 %323, label %324, label %345

324:                                              ; preds = %321
  %325 = load ptr, ptr %26, align 8, !tbaa !9
  %326 = load double, ptr %325, align 8, !tbaa !5
  %327 = load double, ptr %8, align 8, !tbaa !5
  %328 = fcmp ole double %326, %327
  br i1 %328, label %329, label %337

329:                                              ; preds = %324
  %330 = load i32, ptr %22, align 4, !tbaa !14
  %331 = load i32, ptr %21, align 4, !tbaa !14
  %332 = add nsw i32 %331, %330
  store i32 %332, ptr %21, align 4, !tbaa !14
  %333 = load ptr, ptr %27, align 8, !tbaa !9
  %334 = load double, ptr %333, align 8, !tbaa !5
  %335 = load double, ptr %8, align 8, !tbaa !5
  %336 = fmul double %335, %334
  store double %336, ptr %8, align 8, !tbaa !5
  br label %337

337:                                              ; preds = %329, %324
  br label %338

338:                                              ; preds = %337
  %339 = load i32, ptr %22, align 4, !tbaa !14
  %340 = ashr i32 %339, 1
  store i32 %340, ptr %22, align 4, !tbaa !14
  %341 = load ptr, ptr %26, align 8, !tbaa !9
  %342 = getelementptr inbounds double, ptr %341, i32 1
  store ptr %342, ptr %26, align 8, !tbaa !9
  %343 = load ptr, ptr %27, align 8, !tbaa !9
  %344 = getelementptr inbounds double, ptr %343, i32 1
  store ptr %344, ptr %27, align 8, !tbaa !9
  br label %321, !llvm.loop !19

345:                                              ; preds = %321
  %346 = load i8, ptr %11, align 1, !tbaa !13
  %347 = sext i8 %346 to i32
  %348 = icmp eq i32 %347, 102
  br i1 %348, label %349, label %374

349:                                              ; preds = %345
  %350 = load i32, ptr %21, align 4, !tbaa !14
  %351 = load i32, ptr %15, align 4, !tbaa !14
  %352 = icmp sge i32 %350, %351
  br i1 %352, label %353, label %354

353:                                              ; preds = %349
  store i8 101, ptr %11, align 1, !tbaa !13
  br label %373

354:                                              ; preds = %349
  %355 = load i32, ptr %21, align 4, !tbaa !14
  %356 = load i32, ptr %12, align 4, !tbaa !14
  %357 = add nsw i32 %355, %356
  %358 = add nsw i32 %357, 2
  %359 = load i32, ptr %15, align 4, !tbaa !14
  %360 = icmp sgt i32 %358, %359
  br i1 %360, label %361, label %372

361:                                              ; preds = %354
  %362 = load i32, ptr %15, align 4, !tbaa !14
  %363 = load i32, ptr %21, align 4, !tbaa !14
  %364 = sub nsw i32 %362, %363
  %365 = sub nsw i32 %364, 2
  store i32 %365, ptr %12, align 4, !tbaa !14
  %366 = load i32, ptr %12, align 4, !tbaa !14
  %367 = icmp slt i32 %366, 0
  br i1 %367, label %368, label %371

368:                                              ; preds = %361
  %369 = load i32, ptr %12, align 4, !tbaa !14
  %370 = add nsw i32 %369, 1
  store i32 %370, ptr %12, align 4, !tbaa !14
  br label %371

371:                                              ; preds = %368, %361
  br label %372

372:                                              ; preds = %371, %354
  br label %373

373:                                              ; preds = %372, %353
  br label %374

374:                                              ; preds = %373, %345
  %375 = load i8, ptr %11, align 1, !tbaa !13
  %376 = sext i8 %375 to i32
  %377 = icmp eq i32 %376, 101
  br i1 %377, label %378, label %386

378:                                              ; preds = %374
  %379 = load i32, ptr %12, align 4, !tbaa !14
  %380 = load i32, ptr %15, align 4, !tbaa !14
  %381 = sub nsw i32 %380, 6
  %382 = icmp sgt i32 %379, %381
  br i1 %382, label %383, label %386

383:                                              ; preds = %378
  %384 = load i32, ptr %15, align 4, !tbaa !14
  %385 = sub nsw i32 %384, 6
  store i32 %385, ptr %12, align 4, !tbaa !14
  br label %386

386:                                              ; preds = %383, %378, %374
  %387 = load i8, ptr %11, align 1, !tbaa !13
  %388 = sext i8 %387 to i32
  %389 = icmp eq i32 %388, 103
  br i1 %389, label %390, label %399

390:                                              ; preds = %386
  %391 = load i32, ptr %21, align 4, !tbaa !14
  %392 = load i32, ptr %12, align 4, !tbaa !14
  %393 = icmp slt i32 %391, %392
  br i1 %393, label %394, label %399

394:                                              ; preds = %390
  store i8 102, ptr %11, align 1, !tbaa !13
  %395 = load i32, ptr %21, align 4, !tbaa !14
  %396 = add nsw i32 %395, 1
  %397 = load i32, ptr %12, align 4, !tbaa !14
  %398 = sub nsw i32 %397, %396
  store i32 %398, ptr %12, align 4, !tbaa !14
  br label %399

399:                                              ; preds = %394, %390, %386
  %400 = load i8, ptr %11, align 1, !tbaa !13
  %401 = sext i8 %400 to i32
  %402 = icmp eq i32 %401, 102
  br i1 %402, label %403, label %409

403:                                              ; preds = %399
  %404 = load i32, ptr %21, align 4, !tbaa !14
  store i32 %404, ptr %23, align 4, !tbaa !14
  %405 = load i32, ptr %12, align 4, !tbaa !14
  %406 = load i32, ptr %21, align 4, !tbaa !14
  %407 = add nsw i32 %405, %406
  %408 = add nsw i32 %407, 1
  store i32 %408, ptr %25, align 4, !tbaa !14
  br label %410

409:                                              ; preds = %399
  store i8 43, ptr %24, align 1, !tbaa !13
  br label %410

410:                                              ; preds = %409, %403
  br label %411

411:                                              ; preds = %410, %319
  br label %412

412:                                              ; preds = %411, %195
  %413 = load i32, ptr %12, align 4, !tbaa !14
  %414 = icmp slt i32 %413, 0
  br i1 %414, label %415, label %416

415:                                              ; preds = %412
  store i32 0, ptr %12, align 4, !tbaa !14
  br label %416

416:                                              ; preds = %415, %412
  %417 = load i8, ptr %11, align 1, !tbaa !13
  %418 = sext i8 %417 to i32
  %419 = icmp eq i32 %418, 101
  br i1 %419, label %420, label %423

420:                                              ; preds = %416
  %421 = load i32, ptr %12, align 4, !tbaa !14
  %422 = add nsw i32 %421, 1
  store i32 %422, ptr %25, align 4, !tbaa !14
  br label %434

423:                                              ; preds = %416
  %424 = load i8, ptr %11, align 1, !tbaa !13
  %425 = sext i8 %424 to i32
  %426 = icmp eq i32 %425, 103
  br i1 %426, label %427, label %433

427:                                              ; preds = %423
  %428 = load i32, ptr %12, align 4, !tbaa !14
  %429 = icmp eq i32 %428, 0
  br i1 %429, label %430, label %431

430:                                              ; preds = %427
  store i32 1, ptr %12, align 4, !tbaa !14
  br label %431

431:                                              ; preds = %430, %427
  %432 = load i32, ptr %12, align 4, !tbaa !14
  store i32 %432, ptr %25, align 4, !tbaa !14
  br label %433

433:                                              ; preds = %431, %423
  br label %434

434:                                              ; preds = %433, %420
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  store i32 0, ptr %30, align 4, !tbaa !14
  br label %435

435:                                              ; preds = %471, %434
  %436 = load i32, ptr %30, align 4, !tbaa !14
  %437 = load i32, ptr %25, align 4, !tbaa !14
  %438 = icmp slt i32 %436, %437
  br i1 %438, label %440, label %439

439:                                              ; preds = %435
  store i32 11, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  br label %476

440:                                              ; preds = %435
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #3
  %441 = load double, ptr %8, align 8, !tbaa !5
  %442 = fptosi double %441 to i32
  %443 = trunc i32 %442 to i8
  %444 = sext i8 %443 to i32
  %445 = srem i32 %444, 10
  %446 = trunc i32 %445 to i8
  store i8 %446, ptr %31, align 1, !tbaa !13
  %447 = load i8, ptr %31, align 1, !tbaa !13
  %448 = sext i8 %447 to i32
  %449 = add nsw i32 48, %448
  %450 = trunc i32 %449 to i8
  %451 = load ptr, ptr %14, align 8, !tbaa !9
  %452 = getelementptr inbounds i8, ptr %451, i32 1
  store ptr %452, ptr %14, align 8, !tbaa !9
  store i8 %450, ptr %451, align 1, !tbaa !13
  %453 = load i32, ptr %23, align 4, !tbaa !14
  %454 = icmp eq i32 %453, 0
  br i1 %454, label %455, label %464

455:                                              ; preds = %440
  %456 = load i32, ptr %12, align 4, !tbaa !14
  %457 = icmp sgt i32 %456, 0
  br i1 %457, label %461, label %458

458:                                              ; preds = %455
  %459 = load i32, ptr %16, align 4, !tbaa !14
  %460 = icmp ne i32 %459, 0
  br i1 %460, label %461, label %464

461:                                              ; preds = %458, %455
  %462 = load ptr, ptr %14, align 8, !tbaa !9
  %463 = getelementptr inbounds i8, ptr %462, i32 1
  store ptr %463, ptr %14, align 8, !tbaa !9
  store i8 46, ptr %462, align 1, !tbaa !13
  br label %464

464:                                              ; preds = %461, %458, %440
  %465 = load i8, ptr %31, align 1, !tbaa !13
  %466 = sitofp i8 %465 to double
  %467 = load double, ptr %8, align 8, !tbaa !5
  %468 = fsub double %467, %466
  store double %468, ptr %8, align 8, !tbaa !5
  %469 = load double, ptr %8, align 8, !tbaa !5
  %470 = fmul double %469, 1.000000e+01
  store double %470, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #3
  br label %471

471:                                              ; preds = %464
  %472 = load i32, ptr %30, align 4, !tbaa !14
  %473 = add nsw i32 %472, 1
  store i32 %473, ptr %30, align 4, !tbaa !14
  %474 = load i32, ptr %23, align 4, !tbaa !14
  %475 = add nsw i32 %474, -1
  store i32 %475, ptr %23, align 4, !tbaa !14
  br label %435, !llvm.loop !20

476:                                              ; preds = %439
  %477 = load double, ptr %8, align 8, !tbaa !5
  %478 = fcmp oge double %477, 5.000000e+00
  br i1 %478, label %479, label %581

479:                                              ; preds = %476
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  %480 = load ptr, ptr %14, align 8, !tbaa !9
  store ptr %480, ptr %32, align 8, !tbaa !9
  %481 = load ptr, ptr %32, align 8, !tbaa !9
  %482 = getelementptr inbounds i8, ptr %481, i32 -1
  store ptr %482, ptr %32, align 8, !tbaa !9
  br label %483

483:                                              ; preds = %520, %489, %479
  br label %484

484:                                              ; preds = %483
  %485 = load ptr, ptr %32, align 8, !tbaa !9
  %486 = load i8, ptr %485, align 1, !tbaa !13
  %487 = sext i8 %486 to i32
  %488 = icmp eq i32 %487, 46
  br i1 %488, label %489, label %492

489:                                              ; preds = %484
  %490 = load ptr, ptr %32, align 8, !tbaa !9
  %491 = getelementptr inbounds i8, ptr %490, i32 -1
  store ptr %491, ptr %32, align 8, !tbaa !9
  br label %483

492:                                              ; preds = %484
  %493 = load ptr, ptr %32, align 8, !tbaa !9
  %494 = load i8, ptr %493, align 1, !tbaa !13
  %495 = sext i8 %494 to i32
  %496 = icmp slt i32 %495, 48
  br i1 %496, label %502, label %497

497:                                              ; preds = %492
  %498 = load ptr, ptr %32, align 8, !tbaa !9
  %499 = load i8, ptr %498, align 1, !tbaa !13
  %500 = sext i8 %499 to i32
  %501 = icmp sgt i32 %500, 57
  br i1 %501, label %502, label %505

502:                                              ; preds = %497, %492
  %503 = load ptr, ptr %32, align 8, !tbaa !9
  %504 = getelementptr inbounds i8, ptr %503, i32 1
  store ptr %504, ptr %32, align 8, !tbaa !9
  br label %523

505:                                              ; preds = %497
  %506 = load ptr, ptr %32, align 8, !tbaa !9
  %507 = load i8, ptr %506, align 1, !tbaa !13
  %508 = sext i8 %507 to i32
  %509 = icmp slt i32 %508, 57
  br i1 %509, label %510, label %514

510:                                              ; preds = %505
  %511 = load ptr, ptr %32, align 8, !tbaa !9
  %512 = load i8, ptr %511, align 1, !tbaa !13
  %513 = add i8 %512, 1
  store i8 %513, ptr %511, align 1, !tbaa !13
  br label %523

514:                                              ; preds = %505
  %515 = load ptr, ptr %32, align 8, !tbaa !9
  store i8 48, ptr %515, align 1, !tbaa !13
  %516 = load ptr, ptr %32, align 8, !tbaa !9
  %517 = load ptr, ptr %9, align 8, !tbaa !9
  %518 = icmp eq ptr %516, %517
  br i1 %518, label %519, label %520

519:                                              ; preds = %514
  br label %523

520:                                              ; preds = %514
  %521 = load ptr, ptr %32, align 8, !tbaa !9
  %522 = getelementptr inbounds i8, ptr %521, i32 -1
  store ptr %522, ptr %32, align 8, !tbaa !9
  br label %483

523:                                              ; preds = %519, %510, %502
  %524 = load ptr, ptr %32, align 8, !tbaa !9
  %525 = load i8, ptr %524, align 1, !tbaa !13
  %526 = sext i8 %525 to i32
  %527 = icmp eq i32 %526, 48
  br i1 %527, label %528, label %580

528:                                              ; preds = %523
  %529 = load ptr, ptr %32, align 8, !tbaa !9
  %530 = getelementptr inbounds i8, ptr %529, i64 1
  %531 = load i8, ptr %530, align 1, !tbaa !13
  %532 = sext i8 %531 to i32
  %533 = icmp eq i32 %532, 46
  br i1 %533, label %534, label %553

534:                                              ; preds = %528
  %535 = load i8, ptr %11, align 1, !tbaa !13
  %536 = sext i8 %535 to i32
  %537 = icmp ne i32 %536, 102
  br i1 %537, label %538, label %553

538:                                              ; preds = %534
  %539 = load ptr, ptr %32, align 8, !tbaa !9
  %540 = getelementptr inbounds i8, ptr %539, i64 0
  store i8 46, ptr %540, align 1, !tbaa !13
  %541 = load ptr, ptr %32, align 8, !tbaa !9
  %542 = getelementptr inbounds i8, ptr %541, i64 1
  store i8 48, ptr %542, align 1, !tbaa !13
  %543 = load i8, ptr %24, align 1, !tbaa !13
  %544 = sext i8 %543 to i32
  %545 = icmp eq i32 %544, 45
  br i1 %545, label %546, label %549

546:                                              ; preds = %538
  %547 = load i32, ptr %21, align 4, !tbaa !14
  %548 = add nsw i32 %547, -1
  store i32 %548, ptr %21, align 4, !tbaa !14
  br label %552

549:                                              ; preds = %538
  %550 = load i32, ptr %21, align 4, !tbaa !14
  %551 = add nsw i32 %550, 1
  store i32 %551, ptr %21, align 4, !tbaa !14
  br label %552

552:                                              ; preds = %549, %546
  br label %553

553:                                              ; preds = %552, %534, %528
  %554 = load ptr, ptr %14, align 8, !tbaa !9
  %555 = getelementptr inbounds i8, ptr %554, i32 1
  store ptr %555, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  %556 = load ptr, ptr %14, align 8, !tbaa !9
  store ptr %556, ptr %33, align 8, !tbaa !9
  br label %557

557:                                              ; preds = %561, %553
  %558 = load ptr, ptr %33, align 8, !tbaa !9
  %559 = load ptr, ptr %32, align 8, !tbaa !9
  %560 = icmp ugt ptr %558, %559
  br i1 %560, label %561, label %568

561:                                              ; preds = %557
  %562 = load ptr, ptr %33, align 8, !tbaa !9
  %563 = getelementptr inbounds i8, ptr %562, i64 -1
  %564 = load i8, ptr %563, align 1, !tbaa !13
  %565 = load ptr, ptr %33, align 8, !tbaa !9
  store i8 %564, ptr %565, align 1, !tbaa !13
  %566 = load ptr, ptr %33, align 8, !tbaa !9
  %567 = getelementptr inbounds i8, ptr %566, i32 -1
  store ptr %567, ptr %33, align 8, !tbaa !9
  br label %557, !llvm.loop !21

568:                                              ; preds = %557
  %569 = load ptr, ptr %32, align 8, !tbaa !9
  store i8 49, ptr %569, align 1, !tbaa !13
  %570 = load double, ptr %8, align 8, !tbaa !5
  %571 = fcmp olt double %570, 1.000000e+00
  br i1 %571, label %572, label %579

572:                                              ; preds = %568
  %573 = load i8, ptr %11, align 1, !tbaa !13
  %574 = sext i8 %573 to i32
  %575 = icmp eq i32 %574, 102
  br i1 %575, label %576, label %579

576:                                              ; preds = %572
  %577 = load i32, ptr %12, align 4, !tbaa !14
  %578 = add nsw i32 %577, -1
  store i32 %578, ptr %12, align 4, !tbaa !14
  br label %579

579:                                              ; preds = %576, %572, %568
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  br label %580

580:                                              ; preds = %579, %523
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  br label %581

581:                                              ; preds = %580, %476
  %582 = load i8, ptr %20, align 1, !tbaa !13
  %583 = sext i8 %582 to i32
  %584 = icmp eq i32 %583, 103
  br i1 %584, label %585, label %611

585:                                              ; preds = %581
  %586 = load i32, ptr %12, align 4, !tbaa !14
  %587 = icmp sgt i32 %586, 0
  br i1 %587, label %588, label %611

588:                                              ; preds = %585
  %589 = load i32, ptr %16, align 4, !tbaa !14
  %590 = icmp ne i32 %589, 0
  br i1 %590, label %611, label %591

591:                                              ; preds = %588
  br label %592

592:                                              ; preds = %598, %591
  %593 = load ptr, ptr %14, align 8, !tbaa !9
  %594 = getelementptr inbounds i8, ptr %593, i64 -1
  %595 = load i8, ptr %594, align 1, !tbaa !13
  %596 = sext i8 %595 to i32
  %597 = icmp eq i32 %596, 48
  br i1 %597, label %598, label %601

598:                                              ; preds = %592
  %599 = load ptr, ptr %14, align 8, !tbaa !9
  %600 = getelementptr inbounds i8, ptr %599, i32 -1
  store ptr %600, ptr %14, align 8, !tbaa !9
  br label %592, !llvm.loop !22

601:                                              ; preds = %592
  %602 = load ptr, ptr %14, align 8, !tbaa !9
  %603 = getelementptr inbounds i8, ptr %602, i64 -1
  %604 = load i8, ptr %603, align 1, !tbaa !13
  %605 = sext i8 %604 to i32
  %606 = icmp eq i32 %605, 46
  br i1 %606, label %607, label %610

607:                                              ; preds = %601
  %608 = load ptr, ptr %14, align 8, !tbaa !9
  %609 = getelementptr inbounds i8, ptr %608, i32 -1
  store ptr %609, ptr %14, align 8, !tbaa !9
  br label %610

610:                                              ; preds = %607, %601
  br label %611

611:                                              ; preds = %610, %588, %585, %581
  %612 = load i8, ptr %24, align 1, !tbaa !13
  %613 = icmp ne i8 %612, 0
  br i1 %613, label %614, label %645

614:                                              ; preds = %611
  %615 = load i8, ptr %19, align 1, !tbaa !13
  %616 = load ptr, ptr %14, align 8, !tbaa !9
  %617 = getelementptr inbounds i8, ptr %616, i32 1
  store ptr %617, ptr %14, align 8, !tbaa !9
  store i8 %615, ptr %616, align 1, !tbaa !13
  %618 = load i8, ptr %24, align 1, !tbaa !13
  %619 = load ptr, ptr %14, align 8, !tbaa !9
  %620 = getelementptr inbounds i8, ptr %619, i32 1
  store ptr %620, ptr %14, align 8, !tbaa !9
  store i8 %618, ptr %619, align 1, !tbaa !13
  %621 = load i32, ptr %21, align 4, !tbaa !14
  %622 = icmp sge i32 %621, 100
  br i1 %622, label %623, label %632

623:                                              ; preds = %614
  %624 = load i32, ptr %21, align 4, !tbaa !14
  %625 = sdiv i32 %624, 100
  %626 = add nsw i32 48, %625
  %627 = trunc i32 %626 to i8
  %628 = load ptr, ptr %14, align 8, !tbaa !9
  %629 = getelementptr inbounds i8, ptr %628, i32 1
  store ptr %629, ptr %14, align 8, !tbaa !9
  store i8 %627, ptr %628, align 1, !tbaa !13
  %630 = load i32, ptr %21, align 4, !tbaa !14
  %631 = srem i32 %630, 100
  store i32 %631, ptr %21, align 4, !tbaa !14
  br label %632

632:                                              ; preds = %623, %614
  %633 = load i32, ptr %21, align 4, !tbaa !14
  %634 = sdiv i32 %633, 10
  %635 = add nsw i32 48, %634
  %636 = trunc i32 %635 to i8
  %637 = load ptr, ptr %14, align 8, !tbaa !9
  %638 = getelementptr inbounds i8, ptr %637, i32 1
  store ptr %638, ptr %14, align 8, !tbaa !9
  store i8 %636, ptr %637, align 1, !tbaa !13
  %639 = load i32, ptr %21, align 4, !tbaa !14
  %640 = srem i32 %639, 10
  %641 = add nsw i32 48, %640
  %642 = trunc i32 %641 to i8
  %643 = load ptr, ptr %14, align 8, !tbaa !9
  %644 = getelementptr inbounds i8, ptr %643, i32 1
  store ptr %644, ptr %14, align 8, !tbaa !9
  store i8 %642, ptr %643, align 1, !tbaa !13
  br label %645

645:                                              ; preds = %632, %611
  %646 = load ptr, ptr %14, align 8, !tbaa !9
  store i8 0, ptr %646, align 1, !tbaa !13
  %647 = load ptr, ptr %14, align 8, !tbaa !9
  %648 = load ptr, ptr %9, align 8, !tbaa !9
  %649 = ptrtoint ptr %647 to i64
  %650 = ptrtoint ptr %648 to i64
  %651 = sub i64 %649, %650
  %652 = trunc i64 %651 to i32
  store i32 %652, ptr %7, align 4
  store i32 1, ptr %17, align 4
  br label %653

653:                                              ; preds = %645, %155, %62
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  %654 = load i32, ptr %7, align 4
  ret i32 %654
}

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i1 @llvm.is.fpclass.f64(double, i32 immarg) #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind }
attributes #4 = { memory(none) }

!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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !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}


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

@g_pos_pow = external hidden local_unnamed_addr constant [9 x double], align 16
@g_neg_pow = external hidden local_unnamed_addr constant [9 x double], align 16

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local noundef i32 @mrb_format_float(double noundef %0, ptr noundef %1, i64 noundef %2, i8 noundef signext %3, i32 noundef %4, i8 noundef signext %5) local_unnamed_addr #0 {
  %7 = trunc i64 %2 to i32
  %8 = add i32 %7, -1
  %.not = icmp slt i8 %3, 0
  %9 = and i8 %3, 95
  %10 = icmp ult i64 %2, 8
  br i1 %10, label %11, label %18

11:                                               ; preds = %6
  %12 = icmp ugt i64 %2, 1
  br i1 %12, label %.thread, label %14

.thread:                                          ; preds = %11
  %13 = getelementptr inbounds i8, ptr %1, i64 1
  store i8 63, ptr %1, align 1, !tbaa !5
  br label %15

14:                                               ; preds = %11
  %.not301 = icmp eq i64 %2, 0
  br i1 %.not301, label %16, label %15

15:                                               ; preds = %.thread, %14
  %.0268314 = phi ptr [ %13, %.thread ], [ %1, %14 ]
  store i8 0, ptr %.0268314, align 1, !tbaa !5
  br label %16

16:                                               ; preds = %15, %14
  %17 = zext i1 %12 to i32
  br label %298

18:                                               ; preds = %6
  %19 = bitcast double %0 to i64
  %20 = icmp slt i64 %19, 0
  br i1 %20, label %21, label %24

21:                                               ; preds = %18
  %22 = getelementptr inbounds i8, ptr %1, i64 1
  store i8 45, ptr %1, align 1, !tbaa !5
  %23 = fneg double %0
  br label %27

24:                                               ; preds = %18
  %.not293 = icmp eq i8 %5, 0
  br i1 %.not293, label %27, label %25

25:                                               ; preds = %24
  %26 = getelementptr inbounds i8, ptr %1, i64 1
  store i8 %5, ptr %1, align 1, !tbaa !5
  br label %27

27:                                               ; preds = %24, %25, %21
  %.1269 = phi ptr [ %22, %21 ], [ %26, %25 ], [ %1, %24 ]
  %.0242 = phi double [ %23, %21 ], [ %0, %25 ], [ %0, %24 ]
  %28 = ptrtoint ptr %.1269 to i64
  %29 = ptrtoint ptr %1 to i64
  %.neg = sub i64 %29, %28
  %.neg294 = trunc i64 %.neg to i32
  %30 = add i32 %8, %.neg294
  %31 = and i8 %3, 32
  %32 = fcmp oeq double %.0242, 0x7FF0000000000000
  br i1 %32, label %33, label %39

33:                                               ; preds = %27
  %34 = or disjoint i8 %31, 73
  %35 = getelementptr inbounds i8, ptr %.1269, i64 1
  store i8 %34, ptr %.1269, align 1, !tbaa !5
  %36 = or disjoint i8 %31, 78
  %37 = getelementptr inbounds i8, ptr %.1269, i64 2
  store i8 %36, ptr %35, align 1, !tbaa !5
  %38 = or disjoint i8 %31, 70
  store i8 %38, ptr %37, align 1, !tbaa !5
  br label %46

39:                                               ; preds = %27
  %40 = fcmp uno double %.0242, 0.000000e+00
  br i1 %40, label %41, label %50

41:                                               ; preds = %39
  %42 = or disjoint i8 %31, 78
  %43 = getelementptr inbounds i8, ptr %.1269, i64 1
  store i8 %42, ptr %.1269, align 1, !tbaa !5
  %44 = or disjoint i8 %31, 65
  %45 = getelementptr inbounds i8, ptr %.1269, i64 2
  store i8 %44, ptr %43, align 1, !tbaa !5
  store i8 %42, ptr %45, align 1, !tbaa !5
  br label %46

46:                                               ; preds = %33, %41
  %.2270 = getelementptr inbounds i8, ptr %.1269, i64 3
  store i8 0, ptr %.2270, align 1, !tbaa !5
  %47 = ptrtoint ptr %.2270 to i64
  %48 = sub i64 %47, %29
  %49 = trunc i64 %48 to i32
  br label %298

50:                                               ; preds = %39
  %51 = icmp slt i32 %4, 0
  %spec.store.select = select i1 %51, i32 6, i32 %4
  %52 = or disjoint i8 %31, 69
  %53 = or disjoint i8 %9, 32
  %54 = icmp eq i8 %9, 71
  %55 = icmp eq i32 %spec.store.select, 0
  %or.cond = and i1 %54, %55
  %spec.store.select20 = select i1 %or.cond, i32 1, i32 %spec.store.select
  %56 = fcmp oeq double %.0242, 0.000000e+00
  br i1 %56, label %57, label %60

57:                                               ; preds = %50
  switch i8 %53, label %.fold.split [
    i8 101, label %.thread427
    i8 102, label %58
  ]

58:                                               ; preds = %57
  %59 = add nuw nsw i32 %spec.store.select20, 1
  br label %.thread332

60:                                               ; preds = %50
  %61 = fcmp olt double %.0242, 1.000000e+00
  br i1 %61, label %107, label %.preheader371.preheader

.preheader371.preheader:                          ; preds = %60
  %62 = load double, ptr @g_pos_pow, align 16, !tbaa !8
  %63 = fcmp ugt double %62, %.0242
  %64 = load double, ptr @g_neg_pow, align 16
  %65 = select i1 %63, double 1.000000e+00, double %64
  %.5247 = fmul double %.0242, %65
  %.6 = select i1 %63, i32 0, i32 256
  %66 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 8), align 8, !tbaa !8
  %67 = fcmp ugt double %66, %.5247
  %68 = or disjoint i32 %.6, 128
  %69 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 8), align 8
  %70 = fmul double %.5247, %69
  %.5247.1 = select i1 %67, double %.5247, double %70
  %.6.1 = select i1 %67, i32 %.6, i32 %68
  %71 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 16), align 16, !tbaa !8
  %72 = fcmp ugt double %71, %.5247.1
  %73 = or disjoint i32 %.6.1, 64
  %74 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 16), align 16
  %75 = fmul double %.5247.1, %74
  %.5247.2 = select i1 %72, double %.5247.1, double %75
  %.6.2 = select i1 %72, i32 %.6.1, i32 %73
  %76 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 24), align 8, !tbaa !8
  %77 = fcmp ugt double %76, %.5247.2
  %78 = or disjoint i32 %.6.2, 32
  %79 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 24), align 8
  %80 = fmul double %.5247.2, %79
  %.5247.3 = select i1 %77, double %.5247.2, double %80
  %.6.3 = select i1 %77, i32 %.6.2, i32 %78
  %81 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 32), align 16, !tbaa !8
  %82 = fcmp ugt double %81, %.5247.3
  %83 = add nuw nsw i32 %.6.3, 16
  %84 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 32), align 16
  %85 = fmul double %.5247.3, %84
  %.5247.4 = select i1 %82, double %.5247.3, double %85
  %.6.4 = select i1 %82, i32 %.6.3, i32 %83
  %86 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 40), align 8, !tbaa !8
  %87 = fcmp ugt double %86, %.5247.4
  %88 = add nuw nsw i32 %.6.4, 8
  %89 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 40), align 8
  %90 = fmul double %.5247.4, %89
  %.5247.5 = select i1 %87, double %.5247.4, double %90
  %.6.5 = select i1 %87, i32 %.6.4, i32 %88
  %91 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 48), align 16, !tbaa !8
  %92 = fcmp ugt double %91, %.5247.5
  %93 = add nuw nsw i32 %.6.5, 4
  %94 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 48), align 16
  %95 = fmul double %.5247.5, %94
  %.5247.6 = select i1 %92, double %.5247.5, double %95
  %.6.6 = select i1 %92, i32 %.6.5, i32 %93
  %96 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 56), align 8, !tbaa !8
  %97 = fcmp ugt double %96, %.5247.6
  %98 = add nuw nsw i32 %.6.6, 2
  %99 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 56), align 8
  %100 = fmul double %.5247.6, %99
  %.5247.7 = select i1 %97, double %.5247.6, double %100
  %.6.7 = select i1 %97, i32 %.6.6, i32 %98
  %101 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 64), align 16, !tbaa !8
  %102 = fcmp ole double %101, %.5247.7
  %103 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 64), align 16
  %104 = fmul double %.5247.7, %103
  %.5247.8 = select i1 %102, double %104, double %.5247.7
  %105 = zext i1 %102 to i32
  %.6.8 = add nuw nsw i32 %.6.7, %105
  %106 = icmp eq i8 %9, 70
  br i1 %106, label %189, label %198

107:                                              ; preds = %60
  %108 = fcmp ult double %.0242, 0x3FEFFFFFFFFF5014
  %109 = load double, ptr @g_neg_pow, align 16, !tbaa !8
  %110 = fcmp ogt double %109, %.0242
  %111 = load double, ptr @g_pos_pow, align 16
  %112 = select i1 %110, double %111, double 1.000000e+00
  %.2244 = fmul double %.0242, %112
  %.1239 = select i1 %110, i32 256, i32 0
  %113 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 8), align 8, !tbaa !8
  %114 = fcmp ogt double %113, %.2244
  %115 = or disjoint i32 %.1239, 128
  %116 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 8), align 8
  %117 = fmul double %.2244, %116
  %.2244.1 = select i1 %114, double %117, double %.2244
  %.1239.1 = select i1 %114, i32 %115, i32 %.1239
  %118 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 16), align 16, !tbaa !8
  %119 = fcmp ogt double %118, %.2244.1
  %120 = or disjoint i32 %.1239.1, 64
  %121 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 16), align 16
  %122 = fmul double %.2244.1, %121
  %.2244.2 = select i1 %119, double %122, double %.2244.1
  %.1239.2 = select i1 %119, i32 %120, i32 %.1239.1
  %123 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 24), align 8, !tbaa !8
  %124 = fcmp ogt double %123, %.2244.2
  %125 = or disjoint i32 %.1239.2, 32
  %126 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 24), align 8
  %127 = fmul double %.2244.2, %126
  %.2244.3 = select i1 %124, double %127, double %.2244.2
  %.1239.3 = select i1 %124, i32 %125, i32 %.1239.2
  %128 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 32), align 16, !tbaa !8
  %129 = fcmp ogt double %128, %.2244.3
  %130 = add nuw nsw i32 %.1239.3, 16
  %131 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 32), align 16
  %132 = fmul double %.2244.3, %131
  %.2244.4 = select i1 %129, double %132, double %.2244.3
  %.1239.4 = select i1 %129, i32 %130, i32 %.1239.3
  %133 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 40), align 8, !tbaa !8
  %134 = fcmp ogt double %133, %.2244.4
  %135 = add nuw nsw i32 %.1239.4, 8
  %136 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 40), align 8
  %137 = fmul double %.2244.4, %136
  %.2244.5 = select i1 %134, double %137, double %.2244.4
  %.1239.5 = select i1 %134, i32 %135, i32 %.1239.4
  %138 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 48), align 16, !tbaa !8
  %139 = fcmp ogt double %138, %.2244.5
  %140 = add nuw nsw i32 %.1239.5, 4
  %141 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 48), align 16
  %142 = fmul double %.2244.5, %141
  %.2244.6 = select i1 %139, double %142, double %.2244.5
  %.1239.6 = select i1 %139, i32 %140, i32 %.1239.5
  %143 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 56), align 8, !tbaa !8
  %144 = fcmp ogt double %143, %.2244.6
  %145 = add nuw nsw i32 %.1239.6, 2
  %146 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 56), align 8
  %147 = fmul double %.2244.6, %146
  %.2244.7 = select i1 %144, double %147, double %.2244.6
  %.1239.7 = select i1 %144, i32 %145, i32 %.1239.6
  %148 = load double, ptr getelementptr inbounds (i8, ptr @g_neg_pow, i64 64), align 16, !tbaa !8
  %149 = fcmp ogt double %148, %.2244.7
  %150 = load double, ptr getelementptr inbounds (i8, ptr @g_pos_pow, i64 64), align 16
  %151 = fmul double %.2244.7, %150
  %.2244.8 = select i1 %149, double %151, double %.2244.7
  %152 = zext i1 %149 to i32
  %.1239.8 = add nuw nsw i32 %.1239.7, %152
  %.0224 = select i1 %108, i8 48, i8 49
  %153 = fcmp olt double %.2244.8, 1.000000e+00
  br i1 %153, label %154, label %161

154:                                              ; preds = %107
  %155 = fcmp ult double %.2244.8, 0x3FEFFFFFFFFF5014
  br i1 %155, label %158, label %156

156:                                              ; preds = %154
  %157 = icmp eq i32 %.1239.8, 0
  %spec.select303 = select i1 %157, i8 43, i8 45
  br label %161

158:                                              ; preds = %154
  %159 = add nuw nsw i32 %.1239.8, 1
  %160 = fmul double %.2244.8, 1.000000e+01
  br label %161

161:                                              ; preds = %156, %158, %107
  %.3245 = phi double [ %160, %158 ], [ %.2244.8, %107 ], [ 1.000000e+00, %156 ]
  %.2240 = phi i32 [ %159, %158 ], [ %.1239.8, %107 ], [ %.1239.8, %156 ]
  %.0223 = phi i8 [ 45, %158 ], [ 45, %107 ], [ %spec.select303, %156 ]
  %162 = icmp eq i8 %9, 70
  %163 = icmp ult i32 %.2240, 5
  %or.cond3 = select i1 %54, i1 %163, i1 false
  %or.cond304 = select i1 %162, i1 true, i1 %or.cond3
  br i1 %or.cond304, label %164, label %184

164:                                              ; preds = %161
  %165 = getelementptr inbounds i8, ptr %.1269, i64 1
  store i8 %.0224, ptr %.1269, align 1, !tbaa !5
  %166 = add nsw i32 %spec.store.select20, -1
  %167 = add i32 %166, %.2240
  %.0255 = select i1 %54, i32 %167, i32 %spec.store.select
  %168 = add nsw i32 %.0255, 2
  %169 = icmp sgt i32 %168, %30
  %170 = add nsw i32 %30, -2
  %.1256 = select i1 %169, i32 %170, i32 %.0255
  %171 = icmp ne i32 %.1256, 0
  %or.cond5 = or i1 %.not, %171
  br i1 %or.cond5, label %172, label %.thread332

172:                                              ; preds = %164
  %173 = getelementptr i8, ptr %.1269, i64 2
  store i8 46, ptr %165, align 1, !tbaa !5
  %174 = add nsw i32 %.2240, -1
  %175 = icmp ne i32 %174, 0
  %176 = and i1 %175, %171
  br i1 %176, label %.lr.ph.preheader, label %.thread332

.lr.ph.preheader:                                 ; preds = %172
  %smin = tail call i32 @llvm.smin.i32(i32 %30, i32 %168)
  %smin.fr = freeze i32 %smin
  %177 = add i32 %smin.fr, -3
  %178 = add nsw i32 %.2240, -2
  %179 = tail call i32 @llvm.umin.i32(i32 %177, i32 %178)
  %umin = zext i32 %179 to i64
  %180 = add nuw nsw i64 %umin, 1
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(1) %173, i8 48, i64 %180, i1 false), !tbaa !5
  %181 = add nuw nsw i64 %umin, 3
  %scevgep = getelementptr i8, ptr %.1269, i64 %181
  %umin422 = tail call i32 @llvm.umin.i32(i32 %177, i32 %178)
  %182 = sub i32 %177, %umin422
  %183 = sub i32 %178, %umin422
  br label %.thread332

184:                                              ; preds = %161
  %185 = add nsw i32 %30, -7
  %186 = icmp sgt i32 %spec.store.select20, %185
  br i1 %186, label %187, label %.fold.split

187:                                              ; preds = %184
  %188 = add nsw i32 %30, -6
  %spec.select305 = select i1 %54, i32 %188, i32 %185
  br label %.fold.split

189:                                              ; preds = %.preheader371.preheader
  %.not296 = icmp slt i32 %.6.8, %30
  br i1 %.not296, label %191, label %.thread325

.thread325:                                       ; preds = %189
  %190 = add nsw i32 %30, -6
  %spec.select307328 = tail call i32 @llvm.smin.i32(i32 %spec.store.select20, i32 %190)
  br label %.thread320

191:                                              ; preds = %189
  %192 = add nuw i32 %spec.store.select20, 2
  %193 = add nuw i32 %192, %.6.8
  %194 = icmp sgt i32 %193, %30
  br i1 %194, label %195, label %.thread320

195:                                              ; preds = %191
  %196 = sub nsw i32 %30, %.6.8
  %197 = icmp slt i32 %196, 2
  %spec.select306.v = select i1 %197, i32 -1, i32 -2
  %spec.select306 = add nsw i32 %spec.select306.v, %196
  br label %.thread320

198:                                              ; preds = %.preheader371.preheader
  %199 = icmp eq i8 %9, 69
  %200 = add nsw i32 %30, -6
  %spec.select307 = tail call i32 @llvm.smin.i32(i32 %spec.store.select20, i32 %200)
  %spec.select370 = select i1 %199, i32 %spec.select307, i32 %spec.store.select20
  br label %.thread320

.thread320:                                       ; preds = %198, %195, %191, %.thread325
  %.2252324 = phi i8 [ 101, %.thread325 ], [ 102, %191 ], [ 102, %195 ], [ %53, %198 ]
  %201 = phi i32 [ %spec.select307328, %.thread325 ], [ %spec.store.select20, %191 ], [ %spec.select306, %195 ], [ %spec.select370, %198 ]
  %202 = icmp eq i8 %.2252324, 103
  %203 = icmp slt i32 %.6.8, %201
  %or.cond308 = select i1 %202, i1 %203, i1 false
  %.neg297 = xor i32 %.6.8, -1
  %204 = select i1 %or.cond308, i32 %.neg297, i32 0
  %.5260 = add i32 %204, %201
  %205 = icmp eq i8 %.2252324, 102
  %206 = or i1 %205, %or.cond308
  br i1 %206, label %207, label %.fold.split

207:                                              ; preds = %.thread320
  %208 = add nuw nsw i32 %.6.8, 1
  %209 = add i32 %208, %.5260
  br label %.thread332

.thread332:                                       ; preds = %.lr.ph.preheader, %172, %58, %207, %164
  %.6274.ph = phi ptr [ %165, %164 ], [ %.1269, %207 ], [ %.1269, %58 ], [ %173, %172 ], [ %scevgep, %.lr.ph.preheader ]
  %.6261.ph = phi i32 [ 0, %164 ], [ %.5260, %207 ], [ %spec.store.select20, %58 ], [ %.1256, %172 ], [ %.1256, %.lr.ph.preheader ]
  %.6248.ph = phi double [ %.3245, %164 ], [ %.5247.8, %207 ], [ %.0242, %58 ], [ %.3245, %172 ], [ %.3245, %.lr.ph.preheader ]
  %.7.ph = phi i32 [ %.2240, %164 ], [ %.6.8, %207 ], [ 0, %58 ], [ %174, %172 ], [ %183, %.lr.ph.preheader ]
  %.1234.ph = phi i32 [ -1, %164 ], [ %.6.8, %207 ], [ 0, %58 ], [ -1, %172 ], [ -1, %.lr.ph.preheader ]
  %.2.ph = phi i32 [ 0, %164 ], [ %209, %207 ], [ %59, %58 ], [ %.1256, %172 ], [ %182, %.lr.ph.preheader ]
  %spec.store.select6341 = tail call i32 @llvm.smax.i32(i32 %.6261.ph, i32 0)
  br label %213

.fold.split:                                      ; preds = %57, %187, %.thread320, %184
  %.6261 = phi i32 [ %spec.store.select20, %184 ], [ %spec.select305, %187 ], [ %.5260, %.thread320 ], [ %spec.store.select20, %57 ]
  %.4254 = phi i8 [ %53, %184 ], [ %53, %187 ], [ %.2252324, %.thread320 ], [ %53, %57 ]
  %.6248 = phi double [ %.3245, %184 ], [ %.3245, %187 ], [ %.5247.8, %.thread320 ], [ %.0242, %57 ]
  %.7 = phi i32 [ %.2240, %184 ], [ %.2240, %187 ], [ %.6.8, %.thread320 ], [ 0, %57 ]
  %.1232 = phi i8 [ %.0223, %184 ], [ %.0223, %187 ], [ 43, %.thread320 ], [ 0, %57 ]
  %spec.store.select6 = tail call i32 @llvm.smax.i32(i32 %.6261, i32 0)
  switch i8 %.4254, label %._crit_edge [
    i8 101, label %.thread427
    i8 103, label %211
  ]

.thread427:                                       ; preds = %.fold.split, %57
  %spec.store.select6364 = phi i32 [ %spec.store.select6, %.fold.split ], [ %spec.store.select20, %57 ]
  %.1232363 = phi i8 [ %.1232, %.fold.split ], [ 43, %57 ]
  %.7361 = phi i32 [ %.7, %.fold.split ], [ 0, %57 ]
  %.6248360 = phi double [ %.6248, %.fold.split ], [ %.0242, %57 ]
  %210 = add nuw nsw i32 %spec.store.select6364, 1
  br label %.lr.ph396

211:                                              ; preds = %.fold.split
  %212 = icmp slt i32 %.6261, 1
  %spec.store.select7 = select i1 %212, i32 1, i32 %spec.store.select6
  br label %213

213:                                              ; preds = %.thread332, %211
  %.1232347 = phi i8 [ %.1232, %211 ], [ 0, %.thread332 ]
  %.1234346 = phi i32 [ 0, %211 ], [ %.1234.ph, %.thread332 ]
  %.7345 = phi i32 [ %.7, %211 ], [ %.7.ph, %.thread332 ]
  %.6248344 = phi double [ %.6248, %211 ], [ %.6248.ph, %.thread332 ]
  %.4254343 = phi i8 [ 103, %211 ], [ 102, %.thread332 ]
  %.6274342 = phi ptr [ %.1269, %211 ], [ %.6274.ph, %.thread332 ]
  %.7262 = phi i32 [ %spec.store.select7, %211 ], [ %spec.store.select6341, %.thread332 ]
  %.3 = phi i32 [ %spec.store.select7, %211 ], [ %.2.ph, %.thread332 ]
  %214 = icmp sgt i32 %.3, 0
  br i1 %214, label %.lr.ph396, label %._crit_edge

.lr.ph396:                                        ; preds = %.thread427, %213
  %.3447 = phi i32 [ %210, %.thread427 ], [ %.3, %213 ]
  %.7262445 = phi i32 [ %spec.store.select6364, %.thread427 ], [ %.7262, %213 ]
  %.6274342444 = phi ptr [ %.1269, %.thread427 ], [ %.6274342, %213 ]
  %.4254343443 = phi i8 [ 101, %.thread427 ], [ %.4254343, %213 ]
  %.6248344441 = phi double [ %.6248360, %.thread427 ], [ %.6248344, %213 ]
  %.7345440 = phi i32 [ %.7361, %.thread427 ], [ %.7345, %213 ]
  %.1234346438 = phi i32 [ 0, %.thread427 ], [ %.1234346, %213 ]
  %.1232347437 = phi i8 [ %.1232363, %.thread427 ], [ %.1232347, %213 ]
  %215 = icmp ne i32 %.7262445, 0
  %or.cond9 = or i1 %.not, %215
  br label %217

._crit_edge:                                      ; preds = %225, %.fold.split, %213
  %.7262446 = phi i32 [ %.7262, %213 ], [ %spec.store.select6, %.fold.split ], [ %.7262445, %225 ]
  %.4254343442 = phi i8 [ %.4254343, %213 ], [ %.4254, %.fold.split ], [ %.4254343443, %225 ]
  %.7345439 = phi i32 [ %.7345, %213 ], [ %.7, %.fold.split ], [ %.7345440, %225 ]
  %.1232347436 = phi i8 [ %.1232347, %213 ], [ %.1232, %.fold.split ], [ %.1232347437, %225 ]
  %.7275.lcssa = phi ptr [ %.6274342, %213 ], [ %.1269, %.fold.split ], [ %.8276, %225 ]
  %.7249.lcssa = phi double [ %.6248344, %213 ], [ %.6248, %.fold.split ], [ %228, %225 ]
  %.7275.lcssa476 = ptrtoint ptr %.7275.lcssa to i64
  %216 = fcmp ult double %.7249.lcssa, 5.000000e+00
  br i1 %216, label %271, label %.preheader467

217:                                              ; preds = %.lr.ph396, %225
  %.0222395 = phi i32 [ 0, %.lr.ph396 ], [ %229, %225 ]
  %.2235394 = phi i32 [ %.1234346438, %.lr.ph396 ], [ %230, %225 ]
  %.7249393 = phi double [ %.6248344441, %.lr.ph396 ], [ %228, %225 ]
  %.7275392 = phi ptr [ %.6274342444, %.lr.ph396 ], [ %.8276, %225 ]
  %218 = fptosi double %.7249393 to i32
  %.lhs.trunc = trunc i32 %218 to i8
  %219 = srem i8 %.lhs.trunc, 10
  %220 = add nsw i8 %219, 48
  %221 = getelementptr inbounds i8, ptr %.7275392, i64 1
  store i8 %220, ptr %.7275392, align 1, !tbaa !5
  %222 = icmp eq i32 %.2235394, 0
  %or.cond309 = select i1 %222, i1 %or.cond9, i1 false
  br i1 %or.cond309, label %223, label %225

223:                                              ; preds = %217
  %224 = getelementptr inbounds i8, ptr %.7275392, i64 2
  store i8 46, ptr %221, align 1, !tbaa !5
  br label %225

225:                                              ; preds = %223, %217
  %.8276 = phi ptr [ %224, %223 ], [ %221, %217 ]
  %226 = sitofp i8 %219 to double
  %227 = fsub double %.7249393, %226
  %228 = fmul double %227, 1.000000e+01
  %229 = add nuw nsw i32 %.0222395, 1
  %230 = add nsw i32 %.2235394, -1
  %exitcond.not = icmp eq i32 %229, %.3447
  br i1 %exitcond.not, label %._crit_edge, label %217, !llvm.loop !10

.preheader467:                                    ; preds = %._crit_edge, %.backedge
  %.0219.idx = phi i64 [ %.0219.be.idx, %.backedge ], [ -1, %._crit_edge ]
  %.0219.ptr = getelementptr inbounds i8, ptr %.7275.lcssa, i64 %.0219.idx
  %231 = load i8, ptr %.0219.ptr, align 1, !tbaa !5
  %232 = icmp eq i8 %231, 46
  br i1 %232, label %.backedge, label %233

.backedge:                                        ; preds = %237, %.preheader467
  %.0219.be.idx = add nsw i64 %.0219.idx, -1
  br label %.preheader467

233:                                              ; preds = %.preheader467
  %234 = add i8 %231, -58
  %or.cond310 = icmp ult i8 %234, -10
  br i1 %or.cond310, label %239, label %235

235:                                              ; preds = %233
  %.not299 = icmp eq i8 %231, 57
  br i1 %.not299, label %237, label %.thread368

.thread368:                                       ; preds = %235
  %236 = add nuw nsw i8 %231, 1
  store i8 %236, ptr %.0219.ptr, align 1, !tbaa !5
  br label %271

237:                                              ; preds = %235
  store i8 48, ptr %.0219.ptr, align 1, !tbaa !5
  %238 = icmp eq ptr %.0219.ptr, %1
  br i1 %238, label %.thread365, label %.backedge

239:                                              ; preds = %233
  %.0219.add = add nsw i64 %.0219.idx, 1
  %.ptr = getelementptr inbounds i8, ptr %.7275.lcssa, i64 %.0219.add
  %.pr = load i8, ptr %.ptr, align 1, !tbaa !5
  %240 = icmp eq i8 %.pr, 48
  br i1 %240, label %.thread365, label %271

.thread365:                                       ; preds = %237, %239
  %.1367.idx = phi i64 [ %.0219.add, %239 ], [ %.0219.idx, %237 ]
  %.1367.ptr = getelementptr inbounds i8, ptr %.7275.lcssa, i64 %.1367.idx
  %241 = getelementptr inbounds i8, ptr %.1367.ptr, i64 1
  %242 = load i8, ptr %241, align 1, !tbaa !5
  %243 = icmp eq i8 %242, 46
  %244 = icmp ne i8 %.4254343442, 102
  %or.cond12 = and i1 %244, %243
  br i1 %or.cond12, label %245, label %251

245:                                              ; preds = %.thread365
  store i8 46, ptr %.1367.ptr, align 1, !tbaa !5
  store i8 48, ptr %241, align 1, !tbaa !5
  %246 = icmp eq i8 %.1232347436, 45
  br i1 %246, label %247, label %249

247:                                              ; preds = %245
  %248 = add nsw i32 %.7345439, -1
  br label %251

249:                                              ; preds = %245
  %250 = add nsw i32 %.7345439, 1
  br label %251

251:                                              ; preds = %247, %249, %.thread365
  %.8 = phi i32 [ %248, %247 ], [ %250, %249 ], [ %.7345439, %.thread365 ]
  %252 = getelementptr inbounds i8, ptr %.7275.lcssa, i64 1
  %253 = icmp slt i64 %.1367.idx, 1
  br i1 %253, label %iter.check, label %._crit_edge402

iter.check:                                       ; preds = %251
  %254 = add i64 %.1367.idx, %.7275.lcssa476
  %255 = tail call i64 @llvm.usub.sat.i64(i64 %.7275.lcssa476, i64 %254)
  %256 = add i64 %255, 1
  %min.iters.check = icmp ult i64 %256, 4
  br i1 %min.iters.check, label %.lr.ph401.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check478 = icmp ult i64 %256, 16
  br i1 %min.iters.check478, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %256, -16
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = sub i64 0, %index
  %next.gep = getelementptr i8, ptr %252, i64 %offset.idx
  %257 = getelementptr inbounds i8, ptr %next.gep, i64 -16
  %wide.load = load <16 x i8>, ptr %257, align 1, !tbaa !5
  %258 = getelementptr i8, ptr %next.gep, i64 -15
  store <16 x i8> %wide.load, ptr %258, align 1, !tbaa !5
  %index.next = add nuw i64 %index, 16
  %259 = icmp eq i64 %index.next, %n.vec
  br i1 %259, label %middle.block, label %vector.body, !llvm.loop !12

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %256, %n.vec
  br i1 %cmp.n, label %._crit_edge402, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %260 = sub i64 0, %n.vec
  %ind.end482 = getelementptr i8, ptr %252, i64 %260
  %n.vec.remaining = and i64 %256, 12
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph401.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec481 = and i64 %256, -4
  %261 = sub i64 0, %n.vec481
  %ind.end = getelementptr i8, ptr %252, i64 %261
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index483 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next489, %vec.epilog.vector.body ]
  %offset.idx484 = sub i64 0, %index483
  %next.gep485 = getelementptr i8, ptr %252, i64 %offset.idx484
  %262 = getelementptr inbounds i8, ptr %next.gep485, i64 -4
  %wide.load486 = load <4 x i8>, ptr %262, align 1, !tbaa !5
  %263 = getelementptr i8, ptr %next.gep485, i64 -3
  store <4 x i8> %wide.load486, ptr %263, align 1, !tbaa !5
  %index.next489 = add nuw i64 %index483, 4
  %264 = icmp eq i64 %index.next489, %n.vec481
  br i1 %264, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !15

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n490 = icmp eq i64 %256, %n.vec481
  br i1 %cmp.n490, label %._crit_edge402, label %.lr.ph401.preheader

.lr.ph401.preheader:                              ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %.0399.ph = phi ptr [ %252, %iter.check ], [ %ind.end482, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  br label %.lr.ph401

.lr.ph401:                                        ; preds = %.lr.ph401.preheader, %.lr.ph401
  %.0399 = phi ptr [ %265, %.lr.ph401 ], [ %.0399.ph, %.lr.ph401.preheader ]
  %265 = getelementptr inbounds i8, ptr %.0399, i64 -1
  %266 = load i8, ptr %265, align 1, !tbaa !5
  store i8 %266, ptr %.0399, align 1, !tbaa !5
  %267 = icmp ugt ptr %265, %.1367.ptr
  br i1 %267, label %.lr.ph401, label %._crit_edge402, !llvm.loop !16

._crit_edge402:                                   ; preds = %.lr.ph401, %middle.block, %vec.epilog.middle.block, %251
  store i8 49, ptr %.1367.ptr, align 1, !tbaa !5
  %268 = fcmp olt double %.7249.lcssa, 1.000000e+00
  %269 = icmp eq i8 %.4254343442, 102
  %or.cond15 = and i1 %269, %268
  %270 = sext i1 %or.cond15 to i32
  %spec.select311 = add nsw i32 %.7262446, %270
  br label %271

271:                                              ; preds = %.thread368, %239, %._crit_edge402, %._crit_edge
  %.10278 = phi ptr [ %.7275.lcssa, %._crit_edge ], [ %252, %._crit_edge402 ], [ %.7275.lcssa, %239 ], [ %.7275.lcssa, %.thread368 ]
  %.10265 = phi i32 [ %.7262446, %._crit_edge ], [ %spec.select311, %._crit_edge402 ], [ %.7262446, %239 ], [ %.7262446, %.thread368 ]
  %.10 = phi i32 [ %.7345439, %._crit_edge ], [ %.8, %._crit_edge402 ], [ %.7345439, %239 ], [ %.7345439, %.thread368 ]
  %272 = icmp slt i32 %.10265, 1
  %not. = xor i1 %54, true
  %or.cond17 = select i1 %not., i1 true, i1 %272
  %or.cond19 = or i1 %.not, %or.cond17
  br i1 %or.cond19, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %271, %.preheader
  %.11279 = phi ptr [ %273, %.preheader ], [ %.10278, %271 ]
  %273 = getelementptr inbounds i8, ptr %.11279, i64 -1
  %274 = load i8, ptr %273, align 1, !tbaa !5
  switch i8 %274, label %.loopexit.loopexit [
    i8 48, label %.preheader
    i8 46, label %.loopexit
  ]

.loopexit.loopexit:                               ; preds = %.preheader
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader, %.loopexit.loopexit, %271
  %.12 = phi ptr [ %.10278, %271 ], [ %.11279, %.loopexit.loopexit ], [ %273, %.preheader ]
  %.not300 = icmp eq i8 %.1232347436, 0
  br i1 %.not300, label %294, label %275

275:                                              ; preds = %.loopexit
  %276 = getelementptr inbounds i8, ptr %.12, i64 1
  store i8 %52, ptr %.12, align 1, !tbaa !5
  %277 = getelementptr inbounds i8, ptr %.12, i64 2
  store i8 %.1232347436, ptr %276, align 1, !tbaa !5
  %278 = icmp sgt i32 %.10, 99
  br i1 %278, label %279, label %285

279:                                              ; preds = %275
  %280 = udiv i32 %.10, 100
  %281 = trunc i32 %280 to i8
  %282 = add i8 %281, 48
  %283 = getelementptr inbounds i8, ptr %.12, i64 3
  store i8 %282, ptr %277, align 1, !tbaa !5
  %284 = urem i32 %.10, 100
  br label %285

285:                                              ; preds = %279, %275
  %.13 = phi ptr [ %283, %279 ], [ %277, %275 ]
  %.11 = phi i32 [ %284, %279 ], [ %.10, %275 ]
  %286 = sdiv i32 %.11, 10
  %287 = trunc i32 %286 to i8
  %288 = add i8 %287, 48
  %289 = getelementptr inbounds i8, ptr %.13, i64 1
  store i8 %288, ptr %.13, align 1, !tbaa !5
  %290 = srem i32 %.11, 10
  %291 = trunc nsw i32 %290 to i8
  %292 = add nsw i8 %291, 48
  %293 = getelementptr inbounds i8, ptr %.13, i64 2
  store i8 %292, ptr %289, align 1, !tbaa !5
  br label %294

294:                                              ; preds = %285, %.loopexit
  %.14 = phi ptr [ %293, %285 ], [ %.12, %.loopexit ]
  store i8 0, ptr %.14, align 1, !tbaa !5
  %295 = ptrtoint ptr %.14 to i64
  %296 = sub i64 %295, %29
  %297 = trunc i64 %296 to i32
  br label %298

298:                                              ; preds = %46, %294, %16
  %.1221 = phi i32 [ %17, %16 ], [ %297, %294 ], [ %49, %46 ]
  ret i32 %.1221
}

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.usub.sat.i64(i64, i64) #1

attributes #0 = { nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) 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 speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: write) }

!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 = !{!"double", !6, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11, !13, !14}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !11, !13, !14}
!16 = distinct !{!16, !11, !14, !13}


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