; LLVM IR from jingweizhanghuai/Morn :: src/util/morn_universal.ll (CNum)

; 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.1 = external hidden unnamed_addr constant [81 x i8], align 1
@__const._CNum.dic = external hidden unnamed_addr constant [19 x i32], align 16
@__FUNCTION__._CNum = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [21 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
declare dso_local void @m_Exception(i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ...) #1

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: nounwind uwtable
define dso_local void @_CNum(double noundef %0, ptr noundef %1, ptr noundef %2) #1 {
  %4 = alloca double, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca [19 x i32], align 16
  %9 = alloca i64, align 8
  %10 = alloca i32, align 4
  %11 = alloca double, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  store double %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 3, ptr %7, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 76, ptr %8) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %8, ptr align 16 @__const._CNum.dic, i64 76, i1 false)
  %16 = load double, ptr %4, align 8, !tbaa !5
  %17 = fcmp olt double %16, 0.000000e+00
  br i1 %17, label %18, label %30

18:                                               ; preds = %3
  %19 = load ptr, ptr %5, align 8, !tbaa !9
  %20 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %21 = getelementptr inbounds i32, ptr %20, i64 15
  %22 = load i32, ptr %7, align 4, !tbaa !11
  %23 = sext i32 %22 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %19, ptr align 4 %21, i64 %23, i1 false)
  %24 = load i32, ptr %7, align 4, !tbaa !11
  %25 = load ptr, ptr %5, align 8, !tbaa !9
  %26 = sext i32 %24 to i64
  %27 = getelementptr inbounds i8, ptr %25, i64 %26
  store ptr %27, ptr %5, align 8, !tbaa !9
  %28 = load double, ptr %4, align 8, !tbaa !5
  %29 = fsub double 0.000000e+00, %28
  store double %29, ptr %4, align 8, !tbaa !5
  br label %30

30:                                               ; preds = %18, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %31 = load double, ptr %4, align 8, !tbaa !5
  %32 = fptosi double %31 to i64
  store i64 %32, ptr %9, align 8, !tbaa !13
  br label %33

33:                                               ; preds = %30
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %34 = load i64, ptr %9, align 8, !tbaa !13
  %35 = sitofp i64 %34 to double
  %36 = load double, ptr %4, align 8, !tbaa !5
  %37 = fsub double %35, %36
  %38 = fcmp ogt double %37, 0.000000e+00
  br i1 %38, label %39, label %44

39:                                               ; preds = %33
  %40 = load i64, ptr %9, align 8, !tbaa !13
  %41 = sitofp i64 %40 to double
  %42 = load double, ptr %4, align 8, !tbaa !5
  %43 = fsub double %41, %42
  br label %50

44:                                               ; preds = %33
  %45 = load i64, ptr %9, align 8, !tbaa !13
  %46 = sitofp i64 %45 to double
  %47 = load double, ptr %4, align 8, !tbaa !5
  %48 = fsub double %46, %47
  %49 = fsub double 0.000000e+00, %48
  br label %50

50:                                               ; preds = %44, %39
  %51 = phi double [ %43, %39 ], [ %49, %44 ]
  %52 = fcmp ogt double %51, 1.000000e+00
  %53 = zext i1 %52 to i32
  store i32 %53, ptr %10, align 4, !tbaa !11
  %54 = load i32, ptr %10, align 4, !tbaa !11
  %55 = icmp ne i32 %54, 0
  br i1 %55, label %56, label %58

56:                                               ; preds = %50
  %57 = load i32, ptr %10, align 4, !tbaa !11
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %57, i32 noundef -1, ptr noundef @.str.1, i32 noundef 669, ptr noundef @__FUNCTION__._CNum, ptr noundef @.str.7)
  br label %58

58:                                               ; preds = %56, %50
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  br label %59

59:                                               ; preds = %58
  br label %60

60:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %61 = load double, ptr %4, align 8, !tbaa !5
  %62 = load i64, ptr %9, align 8, !tbaa !13
  %63 = sitofp i64 %62 to double
  %64 = fsub double %61, %63
  store double %64, ptr %11, align 8, !tbaa !5
  %65 = load i64, ptr %9, align 8, !tbaa !13
  %66 = icmp sle i64 %65, 10
  br i1 %66, label %67, label %78

67:                                               ; preds = %60
  %68 = load ptr, ptr %5, align 8, !tbaa !9
  %69 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %70 = load i64, ptr %9, align 8, !tbaa !13
  %71 = getelementptr inbounds i32, ptr %69, i64 %70
  %72 = load i32, ptr %7, align 4, !tbaa !11
  %73 = sext i32 %72 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %68, ptr align 4 %71, i64 %73, i1 false)
  %74 = load i32, ptr %7, align 4, !tbaa !11
  %75 = load ptr, ptr %5, align 8, !tbaa !9
  %76 = sext i32 %74 to i64
  %77 = getelementptr inbounds i8, ptr %75, i64 %76
  store ptr %77, ptr %5, align 8, !tbaa !9
  br label %352

78:                                               ; preds = %60
  %79 = load i64, ptr %9, align 8, !tbaa !13
  %80 = icmp slt i64 %79, 20
  br i1 %80, label %81, label %107

81:                                               ; preds = %78
  %82 = load ptr, ptr %6, align 8, !tbaa !9
  %83 = load i32, ptr %82, align 4, !tbaa !11
  %84 = icmp eq i32 %83, 0
  br i1 %84, label %85, label %107

85:                                               ; preds = %81
  %86 = load ptr, ptr %5, align 8, !tbaa !9
  %87 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %88 = getelementptr inbounds i32, ptr %87, i64 10
  %89 = load i32, ptr %7, align 4, !tbaa !11
  %90 = sext i32 %89 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %86, ptr align 4 %88, i64 %90, i1 false)
  %91 = load ptr, ptr %5, align 8, !tbaa !9
  %92 = load i32, ptr %7, align 4, !tbaa !11
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds i8, ptr %91, i64 %93
  %95 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %96 = load i64, ptr %9, align 8, !tbaa !13
  %97 = sub nsw i64 %96, 10
  %98 = getelementptr inbounds i32, ptr %95, i64 %97
  %99 = load i32, ptr %7, align 4, !tbaa !11
  %100 = sext i32 %99 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %94, ptr align 4 %98, i64 %100, i1 false)
  %101 = load i32, ptr %7, align 4, !tbaa !11
  %102 = load i32, ptr %7, align 4, !tbaa !11
  %103 = add nsw i32 %101, %102
  %104 = load ptr, ptr %5, align 8, !tbaa !9
  %105 = sext i32 %103 to i64
  %106 = getelementptr inbounds i8, ptr %104, i64 %105
  store ptr %106, ptr %5, align 8, !tbaa !9
  br label %352

107:                                              ; preds = %81, %78
  %108 = load i64, ptr %9, align 8, !tbaa !13
  %109 = icmp sge i64 %108, 100000000
  br i1 %109, label %110, label %150

110:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %111 = load i64, ptr %9, align 8, !tbaa !13
  %112 = sdiv i64 %111, 100000000
  store i64 %112, ptr %12, align 8, !tbaa !13
  %113 = load i64, ptr %12, align 8, !tbaa !13
  %114 = icmp eq i64 %113, 2
  br i1 %114, label %115, label %125

115:                                              ; preds = %110
  %116 = load ptr, ptr %5, align 8, !tbaa !9
  %117 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %118 = getelementptr inbounds i32, ptr %117, i64 18
  %119 = load i32, ptr %7, align 4, !tbaa !11
  %120 = sext i32 %119 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %116, ptr align 4 %118, i64 %120, i1 false)
  %121 = load i32, ptr %7, align 4, !tbaa !11
  %122 = load ptr, ptr %5, align 8, !tbaa !9
  %123 = sext i32 %121 to i64
  %124 = getelementptr inbounds i8, ptr %122, i64 %123
  store ptr %124, ptr %5, align 8, !tbaa !9
  br label %134

125:                                              ; preds = %110
  %126 = load i64, ptr %12, align 8, !tbaa !13
  %127 = sitofp i64 %126 to double
  %128 = load ptr, ptr %5, align 8, !tbaa !9
  %129 = load ptr, ptr %6, align 8, !tbaa !9
  call void @_CNum(double noundef %127, ptr noundef %128, ptr noundef %129)
  %130 = load ptr, ptr %5, align 8, !tbaa !9
  %131 = call i64 @strlen(ptr noundef %130) #5
  %132 = load ptr, ptr %5, align 8, !tbaa !9
  %133 = getelementptr inbounds i8, ptr %132, i64 %131
  store ptr %133, ptr %5, align 8, !tbaa !9
  br label %134

134:                                              ; preds = %125, %115
  %135 = load ptr, ptr %5, align 8, !tbaa !9
  %136 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %137 = getelementptr inbounds i32, ptr %136, i64 14
  %138 = load i32, ptr %7, align 4, !tbaa !11
  %139 = sext i32 %138 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %135, ptr align 4 %137, i64 %139, i1 false)
  %140 = load ptr, ptr %5, align 8, !tbaa !9
  %141 = load i32, ptr %7, align 4, !tbaa !11
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds i8, ptr %140, i64 %142
  store ptr %143, ptr %5, align 8, !tbaa !9
  %144 = load i64, ptr %9, align 8, !tbaa !13
  %145 = srem i64 %144, 100000000
  store i64 %145, ptr %9, align 8, !tbaa !13
  %146 = load i64, ptr %9, align 8, !tbaa !13
  %147 = icmp ne i64 %146, 0
  %148 = zext i1 %147 to i32
  %149 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 %148, ptr %149, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  br label %150

150:                                              ; preds = %134, %107
  %151 = load i64, ptr %9, align 8, !tbaa !13
  %152 = icmp sge i64 %151, 10000
  br i1 %152, label %153, label %193

153:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  %154 = load i64, ptr %9, align 8, !tbaa !13
  %155 = sdiv i64 %154, 10000
  store i64 %155, ptr %13, align 8, !tbaa !13
  %156 = load i64, ptr %13, align 8, !tbaa !13
  %157 = icmp eq i64 %156, 2
  br i1 %157, label %158, label %168

158:                                              ; preds = %153
  %159 = load ptr, ptr %5, align 8, !tbaa !9
  %160 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %161 = getelementptr inbounds i32, ptr %160, i64 18
  %162 = load i32, ptr %7, align 4, !tbaa !11
  %163 = sext i32 %162 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %159, ptr align 4 %161, i64 %163, i1 false)
  %164 = load i32, ptr %7, align 4, !tbaa !11
  %165 = load ptr, ptr %5, align 8, !tbaa !9
  %166 = sext i32 %164 to i64
  %167 = getelementptr inbounds i8, ptr %165, i64 %166
  store ptr %167, ptr %5, align 8, !tbaa !9
  br label %177

168:                                              ; preds = %153
  %169 = load i64, ptr %13, align 8, !tbaa !13
  %170 = sitofp i64 %169 to double
  %171 = load ptr, ptr %5, align 8, !tbaa !9
  %172 = load ptr, ptr %6, align 8, !tbaa !9
  call void @_CNum(double noundef %170, ptr noundef %171, ptr noundef %172)
  %173 = load ptr, ptr %5, align 8, !tbaa !9
  %174 = call i64 @strlen(ptr noundef %173) #5
  %175 = load ptr, ptr %5, align 8, !tbaa !9
  %176 = getelementptr inbounds i8, ptr %175, i64 %174
  store ptr %176, ptr %5, align 8, !tbaa !9
  br label %177

177:                                              ; preds = %168, %158
  %178 = load ptr, ptr %5, align 8, !tbaa !9
  %179 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %180 = getelementptr inbounds i32, ptr %179, i64 13
  %181 = load i32, ptr %7, align 4, !tbaa !11
  %182 = sext i32 %181 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %178, ptr align 4 %180, i64 %182, i1 false)
  %183 = load ptr, ptr %5, align 8, !tbaa !9
  %184 = load i32, ptr %7, align 4, !tbaa !11
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i8, ptr %183, i64 %185
  store ptr %186, ptr %5, align 8, !tbaa !9
  %187 = load i64, ptr %9, align 8, !tbaa !13
  %188 = srem i64 %187, 10000
  store i64 %188, ptr %9, align 8, !tbaa !13
  %189 = load i64, ptr %9, align 8, !tbaa !13
  %190 = icmp ne i64 %189, 0
  %191 = zext i1 %190 to i32
  %192 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 %191, ptr %192, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  br label %193

193:                                              ; preds = %177, %150
  %194 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 18
  %195 = load i32, ptr %194, align 8, !tbaa !11
  %196 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 2
  store i32 %195, ptr %196, align 8, !tbaa !11
  %197 = load i64, ptr %9, align 8, !tbaa !13
  %198 = icmp sge i64 %197, 1000
  br i1 %198, label %199, label %228

199:                                              ; preds = %193
  %200 = load ptr, ptr %5, align 8, !tbaa !9
  %201 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %202 = load i64, ptr %9, align 8, !tbaa !13
  %203 = sdiv i64 %202, 1000
  %204 = getelementptr inbounds i32, ptr %201, i64 %203
  %205 = load i32, ptr %7, align 4, !tbaa !11
  %206 = sext i32 %205 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %200, ptr align 4 %204, i64 %206, i1 false)
  %207 = load ptr, ptr %5, align 8, !tbaa !9
  %208 = load i32, ptr %7, align 4, !tbaa !11
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i8, ptr %207, i64 %209
  %211 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %212 = getelementptr inbounds i32, ptr %211, i64 12
  %213 = load i32, ptr %7, align 4, !tbaa !11
  %214 = sext i32 %213 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %210, ptr align 4 %212, i64 %214, i1 false)
  %215 = load ptr, ptr %5, align 8, !tbaa !9
  %216 = load i32, ptr %7, align 4, !tbaa !11
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds i8, ptr %215, i64 %217
  %219 = load i32, ptr %7, align 4, !tbaa !11
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds i8, ptr %218, i64 %220
  store ptr %221, ptr %5, align 8, !tbaa !9
  %222 = load i64, ptr %9, align 8, !tbaa !13
  %223 = srem i64 %222, 1000
  store i64 %223, ptr %9, align 8, !tbaa !13
  %224 = load i64, ptr %9, align 8, !tbaa !13
  %225 = icmp ne i64 %224, 0
  %226 = zext i1 %225 to i32
  %227 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 %226, ptr %227, align 4, !tbaa !11
  br label %243

228:                                              ; preds = %193
  %229 = load ptr, ptr %6, align 8, !tbaa !9
  %230 = load i32, ptr %229, align 4, !tbaa !11
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %232, label %242

232:                                              ; preds = %228
  %233 = load ptr, ptr %5, align 8, !tbaa !9
  %234 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %235 = load i32, ptr %7, align 4, !tbaa !11
  %236 = sext i32 %235 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %233, ptr align 16 %234, i64 %236, i1 false)
  %237 = load ptr, ptr %5, align 8, !tbaa !9
  %238 = load i32, ptr %7, align 4, !tbaa !11
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds i8, ptr %237, i64 %239
  store ptr %240, ptr %5, align 8, !tbaa !9
  %241 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 0, ptr %241, align 4, !tbaa !11
  br label %242

242:                                              ; preds = %232, %228
  br label %243

243:                                              ; preds = %242, %199
  %244 = load i64, ptr %9, align 8, !tbaa !13
  %245 = icmp sge i64 %244, 100
  br i1 %245, label %246, label %275

246:                                              ; preds = %243
  %247 = load ptr, ptr %5, align 8, !tbaa !9
  %248 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %249 = load i64, ptr %9, align 8, !tbaa !13
  %250 = sdiv i64 %249, 100
  %251 = getelementptr inbounds i32, ptr %248, i64 %250
  %252 = load i32, ptr %7, align 4, !tbaa !11
  %253 = sext i32 %252 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %247, ptr align 4 %251, i64 %253, i1 false)
  %254 = load ptr, ptr %5, align 8, !tbaa !9
  %255 = load i32, ptr %7, align 4, !tbaa !11
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds i8, ptr %254, i64 %256
  %258 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %259 = getelementptr inbounds i32, ptr %258, i64 11
  %260 = load i32, ptr %7, align 4, !tbaa !11
  %261 = sext i32 %260 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %257, ptr align 4 %259, i64 %261, i1 false)
  %262 = load ptr, ptr %5, align 8, !tbaa !9
  %263 = load i32, ptr %7, align 4, !tbaa !11
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds i8, ptr %262, i64 %264
  %266 = load i32, ptr %7, align 4, !tbaa !11
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i8, ptr %265, i64 %267
  store ptr %268, ptr %5, align 8, !tbaa !9
  %269 = load i64, ptr %9, align 8, !tbaa !13
  %270 = srem i64 %269, 100
  store i64 %270, ptr %9, align 8, !tbaa !13
  %271 = load i64, ptr %9, align 8, !tbaa !13
  %272 = icmp ne i64 %271, 0
  %273 = zext i1 %272 to i32
  %274 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 %273, ptr %274, align 4, !tbaa !11
  br label %290

275:                                              ; preds = %243
  %276 = load ptr, ptr %6, align 8, !tbaa !9
  %277 = load i32, ptr %276, align 4, !tbaa !11
  %278 = icmp ne i32 %277, 0
  br i1 %278, label %279, label %289

279:                                              ; preds = %275
  %280 = load ptr, ptr %5, align 8, !tbaa !9
  %281 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %282 = load i32, ptr %7, align 4, !tbaa !11
  %283 = sext i32 %282 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %280, ptr align 16 %281, i64 %283, i1 false)
  %284 = load ptr, ptr %5, align 8, !tbaa !9
  %285 = load i32, ptr %7, align 4, !tbaa !11
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds i8, ptr %284, i64 %286
  store ptr %287, ptr %5, align 8, !tbaa !9
  %288 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 0, ptr %288, align 4, !tbaa !11
  br label %289

289:                                              ; preds = %279, %275
  br label %290

290:                                              ; preds = %289, %246
  %291 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 17
  %292 = load i32, ptr %291, align 4, !tbaa !11
  %293 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 2
  store i32 %292, ptr %293, align 8, !tbaa !11
  %294 = load i64, ptr %9, align 8, !tbaa !13
  %295 = icmp sge i64 %294, 10
  br i1 %295, label %296, label %322

296:                                              ; preds = %290
  %297 = load ptr, ptr %5, align 8, !tbaa !9
  %298 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %299 = load i64, ptr %9, align 8, !tbaa !13
  %300 = sdiv i64 %299, 10
  %301 = getelementptr inbounds i32, ptr %298, i64 %300
  %302 = load i32, ptr %7, align 4, !tbaa !11
  %303 = sext i32 %302 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %297, ptr align 4 %301, i64 %303, i1 false)
  %304 = load ptr, ptr %5, align 8, !tbaa !9
  %305 = load i32, ptr %7, align 4, !tbaa !11
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds i8, ptr %304, i64 %306
  %308 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %309 = getelementptr inbounds i32, ptr %308, i64 10
  %310 = load i32, ptr %7, align 4, !tbaa !11
  %311 = sext i32 %310 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %307, ptr align 4 %309, i64 %311, i1 false)
  %312 = load ptr, ptr %5, align 8, !tbaa !9
  %313 = load i32, ptr %7, align 4, !tbaa !11
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds i8, ptr %312, i64 %314
  %316 = load i32, ptr %7, align 4, !tbaa !11
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds i8, ptr %315, i64 %317
  store ptr %318, ptr %5, align 8, !tbaa !9
  %319 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 1, ptr %319, align 4, !tbaa !11
  %320 = load i64, ptr %9, align 8, !tbaa !13
  %321 = srem i64 %320, 10
  store i64 %321, ptr %9, align 8, !tbaa !13
  br label %337

322:                                              ; preds = %290
  %323 = load ptr, ptr %6, align 8, !tbaa !9
  %324 = load i32, ptr %323, align 4, !tbaa !11
  %325 = icmp ne i32 %324, 0
  br i1 %325, label %326, label %336

326:                                              ; preds = %322
  %327 = load ptr, ptr %5, align 8, !tbaa !9
  %328 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %329 = load i32, ptr %7, align 4, !tbaa !11
  %330 = sext i32 %329 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %327, ptr align 16 %328, i64 %330, i1 false)
  %331 = load ptr, ptr %5, align 8, !tbaa !9
  %332 = load i32, ptr %7, align 4, !tbaa !11
  %333 = sext i32 %332 to i64
  %334 = getelementptr inbounds i8, ptr %331, i64 %333
  store ptr %334, ptr %5, align 8, !tbaa !9
  %335 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 0, ptr %335, align 4, !tbaa !11
  br label %336

336:                                              ; preds = %326, %322
  br label %337

337:                                              ; preds = %336, %296
  %338 = load i64, ptr %9, align 8, !tbaa !13
  %339 = icmp ne i64 %338, 0
  br i1 %339, label %340, label %351

340:                                              ; preds = %337
  %341 = load ptr, ptr %5, align 8, !tbaa !9
  %342 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %343 = load i64, ptr %9, align 8, !tbaa !13
  %344 = getelementptr inbounds i32, ptr %342, i64 %343
  %345 = load i32, ptr %7, align 4, !tbaa !11
  %346 = sext i32 %345 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %341, ptr align 4 %344, i64 %346, i1 false)
  %347 = load ptr, ptr %5, align 8, !tbaa !9
  %348 = load i32, ptr %7, align 4, !tbaa !11
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i8, ptr %347, i64 %349
  store ptr %350, ptr %5, align 8, !tbaa !9
  br label %351

351:                                              ; preds = %340, %337
  br label %352

352:                                              ; preds = %351, %85, %67
  %353 = load double, ptr %11, align 8, !tbaa !5
  %354 = fcmp ogt double %353, 0x3E7AD7F29ABCAF48
  br i1 %354, label %355, label %427

355:                                              ; preds = %352
  %356 = load ptr, ptr %5, align 8, !tbaa !9
  %357 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %358 = getelementptr inbounds i32, ptr %357, i64 16
  %359 = load i32, ptr %7, align 4, !tbaa !11
  %360 = sext i32 %359 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %356, ptr align 4 %358, i64 %360, i1 false)
  %361 = load ptr, ptr %5, align 8, !tbaa !9
  %362 = load i32, ptr %7, align 4, !tbaa !11
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds i8, ptr %361, i64 %363
  store ptr %364, ptr %5, align 8, !tbaa !9
  %365 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 1, ptr %365, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !11
  br label %366

366:                                              ; preds = %401, %355
  %367 = load i32, ptr %14, align 4, !tbaa !11
  %368 = icmp slt i32 %367, 9
  br i1 %368, label %370, label %369

369:                                              ; preds = %366
  store i32 5, ptr %15, align 4
  br label %404

370:                                              ; preds = %366
  %371 = load double, ptr %11, align 8, !tbaa !5
  %372 = fcmp olt double %371, 0x3E7AD7F29ABCAF48
  br i1 %372, label %373, label %375

373:                                              ; preds = %370
  %374 = load ptr, ptr %6, align 8, !tbaa !9
  store i32 0, ptr %374, align 4, !tbaa !11
  store i32 5, ptr %15, align 4
  br label %404

375:                                              ; preds = %370
  %376 = load double, ptr %11, align 8, !tbaa !5
  %377 = fmul double %376, 1.000000e+01
  store double %377, ptr %11, align 8, !tbaa !5
  %378 = load double, ptr %11, align 8, !tbaa !5
  %379 = fptosi double %378 to i32
  %380 = sext i32 %379 to i64
  store i64 %380, ptr %9, align 8, !tbaa !13
  %381 = load double, ptr %11, align 8, !tbaa !5
  %382 = load i64, ptr %9, align 8, !tbaa !13
  %383 = sitofp i64 %382 to double
  %384 = fsub double %381, %383
  store double %384, ptr %11, align 8, !tbaa !5
  %385 = load double, ptr %11, align 8, !tbaa !5
  %386 = fcmp ogt double %385, 0x3FEFFFFDE7210BE9
  br i1 %386, label %387, label %390

387:                                              ; preds = %375
  %388 = load i64, ptr %9, align 8, !tbaa !13
  %389 = add nsw i64 %388, 1
  store i64 %389, ptr %9, align 8, !tbaa !13
  store double 0.000000e+00, ptr %11, align 8, !tbaa !5
  br label %390

390:                                              ; preds = %387, %375
  %391 = load ptr, ptr %5, align 8, !tbaa !9
  %392 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %393 = load i64, ptr %9, align 8, !tbaa !13
  %394 = getelementptr inbounds i32, ptr %392, i64 %393
  %395 = load i32, ptr %7, align 4, !tbaa !11
  %396 = sext i32 %395 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %391, ptr align 4 %394, i64 %396, i1 false)
  %397 = load ptr, ptr %5, align 8, !tbaa !9
  %398 = load i32, ptr %7, align 4, !tbaa !11
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i8, ptr %397, i64 %399
  store ptr %400, ptr %5, align 8, !tbaa !9
  br label %401

401:                                              ; preds = %390
  %402 = load i32, ptr %14, align 4, !tbaa !11
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %14, align 4, !tbaa !11
  br label %366, !llvm.loop !15

404:                                              ; preds = %373, %369
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %405

405:                                              ; preds = %404
  %406 = load ptr, ptr %6, align 8, !tbaa !9
  %407 = load i32, ptr %406, align 4, !tbaa !11
  %408 = icmp ne i32 %407, 0
  br i1 %408, label %409, label %426

409:                                              ; preds = %405
  %410 = load double, ptr %11, align 8, !tbaa !5
  %411 = fmul double %410, 1.000000e+01
  store double %411, ptr %11, align 8, !tbaa !5
  %412 = load double, ptr %11, align 8, !tbaa !5
  %413 = fadd double %412, 5.000000e-01
  %414 = fptosi double %413 to i32
  %415 = sext i32 %414 to i64
  store i64 %415, ptr %9, align 8, !tbaa !13
  %416 = load ptr, ptr %5, align 8, !tbaa !9
  %417 = getelementptr inbounds [19 x i32], ptr %8, i64 0, i64 0
  %418 = load i64, ptr %9, align 8, !tbaa !13
  %419 = getelementptr inbounds i32, ptr %417, i64 %418
  %420 = load i32, ptr %7, align 4, !tbaa !11
  %421 = sext i32 %420 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %416, ptr align 4 %419, i64 %421, i1 false)
  %422 = load ptr, ptr %5, align 8, !tbaa !9
  %423 = load i32, ptr %7, align 4, !tbaa !11
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds i8, ptr %422, i64 %424
  store ptr %425, ptr %5, align 8, !tbaa !9
  br label %426

426:                                              ; preds = %409, %405
  br label %427

427:                                              ; preds = %426, %352
  %428 = load ptr, ptr %5, align 8, !tbaa !9
  store i8 0, ptr %428, align 1, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 76, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  ret void
}

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

!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 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!7, !7, i64 0}


; 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.1 = external hidden unnamed_addr constant [81 x i8], align 1
@__const._CNum.dic = external hidden unnamed_addr constant [19 x i32], align 16
@__FUNCTION__._CNum = external hidden unnamed_addr constant [6 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [21 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
declare dso_local void @m_Exception(i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: nounwind uwtable
define dso_local void @_CNum(double noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #1 {
  %4 = alloca [19 x i32], align 16
  call void @llvm.lifetime.start.p0(i64 76, ptr nonnull %4) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(76) %4, ptr noundef nonnull align 16 dereferenceable(76) @__const._CNum.dic, i64 76, i1 false)
  %5 = fcmp olt double %0, 0.000000e+00
  br i1 %5, label %6, label %9

6:                                                ; preds = %3
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %1, ptr noundef nonnull align 4 dereferenceable(3) getelementptr inbounds (i8, ptr @__const._CNum.dic, i64 60), i64 3, i1 false)
  %7 = getelementptr inbounds i8, ptr %1, i64 3
  %8 = fsub double 0.000000e+00, %0
  br label %9

9:                                                ; preds = %6, %3
  %.0164 = phi ptr [ %7, %6 ], [ %1, %3 ]
  %.0163 = phi double [ %8, %6 ], [ %0, %3 ]
  %10 = fptosi double %.0163 to i64
  %11 = sitofp i64 %10 to double
  %12 = fsub double %11, %.0163
  %13 = tail call double @llvm.fabs.f64(double %12)
  %14 = fcmp ogt double %13, 1.000000e+00
  br i1 %14, label %15, label %16

15:                                               ; preds = %9
  tail call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef 1, i32 noundef -1, ptr noundef nonnull @.str.1, i32 noundef 669, ptr noundef nonnull @__FUNCTION__._CNum, ptr noundef nonnull @.str.7)
  br label %16

16:                                               ; preds = %15, %9
  %17 = fsub double %.0163, %11
  %18 = icmp slt i64 %10, 11
  br i1 %18, label %19, label %22

19:                                               ; preds = %16
  %20 = getelementptr inbounds i32, ptr %4, i64 %10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.0164, ptr noundef nonnull align 4 dereferenceable(3) %20, i64 3, i1 false)
  %21 = getelementptr inbounds i8, ptr %.0164, i64 3
  br label %121

22:                                               ; preds = %16
  %23 = icmp ult i64 %10, 20
  br i1 %23, label %24, label %35

24:                                               ; preds = %22
  %25 = load i32, ptr %2, align 4, !tbaa !5
  %26 = icmp eq i32 %25, 0
  br i1 %26, label %30, label %.thread

.thread:                                          ; preds = %24
  %27 = getelementptr inbounds i8, ptr %4, i64 72
  %28 = load i32, ptr %27, align 8, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %4, i64 8
  store i32 %28, ptr %29, align 8, !tbaa !5
  br label %84

30:                                               ; preds = %24
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.0164, ptr noundef nonnull align 8 dereferenceable(3) getelementptr inbounds (i8, ptr @__const._CNum.dic, i64 40), i64 3, i1 false)
  %31 = getelementptr inbounds i8, ptr %.0164, i64 3
  %32 = getelementptr i32, ptr %4, i64 %10
  %33 = getelementptr i8, ptr %32, i64 -40
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %31, ptr noundef nonnull align 4 dereferenceable(3) %33, i64 3, i1 false)
  %34 = getelementptr inbounds i8, ptr %.0164, i64 6
  br label %121

35:                                               ; preds = %22
  %36 = icmp ugt i64 %10, 99999999
  br i1 %36, label %37, label %50

37:                                               ; preds = %35
  %.off = add nsw i64 %10, -200000000
  %38 = icmp ult i64 %.off, 100000000
  br i1 %38, label %39, label %40

39:                                               ; preds = %37
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.0164, ptr noundef nonnull align 8 dereferenceable(3) getelementptr inbounds (i8, ptr @__const._CNum.dic, i64 72), i64 3, i1 false)
  br label %44

40:                                               ; preds = %37
  %41 = udiv i64 %10, 100000000
  %42 = uitofp nneg i64 %41 to double
  tail call void @_CNum(double noundef %42, ptr noundef %.0164, ptr noundef %2)
  %43 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.0164) #6
  br label %44

44:                                               ; preds = %40, %39
  %.sink = phi i64 [ %43, %40 ], [ 3, %39 ]
  %45 = getelementptr inbounds i8, ptr %.0164, i64 %.sink
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %45, ptr noundef nonnull align 8 dereferenceable(3) getelementptr inbounds (i8, ptr @__const._CNum.dic, i64 56), i64 3, i1 false)
  %46 = getelementptr inbounds i8, ptr %45, i64 3
  %47 = urem i64 %10, 100000000
  %48 = icmp ne i64 %47, 0
  %49 = zext i1 %48 to i32
  store i32 %49, ptr %2, align 4, !tbaa !5
  br label %50

50:                                               ; preds = %44, %35
  %.0167 = phi i64 [ %47, %44 ], [ %10, %35 ]
  %.2 = phi ptr [ %46, %44 ], [ %.0164, %35 ]
  %51 = icmp ugt i64 %.0167, 9999
  br i1 %51, label %52, label %67

52:                                               ; preds = %50
  %.0167.off = add nsw i64 %.0167, -20000
  %53 = icmp ult i64 %.0167.off, 10000
  br i1 %53, label %54, label %56

54:                                               ; preds = %52
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.2, ptr noundef nonnull align 8 dereferenceable(3) getelementptr inbounds (i8, ptr @__const._CNum.dic, i64 72), i64 3, i1 false)
  %55 = getelementptr inbounds i8, ptr %.2, i64 3
  %.pre219 = trunc nuw i64 %.0167 to i32
  br label %61

56:                                               ; preds = %52
  %.lhs.trunc209 = trunc nuw i64 %.0167 to i32
  %57 = udiv i32 %.lhs.trunc209, 10000
  %58 = uitofp nneg i32 %57 to double
  tail call void @_CNum(double noundef %58, ptr noundef %.2, ptr noundef %2)
  %59 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %.2) #6
  %60 = getelementptr inbounds i8, ptr %.2, i64 %59
  br label %61

61:                                               ; preds = %56, %54
  %.lhs.trunc203.pre-phi = phi i32 [ %.lhs.trunc209, %56 ], [ %.pre219, %54 ]
  %.3 = phi ptr [ %60, %56 ], [ %55, %54 ]
  %62 = getelementptr inbounds i8, ptr %4, i64 52
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.3, ptr noundef nonnull align 4 dereferenceable(3) %62, i64 3, i1 false)
  %63 = getelementptr inbounds i8, ptr %.3, i64 3
  %64 = urem i32 %.lhs.trunc203.pre-phi, 10000
  %.zext204 = zext nneg i32 %64 to i64
  %65 = icmp ne i32 %64, 0
  %66 = zext i1 %65 to i32
  store i32 %66, ptr %2, align 4, !tbaa !5
  br label %67

67:                                               ; preds = %61, %50
  %.1168 = phi i64 [ %.zext204, %61 ], [ %.0167, %50 ]
  %.4 = phi ptr [ %63, %61 ], [ %.2, %50 ]
  %68 = getelementptr inbounds i8, ptr %4, i64 72
  %69 = load i32, ptr %68, align 8, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %4, i64 8
  store i32 %69, ptr %70, align 8, !tbaa !5
  %71 = icmp ugt i64 %.1168, 999
  br i1 %71, label %72, label %82

72:                                               ; preds = %67
  %.lhs.trunc205 = trunc i64 %.1168 to i16
  %73 = udiv i16 %.lhs.trunc205, 1000
  %.zext206 = zext nneg i16 %73 to i64
  %74 = getelementptr inbounds i32, ptr %4, i64 %.zext206
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.4, ptr noundef nonnull align 4 dereferenceable(3) %74, i64 3, i1 false)
  %75 = getelementptr inbounds i8, ptr %.4, i64 3
  %76 = getelementptr inbounds i8, ptr %4, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %75, ptr noundef nonnull align 16 dereferenceable(3) %76, i64 3, i1 false)
  %77 = getelementptr inbounds i8, ptr %.4, i64 6
  %78 = urem i16 %.lhs.trunc205, 1000
  %.zext208 = zext nneg i16 %78 to i64
  %79 = icmp ne i16 %78, 0
  %80 = zext i1 %79 to i32
  store i32 %80, ptr %2, align 4, !tbaa !5
  %81 = xor i1 %79, true
  br label %87

82:                                               ; preds = %67
  %.pre = load i32, ptr %2, align 4, !tbaa !5
  %83 = icmp eq i32 %.pre, 0
  br i1 %83, label %87, label %84

84:                                               ; preds = %.thread, %82
  %.1168193224 = phi i64 [ %10, %.thread ], [ %.1168, %82 ]
  %.4194223 = phi ptr [ %.0164, %.thread ], [ %.4, %82 ]
  %85 = phi ptr [ %29, %.thread ], [ %70, %82 ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.4194223, ptr noundef nonnull align 16 dereferenceable(3) %4, i64 3, i1 false)
  %86 = getelementptr inbounds i8, ptr %.4194223, i64 3
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %87

87:                                               ; preds = %82, %84, %72
  %.not183 = phi i1 [ %81, %72 ], [ true, %84 ], [ true, %82 ]
  %88 = phi ptr [ %70, %72 ], [ %85, %84 ], [ %70, %82 ]
  %.2169 = phi i64 [ %.zext208, %72 ], [ %.1168193224, %84 ], [ %.1168, %82 ]
  %.5 = phi ptr [ %77, %72 ], [ %86, %84 ], [ %.4, %82 ]
  %89 = icmp ugt i64 %.2169, 99
  br i1 %89, label %90, label %99

90:                                               ; preds = %87
  %.lhs.trunc = trunc i64 %.2169 to i16
  %91 = udiv i16 %.lhs.trunc, 100
  %.zext = zext nneg i16 %91 to i64
  %92 = getelementptr inbounds i32, ptr %4, i64 %.zext
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.5, ptr noundef nonnull align 4 dereferenceable(3) %92, i64 3, i1 false)
  %93 = getelementptr inbounds i8, ptr %.5, i64 3
  %94 = getelementptr inbounds i8, ptr %4, i64 44
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %93, ptr noundef nonnull align 4 dereferenceable(3) %94, i64 3, i1 false)
  %95 = getelementptr inbounds i8, ptr %.5, i64 6
  %96 = urem i16 %.lhs.trunc, 100
  %.zext198 = zext nneg i16 %96 to i64
  %97 = icmp ne i16 %96, 0
  %98 = zext i1 %97 to i32
  br label %.sink.split

99:                                               ; preds = %87
  br i1 %.not183, label %102, label %100

100:                                              ; preds = %99
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.5, ptr noundef nonnull align 16 dereferenceable(3) %4, i64 3, i1 false)
  %101 = getelementptr inbounds i8, ptr %.5, i64 3
  br label %.sink.split

.sink.split:                                      ; preds = %90, %100
  %.sink225 = phi i32 [ 0, %100 ], [ %98, %90 ]
  %.3170.ph = phi i64 [ %.2169, %100 ], [ %.zext198, %90 ]
  %.6.ph = phi ptr [ %101, %100 ], [ %95, %90 ]
  store i32 %.sink225, ptr %2, align 4, !tbaa !5
  br label %102

102:                                              ; preds = %.sink.split, %99
  %.3170 = phi i64 [ %.2169, %99 ], [ %.3170.ph, %.sink.split ]
  %.6 = phi ptr [ %.5, %99 ], [ %.6.ph, %.sink.split ]
  %103 = getelementptr inbounds i8, ptr %4, i64 68
  %104 = load i32, ptr %103, align 4, !tbaa !5
  store i32 %104, ptr %88, align 8, !tbaa !5
  %105 = icmp ugt i64 %.3170, 9
  br i1 %105, label %106, label %113

106:                                              ; preds = %102
  %.lhs.trunc199 = trunc i64 %.3170 to i8
  %107 = udiv i8 %.lhs.trunc199, 10
  %.zext200 = zext nneg i8 %107 to i64
  %108 = getelementptr inbounds i32, ptr %4, i64 %.zext200
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.6, ptr noundef nonnull align 4 dereferenceable(3) %108, i64 3, i1 false)
  %109 = getelementptr inbounds i8, ptr %.6, i64 3
  %110 = getelementptr inbounds i8, ptr %4, i64 40
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %109, ptr noundef nonnull align 8 dereferenceable(3) %110, i64 3, i1 false)
  %111 = getelementptr inbounds i8, ptr %.6, i64 6
  store i32 1, ptr %2, align 4, !tbaa !5
  %112 = urem i8 %.lhs.trunc199, 10
  %.zext202 = zext nneg i8 %112 to i64
  br label %117

113:                                              ; preds = %102
  %114 = load i32, ptr %2, align 4, !tbaa !5
  %.not184 = icmp eq i32 %114, 0
  br i1 %.not184, label %117, label %115

115:                                              ; preds = %113
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.6, ptr noundef nonnull align 16 dereferenceable(3) %4, i64 3, i1 false)
  %116 = getelementptr inbounds i8, ptr %.6, i64 3
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %117

117:                                              ; preds = %113, %115, %106
  %.4171 = phi i64 [ %.zext202, %106 ], [ %.3170, %115 ], [ %.3170, %113 ]
  %.7 = phi ptr [ %111, %106 ], [ %116, %115 ], [ %.6, %113 ]
  %.not185 = icmp eq i64 %.4171, 0
  br i1 %.not185, label %121, label %118

118:                                              ; preds = %117
  %119 = getelementptr inbounds i32, ptr %4, i64 %.4171
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.7, ptr noundef nonnull align 4 dereferenceable(3) %119, i64 3, i1 false)
  %120 = getelementptr inbounds i8, ptr %.7, i64 3
  br label %121

121:                                              ; preds = %117, %118, %30, %19
  %.8 = phi ptr [ %21, %19 ], [ %34, %30 ], [ %120, %118 ], [ %.7, %117 ]
  %122 = fcmp ogt double %17, 0x3E7AD7F29ABCAF48
  br i1 %122, label %123, label %232

123:                                              ; preds = %121
  %124 = getelementptr inbounds i8, ptr %4, i64 64
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.8, ptr noundef nonnull align 16 dereferenceable(3) %124, i64 3, i1 false)
  store i32 1, ptr %2, align 4, !tbaa !5
  %.9214 = getelementptr inbounds i8, ptr %.8, i64 3
  %125 = fcmp olt double %17, 0x3E7AD7F29ABCAF48
  br i1 %125, label %.thread195, label %126

.thread195:                                       ; preds = %203, %192, %181, %170, %159, %148, %137, %126, %123
  %.9217.lcssa = phi ptr [ %.9214, %123 ], [ %.9, %126 ], [ %.9.1, %137 ], [ %.9.2, %148 ], [ %.9.3, %159 ], [ %.9.4, %170 ], [ %.9.5, %181 ], [ %.9.6, %192 ], [ %.9.7, %203 ]
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %232

126:                                              ; preds = %123
  %127 = fmul double %17, 1.000000e+01
  %128 = fptosi double %127 to i32
  %129 = sext i32 %128 to i64
  %130 = sitofp i32 %128 to double
  %131 = fsub double %127, %130
  %132 = fcmp ogt double %131, 0x3FEFFFFDE7210BE9
  %133 = zext i1 %132 to i64
  %.1166 = select i1 %132, double 0.000000e+00, double %131
  %134 = getelementptr i32, ptr %4, i64 %129
  %135 = getelementptr i32, ptr %134, i64 %133
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9214, ptr noundef nonnull align 4 dereferenceable(3) %135, i64 3, i1 false)
  %.9 = getelementptr inbounds i8, ptr %.8, i64 6
  %136 = fcmp olt double %.1166, 0x3E7AD7F29ABCAF48
  br i1 %136, label %.thread195, label %137

137:                                              ; preds = %126
  %138 = fmul double %.1166, 1.000000e+01
  %139 = fptosi double %138 to i32
  %140 = sext i32 %139 to i64
  %141 = sitofp i32 %139 to double
  %142 = fsub double %138, %141
  %143 = fcmp ogt double %142, 0x3FEFFFFDE7210BE9
  %144 = zext i1 %143 to i64
  %.1166.1 = select i1 %143, double 0.000000e+00, double %142
  %145 = getelementptr i32, ptr %4, i64 %140
  %146 = getelementptr i32, ptr %145, i64 %144
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9, ptr noundef nonnull align 4 dereferenceable(3) %146, i64 3, i1 false)
  %.9.1 = getelementptr inbounds i8, ptr %.8, i64 9
  %147 = fcmp olt double %.1166.1, 0x3E7AD7F29ABCAF48
  br i1 %147, label %.thread195, label %148

148:                                              ; preds = %137
  %149 = fmul double %.1166.1, 1.000000e+01
  %150 = fptosi double %149 to i32
  %151 = sext i32 %150 to i64
  %152 = sitofp i32 %150 to double
  %153 = fsub double %149, %152
  %154 = fcmp ogt double %153, 0x3FEFFFFDE7210BE9
  %155 = zext i1 %154 to i64
  %.1166.2 = select i1 %154, double 0.000000e+00, double %153
  %156 = getelementptr i32, ptr %4, i64 %151
  %157 = getelementptr i32, ptr %156, i64 %155
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.1, ptr noundef nonnull align 4 dereferenceable(3) %157, i64 3, i1 false)
  %.9.2 = getelementptr inbounds i8, ptr %.8, i64 12
  %158 = fcmp olt double %.1166.2, 0x3E7AD7F29ABCAF48
  br i1 %158, label %.thread195, label %159

159:                                              ; preds = %148
  %160 = fmul double %.1166.2, 1.000000e+01
  %161 = fptosi double %160 to i32
  %162 = sext i32 %161 to i64
  %163 = sitofp i32 %161 to double
  %164 = fsub double %160, %163
  %165 = fcmp ogt double %164, 0x3FEFFFFDE7210BE9
  %166 = zext i1 %165 to i64
  %.1166.3 = select i1 %165, double 0.000000e+00, double %164
  %167 = getelementptr i32, ptr %4, i64 %162
  %168 = getelementptr i32, ptr %167, i64 %166
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.2, ptr noundef nonnull align 4 dereferenceable(3) %168, i64 3, i1 false)
  %.9.3 = getelementptr inbounds i8, ptr %.8, i64 15
  %169 = fcmp olt double %.1166.3, 0x3E7AD7F29ABCAF48
  br i1 %169, label %.thread195, label %170

170:                                              ; preds = %159
  %171 = fmul double %.1166.3, 1.000000e+01
  %172 = fptosi double %171 to i32
  %173 = sext i32 %172 to i64
  %174 = sitofp i32 %172 to double
  %175 = fsub double %171, %174
  %176 = fcmp ogt double %175, 0x3FEFFFFDE7210BE9
  %177 = zext i1 %176 to i64
  %.1166.4 = select i1 %176, double 0.000000e+00, double %175
  %178 = getelementptr i32, ptr %4, i64 %173
  %179 = getelementptr i32, ptr %178, i64 %177
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.3, ptr noundef nonnull align 4 dereferenceable(3) %179, i64 3, i1 false)
  %.9.4 = getelementptr inbounds i8, ptr %.8, i64 18
  %180 = fcmp olt double %.1166.4, 0x3E7AD7F29ABCAF48
  br i1 %180, label %.thread195, label %181

181:                                              ; preds = %170
  %182 = fmul double %.1166.4, 1.000000e+01
  %183 = fptosi double %182 to i32
  %184 = sext i32 %183 to i64
  %185 = sitofp i32 %183 to double
  %186 = fsub double %182, %185
  %187 = fcmp ogt double %186, 0x3FEFFFFDE7210BE9
  %188 = zext i1 %187 to i64
  %.1166.5 = select i1 %187, double 0.000000e+00, double %186
  %189 = getelementptr i32, ptr %4, i64 %184
  %190 = getelementptr i32, ptr %189, i64 %188
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.4, ptr noundef nonnull align 4 dereferenceable(3) %190, i64 3, i1 false)
  %.9.5 = getelementptr inbounds i8, ptr %.8, i64 21
  %191 = fcmp olt double %.1166.5, 0x3E7AD7F29ABCAF48
  br i1 %191, label %.thread195, label %192

192:                                              ; preds = %181
  %193 = fmul double %.1166.5, 1.000000e+01
  %194 = fptosi double %193 to i32
  %195 = sext i32 %194 to i64
  %196 = sitofp i32 %194 to double
  %197 = fsub double %193, %196
  %198 = fcmp ogt double %197, 0x3FEFFFFDE7210BE9
  %199 = zext i1 %198 to i64
  %.1166.6 = select i1 %198, double 0.000000e+00, double %197
  %200 = getelementptr i32, ptr %4, i64 %195
  %201 = getelementptr i32, ptr %200, i64 %199
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.5, ptr noundef nonnull align 4 dereferenceable(3) %201, i64 3, i1 false)
  %.9.6 = getelementptr inbounds i8, ptr %.8, i64 24
  %202 = fcmp olt double %.1166.6, 0x3E7AD7F29ABCAF48
  br i1 %202, label %.thread195, label %203

203:                                              ; preds = %192
  %204 = fmul double %.1166.6, 1.000000e+01
  %205 = fptosi double %204 to i32
  %206 = sext i32 %205 to i64
  %207 = sitofp i32 %205 to double
  %208 = fsub double %204, %207
  %209 = fcmp ogt double %208, 0x3FEFFFFDE7210BE9
  %210 = zext i1 %209 to i64
  %.1166.7 = select i1 %209, double 0.000000e+00, double %208
  %211 = getelementptr i32, ptr %4, i64 %206
  %212 = getelementptr i32, ptr %211, i64 %210
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.6, ptr noundef nonnull align 4 dereferenceable(3) %212, i64 3, i1 false)
  %.9.7 = getelementptr inbounds i8, ptr %.8, i64 27
  %213 = fcmp olt double %.1166.7, 0x3E7AD7F29ABCAF48
  br i1 %213, label %.thread195, label %214

214:                                              ; preds = %203
  %215 = fmul double %.1166.7, 1.000000e+01
  %216 = fptosi double %215 to i32
  %217 = sext i32 %216 to i64
  %218 = sitofp i32 %216 to double
  %219 = fsub double %215, %218
  %220 = fcmp ogt double %219, 0x3FEFFFFDE7210BE9
  %221 = zext i1 %220 to i64
  %222 = getelementptr i32, ptr %4, i64 %217
  %223 = getelementptr i32, ptr %222, i64 %221
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.7, ptr noundef nonnull align 4 dereferenceable(3) %223, i64 3, i1 false)
  %.9.8 = getelementptr inbounds i8, ptr %.8, i64 30
  %.pr = load i32, ptr %2, align 4, !tbaa !5
  %.not186 = icmp eq i32 %.pr, 0
  br i1 %.not186, label %232, label %224

224:                                              ; preds = %214
  %225 = fmul double %219, 1.000000e+01
  %226 = fadd double %225, 5.000000e-01
  %227 = select i1 %220, double 5.000000e-01, double %226
  %228 = fptosi double %227 to i32
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds i32, ptr %4, i64 %229
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %.9.8, ptr noundef nonnull align 4 dereferenceable(3) %230, i64 3, i1 false)
  %231 = getelementptr inbounds i8, ptr %.8, i64 33
  br label %232

232:                                              ; preds = %.thread195, %214, %224, %121
  %.10 = phi ptr [ %231, %224 ], [ %.9.8, %214 ], [ %.8, %121 ], [ %.9217.lcssa, %.thread195 ]
  store i8 0, ptr %.10, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 76, ptr nonnull %4) #5
  ret void
}

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LoopRotatePass,MemCpyOptPass,SROAPass,SimplifyCFGPass,TailCallElimPass