; LLVM IR from miloyip/dtoa-benchmark :: src/gay (dtoa)

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

%union.U = type { [2 x i64] }
%struct.BCinfo = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.Bigint = type { ptr, i32, i32, i32, i32, [1 x i64] }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@tens = external hidden constant [23 x double], align 16
@bigtens = external hidden constant [5 x double], align 16
@tinytens = external hidden constant [5 x double], align 16

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

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

; Function Attrs: nounwind uwtable
declare hidden void @Bfree(ptr noundef) #0

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #2

; Function Attrs: nounwind uwtable
declare hidden ptr @Balloc(i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @lshift(ptr noundef, i32 noundef) #0

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

; Function Attrs: nounwind uwtable
define dso_local double @strtod(ptr noundef nonnull %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca i64, align 8
  %32 = alloca %union.U, align 8
  %33 = alloca %union.U, align 8
  %34 = alloca %union.U, align 8
  %35 = alloca %union.U, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca %struct.BCinfo, align 4
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca ptr, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.start.p0(i64 44, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  store i32 0, ptr %47, align 4, !tbaa !9
  %48 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 10
  store i32 0, ptr %48, align 4, !tbaa !11
  %49 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 2
  store i32 0, ptr %49, align 4, !tbaa !13
  store i32 0, ptr %22, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %25, align 4, !tbaa !9
  store double 0.000000e+00, ptr %34, align 8, !tbaa !14
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %50, ptr %26, align 8, !tbaa !5
  br label %51

51:                                               ; preds = %66, %2
  %52 = load ptr, ptr %26, align 8, !tbaa !5
  %53 = load i8, ptr %52, align 1, !tbaa !14
  %54 = sext i8 %53 to i32
  switch i32 %54, label %65 [
    i32 45, label %55
    i32 43, label %56
    i32 0, label %63
    i32 9, label %64
    i32 10, label %64
    i32 11, label %64
    i32 12, label %64
    i32 13, label %64
    i32 32, label %64
  ]

55:                                               ; preds = %51
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %56

56:                                               ; preds = %55, %51
  %57 = load ptr, ptr %26, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i32 1
  store ptr %58, ptr %26, align 8, !tbaa !5
  %59 = load i8, ptr %58, align 1, !tbaa !14
  %60 = icmp ne i8 %59, 0
  br i1 %60, label %61, label %62

61:                                               ; preds = %56
  br label %69

62:                                               ; preds = %56
  br label %63

63:                                               ; preds = %62, %51
  br label %434

64:                                               ; preds = %51, %51, %51, %51, %51, %51
  br label %66

65:                                               ; preds = %51
  br label %69

66:                                               ; preds = %64
  %67 = load ptr, ptr %26, align 8, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %67, i32 1
  store ptr %68, ptr %26, align 8, !tbaa !5
  br label %51

69:                                               ; preds = %65, %61
  %70 = load ptr, ptr %26, align 8, !tbaa !5
  %71 = load i8, ptr %70, align 1, !tbaa !14
  %72 = sext i8 %71 to i32
  %73 = icmp eq i32 %72, 48
  br i1 %73, label %74, label %95

74:                                               ; preds = %69
  %75 = load ptr, ptr %26, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %75, i64 1
  %77 = load i8, ptr %76, align 1, !tbaa !14
  %78 = sext i8 %77 to i32
  switch i32 %78, label %81 [
    i32 120, label %79
    i32 88, label %79
  ]

79:                                               ; preds = %74, %74
  %80 = load i32, ptr %25, align 4, !tbaa !9
  call void @gethex(ptr noundef %26, ptr noundef %34, i32 noundef 1, i32 noundef %80)
  br label %1465

81:                                               ; preds = %74
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %88, %81
  %83 = load ptr, ptr %26, align 8, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %83, i32 1
  store ptr %84, ptr %26, align 8, !tbaa !5
  %85 = load i8, ptr %84, align 1, !tbaa !14
  %86 = sext i8 %85 to i32
  %87 = icmp eq i32 %86, 48
  br i1 %87, label %88, label %89

88:                                               ; preds = %82
  br label %82, !llvm.loop !15

89:                                               ; preds = %82
  %90 = load ptr, ptr %26, align 8, !tbaa !5
  %91 = load i8, ptr %90, align 1, !tbaa !14
  %92 = icmp ne i8 %91, 0
  br i1 %92, label %94, label %93

93:                                               ; preds = %89
  br label %1465

94:                                               ; preds = %89
  br label %95

95:                                               ; preds = %94, %69
  %96 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %96, ptr %27, align 8, !tbaa !5
  store i64 0, ptr %37, align 8, !tbaa !17
  store i64 0, ptr %36, align 8, !tbaa !17
  store i32 0, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %97

97:                                               ; preds = %129, %95
  %98 = load ptr, ptr %26, align 8, !tbaa !5
  %99 = load i8, ptr %98, align 1, !tbaa !14
  %100 = sext i8 %99 to i32
  store i32 %100, ptr %12, align 4, !tbaa !9
  %101 = icmp sge i32 %100, 48
  br i1 %101, label %102, label %105

102:                                              ; preds = %97
  %103 = load i32, ptr %12, align 4, !tbaa !9
  %104 = icmp sle i32 %103, 57
  br label %105

105:                                              ; preds = %102, %97
  %106 = phi i1 [ false, %97 ], [ %104, %102 ]
  br i1 %106, label %107, label %134

107:                                              ; preds = %105
  %108 = load i32, ptr %19, align 4, !tbaa !9
  %109 = icmp slt i32 %108, 9
  br i1 %109, label %110, label %117

110:                                              ; preds = %107
  %111 = load i64, ptr %36, align 8, !tbaa !17
  %112 = mul i64 10, %111
  %113 = load i32, ptr %12, align 4, !tbaa !9
  %114 = sext i32 %113 to i64
  %115 = add i64 %112, %114
  %116 = sub i64 %115, 48
  store i64 %116, ptr %36, align 8, !tbaa !17
  br label %128

117:                                              ; preds = %107
  %118 = load i32, ptr %19, align 4, !tbaa !9
  %119 = icmp slt i32 %118, 17
  br i1 %119, label %120, label %127

120:                                              ; preds = %117
  %121 = load i64, ptr %37, align 8, !tbaa !17
  %122 = mul i64 10, %121
  %123 = load i32, ptr %12, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = add i64 %122, %124
  %126 = sub i64 %125, 48
  store i64 %126, ptr %37, align 8, !tbaa !17
  br label %127

127:                                              ; preds = %120, %117
  br label %128

128:                                              ; preds = %127, %110
  br label %129

129:                                              ; preds = %128
  %130 = load i32, ptr %19, align 4, !tbaa !9
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %19, align 4, !tbaa !9
  %132 = load ptr, ptr %26, align 8, !tbaa !5
  %133 = getelementptr inbounds i8, ptr %132, i32 1
  store ptr %133, ptr %26, align 8, !tbaa !5
  br label %97, !llvm.loop !19

134:                                              ; preds = %105
  %135 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %135, ptr %20, align 4, !tbaa !9
  %136 = load ptr, ptr %26, align 8, !tbaa !5
  %137 = load ptr, ptr %27, align 8, !tbaa !5
  %138 = ptrtoint ptr %136 to i64
  %139 = ptrtoint ptr %137 to i64
  %140 = sub i64 %138, %139
  %141 = trunc i64 %140 to i32
  %142 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 1
  store i32 %141, ptr %142, align 4, !tbaa !20
  %143 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 0
  store i32 %141, ptr %143, align 4, !tbaa !21
  %144 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %144, ptr %28, align 8, !tbaa !5
  br label %145

145:                                              ; preds = %157, %134
  %146 = load ptr, ptr %28, align 8, !tbaa !5
  %147 = load ptr, ptr %27, align 8, !tbaa !5
  %148 = icmp ugt ptr %146, %147
  br i1 %148, label %149, label %155

149:                                              ; preds = %145
  %150 = load ptr, ptr %28, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i32 -1
  store ptr %151, ptr %28, align 8, !tbaa !5
  %152 = load i8, ptr %151, align 1, !tbaa !14
  %153 = sext i8 %152 to i32
  %154 = icmp eq i32 %153, 48
  br label %155

155:                                              ; preds = %149, %145
  %156 = phi i1 [ false, %145 ], [ %154, %149 ]
  br i1 %156, label %157, label %160

157:                                              ; preds = %155
  %158 = load i32, ptr %24, align 4, !tbaa !9
  %159 = add nsw i32 %158, 1
  store i32 %159, ptr %24, align 4, !tbaa !9
  br label %145, !llvm.loop !22

160:                                              ; preds = %155
  %161 = load i32, ptr %12, align 4, !tbaa !9
  %162 = icmp eq i32 %161, 46
  br i1 %162, label %163, label %290

163:                                              ; preds = %160
  %164 = load ptr, ptr %26, align 8, !tbaa !5
  %165 = getelementptr inbounds i8, ptr %164, i32 1
  store ptr %165, ptr %26, align 8, !tbaa !5
  %166 = load i8, ptr %165, align 1, !tbaa !14
  %167 = sext i8 %166 to i32
  store i32 %167, ptr %12, align 4, !tbaa !9
  %168 = load ptr, ptr %26, align 8, !tbaa !5
  %169 = load ptr, ptr %27, align 8, !tbaa !5
  %170 = ptrtoint ptr %168 to i64
  %171 = ptrtoint ptr %169 to i64
  %172 = sub i64 %170, %171
  %173 = trunc i64 %172 to i32
  %174 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 1
  store i32 %173, ptr %174, align 4, !tbaa !20
  %175 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 1
  %176 = load i32, ptr %175, align 4, !tbaa !20
  %177 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 0
  %178 = load i32, ptr %177, align 4, !tbaa !21
  %179 = sub nsw i32 %176, %178
  %180 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 2
  store i32 %179, ptr %180, align 4, !tbaa !13
  %181 = load i32, ptr %19, align 4, !tbaa !9
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %220, label %183

183:                                              ; preds = %163
  br label %184

184:                                              ; preds = %190, %183
  %185 = load i32, ptr %12, align 4, !tbaa !9
  %186 = icmp eq i32 %185, 48
  br i1 %186, label %187, label %195

187:                                              ; preds = %184
  %188 = load i32, ptr %22, align 4, !tbaa !9
  %189 = add nsw i32 %188, 1
  store i32 %189, ptr %22, align 4, !tbaa !9
  br label %190

190:                                              ; preds = %187
  %191 = load ptr, ptr %26, align 8, !tbaa !5
  %192 = getelementptr inbounds i8, ptr %191, i32 1
  store ptr %192, ptr %26, align 8, !tbaa !5
  %193 = load i8, ptr %192, align 1, !tbaa !14
  %194 = sext i8 %193 to i32
  store i32 %194, ptr %12, align 4, !tbaa !9
  br label %184, !llvm.loop !23

195:                                              ; preds = %184
  %196 = load i32, ptr %12, align 4, !tbaa !9
  %197 = icmp sgt i32 %196, 48
  br i1 %197, label %198, label %219

198:                                              ; preds = %195
  %199 = load i32, ptr %12, align 4, !tbaa !9
  %200 = icmp sle i32 %199, 57
  br i1 %200, label %201, label %219

201:                                              ; preds = %198
  %202 = load ptr, ptr %27, align 8, !tbaa !5
  %203 = load ptr, ptr %26, align 8, !tbaa !5
  %204 = ptrtoint ptr %202 to i64
  %205 = ptrtoint ptr %203 to i64
  %206 = sub i64 %204, %205
  %207 = trunc i64 %206 to i32
  %208 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 0
  store i32 %207, ptr %208, align 4, !tbaa !21
  %209 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 0
  %210 = load i32, ptr %209, align 4, !tbaa !21
  %211 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 2
  %212 = load i32, ptr %211, align 4, !tbaa !13
  %213 = add nsw i32 %210, %212
  %214 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 1
  store i32 %213, ptr %214, align 4, !tbaa !20
  %215 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %215, ptr %27, align 8, !tbaa !5
  %216 = load i32, ptr %22, align 4, !tbaa !9
  %217 = load i32, ptr %21, align 4, !tbaa !9
  %218 = add nsw i32 %217, %216
  store i32 %218, ptr %21, align 4, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %230

219:                                              ; preds = %198, %195
  br label %291

220:                                              ; preds = %163
  br label %221

221:                                              ; preds = %284, %220
  %222 = load i32, ptr %12, align 4, !tbaa !9
  %223 = icmp sge i32 %222, 48
  br i1 %223, label %224, label %227

224:                                              ; preds = %221
  %225 = load i32, ptr %12, align 4, !tbaa !9
  %226 = icmp sle i32 %225, 57
  br label %227

227:                                              ; preds = %224, %221
  %228 = phi i1 [ false, %221 ], [ %226, %224 ]
  br i1 %228, label %229, label %289

229:                                              ; preds = %227
  br label %230

230:                                              ; preds = %229, %201
  %231 = load i32, ptr %22, align 4, !tbaa !9
  %232 = add nsw i32 %231, 1
  store i32 %232, ptr %22, align 4, !tbaa !9
  %233 = load i32, ptr %12, align 4, !tbaa !9
  %234 = sub nsw i32 %233, 48
  store i32 %234, ptr %12, align 4, !tbaa !9
  %235 = icmp ne i32 %234, 0
  br i1 %235, label %236, label %283

236:                                              ; preds = %230
  %237 = load i32, ptr %22, align 4, !tbaa !9
  %238 = load i32, ptr %21, align 4, !tbaa !9
  %239 = add nsw i32 %238, %237
  store i32 %239, ptr %21, align 4, !tbaa !9
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %240

240:                                              ; preds = %259, %236
  %241 = load i32, ptr %16, align 4, !tbaa !9
  %242 = load i32, ptr %22, align 4, !tbaa !9
  %243 = icmp slt i32 %241, %242
  br i1 %243, label %244, label %262

244:                                              ; preds = %240
  %245 = load i32, ptr %19, align 4, !tbaa !9
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr %19, align 4, !tbaa !9
  %247 = icmp slt i32 %245, 9
  br i1 %247, label %248, label %251

248:                                              ; preds = %244
  %249 = load i64, ptr %36, align 8, !tbaa !17
  %250 = mul i64 %249, 10
  store i64 %250, ptr %36, align 8, !tbaa !17
  br label %258

251:                                              ; preds = %244
  %252 = load i32, ptr %19, align 4, !tbaa !9
  %253 = icmp sle i32 %252, 17
  br i1 %253, label %254, label %257

254:                                              ; preds = %251
  %255 = load i64, ptr %37, align 8, !tbaa !17
  %256 = mul i64 %255, 10
  store i64 %256, ptr %37, align 8, !tbaa !17
  br label %257

257:                                              ; preds = %254, %251
  br label %258

258:                                              ; preds = %257, %248
  br label %259

259:                                              ; preds = %258
  %260 = load i32, ptr %16, align 4, !tbaa !9
  %261 = add nsw i32 %260, 1
  store i32 %261, ptr %16, align 4, !tbaa !9
  br label %240, !llvm.loop !24

262:                                              ; preds = %240
  %263 = load i32, ptr %19, align 4, !tbaa !9
  %264 = add nsw i32 %263, 1
  store i32 %264, ptr %19, align 4, !tbaa !9
  %265 = icmp slt i32 %263, 9
  br i1 %265, label %266, label %272

266:                                              ; preds = %262
  %267 = load i64, ptr %36, align 8, !tbaa !17
  %268 = mul i64 10, %267
  %269 = load i32, ptr %12, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = add i64 %268, %270
  store i64 %271, ptr %36, align 8, !tbaa !17
  br label %282

272:                                              ; preds = %262
  %273 = load i32, ptr %19, align 4, !tbaa !9
  %274 = icmp sle i32 %273, 17
  br i1 %274, label %275, label %281

275:                                              ; preds = %272
  %276 = load i64, ptr %37, align 8, !tbaa !17
  %277 = mul i64 10, %276
  %278 = load i32, ptr %12, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = add i64 %277, %279
  store i64 %280, ptr %37, align 8, !tbaa !17
  br label %281

281:                                              ; preds = %275, %272
  br label %282

282:                                              ; preds = %281, %266
  store i32 0, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %282, %230
  br label %284

284:                                              ; preds = %283
  %285 = load ptr, ptr %26, align 8, !tbaa !5
  %286 = getelementptr inbounds i8, ptr %285, i32 1
  store ptr %286, ptr %26, align 8, !tbaa !5
  %287 = load i8, ptr %286, align 1, !tbaa !14
  %288 = sext i8 %287 to i32
  store i32 %288, ptr %12, align 4, !tbaa !9
  br label %221, !llvm.loop !25

289:                                              ; preds = %227
  br label %290

290:                                              ; preds = %289, %160
  br label %291

291:                                              ; preds = %290, %219
  store i32 0, ptr %13, align 4, !tbaa !9
  %292 = load i32, ptr %12, align 4, !tbaa !9
  %293 = icmp eq i32 %292, 101
  br i1 %293, label %297, label %294

294:                                              ; preds = %291
  %295 = load i32, ptr %12, align 4, !tbaa !9
  %296 = icmp eq i32 %295, 69
  br i1 %296, label %297, label %389

297:                                              ; preds = %294, %291
  %298 = load i32, ptr %19, align 4, !tbaa !9
  %299 = icmp ne i32 %298, 0
  br i1 %299, label %307, label %300

300:                                              ; preds = %297
  %301 = load i32, ptr %22, align 4, !tbaa !9
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %307, label %303

303:                                              ; preds = %300
  %304 = load i32, ptr %23, align 4, !tbaa !9
  %305 = icmp ne i32 %304, 0
  br i1 %305, label %307, label %306

306:                                              ; preds = %303
  br label %434

307:                                              ; preds = %303, %300, %297
  %308 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %308, ptr %3, align 8, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !9
  %309 = load ptr, ptr %26, align 8, !tbaa !5
  %310 = getelementptr inbounds i8, ptr %309, i32 1
  store ptr %310, ptr %26, align 8, !tbaa !5
  %311 = load i8, ptr %310, align 1, !tbaa !14
  %312 = sext i8 %311 to i32
  store i32 %312, ptr %12, align 4, !tbaa !9
  switch i32 %312, label %319 [
    i32 45, label %313
    i32 43, label %314
  ]

313:                                              ; preds = %307
  store i32 1, ptr %15, align 4, !tbaa !9
  br label %314

314:                                              ; preds = %313, %307
  %315 = load ptr, ptr %26, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %315, i32 1
  store ptr %316, ptr %26, align 8, !tbaa !5
  %317 = load i8, ptr %316, align 1, !tbaa !14
  %318 = sext i8 %317 to i32
  store i32 %318, ptr %12, align 4, !tbaa !9
  br label %319

319:                                              ; preds = %314, %307
  %320 = load i32, ptr %12, align 4, !tbaa !9
  %321 = icmp sge i32 %320, 48
  br i1 %321, label %322, label %386

322:                                              ; preds = %319
  %323 = load i32, ptr %12, align 4, !tbaa !9
  %324 = icmp sle i32 %323, 57
  br i1 %324, label %325, label %386

325:                                              ; preds = %322
  br label %326

326:                                              ; preds = %329, %325
  %327 = load i32, ptr %12, align 4, !tbaa !9
  %328 = icmp eq i32 %327, 48
  br i1 %328, label %329, label %334

329:                                              ; preds = %326
  %330 = load ptr, ptr %26, align 8, !tbaa !5
  %331 = getelementptr inbounds i8, ptr %330, i32 1
  store ptr %331, ptr %26, align 8, !tbaa !5
  %332 = load i8, ptr %331, align 1, !tbaa !14
  %333 = sext i8 %332 to i32
  store i32 %333, ptr %12, align 4, !tbaa !9
  br label %326, !llvm.loop !26

334:                                              ; preds = %326
  %335 = load i32, ptr %12, align 4, !tbaa !9
  %336 = icmp sgt i32 %335, 48
  br i1 %336, label %337, label %384

337:                                              ; preds = %334
  %338 = load i32, ptr %12, align 4, !tbaa !9
  %339 = icmp sle i32 %338, 57
  br i1 %339, label %340, label %384

340:                                              ; preds = %337
  %341 = load i32, ptr %12, align 4, !tbaa !9
  %342 = sub nsw i32 %341, 48
  %343 = sext i32 %342 to i64
  store i64 %343, ptr %31, align 8, !tbaa !17
  %344 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %344, ptr %28, align 8, !tbaa !5
  br label %345

345:                                              ; preds = %356, %340
  %346 = load ptr, ptr %26, align 8, !tbaa !5
  %347 = getelementptr inbounds i8, ptr %346, i32 1
  store ptr %347, ptr %26, align 8, !tbaa !5
  %348 = load i8, ptr %347, align 1, !tbaa !14
  %349 = sext i8 %348 to i32
  store i32 %349, ptr %12, align 4, !tbaa !9
  %350 = icmp sge i32 %349, 48
  br i1 %350, label %351, label %354

351:                                              ; preds = %345
  %352 = load i32, ptr %12, align 4, !tbaa !9
  %353 = icmp sle i32 %352, 57
  br label %354

354:                                              ; preds = %351, %345
  %355 = phi i1 [ false, %345 ], [ %353, %351 ]
  br i1 %355, label %356, label %363

356:                                              ; preds = %354
  %357 = load i64, ptr %31, align 8, !tbaa !17
  %358 = mul nsw i64 10, %357
  %359 = load i32, ptr %12, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = add nsw i64 %358, %360
  %362 = sub nsw i64 %361, 48
  store i64 %362, ptr %31, align 8, !tbaa !17
  br label %345, !llvm.loop !27

363:                                              ; preds = %354
  %364 = load ptr, ptr %26, align 8, !tbaa !5
  %365 = load ptr, ptr %28, align 8, !tbaa !5
  %366 = ptrtoint ptr %364 to i64
  %367 = ptrtoint ptr %365 to i64
  %368 = sub i64 %366, %367
  %369 = icmp sgt i64 %368, 8
  br i1 %369, label %373, label %370

370:                                              ; preds = %363
  %371 = load i64, ptr %31, align 8, !tbaa !17
  %372 = icmp sgt i64 %371, 19999
  br i1 %372, label %373, label %374

373:                                              ; preds = %370, %363
  store i32 19999, ptr %13, align 4, !tbaa !9
  br label %377

374:                                              ; preds = %370
  %375 = load i64, ptr %31, align 8, !tbaa !17
  %376 = trunc i64 %375 to i32
  store i32 %376, ptr %13, align 4, !tbaa !9
  br label %377

377:                                              ; preds = %374, %373
  %378 = load i32, ptr %15, align 4, !tbaa !9
  %379 = icmp ne i32 %378, 0
  br i1 %379, label %380, label %383

380:                                              ; preds = %377
  %381 = load i32, ptr %13, align 4, !tbaa !9
  %382 = sub nsw i32 0, %381
  store i32 %382, ptr %13, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %380, %377
  br label %385

384:                                              ; preds = %337, %334
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %385

385:                                              ; preds = %384, %383
  br label %388

386:                                              ; preds = %322, %319
  %387 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %387, ptr %26, align 8, !tbaa !5
  br label %388

388:                                              ; preds = %386, %385
  br label %389

389:                                              ; preds = %388, %294
  %390 = load i32, ptr %19, align 4, !tbaa !9
  %391 = icmp ne i32 %390, 0
  br i1 %391, label %437, label %392

392:                                              ; preds = %389
  %393 = load i32, ptr %22, align 4, !tbaa !9
  %394 = icmp ne i32 %393, 0
  br i1 %394, label %436, label %395

395:                                              ; preds = %392
  %396 = load i32, ptr %23, align 4, !tbaa !9
  %397 = icmp ne i32 %396, 0
  br i1 %397, label %436, label %398

398:                                              ; preds = %395
  %399 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 2
  %400 = load i32, ptr %399, align 4, !tbaa !13
  %401 = icmp ne i32 %400, 0
  br i1 %401, label %433, label %402

402:                                              ; preds = %398
  %403 = load i32, ptr %12, align 4, !tbaa !9
  switch i32 %403, label %432 [
    i32 105, label %404
    i32 73, label %404
    i32 110, label %419
    i32 78, label %419
  ]

404:                                              ; preds = %402, %402
  %405 = call i32 @match(ptr noundef %26, ptr noundef @.str)
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %407, label %418

407:                                              ; preds = %404
  %408 = load ptr, ptr %26, align 8, !tbaa !5
  %409 = getelementptr inbounds i8, ptr %408, i32 -1
  store ptr %409, ptr %26, align 8, !tbaa !5
  %410 = call i32 @match(ptr noundef %26, ptr noundef @.str.1)
  %411 = icmp ne i32 %410, 0
  br i1 %411, label %415, label %412

412:                                              ; preds = %407
  %413 = load ptr, ptr %26, align 8, !tbaa !5
  %414 = getelementptr inbounds i8, ptr %413, i32 1
  store ptr %414, ptr %26, align 8, !tbaa !5
  br label %415

415:                                              ; preds = %412, %407
  %416 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 2146435072, ptr %416, align 8, !tbaa !14
  %417 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 0, ptr %417, align 8, !tbaa !14
  br label %1465

418:                                              ; preds = %404
  br label %432

419:                                              ; preds = %402, %402
  %420 = call i32 @match(ptr noundef %26, ptr noundef @.str.2)
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %422, label %431

422:                                              ; preds = %419
  %423 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 2146959360, ptr %423, align 8, !tbaa !14
  %424 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 0, ptr %424, align 8, !tbaa !14
  %425 = load ptr, ptr %26, align 8, !tbaa !5
  %426 = load i8, ptr %425, align 1, !tbaa !14
  %427 = sext i8 %426 to i32
  %428 = icmp eq i32 %427, 40
  br i1 %428, label %429, label %430

429:                                              ; preds = %422
  call void @hexnan(ptr noundef %34, ptr noundef %26)
  br label %430

430:                                              ; preds = %429, %422
  br label %1465

431:                                              ; preds = %419
  br label %432

432:                                              ; preds = %431, %418, %402
  br label %433

433:                                              ; preds = %432, %398
  br label %434

434:                                              ; preds = %433, %306, %63
  %435 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %435, ptr %26, align 8, !tbaa !5
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %436

436:                                              ; preds = %434, %395, %392
  br label %1465

437:                                              ; preds = %389
  %438 = load i32, ptr %21, align 4, !tbaa !9
  %439 = load i32, ptr %13, align 4, !tbaa !9
  %440 = sub nsw i32 %439, %438
  store i32 %440, ptr %13, align 4, !tbaa !9
  store i32 %440, ptr %14, align 4, !tbaa !9
  %441 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 4
  store i32 %440, ptr %441, align 4, !tbaa !28
  %442 = load i32, ptr %20, align 4, !tbaa !9
  %443 = icmp ne i32 %442, 0
  br i1 %443, label %446, label %444

444:                                              ; preds = %437
  %445 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %445, ptr %20, align 4, !tbaa !9
  br label %446

446:                                              ; preds = %444, %437
  %447 = load i32, ptr %19, align 4, !tbaa !9
  %448 = icmp slt i32 %447, 17
  br i1 %448, label %449, label %451

449:                                              ; preds = %446
  %450 = load i32, ptr %19, align 4, !tbaa !9
  br label %452

451:                                              ; preds = %446
  br label %452

452:                                              ; preds = %451, %449
  %453 = phi i32 [ %450, %449 ], [ 17, %451 ]
  store i32 %453, ptr %18, align 4, !tbaa !9
  %454 = load i64, ptr %36, align 8, !tbaa !17
  %455 = uitofp i64 %454 to double
  store double %455, ptr %34, align 8, !tbaa !14
  %456 = load i32, ptr %18, align 4, !tbaa !9
  %457 = icmp sgt i32 %456, 9
  br i1 %457, label %458, label %468

458:                                              ; preds = %452
  %459 = load i32, ptr %18, align 4, !tbaa !9
  %460 = sub nsw i32 %459, 9
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %461
  %463 = load double, ptr %462, align 8, !tbaa !29
  %464 = load double, ptr %34, align 8, !tbaa !14
  %465 = load i64, ptr %37, align 8, !tbaa !17
  %466 = uitofp i64 %465 to double
  %467 = call double @llvm.fmuladd.f64(double %463, double %464, double %466)
  store double %467, ptr %34, align 8, !tbaa !14
  br label %468

468:                                              ; preds = %458, %452
  store ptr null, ptr %42, align 8, !tbaa !5
  %469 = load i32, ptr %19, align 4, !tbaa !9
  %470 = icmp sle i32 %469, 15
  br i1 %470, label %471, label %528

471:                                              ; preds = %468
  %472 = call i32 @llvm.get.rounding()
  %473 = icmp eq i32 %472, 1
  br i1 %473, label %474, label %528

474:                                              ; preds = %471
  %475 = load i32, ptr %13, align 4, !tbaa !9
  %476 = icmp ne i32 %475, 0
  br i1 %476, label %478, label %477

477:                                              ; preds = %474
  br label %1465

478:                                              ; preds = %474
  %479 = load i32, ptr %13, align 4, !tbaa !9
  %480 = icmp sgt i32 %479, 0
  br i1 %480, label %481, label %515

481:                                              ; preds = %478
  %482 = load i32, ptr %13, align 4, !tbaa !9
  %483 = icmp sle i32 %482, 22
  br i1 %483, label %484, label %491

484:                                              ; preds = %481
  %485 = load i32, ptr %13, align 4, !tbaa !9
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %486
  %488 = load double, ptr %487, align 8, !tbaa !29
  %489 = load double, ptr %34, align 8, !tbaa !14
  %490 = fmul double %489, %488
  store double %490, ptr %34, align 8, !tbaa !14
  br label %1465

491:                                              ; preds = %481
  %492 = load i32, ptr %19, align 4, !tbaa !9
  %493 = sub nsw i32 15, %492
  store i32 %493, ptr %16, align 4, !tbaa !9
  %494 = load i32, ptr %13, align 4, !tbaa !9
  %495 = load i32, ptr %16, align 4, !tbaa !9
  %496 = add nsw i32 22, %495
  %497 = icmp sle i32 %494, %496
  br i1 %497, label %498, label %514

498:                                              ; preds = %491
  %499 = load i32, ptr %16, align 4, !tbaa !9
  %500 = load i32, ptr %13, align 4, !tbaa !9
  %501 = sub nsw i32 %500, %499
  store i32 %501, ptr %13, align 4, !tbaa !9
  %502 = load i32, ptr %16, align 4, !tbaa !9
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %503
  %505 = load double, ptr %504, align 8, !tbaa !29
  %506 = load double, ptr %34, align 8, !tbaa !14
  %507 = fmul double %506, %505
  store double %507, ptr %34, align 8, !tbaa !14
  %508 = load i32, ptr %13, align 4, !tbaa !9
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !29
  %512 = load double, ptr %34, align 8, !tbaa !14
  %513 = fmul double %512, %511
  store double %513, ptr %34, align 8, !tbaa !14
  br label %1465

514:                                              ; preds = %491
  br label %527

515:                                              ; preds = %478
  %516 = load i32, ptr %13, align 4, !tbaa !9
  %517 = icmp sge i32 %516, -22
  br i1 %517, label %518, label %526

518:                                              ; preds = %515
  %519 = load i32, ptr %13, align 4, !tbaa !9
  %520 = sub nsw i32 0, %519
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %521
  %523 = load double, ptr %522, align 8, !tbaa !29
  %524 = load double, ptr %34, align 8, !tbaa !14
  %525 = fdiv double %524, %523
  store double %525, ptr %34, align 8, !tbaa !14
  br label %1465

526:                                              ; preds = %515
  br label %527

527:                                              ; preds = %526, %514
  br label %528

528:                                              ; preds = %527, %471, %468
  %529 = load i32, ptr %19, align 4, !tbaa !9
  %530 = load i32, ptr %18, align 4, !tbaa !9
  %531 = sub nsw i32 %529, %530
  %532 = load i32, ptr %14, align 4, !tbaa !9
  %533 = add nsw i32 %532, %531
  store i32 %533, ptr %14, align 4, !tbaa !9
  %534 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  store i32 0, ptr %534, align 4, !tbaa !31
  %535 = load i32, ptr %14, align 4, !tbaa !9
  %536 = icmp sgt i32 %535, 0
  br i1 %536, label %537, label %620

537:                                              ; preds = %528
  %538 = load i32, ptr %14, align 4, !tbaa !9
  %539 = and i32 %538, 15
  store i32 %539, ptr %16, align 4, !tbaa !9
  %540 = icmp ne i32 %539, 0
  br i1 %540, label %541, label %548

541:                                              ; preds = %537
  %542 = load i32, ptr %16, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %543
  %545 = load double, ptr %544, align 8, !tbaa !29
  %546 = load double, ptr %34, align 8, !tbaa !14
  %547 = fmul double %546, %545
  store double %547, ptr %34, align 8, !tbaa !14
  br label %548

548:                                              ; preds = %541, %537
  %549 = load i32, ptr %14, align 4, !tbaa !9
  %550 = and i32 %549, -16
  store i32 %550, ptr %14, align 4, !tbaa !9
  %551 = icmp ne i32 %550, 0
  br i1 %551, label %552, label %619

552:                                              ; preds = %548
  %553 = load i32, ptr %14, align 4, !tbaa !9
  %554 = icmp sgt i32 %553, 308
  br i1 %554, label %555, label %570

555:                                              ; preds = %552
  br label %556

556:                                              ; preds = %1438, %1299, %1097, %607, %555
  %557 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 2146435072, ptr %557, align 8, !tbaa !14
  %558 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 0, ptr %558, align 8, !tbaa !14
  br label %559

559:                                              ; preds = %717, %556
  %560 = load ptr, ptr %42, align 8, !tbaa !5
  %561 = icmp ne ptr %560, null
  br i1 %561, label %562, label %568

562:                                              ; preds = %559
  %563 = load ptr, ptr %39, align 8, !tbaa !5
  call void @Bfree(ptr noundef %563)
  %564 = load ptr, ptr %41, align 8, !tbaa !5
  call void @Bfree(ptr noundef %564)
  %565 = load ptr, ptr %43, align 8, !tbaa !5
  call void @Bfree(ptr noundef %565)
  %566 = load ptr, ptr %42, align 8, !tbaa !5
  call void @Bfree(ptr noundef %566)
  %567 = load ptr, ptr %44, align 8, !tbaa !5
  call void @Bfree(ptr noundef %567)
  br label %568

568:                                              ; preds = %562, %559
  %569 = call ptr @__errno_location() #7
  store i32 34, ptr %569, align 4, !tbaa !9
  br label %1465

570:                                              ; preds = %552
  %571 = load i32, ptr %14, align 4, !tbaa !9
  %572 = ashr i32 %571, 4
  store i32 %572, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %573

573:                                              ; preds = %588, %570
  %574 = load i32, ptr %14, align 4, !tbaa !9
  %575 = icmp sgt i32 %574, 1
  br i1 %575, label %576, label %593

576:                                              ; preds = %573
  %577 = load i32, ptr %14, align 4, !tbaa !9
  %578 = and i32 %577, 1
  %579 = icmp ne i32 %578, 0
  br i1 %579, label %580, label %587

580:                                              ; preds = %576
  %581 = load i32, ptr %17, align 4, !tbaa !9
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds [5 x double], ptr @bigtens, i64 0, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !29
  %585 = load double, ptr %34, align 8, !tbaa !14
  %586 = fmul double %585, %584
  store double %586, ptr %34, align 8, !tbaa !14
  br label %587

587:                                              ; preds = %580, %576
  br label %588

588:                                              ; preds = %587
  %589 = load i32, ptr %17, align 4, !tbaa !9
  %590 = add nsw i32 %589, 1
  store i32 %590, ptr %17, align 4, !tbaa !9
  %591 = load i32, ptr %14, align 4, !tbaa !9
  %592 = ashr i32 %591, 1
  store i32 %592, ptr %14, align 4, !tbaa !9
  br label %573, !llvm.loop !32

593:                                              ; preds = %573
  %594 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %595 = load i64, ptr %594, align 8, !tbaa !14
  %596 = sub i64 %595, 55574528
  store i64 %596, ptr %594, align 8, !tbaa !14
  %597 = load i32, ptr %17, align 4, !tbaa !9
  %598 = sext i32 %597 to i64
  %599 = getelementptr inbounds [5 x double], ptr @bigtens, i64 0, i64 %598
  %600 = load double, ptr %599, align 8, !tbaa !29
  %601 = load double, ptr %34, align 8, !tbaa !14
  %602 = fmul double %601, %600
  store double %602, ptr %34, align 8, !tbaa !14
  %603 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %604 = load i64, ptr %603, align 8, !tbaa !14
  %605 = and i64 %604, 2146435072
  store i64 %605, ptr %37, align 8, !tbaa !17
  %606 = icmp ugt i64 %605, 2090860544
  br i1 %606, label %607, label %608

607:                                              ; preds = %593
  br label %556

608:                                              ; preds = %593
  %609 = load i64, ptr %37, align 8, !tbaa !17
  %610 = icmp ugt i64 %609, 2089811968
  br i1 %610, label %611, label %614

611:                                              ; preds = %608
  %612 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 2146435071, ptr %612, align 8, !tbaa !14
  %613 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 4294967295, ptr %613, align 8, !tbaa !14
  br label %618

614:                                              ; preds = %608
  %615 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %616 = load i64, ptr %615, align 8, !tbaa !14
  %617 = add i64 %616, 55574528
  store i64 %617, ptr %615, align 8, !tbaa !14
  br label %618

618:                                              ; preds = %614, %611
  br label %619

619:                                              ; preds = %618, %548
  br label %721

620:                                              ; preds = %528
  %621 = load i32, ptr %14, align 4, !tbaa !9
  %622 = icmp slt i32 %621, 0
  br i1 %622, label %623, label %720

623:                                              ; preds = %620
  %624 = load i32, ptr %14, align 4, !tbaa !9
  %625 = sub nsw i32 0, %624
  store i32 %625, ptr %14, align 4, !tbaa !9
  %626 = load i32, ptr %14, align 4, !tbaa !9
  %627 = and i32 %626, 15
  store i32 %627, ptr %16, align 4, !tbaa !9
  %628 = icmp ne i32 %627, 0
  br i1 %628, label %629, label %636

629:                                              ; preds = %623
  %630 = load i32, ptr %16, align 4, !tbaa !9
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %631
  %633 = load double, ptr %632, align 8, !tbaa !29
  %634 = load double, ptr %34, align 8, !tbaa !14
  %635 = fdiv double %634, %633
  store double %635, ptr %34, align 8, !tbaa !14
  br label %636

636:                                              ; preds = %629, %623
  %637 = load i32, ptr %14, align 4, !tbaa !9
  %638 = ashr i32 %637, 4
  store i32 %638, ptr %14, align 4, !tbaa !9
  %639 = icmp ne i32 %638, 0
  br i1 %639, label %640, label %719

640:                                              ; preds = %636
  %641 = load i32, ptr %14, align 4, !tbaa !9
  %642 = icmp sge i32 %641, 32
  br i1 %642, label %643, label %644

643:                                              ; preds = %640
  br label %717

644:                                              ; preds = %640
  %645 = load i32, ptr %14, align 4, !tbaa !9
  %646 = and i32 %645, 16
  %647 = icmp ne i32 %646, 0
  br i1 %647, label %648, label %650

648:                                              ; preds = %644
  %649 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  store i32 106, ptr %649, align 4, !tbaa !31
  br label %650

650:                                              ; preds = %648, %644
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %651

651:                                              ; preds = %666, %650
  %652 = load i32, ptr %14, align 4, !tbaa !9
  %653 = icmp sgt i32 %652, 0
  br i1 %653, label %654, label %671

654:                                              ; preds = %651
  %655 = load i32, ptr %14, align 4, !tbaa !9
  %656 = and i32 %655, 1
  %657 = icmp ne i32 %656, 0
  br i1 %657, label %658, label %665

658:                                              ; preds = %654
  %659 = load i32, ptr %17, align 4, !tbaa !9
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds [5 x double], ptr @tinytens, i64 0, i64 %660
  %662 = load double, ptr %661, align 8, !tbaa !29
  %663 = load double, ptr %34, align 8, !tbaa !14
  %664 = fmul double %663, %662
  store double %664, ptr %34, align 8, !tbaa !14
  br label %665

665:                                              ; preds = %658, %654
  br label %666

666:                                              ; preds = %665
  %667 = load i32, ptr %17, align 4, !tbaa !9
  %668 = add nsw i32 %667, 1
  store i32 %668, ptr %17, align 4, !tbaa !9
  %669 = load i32, ptr %14, align 4, !tbaa !9
  %670 = ashr i32 %669, 1
  store i32 %670, ptr %14, align 4, !tbaa !9
  br label %651, !llvm.loop !33

671:                                              ; preds = %651
  %672 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %673 = load i32, ptr %672, align 4, !tbaa !31
  %674 = icmp ne i32 %673, 0
  br i1 %674, label %675, label %713

675:                                              ; preds = %671
  %676 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %677 = load i64, ptr %676, align 8, !tbaa !14
  %678 = and i64 %677, 2146435072
  %679 = lshr i64 %678, 20
  %680 = sub i64 107, %679
  %681 = trunc i64 %680 to i32
  store i32 %681, ptr %17, align 4, !tbaa !9
  %682 = icmp sgt i32 %681, 0
  br i1 %682, label %683, label %713

683:                                              ; preds = %675
  %684 = load i32, ptr %17, align 4, !tbaa !9
  %685 = icmp sge i32 %684, 32
  br i1 %685, label %686, label %705

686:                                              ; preds = %683
  %687 = load i32, ptr %17, align 4, !tbaa !9
  %688 = icmp sgt i32 %687, 54
  br i1 %688, label %689, label %690

689:                                              ; preds = %686
  br label %717

690:                                              ; preds = %686
  %691 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 0, ptr %691, align 8, !tbaa !14
  %692 = load i32, ptr %17, align 4, !tbaa !9
  %693 = icmp sge i32 %692, 53
  br i1 %693, label %694, label %696

694:                                              ; preds = %690
  %695 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 57671680, ptr %695, align 8, !tbaa !14
  br label %704

696:                                              ; preds = %690
  %697 = load i32, ptr %17, align 4, !tbaa !9
  %698 = sub nsw i32 %697, 32
  %699 = shl i32 -1, %698
  %700 = zext i32 %699 to i64
  %701 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %702 = load i64, ptr %701, align 8, !tbaa !14
  %703 = and i64 %702, %700
  store i64 %703, ptr %701, align 8, !tbaa !14
  br label %704

704:                                              ; preds = %696, %694
  br label %712

705:                                              ; preds = %683
  %706 = load i32, ptr %17, align 4, !tbaa !9
  %707 = shl i32 -1, %706
  %708 = zext i32 %707 to i64
  %709 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %710 = load i64, ptr %709, align 8, !tbaa !14
  %711 = and i64 %710, %708
  store i64 %711, ptr %709, align 8, !tbaa !14
  br label %712

712:                                              ; preds = %705, %704
  br label %713

713:                                              ; preds = %712, %675, %671
  %714 = load double, ptr %34, align 8, !tbaa !14
  %715 = fcmp une double %714, 0.000000e+00
  br i1 %715, label %718, label %716

716:                                              ; preds = %713
  br label %717

717:                                              ; preds = %1445, %1237, %1196, %1138, %716, %689, %643
  store double 0.000000e+00, ptr %34, align 8, !tbaa !14
  br label %559

718:                                              ; preds = %713
  br label %719

719:                                              ; preds = %718, %636
  br label %720

720:                                              ; preds = %719, %620
  br label %721

721:                                              ; preds = %720, %619
  %722 = load i32, ptr %19, align 4, !tbaa !9
  %723 = load i32, ptr %24, align 4, !tbaa !9
  %724 = sub nsw i32 %722, %723
  %725 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 6
  store i32 %724, ptr %725, align 4, !tbaa !34
  %726 = load i32, ptr %20, align 4, !tbaa !9
  %727 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 7
  store i32 %726, ptr %727, align 4, !tbaa !35
  %728 = load i32, ptr %19, align 4, !tbaa !9
  %729 = icmp sgt i32 %728, 40
  br i1 %729, label %730, label %825

730:                                              ; preds = %721
  store i32 18, ptr %17, align 4, !tbaa !9
  store i32 18, ptr %16, align 4, !tbaa !9
  %731 = load i32, ptr %16, align 4, !tbaa !9
  %732 = load i32, ptr %20, align 4, !tbaa !9
  %733 = icmp sgt i32 %731, %732
  br i1 %733, label %734, label %739

734:                                              ; preds = %730
  %735 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 2
  %736 = load i32, ptr %735, align 4, !tbaa !13
  %737 = load i32, ptr %17, align 4, !tbaa !9
  %738 = add nsw i32 %737, %736
  store i32 %738, ptr %17, align 4, !tbaa !9
  br label %739

739:                                              ; preds = %734, %730
  br label %740

740:                                              ; preds = %764, %739
  %741 = load i32, ptr %17, align 4, !tbaa !9
  %742 = add nsw i32 %741, -1
  store i32 %742, ptr %17, align 4, !tbaa !9
  %743 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 1
  %744 = load i32, ptr %743, align 4, !tbaa !20
  %745 = icmp slt i32 %742, %744
  br i1 %745, label %746, label %755

746:                                              ; preds = %740
  %747 = load i32, ptr %17, align 4, !tbaa !9
  %748 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 0
  %749 = load i32, ptr %748, align 4, !tbaa !21
  %750 = icmp sge i32 %747, %749
  br i1 %750, label %751, label %755

751:                                              ; preds = %746
  %752 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 0
  %753 = load i32, ptr %752, align 4, !tbaa !21
  %754 = sub nsw i32 %753, 1
  store i32 %754, ptr %17, align 4, !tbaa !9
  br label %755

755:                                              ; preds = %751, %746, %740
  %756 = load ptr, ptr %27, align 8, !tbaa !5
  %757 = load i32, ptr %17, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds i8, ptr %756, i64 %758
  %760 = load i8, ptr %759, align 1, !tbaa !14
  %761 = sext i8 %760 to i32
  %762 = icmp ne i32 %761, 48
  br i1 %762, label %763, label %764

763:                                              ; preds = %755
  br label %767

764:                                              ; preds = %755
  %765 = load i32, ptr %16, align 4, !tbaa !9
  %766 = add nsw i32 %765, -1
  store i32 %766, ptr %16, align 4, !tbaa !9
  br label %740

767:                                              ; preds = %763
  %768 = load i32, ptr %19, align 4, !tbaa !9
  %769 = load i32, ptr %16, align 4, !tbaa !9
  %770 = sub nsw i32 %768, %769
  %771 = load i32, ptr %13, align 4, !tbaa !9
  %772 = add nsw i32 %771, %770
  store i32 %772, ptr %13, align 4, !tbaa !9
  %773 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %773, ptr %19, align 4, !tbaa !9
  %774 = load i32, ptr %20, align 4, !tbaa !9
  %775 = load i32, ptr %19, align 4, !tbaa !9
  %776 = icmp sgt i32 %774, %775
  br i1 %776, label %777, label %779

777:                                              ; preds = %767
  %778 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %778, ptr %20, align 4, !tbaa !9
  br label %779

779:                                              ; preds = %777, %767
  %780 = load i32, ptr %19, align 4, !tbaa !9
  %781 = icmp slt i32 %780, 9
  br i1 %781, label %782, label %824

782:                                              ; preds = %779
  store i64 0, ptr %36, align 8, !tbaa !17
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %783

783:                                              ; preds = %798, %782
  %784 = load i32, ptr %16, align 4, !tbaa !9
  %785 = load i32, ptr %20, align 4, !tbaa !9
  %786 = icmp slt i32 %784, %785
  br i1 %786, label %787, label %801

787:                                              ; preds = %783
  %788 = load i64, ptr %36, align 8, !tbaa !17
  %789 = mul i64 10, %788
  %790 = load ptr, ptr %27, align 8, !tbaa !5
  %791 = load i32, ptr %16, align 4, !tbaa !9
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds i8, ptr %790, i64 %792
  %794 = load i8, ptr %793, align 1, !tbaa !14
  %795 = sext i8 %794 to i64
  %796 = add i64 %789, %795
  %797 = sub i64 %796, 48
  store i64 %797, ptr %36, align 8, !tbaa !17
  br label %798

798:                                              ; preds = %787
  %799 = load i32, ptr %16, align 4, !tbaa !9
  %800 = add nsw i32 %799, 1
  store i32 %800, ptr %16, align 4, !tbaa !9
  br label %783, !llvm.loop !36

801:                                              ; preds = %783
  %802 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 1
  %803 = load i32, ptr %802, align 4, !tbaa !20
  store i32 %803, ptr %17, align 4, !tbaa !9
  br label %804

804:                                              ; preds = %820, %801
  %805 = load i32, ptr %16, align 4, !tbaa !9
  %806 = load i32, ptr %19, align 4, !tbaa !9
  %807 = icmp slt i32 %805, %806
  br i1 %807, label %808, label %823

808:                                              ; preds = %804
  %809 = load i64, ptr %36, align 8, !tbaa !17
  %810 = mul i64 10, %809
  %811 = load ptr, ptr %27, align 8, !tbaa !5
  %812 = load i32, ptr %17, align 4, !tbaa !9
  %813 = add nsw i32 %812, 1
  store i32 %813, ptr %17, align 4, !tbaa !9
  %814 = sext i32 %812 to i64
  %815 = getelementptr inbounds i8, ptr %811, i64 %814
  %816 = load i8, ptr %815, align 1, !tbaa !14
  %817 = sext i8 %816 to i64
  %818 = add i64 %810, %817
  %819 = sub i64 %818, 48
  store i64 %819, ptr %36, align 8, !tbaa !17
  br label %820

820:                                              ; preds = %808
  %821 = load i32, ptr %16, align 4, !tbaa !9
  %822 = add nsw i32 %821, 1
  store i32 %822, ptr %16, align 4, !tbaa !9
  br label %804, !llvm.loop !37

823:                                              ; preds = %804
  br label %824

824:                                              ; preds = %823, %779
  br label %825

825:                                              ; preds = %824, %721
  %826 = load ptr, ptr %27, align 8, !tbaa !5
  %827 = load i32, ptr %20, align 4, !tbaa !9
  %828 = load i32, ptr %19, align 4, !tbaa !9
  %829 = load i64, ptr %36, align 8, !tbaa !17
  %830 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 2
  %831 = load i32, ptr %830, align 4, !tbaa !13
  %832 = call ptr @s2b(ptr noundef %826, i32 noundef %827, i32 noundef %828, i64 noundef %829, i32 noundef %831)
  store ptr %832, ptr %42, align 8, !tbaa !5
  br label %833

833:                                              ; preds = %1414, %825
  %834 = load ptr, ptr %42, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.Bigint, ptr %834, i32 0, i32 1
  %836 = load i32, ptr %835, align 8, !tbaa !38
  %837 = call ptr @Balloc(i32 noundef %836)
  store ptr %837, ptr %41, align 8, !tbaa !5
  %838 = load ptr, ptr %41, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.Bigint, ptr %838, i32 0, i32 3
  %840 = load ptr, ptr %42, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.Bigint, ptr %840, i32 0, i32 3
  %842 = load ptr, ptr %42, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.Bigint, ptr %842, i32 0, i32 4
  %844 = load i32, ptr %843, align 4, !tbaa !40
  %845 = sext i32 %844 to i64
  %846 = mul i64 %845, 8
  %847 = add i64 %846, 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %839, ptr align 8 %841, i64 %847, i1 false)
  %848 = call ptr @d2b(ptr noundef %34, ptr noundef %7, ptr noundef %10)
  store ptr %848, ptr %39, align 8, !tbaa !5
  %849 = call ptr @i2b(i32 noundef 1)
  store ptr %849, ptr %43, align 8, !tbaa !5
  %850 = load i32, ptr %13, align 4, !tbaa !9
  %851 = icmp sge i32 %850, 0
  br i1 %851, label %852, label %854

852:                                              ; preds = %833
  store i32 0, ptr %6, align 4, !tbaa !9
  store i32 0, ptr %5, align 4, !tbaa !9
  %853 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %853, ptr %9, align 4, !tbaa !9
  store i32 %853, ptr %8, align 4, !tbaa !9
  br label %857

854:                                              ; preds = %833
  %855 = load i32, ptr %13, align 4, !tbaa !9
  %856 = sub nsw i32 0, %855
  store i32 %856, ptr %6, align 4, !tbaa !9
  store i32 %856, ptr %5, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %857

857:                                              ; preds = %854, %852
  %858 = load i32, ptr %7, align 4, !tbaa !9
  %859 = icmp sge i32 %858, 0
  br i1 %859, label %860, label %864

860:                                              ; preds = %857
  %861 = load i32, ptr %7, align 4, !tbaa !9
  %862 = load i32, ptr %5, align 4, !tbaa !9
  %863 = add nsw i32 %862, %861
  store i32 %863, ptr %5, align 4, !tbaa !9
  br label %868

864:                                              ; preds = %857
  %865 = load i32, ptr %7, align 4, !tbaa !9
  %866 = load i32, ptr %8, align 4, !tbaa !9
  %867 = sub nsw i32 %866, %865
  store i32 %867, ptr %8, align 4, !tbaa !9
  br label %868

868:                                              ; preds = %864, %860
  %869 = load i32, ptr %5, align 4, !tbaa !9
  store i32 %869, ptr %11, align 4, !tbaa !9
  store i64 1, ptr %45, align 8, !tbaa !17
  store i64 0, ptr %46, align 8, !tbaa !17
  %870 = load i32, ptr %7, align 4, !tbaa !9
  %871 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %872 = load i32, ptr %871, align 4, !tbaa !31
  %873 = sub nsw i32 %870, %872
  store i32 %873, ptr %17, align 4, !tbaa !9
  %874 = load i32, ptr %17, align 4, !tbaa !9
  %875 = load i32, ptr %10, align 4, !tbaa !9
  %876 = add nsw i32 %874, %875
  %877 = sub nsw i32 %876, 1
  store i32 %877, ptr %16, align 4, !tbaa !9
  %878 = load i32, ptr %10, align 4, !tbaa !9
  %879 = sub nsw i32 54, %878
  store i32 %879, ptr %17, align 4, !tbaa !9
  %880 = load i32, ptr %16, align 4, !tbaa !9
  %881 = icmp slt i32 %880, -1022
  br i1 %881, label %882, label %907

882:                                              ; preds = %868
  %883 = load i32, ptr %16, align 4, !tbaa !9
  %884 = sub nsw i32 -1022, %883
  store i32 %884, ptr %16, align 4, !tbaa !9
  %885 = load i32, ptr %16, align 4, !tbaa !9
  %886 = load i32, ptr %17, align 4, !tbaa !9
  %887 = sub nsw i32 %886, %885
  store i32 %887, ptr %17, align 4, !tbaa !9
  %888 = load i32, ptr %16, align 4, !tbaa !9
  %889 = icmp slt i32 %888, 32
  br i1 %889, label %890, label %895

890:                                              ; preds = %882
  %891 = load i32, ptr %16, align 4, !tbaa !9
  %892 = load i64, ptr %45, align 8, !tbaa !17
  %893 = zext i32 %891 to i64
  %894 = shl i64 %892, %893
  store i64 %894, ptr %45, align 8, !tbaa !17
  br label %906

895:                                              ; preds = %882
  %896 = load i32, ptr %16, align 4, !tbaa !9
  %897 = icmp slt i32 %896, 52
  br i1 %897, label %898, label %904

898:                                              ; preds = %895
  %899 = load i64, ptr %45, align 8, !tbaa !17
  %900 = load i32, ptr %16, align 4, !tbaa !9
  %901 = sub nsw i32 %900, 32
  %902 = zext i32 %901 to i64
  %903 = shl i64 %899, %902
  store i64 %903, ptr %46, align 8, !tbaa !17
  br label %905

904:                                              ; preds = %895
  store i64 2146435072, ptr %46, align 8, !tbaa !17
  br label %905

905:                                              ; preds = %904, %898
  br label %906

906:                                              ; preds = %905, %890
  br label %907

907:                                              ; preds = %906, %868
  %908 = load i32, ptr %17, align 4, !tbaa !9
  %909 = load i32, ptr %5, align 4, !tbaa !9
  %910 = add nsw i32 %909, %908
  store i32 %910, ptr %5, align 4, !tbaa !9
  %911 = load i32, ptr %17, align 4, !tbaa !9
  %912 = load i32, ptr %8, align 4, !tbaa !9
  %913 = add nsw i32 %912, %911
  store i32 %913, ptr %8, align 4, !tbaa !9
  %914 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %915 = load i32, ptr %914, align 4, !tbaa !31
  %916 = load i32, ptr %8, align 4, !tbaa !9
  %917 = add nsw i32 %916, %915
  store i32 %917, ptr %8, align 4, !tbaa !9
  %918 = load i32, ptr %5, align 4, !tbaa !9
  %919 = load i32, ptr %8, align 4, !tbaa !9
  %920 = icmp slt i32 %918, %919
  br i1 %920, label %921, label %923

921:                                              ; preds = %907
  %922 = load i32, ptr %5, align 4, !tbaa !9
  br label %925

923:                                              ; preds = %907
  %924 = load i32, ptr %8, align 4, !tbaa !9
  br label %925

925:                                              ; preds = %923, %921
  %926 = phi i32 [ %922, %921 ], [ %924, %923 ]
  store i32 %926, ptr %16, align 4, !tbaa !9
  %927 = load i32, ptr %16, align 4, !tbaa !9
  %928 = load i32, ptr %11, align 4, !tbaa !9
  %929 = icmp sgt i32 %927, %928
  br i1 %929, label %930, label %932

930:                                              ; preds = %925
  %931 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %931, ptr %16, align 4, !tbaa !9
  br label %932

932:                                              ; preds = %930, %925
  %933 = load i32, ptr %16, align 4, !tbaa !9
  %934 = icmp sgt i32 %933, 0
  br i1 %934, label %935, label %945

935:                                              ; preds = %932
  %936 = load i32, ptr %16, align 4, !tbaa !9
  %937 = load i32, ptr %5, align 4, !tbaa !9
  %938 = sub nsw i32 %937, %936
  store i32 %938, ptr %5, align 4, !tbaa !9
  %939 = load i32, ptr %16, align 4, !tbaa !9
  %940 = load i32, ptr %8, align 4, !tbaa !9
  %941 = sub nsw i32 %940, %939
  store i32 %941, ptr %8, align 4, !tbaa !9
  %942 = load i32, ptr %16, align 4, !tbaa !9
  %943 = load i32, ptr %11, align 4, !tbaa !9
  %944 = sub nsw i32 %943, %942
  store i32 %944, ptr %11, align 4, !tbaa !9
  br label %945

945:                                              ; preds = %935, %932
  %946 = load i32, ptr %6, align 4, !tbaa !9
  %947 = icmp sgt i32 %946, 0
  br i1 %947, label %948, label %957

948:                                              ; preds = %945
  %949 = load ptr, ptr %43, align 8, !tbaa !5
  %950 = load i32, ptr %6, align 4, !tbaa !9
  %951 = call ptr @pow5mult(ptr noundef %949, i32 noundef %950)
  store ptr %951, ptr %43, align 8, !tbaa !5
  %952 = load ptr, ptr %43, align 8, !tbaa !5
  %953 = load ptr, ptr %39, align 8, !tbaa !5
  %954 = call ptr @mult(ptr noundef %952, ptr noundef %953)
  store ptr %954, ptr %40, align 8, !tbaa !5
  %955 = load ptr, ptr %39, align 8, !tbaa !5
  call void @Bfree(ptr noundef %955)
  %956 = load ptr, ptr %40, align 8, !tbaa !5
  store ptr %956, ptr %39, align 8, !tbaa !5
  br label %957

957:                                              ; preds = %948, %945
  %958 = load i32, ptr %5, align 4, !tbaa !9
  %959 = icmp sgt i32 %958, 0
  br i1 %959, label %960, label %964

960:                                              ; preds = %957
  %961 = load ptr, ptr %39, align 8, !tbaa !5
  %962 = load i32, ptr %5, align 4, !tbaa !9
  %963 = call ptr @lshift(ptr noundef %961, i32 noundef %962)
  store ptr %963, ptr %39, align 8, !tbaa !5
  br label %964

964:                                              ; preds = %960, %957
  %965 = load i32, ptr %9, align 4, !tbaa !9
  %966 = icmp sgt i32 %965, 0
  br i1 %966, label %967, label %971

967:                                              ; preds = %964
  %968 = load ptr, ptr %41, align 8, !tbaa !5
  %969 = load i32, ptr %9, align 4, !tbaa !9
  %970 = call ptr @pow5mult(ptr noundef %968, i32 noundef %969)
  store ptr %970, ptr %41, align 8, !tbaa !5
  br label %971

971:                                              ; preds = %967, %964
  %972 = load i32, ptr %8, align 4, !tbaa !9
  %973 = icmp sgt i32 %972, 0
  br i1 %973, label %974, label %978

974:                                              ; preds = %971
  %975 = load ptr, ptr %41, align 8, !tbaa !5
  %976 = load i32, ptr %8, align 4, !tbaa !9
  %977 = call ptr @lshift(ptr noundef %975, i32 noundef %976)
  store ptr %977, ptr %41, align 8, !tbaa !5
  br label %978

978:                                              ; preds = %974, %971
  %979 = load i32, ptr %11, align 4, !tbaa !9
  %980 = icmp sgt i32 %979, 0
  br i1 %980, label %981, label %985

981:                                              ; preds = %978
  %982 = load ptr, ptr %43, align 8, !tbaa !5
  %983 = load i32, ptr %11, align 4, !tbaa !9
  %984 = call ptr @lshift(ptr noundef %982, i32 noundef %983)
  store ptr %984, ptr %43, align 8, !tbaa !5
  br label %985

985:                                              ; preds = %981, %978
  %986 = load ptr, ptr %39, align 8, !tbaa !5
  %987 = load ptr, ptr %41, align 8, !tbaa !5
  %988 = call ptr @diff(ptr noundef %986, ptr noundef %987)
  store ptr %988, ptr %44, align 8, !tbaa !5
  %989 = load ptr, ptr %44, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.Bigint, ptr %989, i32 0, i32 3
  %991 = load i32, ptr %990, align 8, !tbaa !41
  %992 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  store i32 %991, ptr %992, align 4, !tbaa !42
  %993 = load ptr, ptr %44, align 8, !tbaa !5
  %994 = getelementptr inbounds %struct.Bigint, ptr %993, i32 0, i32 3
  store i32 0, ptr %994, align 8, !tbaa !41
  %995 = load ptr, ptr %44, align 8, !tbaa !5
  %996 = load ptr, ptr %43, align 8, !tbaa !5
  %997 = call i32 @cmp(ptr noundef %995, ptr noundef %996)
  store i32 %997, ptr %16, align 4, !tbaa !9
  %998 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 6
  %999 = load i32, ptr %998, align 4, !tbaa !34
  %1000 = load i32, ptr %19, align 4, !tbaa !9
  %1001 = icmp sgt i32 %999, %1000
  br i1 %1001, label %1002, label %1011

1002:                                             ; preds = %985
  %1003 = load i32, ptr %16, align 4, !tbaa !9
  %1004 = icmp sle i32 %1003, 0
  br i1 %1004, label %1005, label %1011

1005:                                             ; preds = %1002
  %1006 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1007 = load i32, ptr %1006, align 4, !tbaa !42
  %1008 = icmp ne i32 %1007, 0
  br i1 %1008, label %1009, label %1010

1009:                                             ; preds = %1005
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %1419

1010:                                             ; preds = %1005
  store i32 -1, ptr %16, align 4, !tbaa !9
  br label %1011

1011:                                             ; preds = %1010, %1002, %985
  %1012 = load i32, ptr %16, align 4, !tbaa !9
  %1013 = icmp slt i32 %1012, 0
  br i1 %1013, label %1014, label %1054

1014:                                             ; preds = %1011
  %1015 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1016 = load i32, ptr %1015, align 4, !tbaa !42
  %1017 = icmp ne i32 %1016, 0
  br i1 %1017, label %1032, label %1018

1018:                                             ; preds = %1014
  %1019 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1020 = load i64, ptr %1019, align 8, !tbaa !14
  %1021 = icmp ne i64 %1020, 0
  br i1 %1021, label %1032, label %1022

1022:                                             ; preds = %1018
  %1023 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1024 = load i64, ptr %1023, align 8, !tbaa !14
  %1025 = and i64 %1024, 1048575
  %1026 = icmp ne i64 %1025, 0
  br i1 %1026, label %1032, label %1027

1027:                                             ; preds = %1022
  %1028 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1029 = load i64, ptr %1028, align 8, !tbaa !14
  %1030 = and i64 %1029, 2146435072
  %1031 = icmp ule i64 %1030, 112197632
  br i1 %1031, label %1032, label %1033

1032:                                             ; preds = %1027, %1022, %1018, %1014
  br label %1419

1033:                                             ; preds = %1027
  %1034 = load ptr, ptr %44, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct.Bigint, ptr %1034, i32 0, i32 5
  %1036 = getelementptr inbounds [1 x i64], ptr %1035, i64 0, i64 0
  %1037 = load i64, ptr %1036, align 8, !tbaa !17
  %1038 = icmp ne i64 %1037, 0
  br i1 %1038, label %1045, label %1039

1039:                                             ; preds = %1033
  %1040 = load ptr, ptr %44, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct.Bigint, ptr %1040, i32 0, i32 4
  %1042 = load i32, ptr %1041, align 4, !tbaa !40
  %1043 = icmp sle i32 %1042, 1
  br i1 %1043, label %1044, label %1045

1044:                                             ; preds = %1039
  br label %1419

1045:                                             ; preds = %1039, %1033
  %1046 = load ptr, ptr %44, align 8, !tbaa !5
  %1047 = call ptr @lshift(ptr noundef %1046, i32 noundef 1)
  store ptr %1047, ptr %44, align 8, !tbaa !5
  %1048 = load ptr, ptr %44, align 8, !tbaa !5
  %1049 = load ptr, ptr %43, align 8, !tbaa !5
  %1050 = call i32 @cmp(ptr noundef %1048, ptr noundef %1049)
  %1051 = icmp sgt i32 %1050, 0
  br i1 %1051, label %1052, label %1053

1052:                                             ; preds = %1045
  br label %1117

1053:                                             ; preds = %1045
  br label %1419

1054:                                             ; preds = %1011
  %1055 = load i32, ptr %16, align 4, !tbaa !9
  %1056 = icmp eq i32 %1055, 0
  br i1 %1056, label %1057, label %1203

1057:                                             ; preds = %1054
  %1058 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1059 = load i32, ptr %1058, align 4, !tbaa !42
  %1060 = icmp ne i32 %1059, 0
  br i1 %1060, label %1061, label %1107

1061:                                             ; preds = %1057
  %1062 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1063 = load i64, ptr %1062, align 8, !tbaa !14
  %1064 = and i64 %1063, 1048575
  %1065 = icmp eq i64 %1064, 1048575
  br i1 %1065, label %1066, label %1106

1066:                                             ; preds = %1061
  %1067 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1068 = load i64, ptr %1067, align 8, !tbaa !14
  %1069 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %1070 = load i32, ptr %1069, align 4, !tbaa !31
  %1071 = icmp ne i32 %1070, 0
  br i1 %1071, label %1072, label %1084

1072:                                             ; preds = %1066
  %1073 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1074 = load i64, ptr %1073, align 8, !tbaa !14
  %1075 = and i64 %1074, 2146435072
  store i64 %1075, ptr %36, align 8, !tbaa !17
  %1076 = icmp ule i64 %1075, 111149056
  br i1 %1076, label %1077, label %1084

1077:                                             ; preds = %1072
  %1078 = load i64, ptr %36, align 8, !tbaa !17
  %1079 = lshr i64 %1078, 20
  %1080 = sub i64 107, %1079
  %1081 = trunc i64 %1080 to i32
  %1082 = shl i32 -1, %1081
  %1083 = and i32 -1, %1082
  br label %1085

1084:                                             ; preds = %1072, %1066
  br label %1085

1085:                                             ; preds = %1084, %1077
  %1086 = phi i32 [ %1083, %1077 ], [ -1, %1084 ]
  %1087 = zext i32 %1086 to i64
  %1088 = icmp eq i64 %1068, %1087
  br i1 %1088, label %1089, label %1106

1089:                                             ; preds = %1085
  %1090 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1091 = load i64, ptr %1090, align 8, !tbaa !14
  %1092 = icmp eq i64 %1091, 2146435071
  br i1 %1092, label %1093, label %1098

1093:                                             ; preds = %1089
  %1094 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1095 = load i64, ptr %1094, align 8, !tbaa !14
  %1096 = icmp eq i64 %1095, 4294967295
  br i1 %1096, label %1097, label %1098

1097:                                             ; preds = %1093
  br label %556

1098:                                             ; preds = %1093, %1089
  %1099 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1100 = load i64, ptr %1099, align 8, !tbaa !14
  %1101 = and i64 %1100, 2146435072
  %1102 = add i64 %1101, 1048576
  %1103 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 %1102, ptr %1103, align 8, !tbaa !14
  %1104 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 0, ptr %1104, align 8, !tbaa !14
  %1105 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  store i32 0, ptr %1105, align 4, !tbaa !42
  br label %1419

1106:                                             ; preds = %1085, %1061
  br label %1156

1107:                                             ; preds = %1057
  %1108 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1109 = load i64, ptr %1108, align 8, !tbaa !14
  %1110 = and i64 %1109, 1048575
  %1111 = icmp ne i64 %1110, 0
  br i1 %1111, label %1155, label %1112

1112:                                             ; preds = %1107
  %1113 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1114 = load i64, ptr %1113, align 8, !tbaa !14
  %1115 = icmp ne i64 %1114, 0
  br i1 %1115, label %1155, label %1116

1116:                                             ; preds = %1112
  br label %1117

1117:                                             ; preds = %1116, %1052
  %1118 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %1119 = load i32, ptr %1118, align 4, !tbaa !31
  %1120 = icmp ne i32 %1119, 0
  br i1 %1120, label %1121, label %1140

1121:                                             ; preds = %1117
  %1122 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1123 = load i64, ptr %1122, align 8, !tbaa !14
  %1124 = and i64 %1123, 2146435072
  store i64 %1124, ptr %31, align 8, !tbaa !17
  %1125 = load i64, ptr %31, align 8, !tbaa !17
  %1126 = icmp sle i64 %1125, 112197632
  br i1 %1126, label %1127, label %1139

1127:                                             ; preds = %1121
  %1128 = load i64, ptr %31, align 8, !tbaa !17
  %1129 = icmp sgt i64 %1128, 57671680
  br i1 %1129, label %1130, label %1131

1130:                                             ; preds = %1127
  br label %1419

1131:                                             ; preds = %1127
  %1132 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 6
  %1133 = load i32, ptr %1132, align 4, !tbaa !34
  %1134 = load i32, ptr %19, align 4, !tbaa !9
  %1135 = icmp sgt i32 %1133, %1134
  br i1 %1135, label %1136, label %1138

1136:                                             ; preds = %1131
  %1137 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 10
  store i32 1, ptr %1137, align 4, !tbaa !11
  br label %1419

1138:                                             ; preds = %1131
  br label %717

1139:                                             ; preds = %1121
  br label %1140

1140:                                             ; preds = %1139, %1117
  %1141 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1142 = load i64, ptr %1141, align 8, !tbaa !14
  %1143 = and i64 %1142, 2146435072
  %1144 = sub i64 %1143, 1048576
  store i64 %1144, ptr %31, align 8, !tbaa !17
  %1145 = load i64, ptr %31, align 8, !tbaa !17
  %1146 = or i64 %1145, 1048575
  %1147 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 %1146, ptr %1147, align 8, !tbaa !14
  %1148 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 4294967295, ptr %1148, align 8, !tbaa !14
  %1149 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 6
  %1150 = load i32, ptr %1149, align 4, !tbaa !34
  %1151 = load i32, ptr %19, align 4, !tbaa !9
  %1152 = icmp sgt i32 %1150, %1151
  br i1 %1152, label %1153, label %1154

1153:                                             ; preds = %1140
  br label %1414

1154:                                             ; preds = %1140
  br label %1419

1155:                                             ; preds = %1112, %1107
  br label %1156

1156:                                             ; preds = %1155, %1106
  %1157 = load i64, ptr %46, align 8, !tbaa !17
  %1158 = icmp ne i64 %1157, 0
  br i1 %1158, label %1159, label %1167

1159:                                             ; preds = %1156
  %1160 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1161 = load i64, ptr %1160, align 8, !tbaa !14
  %1162 = load i64, ptr %46, align 8, !tbaa !17
  %1163 = and i64 %1161, %1162
  %1164 = icmp ne i64 %1163, 0
  br i1 %1164, label %1166, label %1165

1165:                                             ; preds = %1159
  br label %1419

1166:                                             ; preds = %1159
  br label %1175

1167:                                             ; preds = %1156
  %1168 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1169 = load i64, ptr %1168, align 8, !tbaa !14
  %1170 = load i64, ptr %45, align 8, !tbaa !17
  %1171 = and i64 %1169, %1170
  %1172 = icmp ne i64 %1171, 0
  br i1 %1172, label %1174, label %1173

1173:                                             ; preds = %1167
  br label %1419

1174:                                             ; preds = %1167
  br label %1175

1175:                                             ; preds = %1174, %1166
  %1176 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1177 = load i32, ptr %1176, align 4, !tbaa !42
  %1178 = icmp ne i32 %1177, 0
  br i1 %1178, label %1179, label %1183

1179:                                             ; preds = %1175
  %1180 = call double @sulp(ptr noundef %34, ptr noundef %38)
  %1181 = load double, ptr %34, align 8, !tbaa !14
  %1182 = fadd double %1181, %1180
  store double %1182, ptr %34, align 8, !tbaa !14
  br label %1198

1183:                                             ; preds = %1175
  %1184 = call double @sulp(ptr noundef %34, ptr noundef %38)
  %1185 = load double, ptr %34, align 8, !tbaa !14
  %1186 = fsub double %1185, %1184
  store double %1186, ptr %34, align 8, !tbaa !14
  %1187 = load double, ptr %34, align 8, !tbaa !14
  %1188 = fcmp une double %1187, 0.000000e+00
  br i1 %1188, label %1197, label %1189

1189:                                             ; preds = %1183
  %1190 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 6
  %1191 = load i32, ptr %1190, align 4, !tbaa !34
  %1192 = load i32, ptr %19, align 4, !tbaa !9
  %1193 = icmp sgt i32 %1191, %1192
  br i1 %1193, label %1194, label %1196

1194:                                             ; preds = %1189
  %1195 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 10
  store i32 1, ptr %1195, align 4, !tbaa !11
  br label %1419

1196:                                             ; preds = %1189
  br label %717

1197:                                             ; preds = %1183
  br label %1198

1198:                                             ; preds = %1197, %1179
  %1199 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1200 = load i32, ptr %1199, align 4, !tbaa !42
  %1201 = sub nsw i32 1, %1200
  %1202 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  store i32 %1201, ptr %1202, align 4, !tbaa !42
  br label %1419

1203:                                             ; preds = %1054
  %1204 = load ptr, ptr %44, align 8, !tbaa !5
  %1205 = load ptr, ptr %43, align 8, !tbaa !5
  %1206 = call double @ratio(ptr noundef %1204, ptr noundef %1205)
  store double %1206, ptr %29, align 8, !tbaa !29
  %1207 = fcmp ole double %1206, 2.000000e+00
  br i1 %1207, label %1208, label %1251

1208:                                             ; preds = %1203
  %1209 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1210 = load i32, ptr %1209, align 4, !tbaa !42
  %1211 = icmp ne i32 %1210, 0
  br i1 %1211, label %1212, label %1213

1212:                                             ; preds = %1208
  store double 1.000000e+00, ptr %30, align 8, !tbaa !29
  store double 1.000000e+00, ptr %29, align 8, !tbaa !29
  br label %1250

1213:                                             ; preds = %1208
  %1214 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1215 = load i64, ptr %1214, align 8, !tbaa !14
  %1216 = icmp ne i64 %1215, 0
  br i1 %1216, label %1222, label %1217

1217:                                             ; preds = %1213
  %1218 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1219 = load i64, ptr %1218, align 8, !tbaa !14
  %1220 = and i64 %1219, 1048575
  %1221 = icmp ne i64 %1220, 0
  br i1 %1221, label %1222, label %1239

1222:                                             ; preds = %1217, %1213
  %1223 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1224 = load i64, ptr %1223, align 8, !tbaa !14
  %1225 = icmp eq i64 %1224, 1
  br i1 %1225, label %1226, label %1238

1226:                                             ; preds = %1222
  %1227 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1228 = load i64, ptr %1227, align 8, !tbaa !14
  %1229 = icmp ne i64 %1228, 0
  br i1 %1229, label %1238, label %1230

1230:                                             ; preds = %1226
  %1231 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 6
  %1232 = load i32, ptr %1231, align 4, !tbaa !34
  %1233 = load i32, ptr %19, align 4, !tbaa !9
  %1234 = icmp sgt i32 %1232, %1233
  br i1 %1234, label %1235, label %1237

1235:                                             ; preds = %1230
  %1236 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 10
  store i32 1, ptr %1236, align 4, !tbaa !11
  br label %1419

1237:                                             ; preds = %1230
  br label %717

1238:                                             ; preds = %1226, %1222
  store double 1.000000e+00, ptr %29, align 8, !tbaa !29
  store double -1.000000e+00, ptr %30, align 8, !tbaa !29
  br label %1249

1239:                                             ; preds = %1217
  %1240 = load double, ptr %29, align 8, !tbaa !29
  %1241 = fcmp olt double %1240, 1.000000e+00
  br i1 %1241, label %1242, label %1243

1242:                                             ; preds = %1239
  store double 5.000000e-01, ptr %29, align 8, !tbaa !29
  br label %1246

1243:                                             ; preds = %1239
  %1244 = load double, ptr %29, align 8, !tbaa !29
  %1245 = fmul double %1244, 5.000000e-01
  store double %1245, ptr %29, align 8, !tbaa !29
  br label %1246

1246:                                             ; preds = %1243, %1242
  %1247 = load double, ptr %29, align 8, !tbaa !29
  %1248 = fneg double %1247
  store double %1248, ptr %30, align 8, !tbaa !29
  br label %1249

1249:                                             ; preds = %1246, %1238
  br label %1250

1250:                                             ; preds = %1249, %1212
  br label %1270

1251:                                             ; preds = %1203
  %1252 = load double, ptr %29, align 8, !tbaa !29
  %1253 = fmul double %1252, 5.000000e-01
  store double %1253, ptr %29, align 8, !tbaa !29
  %1254 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1255 = load i32, ptr %1254, align 4, !tbaa !42
  %1256 = icmp ne i32 %1255, 0
  br i1 %1256, label %1257, label %1259

1257:                                             ; preds = %1251
  %1258 = load double, ptr %29, align 8, !tbaa !29
  br label %1262

1259:                                             ; preds = %1251
  %1260 = load double, ptr %29, align 8, !tbaa !29
  %1261 = fneg double %1260
  br label %1262

1262:                                             ; preds = %1259, %1257
  %1263 = phi double [ %1258, %1257 ], [ %1261, %1259 ]
  store double %1263, ptr %30, align 8, !tbaa !29
  %1264 = call i32 @llvm.get.rounding()
  %1265 = icmp eq i32 %1264, 0
  br i1 %1265, label %1266, label %1269

1266:                                             ; preds = %1262
  %1267 = load double, ptr %30, align 8, !tbaa !29
  %1268 = fadd double %1267, 5.000000e-01
  store double %1268, ptr %30, align 8, !tbaa !29
  br label %1269

1269:                                             ; preds = %1266, %1262
  br label %1270

1270:                                             ; preds = %1269, %1250
  %1271 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1272 = load i64, ptr %1271, align 8, !tbaa !14
  %1273 = and i64 %1272, 2146435072
  store i64 %1273, ptr %36, align 8, !tbaa !17
  %1274 = load i64, ptr %36, align 8, !tbaa !17
  %1275 = icmp eq i64 %1274, 2145386496
  br i1 %1275, label %1276, label %1308

1276:                                             ; preds = %1270
  %1277 = load double, ptr %34, align 8, !tbaa !14
  store double %1277, ptr %35, align 8, !tbaa !14
  %1278 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1279 = load i64, ptr %1278, align 8, !tbaa !14
  %1280 = sub i64 %1279, 55574528
  store i64 %1280, ptr %1278, align 8, !tbaa !14
  %1281 = load double, ptr %30, align 8, !tbaa !29
  %1282 = call double @ulp(ptr noundef %34)
  %1283 = fmul double %1281, %1282
  store double %1283, ptr %33, align 8, !tbaa !14
  %1284 = load double, ptr %33, align 8, !tbaa !14
  %1285 = load double, ptr %34, align 8, !tbaa !14
  %1286 = fadd double %1285, %1284
  store double %1286, ptr %34, align 8, !tbaa !14
  %1287 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1288 = load i64, ptr %1287, align 8, !tbaa !14
  %1289 = and i64 %1288, 2146435072
  %1290 = icmp uge i64 %1289, 2090860544
  br i1 %1290, label %1291, label %1303

1291:                                             ; preds = %1276
  %1292 = getelementptr inbounds [2 x i64], ptr %35, i64 0, i64 1
  %1293 = load i64, ptr %1292, align 8, !tbaa !14
  %1294 = icmp eq i64 %1293, 2146435071
  br i1 %1294, label %1295, label %1300

1295:                                             ; preds = %1291
  %1296 = getelementptr inbounds [2 x i64], ptr %35, i64 0, i64 0
  %1297 = load i64, ptr %1296, align 8, !tbaa !14
  %1298 = icmp eq i64 %1297, 4294967295
  br i1 %1298, label %1299, label %1300

1299:                                             ; preds = %1295
  br label %556

1300:                                             ; preds = %1295, %1291
  %1301 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  store i64 2146435071, ptr %1301, align 8, !tbaa !14
  %1302 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  store i64 4294967295, ptr %1302, align 8, !tbaa !14
  br label %1414

1303:                                             ; preds = %1276
  %1304 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1305 = load i64, ptr %1304, align 8, !tbaa !14
  %1306 = add i64 %1305, 55574528
  store i64 %1306, ptr %1304, align 8, !tbaa !14
  br label %1307

1307:                                             ; preds = %1303
  br label %1362

1308:                                             ; preds = %1270
  %1309 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %1310 = load i32, ptr %1309, align 4, !tbaa !31
  %1311 = icmp ne i32 %1310, 0
  br i1 %1311, label %1312, label %1354

1312:                                             ; preds = %1308
  %1313 = load i64, ptr %36, align 8, !tbaa !17
  %1314 = icmp ule i64 %1313, 111149056
  br i1 %1314, label %1315, label %1354

1315:                                             ; preds = %1312
  %1316 = load double, ptr %29, align 8, !tbaa !29
  %1317 = fcmp ole double %1316, 0x41DFFFFFFFC00000
  br i1 %1317, label %1318, label %1336

1318:                                             ; preds = %1315
  %1319 = load double, ptr %29, align 8, !tbaa !29
  %1320 = fptoui double %1319 to i64
  store i64 %1320, ptr %37, align 8, !tbaa !17
  %1321 = icmp ule i64 %1320, 0
  br i1 %1321, label %1322, label %1323

1322:                                             ; preds = %1318
  store i64 1, ptr %37, align 8, !tbaa !17
  br label %1323

1323:                                             ; preds = %1322, %1318
  %1324 = load i64, ptr %37, align 8, !tbaa !17
  %1325 = uitofp i64 %1324 to double
  store double %1325, ptr %29, align 8, !tbaa !29
  %1326 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1327 = load i32, ptr %1326, align 4, !tbaa !42
  %1328 = icmp ne i32 %1327, 0
  br i1 %1328, label %1329, label %1331

1329:                                             ; preds = %1323
  %1330 = load double, ptr %29, align 8, !tbaa !29
  br label %1334

1331:                                             ; preds = %1323
  %1332 = load double, ptr %29, align 8, !tbaa !29
  %1333 = fneg double %1332
  br label %1334

1334:                                             ; preds = %1331, %1329
  %1335 = phi double [ %1330, %1329 ], [ %1333, %1331 ]
  store double %1335, ptr %30, align 8, !tbaa !29
  br label %1336

1336:                                             ; preds = %1334, %1315
  %1337 = load double, ptr %30, align 8, !tbaa !29
  store double %1337, ptr %32, align 8, !tbaa !14
  %1338 = load i64, ptr %36, align 8, !tbaa !17
  %1339 = sub i64 112197632, %1338
  %1340 = getelementptr inbounds [2 x i64], ptr %32, i64 0, i64 1
  %1341 = load i64, ptr %1340, align 8, !tbaa !14
  %1342 = add i64 %1341, %1339
  store i64 %1342, ptr %1340, align 8, !tbaa !14
  %1343 = load double, ptr %32, align 8, !tbaa !14
  store double %1343, ptr %30, align 8, !tbaa !29
  %1344 = load double, ptr %30, align 8, !tbaa !29
  %1345 = call double @ulp(ptr noundef %34)
  %1346 = fmul double %1344, %1345
  store double %1346, ptr %33, align 8, !tbaa !14
  %1347 = load double, ptr %33, align 8, !tbaa !14
  %1348 = load double, ptr %34, align 8, !tbaa !14
  %1349 = fadd double %1348, %1347
  store double %1349, ptr %34, align 8, !tbaa !14
  %1350 = load double, ptr %34, align 8, !tbaa !14
  %1351 = fcmp oeq double %1350, 0.000000e+00
  br i1 %1351, label %1352, label %1353

1352:                                             ; preds = %1336
  store i32 1, ptr %47, align 4, !tbaa !9
  br label %1419

1353:                                             ; preds = %1336
  br label %1361

1354:                                             ; preds = %1312, %1308
  %1355 = load double, ptr %30, align 8, !tbaa !29
  %1356 = call double @ulp(ptr noundef %34)
  %1357 = fmul double %1355, %1356
  store double %1357, ptr %33, align 8, !tbaa !14
  %1358 = load double, ptr %33, align 8, !tbaa !14
  %1359 = load double, ptr %34, align 8, !tbaa !14
  %1360 = fadd double %1359, %1358
  store double %1360, ptr %34, align 8, !tbaa !14
  br label %1361

1361:                                             ; preds = %1354, %1353
  br label %1362

1362:                                             ; preds = %1361, %1307
  %1363 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1364 = load i64, ptr %1363, align 8, !tbaa !14
  %1365 = and i64 %1364, 2146435072
  store i64 %1365, ptr %37, align 8, !tbaa !17
  %1366 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 6
  %1367 = load i32, ptr %1366, align 4, !tbaa !34
  %1368 = load i32, ptr %19, align 4, !tbaa !9
  %1369 = icmp eq i32 %1367, %1368
  br i1 %1369, label %1370, label %1413

1370:                                             ; preds = %1362
  %1371 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %1372 = load i32, ptr %1371, align 4, !tbaa !31
  %1373 = icmp ne i32 %1372, 0
  br i1 %1373, label %1412, label %1374

1374:                                             ; preds = %1370
  %1375 = load i64, ptr %36, align 8, !tbaa !17
  %1376 = load i64, ptr %37, align 8, !tbaa !17
  %1377 = icmp eq i64 %1375, %1376
  br i1 %1377, label %1378, label %1411

1378:                                             ; preds = %1374
  %1379 = load double, ptr %29, align 8, !tbaa !29
  %1380 = fptosi double %1379 to i64
  store i64 %1380, ptr %31, align 8, !tbaa !17
  %1381 = load i64, ptr %31, align 8, !tbaa !17
  %1382 = sitofp i64 %1381 to double
  %1383 = load double, ptr %29, align 8, !tbaa !29
  %1384 = fsub double %1383, %1382
  store double %1384, ptr %29, align 8, !tbaa !29
  %1385 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 3
  %1386 = load i32, ptr %1385, align 4, !tbaa !42
  %1387 = icmp ne i32 %1386, 0
  br i1 %1387, label %1397, label %1388

1388:                                             ; preds = %1378
  %1389 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 0
  %1390 = load i64, ptr %1389, align 8, !tbaa !14
  %1391 = icmp ne i64 %1390, 0
  br i1 %1391, label %1397, label %1392

1392:                                             ; preds = %1388
  %1393 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1394 = load i64, ptr %1393, align 8, !tbaa !14
  %1395 = and i64 %1394, 1048575
  %1396 = icmp ne i64 %1395, 0
  br i1 %1396, label %1397, label %1405

1397:                                             ; preds = %1392, %1388, %1378
  %1398 = load double, ptr %29, align 8, !tbaa !29
  %1399 = fcmp olt double %1398, 0x3FDFFFFF94A03595
  br i1 %1399, label %1403, label %1400

1400:                                             ; preds = %1397
  %1401 = load double, ptr %29, align 8, !tbaa !29
  %1402 = fcmp ogt double %1401, 0x3FE0000035AFE535
  br i1 %1402, label %1403, label %1404

1403:                                             ; preds = %1400, %1397
  br label %1419

1404:                                             ; preds = %1400
  br label %1410

1405:                                             ; preds = %1392
  %1406 = load double, ptr %29, align 8, !tbaa !29
  %1407 = fcmp olt double %1406, 0x3FCFFFFF94A03595
  br i1 %1407, label %1408, label %1409

1408:                                             ; preds = %1405
  br label %1419

1409:                                             ; preds = %1405
  br label %1410

1410:                                             ; preds = %1409, %1404
  br label %1411

1411:                                             ; preds = %1410, %1374
  br label %1412

1412:                                             ; preds = %1411, %1370
  br label %1413

1413:                                             ; preds = %1412, %1362
  br label %1414

1414:                                             ; preds = %1413, %1300, %1153
  %1415 = load ptr, ptr %39, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1415)
  %1416 = load ptr, ptr %41, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1416)
  %1417 = load ptr, ptr %43, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1417)
  %1418 = load ptr, ptr %44, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1418)
  br label %833

1419:                                             ; preds = %1408, %1403, %1352, %1235, %1198, %1194, %1173, %1165, %1154, %1136, %1130, %1098, %1053, %1044, %1032, %1009
  %1420 = load ptr, ptr %39, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1420)
  %1421 = load ptr, ptr %41, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1421)
  %1422 = load ptr, ptr %43, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1422)
  %1423 = load ptr, ptr %42, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1423)
  %1424 = load ptr, ptr %44, align 8, !tbaa !5
  call void @Bfree(ptr noundef %1424)
  %1425 = load i32, ptr %47, align 4, !tbaa !9
  %1426 = icmp ne i32 %1425, 0
  br i1 %1426, label %1427, label %1447

1427:                                             ; preds = %1419
  store ptr null, ptr %42, align 8, !tbaa !5
  %1428 = load i32, ptr %24, align 4, !tbaa !9
  %1429 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 4
  %1430 = load i32, ptr %1429, align 4, !tbaa !28
  %1431 = add nsw i32 %1430, %1428
  store i32 %1431, ptr %1429, align 4, !tbaa !28
  %1432 = load ptr, ptr %27, align 8, !tbaa !5
  call void @bigcomp(ptr noundef %34, ptr noundef %1432, ptr noundef %38)
  %1433 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1434 = load i64, ptr %1433, align 8, !tbaa !14
  %1435 = and i64 %1434, 2146435072
  store i64 %1435, ptr %36, align 8, !tbaa !17
  %1436 = load i64, ptr %36, align 8, !tbaa !17
  %1437 = icmp eq i64 %1436, 2146435072
  br i1 %1437, label %1438, label %1439

1438:                                             ; preds = %1427
  br label %556

1439:                                             ; preds = %1427
  %1440 = load i64, ptr %36, align 8, !tbaa !17
  %1441 = icmp eq i64 %1440, 0
  br i1 %1441, label %1442, label %1446

1442:                                             ; preds = %1439
  %1443 = load double, ptr %34, align 8, !tbaa !14
  %1444 = fcmp oeq double %1443, 0.000000e+00
  br i1 %1444, label %1445, label %1446

1445:                                             ; preds = %1442
  br label %717

1446:                                             ; preds = %1442, %1439
  br label %1447

1447:                                             ; preds = %1446, %1419
  %1448 = getelementptr inbounds %struct.BCinfo, ptr %38, i32 0, i32 9
  %1449 = load i32, ptr %1448, align 4, !tbaa !31
  %1450 = icmp ne i32 %1449, 0
  br i1 %1450, label %1451, label %1464

1451:                                             ; preds = %1447
  %1452 = getelementptr inbounds [2 x i64], ptr %35, i64 0, i64 1
  store i64 961544192, ptr %1452, align 8, !tbaa !14
  %1453 = getelementptr inbounds [2 x i64], ptr %35, i64 0, i64 0
  store i64 0, ptr %1453, align 8, !tbaa !14
  %1454 = load double, ptr %35, align 8, !tbaa !14
  %1455 = load double, ptr %34, align 8, !tbaa !14
  %1456 = fmul double %1455, %1454
  store double %1456, ptr %34, align 8, !tbaa !14
  %1457 = getelementptr inbounds [2 x i64], ptr %34, i64 0, i64 1
  %1458 = load i64, ptr %1457, align 8, !tbaa !14
  %1459 = and i64 %1458, 2146435072
  %1460 = icmp ne i64 %1459, 0
  br i1 %1460, label %1463, label %1461

1461:                                             ; preds = %1451
  %1462 = call ptr @__errno_location() #7
  store i32 34, ptr %1462, align 4, !tbaa !9
  br label %1463

1463:                                             ; preds = %1461, %1451
  br label %1464

1464:                                             ; preds = %1463, %1447
  br label %1465

1465:                                             ; preds = %1464, %568, %518, %498, %484, %477, %436, %430, %415, %93, %79
  %1466 = load ptr, ptr %4, align 8, !tbaa !5
  %1467 = icmp ne ptr %1466, null
  br i1 %1467, label %1468, label %1471

1468:                                             ; preds = %1465
  %1469 = load ptr, ptr %26, align 8, !tbaa !5
  %1470 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %1469, ptr %1470, align 8, !tbaa !5
  br label %1471

1471:                                             ; preds = %1468, %1465
  %1472 = load i32, ptr %25, align 4, !tbaa !9
  %1473 = icmp ne i32 %1472, 0
  br i1 %1473, label %1474, label %1477

1474:                                             ; preds = %1471
  %1475 = load double, ptr %34, align 8, !tbaa !14
  %1476 = fneg double %1475
  br label %1479

1477:                                             ; preds = %1471
  %1478 = load double, ptr %34, align 8, !tbaa !14
  br label %1479

1479:                                             ; preds = %1477, %1474
  %1480 = phi double [ %1476, %1474 ], [ %1478, %1477 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 44, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  ret double %1480
}

; Function Attrs: nounwind uwtable
declare hidden i32 @match(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @hexnan(ptr noundef, ptr noundef) #0

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

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
declare i32 @llvm.get.rounding() #4

; Function Attrs: nounwind uwtable
declare hidden ptr @s2b(ptr noundef, i32 noundef, i32 noundef, i64 noundef, i32 noundef) #0

; 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) #5

; Function Attrs: nounwind uwtable
declare hidden ptr @d2b(ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @i2b(i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @pow5mult(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @mult(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @diff(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @cmp(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden double @sulp(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden double @ratio(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden double @ulp(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @bigcomp(ptr noundef, ptr noundef, ptr noundef) #0

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 = { nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nounwind }
attributes #7 = { nounwind willreturn 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 40}
!12 = !{!"BCinfo", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40}
!13 = !{!12, !10, i64 8}
!14 = !{!7, !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !18, i64 0}
!18 = !{!"long", !7, i64 0}
!19 = distinct !{!19, !16}
!20 = !{!12, !10, i64 4}
!21 = !{!12, !10, i64 0}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}
!24 = distinct !{!24, !16}
!25 = distinct !{!25, !16}
!26 = distinct !{!26, !16}
!27 = distinct !{!27, !16}
!28 = !{!12, !10, i64 16}
!29 = !{!30, !30, i64 0}
!30 = !{!"double", !7, i64 0}
!31 = !{!12, !10, i64 36}
!32 = distinct !{!32, !16}
!33 = distinct !{!33, !16}
!34 = !{!12, !10, i64 24}
!35 = !{!12, !10, i64 28}
!36 = distinct !{!36, !16}
!37 = distinct !{!37, !16}
!38 = !{!39, !10, i64 8}
!39 = !{!"Bigint", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24}
!40 = !{!39, !10, i64 20}
!41 = !{!39, !10, i64 16}
!42 = !{!12, !10, i64 12}


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

%union.U = type { [2 x i64] }
%struct.BCinfo = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@tens = external hidden local_unnamed_addr constant [23 x double], align 16
@bigtens = external hidden local_unnamed_addr constant [5 x double], align 16
@tinytens = external hidden local_unnamed_addr constant [5 x double], align 16

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

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

; Function Attrs: nounwind uwtable
declare hidden void @Bfree(ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden ptr @Balloc(i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @lshift(ptr noundef, i32 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local double @strtod(ptr noundef nonnull %0, ptr noundef writeonly %1) local_unnamed_addr #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %union.U, align 8
  %7 = alloca %struct.BCinfo, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 44, ptr nonnull %7) #7
  %8 = getelementptr inbounds i8, ptr %7, i64 40
  store i32 0, ptr %8, align 4, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %7, i64 8
  store i32 0, ptr %9, align 4, !tbaa !10
  store double 0.000000e+00, ptr %6, align 8, !tbaa !11
  br label %10

10:                                               ; preds = %14, %2
  %storemerge = phi ptr [ %0, %2 ], [ %15, %14 ]
  %11 = load i8, ptr %storemerge, align 1, !tbaa !11
  switch i8 %11, label %.loopexit588 [
    i8 45, label %.loopexit589.loopexit1007
    i8 43, label %.loopexit589
    i8 0, label %.loopexit590
    i8 9, label %14
    i8 10, label %14
    i8 11, label %14
    i8 12, label %14
    i8 13, label %14
    i8 32, label %14
  ]

.loopexit589.loopexit1007:                        ; preds = %10
  br label %.loopexit589

.loopexit589:                                     ; preds = %10, %.loopexit589.loopexit1007
  %.0404 = phi i32 [ 1, %.loopexit589.loopexit1007 ], [ 0, %10 ]
  %12 = getelementptr inbounds i8, ptr %storemerge, i64 1
  store ptr %12, ptr %5, align 8, !tbaa !12
  %13 = load i8, ptr %12, align 1, !tbaa !11
  %.not = icmp eq i8 %13, 0
  br i1 %.not, label %.loopexit590, label %16

14:                                               ; preds = %10, %10, %10, %10, %10, %10
  %15 = getelementptr inbounds i8, ptr %storemerge, i64 1
  br label %10

.loopexit588:                                     ; preds = %10
  store ptr %storemerge, ptr %5, align 8, !tbaa !12
  br label %16

16:                                               ; preds = %.loopexit588, %.loopexit589
  %17 = phi i8 [ %13, %.loopexit589 ], [ %11, %.loopexit588 ]
  %.promoted = phi ptr [ %12, %.loopexit589 ], [ %storemerge, %.loopexit588 ]
  %.1405 = phi i32 [ %.0404, %.loopexit589 ], [ 0, %.loopexit588 ]
  %18 = icmp eq i8 %17, 48
  br i1 %18, label %19, label %.loopexit586

19:                                               ; preds = %16
  %20 = getelementptr inbounds i8, ptr %.promoted, i64 1
  %21 = load i8, ptr %20, align 1, !tbaa !11
  switch i8 %21, label %.preheader585 [
    i8 120, label %22
    i8 88, label %22
  ]

22:                                               ; preds = %19, %19
  call void @gethex(ptr noundef nonnull %5, ptr noundef nonnull %6, i32 noundef 1, i32 noundef %.1405)
  br label %.loopexit587

.preheader585:                                    ; preds = %19, %.preheader585
  %23 = phi ptr [ %24, %.preheader585 ], [ %.promoted, %19 ]
  %24 = getelementptr inbounds i8, ptr %23, i64 1
  store ptr %24, ptr %5, align 8, !tbaa !12
  %25 = load i8, ptr %24, align 1, !tbaa !11
  switch i8 %25, label %.loopexit586 [
    i8 48, label %.preheader585
    i8 0, label %.loopexit587
  ]

.loopexit586:                                     ; preds = %.preheader585, %16
  %26 = phi i8 [ %17, %16 ], [ %25, %.preheader585 ]
  %27 = phi ptr [ %.promoted, %16 ], [ %24, %.preheader585 ]
  %28 = ptrtoint ptr %27 to i64
  %29 = sext i8 %26 to i32
  %30 = add i8 %26, -48
  %31 = icmp ult i8 %30, 10
  br i1 %31, label %.lr.ph, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %.loopexit586
  %32 = getelementptr inbounds i8, ptr %7, i64 4
  store i32 0, ptr %32, align 4, !tbaa !14
  store i32 0, ptr %7, align 4, !tbaa !15
  br label %.critedge

.lr.ph:                                           ; preds = %.loopexit586, %48
  %33 = phi i32 [ %52, %48 ], [ %29, %.loopexit586 ]
  %.0371650 = phi i64 [ %.1372, %48 ], [ 0, %.loopexit586 ]
  %.0377649 = phi i64 [ %.1378, %48 ], [ 0, %.loopexit586 ]
  %.0425648 = phi i32 [ %49, %48 ], [ 0, %.loopexit586 ]
  %34 = phi ptr [ %50, %48 ], [ %27, %.loopexit586 ]
  %35 = icmp ult i32 %.0425648, 9
  br i1 %35, label %36, label %41

36:                                               ; preds = %.lr.ph
  %37 = mul i64 %.0377649, 10
  %38 = zext nneg i32 %33 to i64
  %39 = add i64 %37, -48
  %40 = add i64 %39, %38
  br label %48

41:                                               ; preds = %.lr.ph
  %42 = icmp ult i32 %.0425648, 17
  br i1 %42, label %43, label %48

43:                                               ; preds = %41
  %44 = mul i64 %.0371650, 10
  %45 = zext nneg i32 %33 to i64
  %46 = add i64 %44, -48
  %47 = add i64 %46, %45
  br label %48

48:                                               ; preds = %36, %43, %41
  %.1378 = phi i64 [ %40, %36 ], [ %.0377649, %43 ], [ %.0377649, %41 ]
  %.1372 = phi i64 [ %.0371650, %36 ], [ %47, %43 ], [ %.0371650, %41 ]
  %49 = add nuw nsw i32 %.0425648, 1
  %50 = getelementptr inbounds i8, ptr %34, i64 1
  store ptr %50, ptr %5, align 8, !tbaa !12
  %51 = load i8, ptr %50, align 1, !tbaa !11
  %52 = sext i8 %51 to i32
  %53 = add i8 %51, -48
  %54 = icmp ult i8 %53, 10
  br i1 %54, label %.lr.ph, label %._crit_edge, !llvm.loop !16

._crit_edge:                                      ; preds = %48
  %.pre792 = ptrtoint ptr %50 to i64
  %55 = sub i64 %.pre792, %28
  %56 = trunc i64 %55 to i32
  %57 = getelementptr inbounds i8, ptr %7, i64 4
  store i32 %56, ptr %57, align 4, !tbaa !14
  store i32 %56, ptr %7, align 4, !tbaa !15
  %58 = icmp ugt ptr %50, %27
  br i1 %58, label %.lr.ph659.preheader, label %.critedge

.lr.ph659.preheader:                              ; preds = %._crit_edge
  %59 = trunc i64 %.pre792 to i32
  %60 = trunc i64 %28 to i32
  %61 = sub i32 %59, %60
  br label %.lr.ph659

.lr.ph659:                                        ; preds = %.lr.ph659.preheader, %65
  %.0400657 = phi ptr [ %62, %65 ], [ %50, %.lr.ph659.preheader ]
  %.0407656 = phi i32 [ %66, %65 ], [ 0, %.lr.ph659.preheader ]
  %62 = getelementptr inbounds i8, ptr %.0400657, i64 -1
  %63 = load i8, ptr %62, align 1, !tbaa !11
  %64 = icmp eq i8 %63, 48
  br i1 %64, label %65, label %.critedge

65:                                               ; preds = %.lr.ph659
  %66 = add nuw nsw i32 %.0407656, 1
  %67 = icmp ugt ptr %62, %27
  br i1 %67, label %.lr.ph659, label %.critedge, !llvm.loop !18

.critedge:                                        ; preds = %.lr.ph659, %65, %._crit_edge.thread, %._crit_edge
  %68 = phi ptr [ %57, %._crit_edge ], [ %32, %._crit_edge.thread ], [ %57, %65 ], [ %57, %.lr.ph659 ]
  %69 = phi i32 [ %56, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %56, %65 ], [ %56, %.lr.ph659 ]
  %.lcssa637808 = phi i32 [ %52, %._crit_edge ], [ %29, %._crit_edge.thread ], [ %52, %65 ], [ %52, %.lr.ph659 ]
  %.lcssa638807 = phi i8 [ %51, %._crit_edge ], [ %26, %._crit_edge.thread ], [ %51, %65 ], [ %51, %.lr.ph659 ]
  %.lcssa639806 = phi ptr [ %50, %._crit_edge ], [ %27, %._crit_edge.thread ], [ %50, %65 ], [ %50, %.lr.ph659 ]
  %.0371.lcssa805 = phi i64 [ %.1372, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %.1372, %65 ], [ %.1372, %.lr.ph659 ]
  %.0377.lcssa804 = phi i64 [ %.1378, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %.1378, %65 ], [ %.1378, %.lr.ph659 ]
  %.0425.lcssa803 = phi i32 [ %49, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %49, %65 ], [ %49, %.lr.ph659 ]
  %.0407.lcssa = phi i32 [ 0, %._crit_edge ], [ 0, %._crit_edge.thread ], [ %.0407656, %.lr.ph659 ], [ %61, %65 ]
  %70 = icmp eq i8 %.lcssa638807, 46
  br i1 %70, label %71, label %146

71:                                               ; preds = %.critedge
  %72 = getelementptr inbounds i8, ptr %.lcssa639806, i64 1
  store ptr %72, ptr %5, align 8, !tbaa !12
  %73 = load i8, ptr %72, align 1, !tbaa !11
  %74 = sext i8 %73 to i32
  %75 = ptrtoint ptr %72 to i64
  %76 = sub i64 %75, %28
  %77 = trunc i64 %76 to i32
  store i32 %77, ptr %68, align 4, !tbaa !14
  %78 = sub nsw i32 %77, %69
  store i32 %78, ptr %9, align 4, !tbaa !10
  %.not492 = icmp eq i32 %.0425.lcssa803, 0
  br i1 %.not492, label %.preheader584, label %93

.preheader584:                                    ; preds = %71
  %79 = icmp eq i8 %73, 48
  br i1 %79, label %.lr.ph665, label %._crit_edge666

.lr.ph665:                                        ; preds = %.preheader584, %.lr.ph665
  %.0413664 = phi i32 [ %81, %.lr.ph665 ], [ 0, %.preheader584 ]
  %80 = phi ptr [ %82, %.lr.ph665 ], [ %72, %.preheader584 ]
  %81 = add nuw nsw i32 %.0413664, 1
  %82 = getelementptr inbounds i8, ptr %80, i64 1
  store ptr %82, ptr %5, align 8, !tbaa !12
  %83 = load i8, ptr %82, align 1, !tbaa !11
  %84 = icmp eq i8 %83, 48
  br i1 %84, label %.lr.ph665, label %._crit_edge666.loopexit, !llvm.loop !19

._crit_edge666.loopexit:                          ; preds = %.lr.ph665
  %85 = sext i8 %83 to i32
  br label %._crit_edge666

._crit_edge666:                                   ; preds = %._crit_edge666.loopexit, %.preheader584
  %86 = phi ptr [ %72, %.preheader584 ], [ %82, %._crit_edge666.loopexit ]
  %.0453.lcssa = phi i32 [ %74, %.preheader584 ], [ %85, %._crit_edge666.loopexit ]
  %.0413.lcssa = phi i32 [ 0, %.preheader584 ], [ %81, %._crit_edge666.loopexit ]
  %87 = add nsw i32 %.0453.lcssa, -49
  %or.cond = icmp ult i32 %87, 9
  br i1 %or.cond, label %88, label %146

88:                                               ; preds = %._crit_edge666
  %89 = ptrtoint ptr %86 to i64
  %90 = sub i64 %28, %89
  %91 = trunc i64 %90 to i32
  store i32 %91, ptr %7, align 4, !tbaa !15
  %92 = add nsw i32 %78, %91
  store i32 %92, ptr %68, align 4, !tbaa !14
  br label %99

93:                                               ; preds = %71, %142
  %94 = phi i32 [ %69, %71 ], [ %100, %142 ]
  %95 = phi i32 [ %77, %71 ], [ %101, %142 ]
  %96 = phi ptr [ %72, %71 ], [ %143, %142 ]
  %.1454 = phi i32 [ %74, %71 ], [ %145, %142 ]
  %.1426 = phi i32 [ %.0425.lcssa803, %71 ], [ %.4429, %142 ]
  %.0418 = phi i32 [ 0, %71 ], [ %.2420, %142 ]
  %.1414 = phi i32 [ 0, %71 ], [ %.3416, %142 ]
  %.1408 = phi i32 [ %.0407.lcssa, %71 ], [ %.3410, %142 ]
  %.0401 = phi ptr [ %27, %71 ], [ %.1402, %142 ]
  %.2379 = phi i64 [ %.0377.lcssa804, %71 ], [ %.7384, %142 ]
  %.2373 = phi i64 [ %.0371.lcssa805, %71 ], [ %.7, %142 ]
  %97 = add nsw i32 %.1454, -48
  %98 = icmp ult i32 %97, 10
  br i1 %98, label %99, label %146

99:                                               ; preds = %93, %88
  %100 = phi i32 [ %94, %93 ], [ %91, %88 ]
  %101 = phi i32 [ %95, %93 ], [ %92, %88 ]
  %102 = phi ptr [ %96, %93 ], [ %86, %88 ]
  %.2455 = phi i32 [ %.1454, %93 ], [ %.0453.lcssa, %88 ]
  %.2427 = phi i32 [ %.1426, %93 ], [ 0, %88 ]
  %.1419 = phi i32 [ %.0418, %93 ], [ %.0413.lcssa, %88 ]
  %.2415 = phi i32 [ %.1414, %93 ], [ 0, %88 ]
  %.2409 = phi i32 [ %.1408, %93 ], [ %.0407.lcssa, %88 ]
  %.1402 = phi ptr [ %.0401, %93 ], [ %86, %88 ]
  %.3380 = phi i64 [ %.2379, %93 ], [ %.0377.lcssa804, %88 ]
  %.3374 = phi i64 [ %.2373, %93 ], [ %.0371.lcssa805, %88 ]
  %103 = add i32 %.2415, 1
  %104 = add nsw i32 %.2455, -48
  %.not537 = icmp eq i32 %104, 0
  br i1 %.not537, label %142, label %105

105:                                              ; preds = %99
  %106 = add nsw i32 %103, %.1419
  %.not538669 = icmp slt i32 %.2415, 1
  br i1 %.not538669, label %._crit_edge676, label %.lr.ph675.preheader

.lr.ph675.preheader:                              ; preds = %105
  %xtraiter = and i32 %.2415, 1
  %107 = icmp eq i32 %.2415, 1
  br i1 %107, label %._crit_edge676.loopexit.unr-lcssa, label %.lr.ph675.preheader.new

.lr.ph675.preheader.new:                          ; preds = %.lr.ph675.preheader
  %unroll_iter = and i32 %.2415, 2147483646
  br label %.lr.ph675

.lr.ph675:                                        ; preds = %122, %.lr.ph675.preheader.new
  %.4375673 = phi i64 [ %.3374, %.lr.ph675.preheader.new ], [ %.5376.1, %122 ]
  %.4381672 = phi i64 [ %.3380, %.lr.ph675.preheader.new ], [ %.5382.1, %122 ]
  %.3428671 = phi i32 [ %.2427, %.lr.ph675.preheader.new ], [ %115, %122 ]
  %niter = phi i32 [ 0, %.lr.ph675.preheader.new ], [ %niter.next.1, %122 ]
  %108 = add nsw i32 %.3428671, 1
  %109 = icmp slt i32 %.3428671, 9
  br i1 %109, label %110, label %112

110:                                              ; preds = %.lr.ph675
  %111 = mul i64 %.4381672, 10
  br label %.lr.ph675.1

112:                                              ; preds = %.lr.ph675
  %113 = icmp ult i32 %.3428671, 17
  %114 = mul i64 %.4375673, 10
  %spec.select = select i1 %113, i64 %114, i64 %.4375673
  br label %.lr.ph675.1

.lr.ph675.1:                                      ; preds = %112, %110
  %.5382 = phi i64 [ %111, %110 ], [ %.4381672, %112 ]
  %.5376 = phi i64 [ %.4375673, %110 ], [ %spec.select, %112 ]
  %115 = add nsw i32 %.3428671, 2
  %116 = icmp slt i32 %.3428671, 8
  br i1 %116, label %120, label %117

117:                                              ; preds = %.lr.ph675.1
  %118 = icmp ult i32 %108, 17
  %119 = mul i64 %.5376, 10
  %spec.select.1 = select i1 %118, i64 %119, i64 %.5376
  br label %122

120:                                              ; preds = %.lr.ph675.1
  %121 = mul i64 %.5382, 10
  br label %122

122:                                              ; preds = %120, %117
  %.5382.1 = phi i64 [ %121, %120 ], [ %.5382, %117 ]
  %.5376.1 = phi i64 [ %.5376, %120 ], [ %spec.select.1, %117 ]
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge676.loopexit.unr-lcssa, label %.lr.ph675, !llvm.loop !20

._crit_edge676.loopexit.unr-lcssa:                ; preds = %122, %.lr.ph675.preheader
  %.5382.lcssa.ph = phi i64 [ poison, %.lr.ph675.preheader ], [ %.5382.1, %122 ]
  %.5376.lcssa.ph = phi i64 [ poison, %.lr.ph675.preheader ], [ %.5376.1, %122 ]
  %.4375673.unr = phi i64 [ %.3374, %.lr.ph675.preheader ], [ %.5376.1, %122 ]
  %.4381672.unr = phi i64 [ %.3380, %.lr.ph675.preheader ], [ %.5382.1, %122 ]
  %.3428671.unr = phi i32 [ %.2427, %.lr.ph675.preheader ], [ %115, %122 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge676.loopexit, label %.lr.ph675.epil

.lr.ph675.epil:                                   ; preds = %._crit_edge676.loopexit.unr-lcssa
  %123 = icmp slt i32 %.3428671.unr, 9
  br i1 %123, label %127, label %124

124:                                              ; preds = %.lr.ph675.epil
  %125 = icmp ult i32 %.3428671.unr, 17
  %126 = mul i64 %.4375673.unr, 10
  %spec.select.epil = select i1 %125, i64 %126, i64 %.4375673.unr
  br label %._crit_edge676.loopexit

127:                                              ; preds = %.lr.ph675.epil
  %128 = mul i64 %.4381672.unr, 10
  br label %._crit_edge676.loopexit

._crit_edge676.loopexit:                          ; preds = %124, %127, %._crit_edge676.loopexit.unr-lcssa
  %.5382.lcssa = phi i64 [ %.5382.lcssa.ph, %._crit_edge676.loopexit.unr-lcssa ], [ %128, %127 ], [ %.4381672.unr, %124 ]
  %.5376.lcssa = phi i64 [ %.5376.lcssa.ph, %._crit_edge676.loopexit.unr-lcssa ], [ %.4375673.unr, %127 ], [ %spec.select.epil, %124 ]
  %129 = add i32 %.2427, %.2415
  br label %._crit_edge676

._crit_edge676:                                   ; preds = %._crit_edge676.loopexit, %105
  %.3428.lcssa = phi i32 [ %.2427, %105 ], [ %129, %._crit_edge676.loopexit ]
  %.4381.lcssa = phi i64 [ %.3380, %105 ], [ %.5382.lcssa, %._crit_edge676.loopexit ]
  %.4375.lcssa = phi i64 [ %.3374, %105 ], [ %.5376.lcssa, %._crit_edge676.loopexit ]
  %130 = add nsw i32 %.3428.lcssa, 1
  %131 = icmp slt i32 %.3428.lcssa, 9
  br i1 %131, label %132, label %136

132:                                              ; preds = %._crit_edge676
  %133 = mul i64 %.4381.lcssa, 10
  %134 = sext i32 %104 to i64
  %135 = add i64 %133, %134
  br label %142

136:                                              ; preds = %._crit_edge676
  %137 = icmp ult i32 %.3428.lcssa, 17
  br i1 %137, label %138, label %142

138:                                              ; preds = %136
  %139 = mul i64 %.4375.lcssa, 10
  %140 = sext i32 %104 to i64
  %141 = add i64 %139, %140
  br label %142

142:                                              ; preds = %132, %138, %136, %99
  %.4429 = phi i32 [ %.2427, %99 ], [ %130, %136 ], [ %130, %138 ], [ %130, %132 ]
  %.2420 = phi i32 [ %.1419, %99 ], [ %106, %136 ], [ %106, %138 ], [ %106, %132 ]
  %.3416 = phi i32 [ %103, %99 ], [ 0, %136 ], [ 0, %138 ], [ 0, %132 ]
  %.3410 = phi i32 [ %.2409, %99 ], [ 0, %136 ], [ 0, %138 ], [ 0, %132 ]
  %.7384 = phi i64 [ %.3380, %99 ], [ %.4381.lcssa, %136 ], [ %.4381.lcssa, %138 ], [ %135, %132 ]
  %.7 = phi i64 [ %.3374, %99 ], [ %.4375.lcssa, %136 ], [ %141, %138 ], [ %.4375.lcssa, %132 ]
  %143 = getelementptr inbounds i8, ptr %102, i64 1
  store ptr %143, ptr %5, align 8, !tbaa !12
  %144 = load i8, ptr %143, align 1, !tbaa !11
  %145 = sext i8 %144 to i32
  br label %93, !llvm.loop !21

146:                                              ; preds = %.critedge, %93, %._crit_edge666
  %147 = phi i32 [ %94, %93 ], [ %69, %._crit_edge666 ], [ %69, %.critedge ]
  %148 = phi i32 [ %95, %93 ], [ %77, %._crit_edge666 ], [ %69, %.critedge ]
  %149 = phi i32 [ %78, %93 ], [ %78, %._crit_edge666 ], [ 0, %.critedge ]
  %150 = phi ptr [ %96, %93 ], [ %86, %._crit_edge666 ], [ %.lcssa639806, %.critedge ]
  %.3456 = phi i32 [ %.1454, %93 ], [ %.0453.lcssa, %._crit_edge666 ], [ %.lcssa637808, %.critedge ]
  %.5430 = phi i32 [ %.1426, %93 ], [ 0, %._crit_edge666 ], [ %.0425.lcssa803, %.critedge ]
  %.3421 = phi i32 [ %.0418, %93 ], [ 0, %._crit_edge666 ], [ 0, %.critedge ]
  %.4417 = phi i32 [ %.1414, %93 ], [ %.0413.lcssa, %._crit_edge666 ], [ 0, %.critedge ]
  %.4411 = phi i32 [ %.1408, %93 ], [ %.0407.lcssa, %._crit_edge666 ], [ %.0407.lcssa, %.critedge ]
  %.2403 = phi ptr [ %.0401, %93 ], [ %27, %._crit_edge666 ], [ %27, %.critedge ]
  %.8385 = phi i64 [ %.2379, %93 ], [ %.0377.lcssa804, %._crit_edge666 ], [ %.0377.lcssa804, %.critedge ]
  %.8 = phi i64 [ %.2373, %93 ], [ %.0371.lcssa805, %._crit_edge666 ], [ %.0371.lcssa805, %.critedge ]
  %151 = and i32 %.3456, -33
  %or.cond3 = icmp eq i32 %151, 69
  br i1 %or.cond3, label %152, label %200

152:                                              ; preds = %146
  %153 = icmp ne i32 %.5430, 0
  %154 = icmp ne i32 %.4417, 0
  %or.cond5 = select i1 %153, i1 true, i1 %154
  %or.cond7 = or i1 %18, %or.cond5
  br i1 %or.cond7, label %155, label %.loopexit590

155:                                              ; preds = %152
  %156 = getelementptr inbounds i8, ptr %150, i64 1
  store ptr %156, ptr %5, align 8, !tbaa !12
  %157 = load i8, ptr %156, align 1, !tbaa !11
  switch i8 %157, label %162 [
    i8 45, label %158
    i8 43, label %159
  ]

158:                                              ; preds = %155
  br label %159

159:                                              ; preds = %158, %155
  %.0446 = phi i32 [ 0, %155 ], [ 1, %158 ]
  %160 = getelementptr inbounds i8, ptr %150, i64 2
  store ptr %160, ptr %5, align 8, !tbaa !12
  %161 = load i8, ptr %160, align 1, !tbaa !11
  br label %162

162:                                              ; preds = %159, %155
  %.promoted680 = phi ptr [ %156, %155 ], [ %160, %159 ]
  %.4457.in = phi i8 [ %157, %155 ], [ %161, %159 ]
  %.1447 = phi i32 [ 0, %155 ], [ %.0446, %159 ]
  %.4457 = sext i8 %.4457.in to i32
  %163 = add i8 %.4457.in, -48
  %or.cond9 = icmp ult i8 %163, 10
  br i1 %or.cond9, label %.preheader583, label %199

.preheader583:                                    ; preds = %162
  %164 = icmp eq i8 %.4457.in, 48
  br i1 %164, label %.lr.ph681, label %._crit_edge682

.lr.ph681:                                        ; preds = %.preheader583, %.lr.ph681
  %165 = phi ptr [ %166, %.lr.ph681 ], [ %.promoted680, %.preheader583 ]
  %166 = getelementptr inbounds i8, ptr %165, i64 1
  store ptr %166, ptr %5, align 8, !tbaa !12
  %167 = load i8, ptr %166, align 1, !tbaa !11
  %168 = icmp eq i8 %167, 48
  br i1 %168, label %.lr.ph681, label %._crit_edge682.loopexit, !llvm.loop !22

._crit_edge682.loopexit:                          ; preds = %.lr.ph681
  %169 = sext i8 %167 to i32
  br label %._crit_edge682

._crit_edge682:                                   ; preds = %._crit_edge682.loopexit, %.preheader583
  %170 = phi ptr [ %.promoted680, %.preheader583 ], [ %166, %._crit_edge682.loopexit ]
  %.5458.lcssa = phi i32 [ %.4457, %.preheader583 ], [ %169, %._crit_edge682.loopexit ]
  %171 = add nsw i32 %.5458.lcssa, -49
  %or.cond11 = icmp ult i32 %171, 9
  br i1 %or.cond11, label %172, label %200

172:                                              ; preds = %._crit_edge682
  %173 = add nsw i32 %.5458.lcssa, -48
  %174 = zext nneg i32 %173 to i64
  %175 = getelementptr inbounds i8, ptr %170, i64 1
  store ptr %175, ptr %5, align 8, !tbaa !12
  %176 = load i8, ptr %175, align 1, !tbaa !11
  %177 = sext i8 %176 to i32
  %178 = add i8 %176, -48
  %179 = icmp ult i8 %178, 10
  br i1 %179, label %.lr.ph688, label %._crit_edge689

.lr.ph688:                                        ; preds = %172, %.lr.ph688
  %180 = phi i32 [ %188, %.lr.ph688 ], [ %177, %172 ]
  %181 = phi ptr [ %186, %.lr.ph688 ], [ %175, %172 ]
  %.0393686 = phi i64 [ %185, %.lr.ph688 ], [ %174, %172 ]
  %182 = mul nsw i64 %.0393686, 10
  %183 = zext nneg i32 %180 to i64
  %184 = add i64 %182, -48
  %185 = add i64 %184, %183
  %186 = getelementptr inbounds i8, ptr %181, i64 1
  store ptr %186, ptr %5, align 8, !tbaa !12
  %187 = load i8, ptr %186, align 1, !tbaa !11
  %188 = sext i8 %187 to i32
  %189 = add i8 %187, -48
  %190 = icmp ult i8 %189, 10
  br i1 %190, label %.lr.ph688, label %._crit_edge689, !llvm.loop !23

._crit_edge689:                                   ; preds = %.lr.ph688, %172
  %.lcssa684 = phi ptr [ %170, %172 ], [ %181, %.lr.ph688 ]
  %.0393.lcssa = phi i64 [ %174, %172 ], [ %185, %.lr.ph688 ]
  %.lcssa635 = phi i32 [ %177, %172 ], [ %188, %.lr.ph688 ]
  %191 = getelementptr inbounds i8, ptr %.lcssa684, i64 1
  %192 = ptrtoint ptr %191 to i64
  %193 = ptrtoint ptr %170 to i64
  %194 = sub i64 %192, %193
  %195 = icmp sgt i64 %194, 8
  %196 = icmp sgt i64 %.0393.lcssa, 19999
  %or.cond13 = select i1 %195, i1 true, i1 %196
  %197 = trunc i64 %.0393.lcssa to i32
  %.0450 = select i1 %or.cond13, i32 19999, i32 %197
  %.not493 = icmp eq i32 %.1447, 0
  %198 = sub nsw i32 0, %.0450
  %spec.select548 = select i1 %.not493, i32 %.0450, i32 %198
  br label %200

199:                                              ; preds = %162
  store ptr %150, ptr %5, align 8, !tbaa !12
  br label %200

200:                                              ; preds = %._crit_edge689, %._crit_edge682, %199, %146
  %.6459 = phi i32 [ %.4457, %199 ], [ %.3456, %146 ], [ %.5458.lcssa, %._crit_edge682 ], [ %.lcssa635, %._crit_edge689 ]
  %.1451 = phi i32 [ 0, %199 ], [ 0, %146 ], [ 0, %._crit_edge682 ], [ %spec.select548, %._crit_edge689 ]
  %.0364 = phi ptr [ %150, %199 ], [ %0, %146 ], [ %150, %._crit_edge682 ], [ %150, %._crit_edge689 ]
  %.not494 = icmp eq i32 %.5430, 0
  br i1 %.not494, label %201, label %223

201:                                              ; preds = %200
  %202 = icmp ne i32 %.4417, 0
  %or.cond15 = or i1 %18, %202
  br i1 %or.cond15, label %.loopexit587, label %203

203:                                              ; preds = %201
  %.not495 = icmp eq i32 %149, 0
  br i1 %.not495, label %204, label %.loopexit590

204:                                              ; preds = %203
  switch i32 %.6459, label %.loopexit590 [
    i32 105, label %205
    i32 73, label %205
    i32 110, label %215
    i32 78, label %215
  ]

205:                                              ; preds = %204, %204
  %206 = call i32 @match(ptr noundef nonnull %5, ptr noundef nonnull @.str)
  %.not497 = icmp eq i32 %206, 0
  br i1 %.not497, label %.loopexit590, label %207

207:                                              ; preds = %205
  %208 = load ptr, ptr %5, align 8, !tbaa !12
  %209 = getelementptr inbounds i8, ptr %208, i64 -1
  store ptr %209, ptr %5, align 8, !tbaa !12
  %210 = call i32 @match(ptr noundef nonnull %5, ptr noundef nonnull @.str.1)
  %.not498 = icmp eq i32 %210, 0
  br i1 %.not498, label %211, label %214

211:                                              ; preds = %207
  %212 = load ptr, ptr %5, align 8, !tbaa !12
  %213 = getelementptr inbounds i8, ptr %212, i64 1
  store ptr %213, ptr %5, align 8, !tbaa !12
  br label %214

214:                                              ; preds = %211, %207
  store i64 0, ptr %6, align 8, !tbaa !11
  br label %.loopexit587

215:                                              ; preds = %204, %204
  %216 = call i32 @match(ptr noundef nonnull %5, ptr noundef nonnull @.str.2)
  %.not496 = icmp eq i32 %216, 0
  br i1 %.not496, label %.loopexit590, label %217

217:                                              ; preds = %215
  %218 = getelementptr inbounds i8, ptr %6, i64 8
  store i64 2146959360, ptr %218, align 8, !tbaa !11
  store i64 0, ptr %6, align 8, !tbaa !11
  %219 = load ptr, ptr %5, align 8, !tbaa !12
  %220 = load i8, ptr %219, align 1, !tbaa !11
  %221 = icmp eq i8 %220, 40
  br i1 %221, label %222, label %.loopexit587

222:                                              ; preds = %217
  call void @hexnan(ptr noundef nonnull %6, ptr noundef nonnull %5)
  br label %.loopexit587

.loopexit590:                                     ; preds = %10, %203, %215, %205, %204, %152, %.loopexit589
  %.1365 = phi ptr [ %.0364, %203 ], [ %.0364, %204 ], [ %.0364, %215 ], [ %.0364, %205 ], [ %0, %152 ], [ %0, %.loopexit589 ], [ %0, %10 ]
  store ptr %.1365, ptr %5, align 8, !tbaa !12
  br label %.loopexit587

223:                                              ; preds = %200
  %224 = sub nsw i32 %.1451, %.3421
  %225 = getelementptr inbounds i8, ptr %7, i64 16
  store i32 %224, ptr %225, align 4, !tbaa !24
  %.not499 = icmp eq i32 %.0425.lcssa803, 0
  %spec.select539 = select i1 %.not499, i32 %.5430, i32 %.0425.lcssa803
  %226 = tail call i32 @llvm.smin.i32(i32 %.5430, i32 17)
  %227 = uitofp i64 %.8385 to double
  store double %227, ptr %6, align 8, !tbaa !11
  %228 = icmp sgt i32 %.5430, 9
  br i1 %228, label %229, label %.thread

229:                                              ; preds = %223
  %230 = add nsw i32 %226, -9
  %231 = zext nneg i32 %230 to i64
  %232 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !25
  %234 = uitofp i64 %.8 to double
  %235 = tail call double @llvm.fmuladd.f64(double %233, double %227, double %234)
  store double %235, ptr %6, align 8, !tbaa !11
  %236 = icmp ult i32 %.5430, 16
  br i1 %236, label %.thread, label %271

.thread:                                          ; preds = %223, %229
  %237 = phi double [ %227, %223 ], [ %235, %229 ]
  %238 = tail call i32 @llvm.get.rounding()
  %239 = icmp eq i32 %238, 1
  br i1 %239, label %240, label %271

240:                                              ; preds = %.thread
  %.not500 = icmp eq i32 %224, 0
  br i1 %.not500, label %.loopexit587, label %241

241:                                              ; preds = %240
  %242 = icmp sgt i32 %224, 0
  br i1 %242, label %243, label %263

243:                                              ; preds = %241
  %244 = icmp ult i32 %224, 23
  br i1 %244, label %245, label %250

245:                                              ; preds = %243
  %246 = zext nneg i32 %224 to i64
  %247 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %246
  %248 = load double, ptr %247, align 8, !tbaa !25
  %249 = fmul double %248, %237
  store double %249, ptr %6, align 8, !tbaa !11
  br label %.loopexit587

250:                                              ; preds = %243
  %251 = sub i32 37, %.5430
  %.not501 = icmp sgt i32 %224, %251
  br i1 %.not501, label %271, label %252

252:                                              ; preds = %250
  %253 = sub nsw i32 15, %.5430
  %254 = sub nsw i32 %224, %253
  %255 = zext nneg i32 %253 to i64
  %256 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %255
  %257 = load double, ptr %256, align 8, !tbaa !25
  %258 = fmul double %257, %237
  %259 = sext i32 %254 to i64
  %260 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %259
  %261 = load double, ptr %260, align 8, !tbaa !25
  %262 = fmul double %258, %261
  store double %262, ptr %6, align 8, !tbaa !11
  br label %.loopexit587

263:                                              ; preds = %241
  %264 = icmp ugt i32 %224, -23
  br i1 %264, label %265, label %271

265:                                              ; preds = %263
  %266 = sub nsw i32 0, %224
  %267 = zext nneg i32 %266 to i64
  %268 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %267
  %269 = load double, ptr %268, align 8, !tbaa !25
  %270 = fdiv double %237, %269
  store double %270, ptr %6, align 8, !tbaa !11
  br label %.loopexit587

271:                                              ; preds = %250, %263, %.thread, %229
  %272 = phi double [ %237, %250 ], [ %237, %263 ], [ %237, %.thread ], [ %235, %229 ]
  %273 = sub nsw i32 %.5430, %226
  %274 = add nsw i32 %224, %273
  %275 = getelementptr inbounds i8, ptr %7, i64 36
  store i32 0, ptr %275, align 4, !tbaa !27
  %276 = icmp sgt i32 %274, 0
  br i1 %276, label %277, label %312

277:                                              ; preds = %271
  %278 = and i32 %274, 15
  %.not508 = icmp eq i32 %278, 0
  br i1 %.not508, label %284, label %279

279:                                              ; preds = %277
  %280 = zext nneg i32 %278 to i64
  %281 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %280
  %282 = load double, ptr %281, align 8, !tbaa !25
  %283 = fmul double %282, %272
  store double %283, ptr %6, align 8, !tbaa !11
  br label %284

284:                                              ; preds = %279, %277
  %.promoted700 = phi double [ %283, %279 ], [ %272, %277 ]
  %285 = and i32 %274, 2147483632
  %.not509 = icmp eq i32 %285, 0
  br i1 %.not509, label %338, label %286

286:                                              ; preds = %284
  %287 = icmp ugt i32 %285, 308
  br i1 %287, label %288, label %294

288:                                              ; preds = %683, %550, %286
  %.0366 = phi ptr [ undef, %286 ], [ %.4370, %683 ], [ %.4370, %550 ]
  %.0359 = phi ptr [ undef, %286 ], [ %.4363, %683 ], [ %.4363, %550 ]
  %.0356 = phi ptr [ null, %286 ], [ null, %683 ], [ %428, %550 ]
  %.0351 = phi ptr [ undef, %286 ], [ %.4355, %683 ], [ %.4355, %550 ]
  %.0350 = phi ptr [ undef, %286 ], [ %.5, %683 ], [ %496, %550 ]
  %289 = getelementptr inbounds i8, ptr %6, i64 8
  store i64 2146435072, ptr %289, align 8, !tbaa !11
  br label %290

.thread549:                                       ; preds = %._crit_edge699, %689, %324
  store double 0.000000e+00, ptr %6, align 8, !tbaa !11
  br label %292

.thread557:                                       ; preds = %565, %585
  %.1.ph = phi ptr [ %496, %585 ], [ %.3, %565 ]
  store double 0.000000e+00, ptr %6, align 8, !tbaa !11
  br label %291

290:                                              ; preds = %606, %288
  %.1367 = phi ptr [ %.0366, %288 ], [ %.4370, %606 ]
  %.1360 = phi ptr [ %.0359, %288 ], [ %.4363, %606 ]
  %.1357 = phi ptr [ %.0356, %288 ], [ %428, %606 ]
  %.1352 = phi ptr [ %.0351, %288 ], [ %.4355, %606 ]
  %.1 = phi ptr [ %.0350, %288 ], [ %496, %606 ]
  store double 0.000000e+00, ptr %6, align 8, !tbaa !11
  %.not534 = icmp eq ptr %.1357, null
  br i1 %.not534, label %292, label %291

291:                                              ; preds = %.thread557, %290
  %.1568 = phi ptr [ %.1.ph, %.thread557 ], [ %.1, %290 ]
  %.1352567 = phi ptr [ %.4355, %.thread557 ], [ %.1352, %290 ]
  %.1357566 = phi ptr [ %428, %.thread557 ], [ %.1357, %290 ]
  %.1360565 = phi ptr [ %.4363, %.thread557 ], [ %.1360, %290 ]
  %.1367564 = phi ptr [ %.4370, %.thread557 ], [ %.1367, %290 ]
  call void @Bfree(ptr noundef %.1367564)
  call void @Bfree(ptr noundef %.1360565)
  call void @Bfree(ptr noundef %.1352567)
  call void @Bfree(ptr noundef nonnull %.1357566)
  call void @Bfree(ptr noundef %.1568)
  br label %292

292:                                              ; preds = %.thread549, %291, %290
  %293 = tail call ptr @__errno_location() #8
  store i32 34, ptr %293, align 4, !tbaa !28
  br label %.loopexit587

294:                                              ; preds = %286
  %295 = icmp ugt i32 %274, 31
  br i1 %295, label %.lr.ph704.preheader, label %.loopexit809

.lr.ph704.preheader:                              ; preds = %294
  %296 = lshr i32 %274, 4
  br label %.lr.ph704

.lr.ph704:                                        ; preds = %.lr.ph704.preheader, %303
  %indvars.iv776 = phi i64 [ 0, %.lr.ph704.preheader ], [ %indvars.iv.next777, %303 ]
  %.0448701 = phi i32 [ %296, %.lr.ph704.preheader ], [ %305, %303 ]
  %297 = phi double [ %.promoted700, %.lr.ph704.preheader ], [ %304, %303 ]
  %298 = and i32 %.0448701, 1
  %.not533 = icmp eq i32 %298, 0
  br i1 %.not533, label %303, label %299

299:                                              ; preds = %.lr.ph704
  %300 = getelementptr inbounds [5 x double], ptr @bigtens, i64 0, i64 %indvars.iv776
  %301 = load double, ptr %300, align 8, !tbaa !25
  %302 = fmul double %301, %297
  br label %303

303:                                              ; preds = %.lr.ph704, %299
  %304 = phi double [ %297, %.lr.ph704 ], [ %302, %299 ]
  %indvars.iv.next777 = add nuw nsw i64 %indvars.iv776, 1
  %305 = lshr i32 %.0448701, 1
  %306 = icmp ugt i32 %.0448701, 3
  br i1 %306, label %.lr.ph704, label %.loopexit809, !llvm.loop !29

.loopexit809:                                     ; preds = %303, %294
  %307 = phi double [ %.promoted700, %294 ], [ %304, %303 ]
  %.0433.lcssa = phi i64 [ 0, %294 ], [ %indvars.iv.next777, %303 ]
  %308 = and i64 %.0433.lcssa, 4294967295
  %309 = getelementptr inbounds [5 x double], ptr @bigtens, i64 0, i64 %308
  %310 = load double, ptr %309, align 8, !tbaa !25
  %311 = fmul double %310, %307
  store double %311, ptr %6, align 8, !tbaa !11
  br label %338

312:                                              ; preds = %271
  %313 = icmp slt i32 %274, 0
  br i1 %313, label %314, label %338

314:                                              ; preds = %312
  %315 = sub nsw i32 0, %274
  %316 = and i32 %315, 15
  %.not502 = icmp eq i32 %316, 0
  br i1 %.not502, label %322, label %317

317:                                              ; preds = %314
  %318 = zext nneg i32 %316 to i64
  %319 = getelementptr inbounds [23 x double], ptr @tens, i64 0, i64 %318
  %320 = load double, ptr %319, align 8, !tbaa !25
  %321 = fdiv double %272, %320
  store double %321, ptr %6, align 8, !tbaa !11
  br label %322

322:                                              ; preds = %317, %314
  %.promoted693 = phi double [ %321, %317 ], [ %272, %314 ]
  %323 = lshr i32 %315, 4
  %.not503 = icmp ult i32 %315, 16
  br i1 %.not503, label %338, label %324

324:                                              ; preds = %322
  %325 = icmp ugt i32 %315, 511
  br i1 %325, label %.thread549, label %326

326:                                              ; preds = %324
  %.not504 = icmp ult i32 %315, 256
  br i1 %.not504, label %.lr.ph698.preheader, label %327

327:                                              ; preds = %326
  store i32 106, ptr %275, align 4, !tbaa !27
  br label %.lr.ph698.preheader

.lr.ph698.preheader:                              ; preds = %326, %327
  br label %.lr.ph698

.lr.ph698:                                        ; preds = %.lr.ph698.preheader, %334
  %indvars.iv = phi i64 [ %indvars.iv.next, %334 ], [ 0, %.lr.ph698.preheader ]
  %.1449695 = phi i32 [ %336, %334 ], [ %323, %.lr.ph698.preheader ]
  %328 = phi double [ %335, %334 ], [ %.promoted693, %.lr.ph698.preheader ]
  %329 = and i32 %.1449695, 1
  %.not507 = icmp eq i32 %329, 0
  br i1 %.not507, label %334, label %330

330:                                              ; preds = %.lr.ph698
  %331 = getelementptr inbounds [5 x double], ptr @tinytens, i64 0, i64 %indvars.iv
  %332 = load double, ptr %331, align 8, !tbaa !25
  %333 = fmul double %332, %328
  store double %333, ptr %6, align 8, !tbaa !11
  br label %334

334:                                              ; preds = %.lr.ph698, %330
  %335 = phi double [ %328, %.lr.ph698 ], [ %333, %330 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %336 = lshr i32 %.1449695, 1
  %.not505 = icmp ult i32 %.1449695, 2
  br i1 %.not505, label %._crit_edge699, label %.lr.ph698, !llvm.loop !30

._crit_edge699:                                   ; preds = %334
  %337 = fcmp une double %335, 0.000000e+00
  %or.cond878 = select i1 %.not504, i1 %337, i1 false
  br i1 %or.cond878, label %338, label %.thread549

338:                                              ; preds = %._crit_edge699, %312, %322, %284, %.loopexit809
  %339 = sub nsw i32 %.5430, %.4411
  %340 = getelementptr inbounds i8, ptr %7, i64 24
  store i32 %339, ptr %340, align 4, !tbaa !31
  %341 = getelementptr inbounds i8, ptr %7, i64 28
  store i32 %spec.select539, ptr %341, align 4, !tbaa !32
  %342 = icmp sgt i32 %.5430, 40
  br i1 %342, label %343, label %.loopexit581

343:                                              ; preds = %338
  %344 = icmp slt i32 %spec.select539, 18
  %345 = add nsw i32 %149, 18
  %.2435 = select i1 %344, i32 %345, i32 18
  br label %346

346:                                              ; preds = %346, %343
  %indvar = phi i32 [ %indvar.next, %346 ], [ 0, %343 ]
  %.1441 = phi i32 [ %350, %346 ], [ 18, %343 ]
  %.3436 = phi i32 [ %.4437, %346 ], [ %.2435, %343 ]
  %.not510 = icmp sgt i32 %.3436, %148
  %spec.select540 = tail call i32 @llvm.smin.i32(i32 %.3436, i32 %147)
  %.4437.in = select i1 %.not510, i32 %.3436, i32 %spec.select540
  %.4437 = add nsw i32 %.4437.in, -1
  %347 = sext i32 %.4437 to i64
  %348 = getelementptr inbounds i8, ptr %.2403, i64 %347
  %349 = load i8, ptr %348, align 1, !tbaa !11
  %.not512 = icmp eq i8 %349, 48
  %350 = add nsw i32 %.1441, -1
  %indvar.next = add i32 %indvar, 1
  br i1 %.not512, label %346, label %351

351:                                              ; preds = %346
  %352 = sub nsw i32 %.5430, %.1441
  %353 = add nsw i32 %352, %224
  %spec.select541 = tail call i32 @llvm.smin.i32(i32 %spec.select539, i32 %.1441)
  %354 = icmp slt i32 %.1441, 9
  br i1 %354, label %.preheader582, label %.loopexit581

.preheader582:                                    ; preds = %351
  %355 = icmp sgt i32 %spec.select541, 0
  br i1 %355, label %.lr.ph709.preheader, label %.preheader

.lr.ph709.preheader:                              ; preds = %.preheader582
  %356 = zext nneg i32 %spec.select541 to i64
  %xtraiter1018 = and i64 %356, 3
  %357 = icmp ult i32 %spec.select541, 4
  br i1 %357, label %.preheader.loopexit.unr-lcssa, label %.lr.ph709.preheader.new

.lr.ph709.preheader.new:                          ; preds = %.lr.ph709.preheader
  %unroll_iter1022 = and i64 %356, 2147483644
  br label %.lr.ph709

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph709, %.lr.ph709.preheader
  %.lcssa988.ph = phi i64 [ poison, %.lr.ph709.preheader ], [ %401, %.lr.ph709 ]
  %indvars.iv.next780.lcssa.ph = phi i64 [ poison, %.lr.ph709.preheader ], [ %indvars.iv.next780.3, %.lr.ph709 ]
  %indvars.iv779.unr = phi i64 [ 0, %.lr.ph709.preheader ], [ %indvars.iv.next780.3, %.lr.ph709 ]
  %.9708.unr = phi i64 [ 0, %.lr.ph709.preheader ], [ %401, %.lr.ph709 ]
  %lcmp.mod1019.not = icmp eq i64 %xtraiter1018, 0
  br i1 %lcmp.mod1019.not, label %.preheader.loopexit, label %.lr.ph709.epil

.lr.ph709.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph709.epil
  %indvars.iv779.epil = phi i64 [ %indvars.iv.next780.epil, %.lr.ph709.epil ], [ %indvars.iv779.unr, %.preheader.loopexit.unr-lcssa ]
  %.9708.epil = phi i64 [ %363, %.lr.ph709.epil ], [ %.9708.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph709.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %358 = mul i64 %.9708.epil, 10
  %359 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv779.epil
  %360 = load i8, ptr %359, align 1, !tbaa !11
  %361 = sext i8 %360 to i64
  %362 = add i64 %358, -48
  %363 = add i64 %362, %361
  %indvars.iv.next780.epil = add nuw nsw i64 %indvars.iv779.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter1018
  br i1 %epil.iter.cmp.not, label %.preheader.loopexit, label %.lr.ph709.epil, !llvm.loop !33

.preheader.loopexit:                              ; preds = %.lr.ph709.epil, %.preheader.loopexit.unr-lcssa
  %.lcssa988 = phi i64 [ %.lcssa988.ph, %.preheader.loopexit.unr-lcssa ], [ %363, %.lr.ph709.epil ]
  %indvars.iv.next780.lcssa = phi i64 [ %indvars.iv.next780.lcssa.ph, %.preheader.loopexit.unr-lcssa ], [ %indvars.iv.next780.epil, %.lr.ph709.epil ]
  %364 = trunc nuw nsw i64 %indvars.iv.next780.lcssa to i32
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %.preheader582
  %.2442.lcssa = phi i32 [ 0, %.preheader582 ], [ %364, %.preheader.loopexit ]
  %.9.lcssa = phi i64 [ 0, %.preheader582 ], [ %.lcssa988, %.preheader.loopexit ]
  %365 = icmp slt i32 %.2442.lcssa, %.1441
  br i1 %365, label %.lr.ph715.preheader, label %.loopexit581

.lr.ph715.preheader:                              ; preds = %.preheader
  %366 = sext i32 %148 to i64
  %367 = sub i32 %.1441, %.2442.lcssa
  %368 = add i32 %indvar, %.2442.lcssa
  %xtraiter1024 = and i32 %367, 3
  %lcmp.mod1025.not = icmp eq i32 %xtraiter1024, 0
  br i1 %lcmp.mod1025.not, label %.lr.ph715.prol.loopexit, label %.lr.ph715.prol

.lr.ph715.prol:                                   ; preds = %.lr.ph715.preheader, %.lr.ph715.prol
  %indvars.iv782.prol = phi i64 [ %indvars.iv.next783.prol, %.lr.ph715.prol ], [ %366, %.lr.ph715.preheader ]
  %.10714.prol = phi i64 [ %374, %.lr.ph715.prol ], [ %.9.lcssa, %.lr.ph715.preheader ]
  %.3443712.prol = phi i32 [ %375, %.lr.ph715.prol ], [ %.2442.lcssa, %.lr.ph715.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %.lr.ph715.prol ], [ 0, %.lr.ph715.preheader ]
  %369 = mul i64 %.10714.prol, 10
  %indvars.iv.next783.prol = add nsw i64 %indvars.iv782.prol, 1
  %370 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv782.prol
  %371 = load i8, ptr %370, align 1, !tbaa !11
  %372 = sext i8 %371 to i64
  %373 = add i64 %369, -48
  %374 = add i64 %373, %372
  %375 = add nuw nsw i32 %.3443712.prol, 1
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter1024
  br i1 %prol.iter.cmp.not, label %.lr.ph715.prol.loopexit, label %.lr.ph715.prol, !llvm.loop !35

.lr.ph715.prol.loopexit:                          ; preds = %.lr.ph715.prol, %.lr.ph715.preheader
  %indvars.iv782.unr = phi i64 [ %366, %.lr.ph715.preheader ], [ %indvars.iv.next783.prol, %.lr.ph715.prol ]
  %.10714.unr = phi i64 [ %.9.lcssa, %.lr.ph715.preheader ], [ %374, %.lr.ph715.prol ]
  %.3443712.unr = phi i32 [ %.2442.lcssa, %.lr.ph715.preheader ], [ %375, %.lr.ph715.prol ]
  %.lcssa987.unr = phi i64 [ poison, %.lr.ph715.preheader ], [ %374, %.lr.ph715.prol ]
  %376 = add i32 %368, -15
  %377 = icmp ult i32 %376, 3
  br i1 %377, label %.loopexit581, label %.lr.ph715

.lr.ph709:                                        ; preds = %.lr.ph709, %.lr.ph709.preheader.new
  %indvars.iv779 = phi i64 [ 0, %.lr.ph709.preheader.new ], [ %indvars.iv.next780.3, %.lr.ph709 ]
  %.9708 = phi i64 [ 0, %.lr.ph709.preheader.new ], [ %401, %.lr.ph709 ]
  %niter1023 = phi i64 [ 0, %.lr.ph709.preheader.new ], [ %niter1023.next.3, %.lr.ph709 ]
  %378 = mul i64 %.9708, 10
  %379 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv779
  %380 = load i8, ptr %379, align 1, !tbaa !11
  %381 = sext i8 %380 to i64
  %382 = add i64 %378, -48
  %383 = add i64 %382, %381
  %indvars.iv.next780 = or disjoint i64 %indvars.iv779, 1
  %384 = mul i64 %383, 10
  %385 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv.next780
  %386 = load i8, ptr %385, align 1, !tbaa !11
  %387 = sext i8 %386 to i64
  %388 = add i64 %384, -48
  %389 = add i64 %388, %387
  %indvars.iv.next780.1 = or disjoint i64 %indvars.iv779, 2
  %390 = mul i64 %389, 10
  %391 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv.next780.1
  %392 = load i8, ptr %391, align 1, !tbaa !11
  %393 = sext i8 %392 to i64
  %394 = add i64 %390, -48
  %395 = add i64 %394, %393
  %indvars.iv.next780.2 = or disjoint i64 %indvars.iv779, 3
  %396 = mul i64 %395, 10
  %397 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv.next780.2
  %398 = load i8, ptr %397, align 1, !tbaa !11
  %399 = sext i8 %398 to i64
  %400 = add i64 %396, -48
  %401 = add i64 %400, %399
  %indvars.iv.next780.3 = add nuw nsw i64 %indvars.iv779, 4
  %niter1023.next.3 = add i64 %niter1023, 4
  %niter1023.ncmp.3.not = icmp eq i64 %niter1023.next.3, %unroll_iter1022
  br i1 %niter1023.ncmp.3.not, label %.preheader.loopexit.unr-lcssa, label %.lr.ph709, !llvm.loop !36

.lr.ph715:                                        ; preds = %.lr.ph715.prol.loopexit, %.lr.ph715
  %indvars.iv782 = phi i64 [ %indvars.iv.next783.3, %.lr.ph715 ], [ %indvars.iv782.unr, %.lr.ph715.prol.loopexit ]
  %.10714 = phi i64 [ %425, %.lr.ph715 ], [ %.10714.unr, %.lr.ph715.prol.loopexit ]
  %.3443712 = phi i32 [ %426, %.lr.ph715 ], [ %.3443712.unr, %.lr.ph715.prol.loopexit ]
  %402 = mul i64 %.10714, 10
  %indvars.iv.next783 = add nsw i64 %indvars.iv782, 1
  %403 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv782
  %404 = load i8, ptr %403, align 1, !tbaa !11
  %405 = sext i8 %404 to i64
  %406 = add i64 %402, -48
  %407 = add i64 %406, %405
  %408 = mul i64 %407, 10
  %indvars.iv.next783.1 = add nsw i64 %indvars.iv782, 2
  %409 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv.next783
  %410 = load i8, ptr %409, align 1, !tbaa !11
  %411 = sext i8 %410 to i64
  %412 = add i64 %408, -48
  %413 = add i64 %412, %411
  %414 = mul i64 %413, 10
  %indvars.iv.next783.2 = add nsw i64 %indvars.iv782, 3
  %415 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv.next783.1
  %416 = load i8, ptr %415, align 1, !tbaa !11
  %417 = sext i8 %416 to i64
  %418 = add i64 %414, -48
  %419 = add i64 %418, %417
  %420 = mul i64 %419, 10
  %indvars.iv.next783.3 = add nsw i64 %indvars.iv782, 4
  %421 = getelementptr inbounds i8, ptr %.2403, i64 %indvars.iv.next783.2
  %422 = load i8, ptr %421, align 1, !tbaa !11
  %423 = sext i8 %422 to i64
  %424 = add i64 %420, -48
  %425 = add i64 %424, %423
  %426 = add nuw nsw i32 %.3443712, 4
  %427 = icmp slt i32 %426, %.1441
  br i1 %427, label %.lr.ph715, label %.loopexit581, !llvm.loop !37

.loopexit581:                                     ; preds = %.lr.ph715.prol.loopexit, %.lr.ph715, %.preheader, %351, %338
  %.2452 = phi i32 [ %353, %351 ], [ %224, %338 ], [ %353, %.preheader ], [ %353, %.lr.ph715 ], [ %353, %.lr.ph715.prol.loopexit ]
  %.6431 = phi i32 [ %.1441, %351 ], [ %.5430, %338 ], [ %.1441, %.preheader ], [ %.1441, %.lr.ph715 ], [ %.1441, %.lr.ph715.prol.loopexit ]
  %.2424 = phi i32 [ %spec.select541, %351 ], [ %spec.select539, %338 ], [ %spec.select541, %.preheader ], [ %spec.select541, %.lr.ph715 ], [ %spec.select541, %.lr.ph715.prol.loopexit ]
  %.11 = phi i64 [ %.8385, %351 ], [ %.8385, %338 ], [ %.9.lcssa, %.preheader ], [ %.lcssa987.unr, %.lr.ph715.prol.loopexit ], [ %425, %.lr.ph715 ]
  %428 = tail call ptr @s2b(ptr noundef %.2403, i32 noundef %.2424, i32 noundef %.6431, i64 noundef %.11, i32 noundef %149)
  %429 = getelementptr inbounds i8, ptr %428, i64 8
  %430 = getelementptr inbounds i8, ptr %428, i64 16
  %431 = getelementptr inbounds i8, ptr %428, i64 20
  %432 = icmp sgt i32 %.2452, -1
  %433 = sub nsw i32 0, %.2452
  %.0390 = select i1 %432, i32 %.2452, i32 0
  %.0386 = select i1 %432, i32 0, i32 %433
  %434 = icmp sgt i32 %.0386, 0
  %435 = icmp sgt i32 %.0390, 0
  %436 = getelementptr inbounds i8, ptr %7, i64 12
  %437 = getelementptr inbounds i8, ptr %6, i64 8
  br label %438

438:                                              ; preds = %682, %.loopexit581
  %439 = load i32, ptr %429, align 8, !tbaa !38
  %440 = call ptr @Balloc(i32 noundef %439)
  %441 = getelementptr inbounds i8, ptr %440, i64 16
  %442 = load i32, ptr %431, align 4, !tbaa !40
  %443 = sext i32 %442 to i64
  %444 = shl nsw i64 %443, 3
  %445 = add nsw i64 %444, 8
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %441, ptr nonnull align 8 %430, i64 %445, i1 false)
  %446 = call ptr @d2b(ptr noundef nonnull %6, ptr noundef nonnull %3, ptr noundef nonnull %4)
  %447 = call ptr @i2b(i32 noundef 1)
  %448 = load i32, ptr %3, align 4, !tbaa !28
  %449 = icmp sgt i32 %448, -1
  %450 = select i1 %449, i32 0, i32 %448
  %451 = select i1 %449, i32 %448, i32 0
  %.1387 = add nuw nsw i32 %451, %.0386
  %452 = load i32, ptr %275, align 4, !tbaa !27
  %453 = sub nsw i32 %448, %452
  %454 = load i32, ptr %4, align 4, !tbaa !28
  %455 = add nsw i32 %453, %454
  %456 = sub nsw i32 54, %454
  %457 = icmp slt i32 %455, -1021
  br i1 %457, label %458, label %471

458:                                              ; preds = %438
  %459 = sub nuw nsw i32 -1021, %455
  %460 = sub nsw i32 %456, %459
  %461 = icmp ugt i32 %455, -1053
  br i1 %461, label %462, label %465

462:                                              ; preds = %458
  %463 = zext nneg i32 %459 to i64
  %464 = shl nuw nsw i64 1, %463
  br label %471

465:                                              ; preds = %458
  %466 = icmp ugt i32 %455, -1073
  br i1 %466, label %467, label %471

467:                                              ; preds = %465
  %468 = sub nuw nsw i32 -1053, %455
  %469 = zext nneg i32 %468 to i64
  %470 = shl nuw nsw i64 1, %469
  br label %471

471:                                              ; preds = %465, %462, %467, %438
  %.6439 = phi i32 [ %460, %462 ], [ %460, %467 ], [ %456, %438 ], [ %460, %465 ]
  %.0349 = phi i64 [ %464, %462 ], [ 1, %467 ], [ 1, %438 ], [ 1, %465 ]
  %.0348 = phi i64 [ 0, %462 ], [ %470, %467 ], [ 0, %438 ], [ 2146435072, %465 ]
  %472 = add nsw i32 %.6439, %.1387
  %.1391 = add i32 %452, %.0390
  %473 = sub i32 %.1391, %450
  %474 = add i32 %473, %.6439
  %475 = call i32 @llvm.smin.i32(i32 %472, i32 %474)
  %spec.select542 = call i32 @llvm.smin.i32(i32 %475, i32 %.1387)
  %476 = call i32 @llvm.smax.i32(i32 %spec.select542, i32 0)
  %.0460 = sub nsw i32 %.1387, %476
  %.2392 = sub nsw i32 %474, %476
  %.2388 = sub nsw i32 %472, %476
  br i1 %434, label %477, label %480

477:                                              ; preds = %471
  %478 = call ptr @pow5mult(ptr noundef %447, i32 noundef %.0386)
  %479 = call ptr @mult(ptr noundef %478, ptr noundef %446)
  call void @Bfree(ptr noundef %446)
  br label %480

480:                                              ; preds = %477, %471
  %.3369 = phi ptr [ %479, %477 ], [ %446, %471 ]
  %.3354 = phi ptr [ %478, %477 ], [ %447, %471 ]
  %481 = icmp sgt i32 %.2388, 0
  br i1 %481, label %482, label %484

482:                                              ; preds = %480
  %483 = call ptr @lshift(ptr noundef %.3369, i32 noundef %.2388)
  br label %484

484:                                              ; preds = %482, %480
  %.4370 = phi ptr [ %483, %482 ], [ %.3369, %480 ]
  br i1 %435, label %485, label %487

485:                                              ; preds = %484
  %486 = call ptr @pow5mult(ptr noundef %440, i32 noundef %.0390)
  br label %487

487:                                              ; preds = %485, %484
  %.3362 = phi ptr [ %486, %485 ], [ %440, %484 ]
  %488 = icmp sgt i32 %.2392, 0
  br i1 %488, label %489, label %491

489:                                              ; preds = %487
  %490 = call ptr @lshift(ptr noundef %.3362, i32 noundef %.2392)
  br label %491

491:                                              ; preds = %489, %487
  %.4363 = phi ptr [ %490, %489 ], [ %.3362, %487 ]
  %492 = icmp sgt i32 %.0460, 0
  br i1 %492, label %493, label %495

493:                                              ; preds = %491
  %494 = call ptr @lshift(ptr noundef %.3354, i32 noundef %.0460)
  br label %495

495:                                              ; preds = %493, %491
  %.4355 = phi ptr [ %494, %493 ], [ %.3354, %491 ]
  %496 = call ptr @diff(ptr noundef %.4370, ptr noundef %.4363)
  %497 = getelementptr inbounds i8, ptr %496, i64 16
  %498 = load i32, ptr %497, align 8, !tbaa !41
  store i32 %498, ptr %436, align 4, !tbaa !42
  store i32 0, ptr %497, align 8, !tbaa !41
  %499 = call i32 @cmp(ptr noundef %496, ptr noundef %.4355)
  %500 = load i32, ptr %340, align 4, !tbaa !31
  %501 = icmp sgt i32 %500, %.6431
  %502 = icmp slt i32 %499, 1
  %or.cond17 = select i1 %501, i1 %502, i1 false
  br i1 %or.cond17, label %503, label %505

503:                                              ; preds = %495
  %504 = load i32, ptr %436, align 4, !tbaa !42
  %.not513 = icmp eq i32 %504, 0
  br i1 %.not513, label %.thread569, label %.loopexit

505:                                              ; preds = %495
  %506 = icmp slt i32 %499, 0
  br i1 %506, label %..thread569_crit_edge, label %527

..thread569_crit_edge:                            ; preds = %505
  %.pre = load i32, ptr %436, align 4, !tbaa !42
  br label %.thread569

.thread569:                                       ; preds = %..thread569_crit_edge, %503
  %507 = phi i32 [ %.pre, %..thread569_crit_edge ], [ 0, %503 ]
  %508 = icmp ne i32 %507, 0
  %509 = load i64, ptr %6, align 8
  %510 = icmp ne i64 %509, 0
  %or.cond20 = select i1 %508, i1 true, i1 %510
  br i1 %or.cond20, label %.loopexit, label %511

511:                                              ; preds = %.thread569
  %512 = load i64, ptr %437, align 8, !tbaa !11
  %513 = and i64 %512, 1048575
  %.not526 = icmp ne i64 %513, 0
  %514 = and i64 %512, 2146435072
  %515 = icmp ult i64 %514, 112197633
  %or.cond544 = or i1 %.not526, %515
  br i1 %or.cond544, label %.loopexit, label %516

516:                                              ; preds = %511
  %517 = getelementptr inbounds i8, ptr %496, i64 24
  %518 = load i64, ptr %517, align 8, !tbaa !43
  %.not527 = icmp eq i64 %518, 0
  br i1 %.not527, label %519, label %523

519:                                              ; preds = %516
  %520 = getelementptr inbounds i8, ptr %496, i64 20
  %521 = load i32, ptr %520, align 4, !tbaa !40
  %522 = icmp slt i32 %521, 2
  br i1 %522, label %.loopexit, label %523

523:                                              ; preds = %519, %516
  %524 = call ptr @lshift(ptr noundef nonnull %496, i32 noundef 1)
  %525 = call i32 @cmp(ptr noundef %524, ptr noundef %.4355)
  %526 = icmp sgt i32 %525, 0
  br i1 %526, label %._crit_edge790, label %.loopexit

._crit_edge790:                                   ; preds = %523
  %.pre789.pre = load i64, ptr %437, align 8, !tbaa !11
  br label %560

527:                                              ; preds = %505
  %528 = icmp eq i32 %499, 0
  br i1 %528, label %529, label %592

529:                                              ; preds = %527
  %530 = load i32, ptr %436, align 4, !tbaa !42
  %.not520 = icmp eq i32 %530, 0
  %531 = load i64, ptr %437, align 8, !tbaa !11
  %532 = and i64 %531, 1048575
  br i1 %.not520, label %556, label %533

533:                                              ; preds = %529
  %534 = icmp eq i64 %532, 1048575
  br i1 %534, label %535, label %.loopexit580

535:                                              ; preds = %533
  %536 = load i64, ptr %6, align 8
  %537 = load i32, ptr %275, align 4, !tbaa !27
  %.not521 = icmp eq i32 %537, 0
  br i1 %.not521, label %547, label %538

538:                                              ; preds = %535
  %539 = and i64 %531, 2146435072
  %540 = icmp ult i64 %539, 111149057
  br i1 %540, label %541, label %547

541:                                              ; preds = %538
  %542 = lshr exact i64 %539, 20
  %543 = trunc nuw nsw i64 %542 to i32
  %544 = sub nuw nsw i32 107, %543
  %545 = shl nsw i32 -1, %544
  %546 = zext i32 %545 to i64
  br label %547

547:                                              ; preds = %535, %538, %541
  %548 = phi i64 [ %546, %541 ], [ 4294967295, %538 ], [ 4294967295, %535 ]
  %549 = icmp eq i64 %536, %548
  br i1 %549, label %550, label %.loopexit580

550:                                              ; preds = %547
  %551 = icmp eq i64 %531, 2146435071
  %552 = icmp eq i64 %536, 4294967295
  %or.cond23 = select i1 %551, i1 %552, i1 false
  br i1 %or.cond23, label %288, label %553

553:                                              ; preds = %550
  %554 = and i64 %531, 2146435072
  %555 = add nuw nsw i64 %554, 1048576
  store i64 %555, ptr %437, align 8, !tbaa !11
  store i64 0, ptr %6, align 8, !tbaa !11
  store i32 0, ptr %436, align 4, !tbaa !42
  br label %.loopexit

556:                                              ; preds = %529
  %557 = icmp ne i64 %532, 0
  %558 = load i64, ptr %6, align 8
  %559 = icmp ne i64 %558, 0
  %or.cond26 = select i1 %557, i1 true, i1 %559
  br i1 %or.cond26, label %.loopexit580, label %560

560:                                              ; preds = %._crit_edge790, %556
  %.pre789 = phi i64 [ %.pre789.pre, %._crit_edge790 ], [ %531, %556 ]
  %.3 = phi ptr [ %524, %._crit_edge790 ], [ %496, %556 ]
  %561 = load i32, ptr %275, align 4, !tbaa !27
  %.not528 = icmp ne i32 %561, 0
  %.pre794 = and i64 %.pre789, 2146435072
  %562 = icmp ult i64 %.pre794, 112197633
  %or.cond879 = select i1 %.not528, i1 %562, i1 false
  br i1 %or.cond879, label %563, label %._crit_edge793

563:                                              ; preds = %560
  %564 = icmp ugt i64 %.pre794, 57671680
  br i1 %564, label %.loopexit, label %565

565:                                              ; preds = %563
  %566 = load i32, ptr %340, align 4, !tbaa !31
  %567 = icmp sgt i32 %566, %.6431
  br i1 %567, label %568, label %.thread557

568:                                              ; preds = %565
  store i32 1, ptr %8, align 4, !tbaa !5
  br label %.loopexit

._crit_edge793:                                   ; preds = %560
  %569 = add nsw i64 %.pre794, -1
  store i64 %569, ptr %437, align 8, !tbaa !11
  store i64 4294967295, ptr %6, align 8, !tbaa !11
  %570 = load i32, ptr %340, align 4, !tbaa !31
  %571 = icmp sgt i32 %570, %.6431
  br i1 %571, label %682, label %.loopexit

.loopexit580:                                     ; preds = %556, %533, %547
  %.not522 = icmp eq i64 %.0348, 0
  br i1 %.not522, label %574, label %572

572:                                              ; preds = %.loopexit580
  %573 = and i64 %531, %.0348
  %.not524 = icmp eq i64 %573, 0
  br i1 %.not524, label %.loopexit, label %577

574:                                              ; preds = %.loopexit580
  %575 = load i64, ptr %6, align 8, !tbaa !11
  %576 = and i64 %575, %.0349
  %.not523 = icmp eq i64 %576, 0
  br i1 %.not523, label %.loopexit, label %577

577:                                              ; preds = %574, %572
  %578 = call double @sulp(ptr noundef nonnull %6, ptr noundef nonnull %7)
  %579 = load double, ptr %6, align 8, !tbaa !11
  br i1 %.not520, label %582, label %580

580:                                              ; preds = %577
  %581 = fadd double %578, %579
  store double %581, ptr %6, align 8, !tbaa !11
  br label %589

582:                                              ; preds = %577
  %583 = fsub double %579, %578
  store double %583, ptr %6, align 8, !tbaa !11
  %584 = fcmp une double %583, 0.000000e+00
  br i1 %584, label %589, label %585

585:                                              ; preds = %582
  %586 = load i32, ptr %340, align 4, !tbaa !31
  %587 = icmp sgt i32 %586, %.6431
  br i1 %587, label %588, label %.thread557

588:                                              ; preds = %585
  store i32 1, ptr %8, align 4, !tbaa !5
  br label %.loopexit

589:                                              ; preds = %582, %580
  %590 = load i32, ptr %436, align 4, !tbaa !42
  %591 = sub nsw i32 1, %590
  store i32 %591, ptr %436, align 4, !tbaa !42
  br label %.loopexit

592:                                              ; preds = %527
  %593 = call double @ratio(ptr noundef nonnull %496, ptr noundef %.4355)
  %594 = fcmp ugt double %593, 2.000000e+00
  br i1 %594, label %614, label %595

595:                                              ; preds = %592
  %596 = load i32, ptr %436, align 4, !tbaa !42
  %.not515 = icmp eq i32 %596, 0
  br i1 %.not515, label %597, label %.thread571

597:                                              ; preds = %595
  %598 = load i64, ptr %6, align 8, !tbaa !11
  %.not516 = icmp eq i64 %598, 0
  br i1 %.not516, label %599, label %602

599:                                              ; preds = %597
  %600 = load i64, ptr %437, align 8, !tbaa !11
  %601 = and i64 %600, 1048575
  %.not517 = icmp eq i64 %601, 0
  br i1 %.not517, label %610, label %.thread571

602:                                              ; preds = %597
  %603 = icmp ne i64 %598, 1
  %604 = load i64, ptr %437, align 8
  %605 = icmp ne i64 %604, 0
  %or.cond29 = select i1 %603, i1 true, i1 %605
  br i1 %or.cond29, label %.thread571, label %606

606:                                              ; preds = %602
  %607 = load i32, ptr %340, align 4, !tbaa !31
  %608 = icmp sgt i32 %607, %.6431
  br i1 %608, label %609, label %290

609:                                              ; preds = %606
  store i32 1, ptr %8, align 4, !tbaa !5
  br label %.loopexit

610:                                              ; preds = %599
  %611 = fcmp olt double %593, 1.000000e+00
  %612 = fmul double %593, 5.000000e-01
  %.0396 = select i1 %611, double 5.000000e-01, double %612
  %613 = fneg double %.0396
  br label %.thread571

614:                                              ; preds = %592
  %615 = fmul double %593, 5.000000e-01
  %616 = load i32, ptr %436, align 4, !tbaa !42
  %.not514 = icmp eq i32 %616, 0
  %617 = fneg double %615
  %618 = select i1 %.not514, double %617, double %615
  %619 = call i32 @llvm.get.rounding()
  %620 = icmp eq i32 %619, 0
  br i1 %620, label %621, label %.thread571

621:                                              ; preds = %614
  %622 = fadd double %618, 5.000000e-01
  br label %.thread571

.thread571:                                       ; preds = %599, %602, %595, %614, %621, %610
  %623 = phi i32 [ 0, %610 ], [ %616, %621 ], [ %616, %614 ], [ %596, %595 ], [ 0, %602 ], [ 0, %599 ]
  %.1397 = phi double [ %.0396, %610 ], [ %615, %621 ], [ %615, %614 ], [ 1.000000e+00, %595 ], [ 1.000000e+00, %602 ], [ 1.000000e+00, %599 ]
  %.0394 = phi double [ %613, %610 ], [ %622, %621 ], [ %618, %614 ], [ 1.000000e+00, %595 ], [ -1.000000e+00, %602 ], [ -1.000000e+00, %599 ]
  %624 = load i64, ptr %437, align 8, !tbaa !11
  %625 = and i64 %624, 2146435072
  %626 = icmp eq i64 %625, 2145386496
  br i1 %626, label %627, label %639

627:                                              ; preds = %.thread571
  %628 = add nsw i64 %624, -55574528
  store i64 %628, ptr %437, align 8, !tbaa !11
  %629 = call double @ulp(ptr noundef nonnull %6)
  %630 = fmul double %.0394, %629
  %631 = load double, ptr %6, align 8, !tbaa !11
  %632 = fadd double %631, %630
  store double %632, ptr %6, align 8, !tbaa !11
  %633 = load i64, ptr %437, align 8, !tbaa !11
  %634 = and i64 %633, 2145386496
  %635 = icmp ugt i64 %634, 2090860543
  br i1 %635, label %636, label %637

636:                                              ; preds = %627
  store i64 2146435071, ptr %437, align 8, !tbaa !11
  store i64 4294967295, ptr %6, align 8, !tbaa !11
  br label %682

637:                                              ; preds = %627
  %638 = add i64 %633, 55574528
  store i64 %638, ptr %437, align 8, !tbaa !11
  br label %661

639:                                              ; preds = %.thread571
  %640 = load i32, ptr %275, align 4, !tbaa !27
  %641 = icmp ne i32 %640, 0
  %642 = icmp ult i64 %625, 111149057
  %or.cond34 = and i1 %642, %641
  br i1 %or.cond34, label %643, label %656

643:                                              ; preds = %639
  %644 = fcmp ugt double %.1397, 0x41DFFFFFFFC00000
  br i1 %644, label %650, label %645

645:                                              ; preds = %643
  %646 = fptoui double %.1397 to i64
  %spec.store.select = call i64 @llvm.umax.i64(i64 %646, i64 1)
  %647 = uitofp i64 %spec.store.select to double
  %.not518 = icmp eq i32 %623, 0
  %648 = fneg double %647
  %649 = select i1 %.not518, double %648, double %647
  br label %650

650:                                              ; preds = %645, %643
  %.2398 = phi double [ %647, %645 ], [ %.1397, %643 ]
  %.1395 = phi double [ %649, %645 ], [ %.0394, %643 ]
  %651 = call double @ulp(ptr noundef nonnull %6)
  %652 = fmul double %.1395, %651
  %653 = load double, ptr %6, align 8, !tbaa !11
  %654 = fadd double %653, %652
  store double %654, ptr %6, align 8, !tbaa !11
  %655 = fcmp oeq double %654, 0.000000e+00
  br i1 %655, label %.loopexit, label %661

656:                                              ; preds = %639
  %657 = call double @ulp(ptr noundef nonnull %6)
  %658 = fmul double %.0394, %657
  %659 = load double, ptr %6, align 8, !tbaa !11
  %660 = fadd double %659, %658
  store double %660, ptr %6, align 8, !tbaa !11
  br label %661

661:                                              ; preds = %656, %650, %637
  %.in = phi double [ %632, %637 ], [ %654, %650 ], [ %660, %656 ]
  %.3399 = phi double [ %.1397, %637 ], [ %.2398, %650 ], [ %.1397, %656 ]
  %662 = load i64, ptr %437, align 8, !tbaa !11
  %663 = load i32, ptr %340, align 4, !tbaa !31
  %664 = icmp eq i32 %663, %.6431
  %665 = load i32, ptr %275, align 4
  %666 = icmp eq i32 %665, 0
  %or.cond44.not575 = select i1 %664, i1 %666, i1 false
  %667 = and i64 %662, 2146435072
  %668 = icmp eq i64 %625, %667
  %or.cond546 = select i1 %or.cond44.not575, i1 %668, i1 false
  br i1 %or.cond546, label %669, label %682

669:                                              ; preds = %661
  %670 = fptosi double %.3399 to i64
  %671 = sitofp i64 %670 to double
  %672 = fsub double %.3399, %671
  %673 = load i32, ptr %436, align 4, !tbaa !42
  %674 = icmp eq i32 %673, 0
  %675 = call i1 @llvm.is.fpclass.f64(double %.in, i32 64)
  %or.cond37.not578 = select i1 %674, i1 %675, i1 false
  %676 = and i64 %662, 1048575
  %.not519 = icmp eq i64 %676, 0
  %or.cond547 = select i1 %or.cond37.not578, i1 %.not519, i1 false
  br i1 %or.cond547, label %680, label %677

677:                                              ; preds = %669
  %678 = fcmp olt double %672, 0x3FDFFFFF94A03595
  %679 = fcmp ogt double %672, 0x3FE0000035AFE535
  %or.cond39 = or i1 %678, %679
  br i1 %or.cond39, label %.loopexit, label %682

680:                                              ; preds = %669
  %681 = fcmp olt double %672, 0x3FCFFFFF94A03595
  br i1 %681, label %.loopexit, label %682

682:                                              ; preds = %661, %680, %677, %._crit_edge793, %636
  %.4 = phi ptr [ %.3, %._crit_edge793 ], [ %496, %636 ], [ %496, %661 ], [ %496, %677 ], [ %496, %680 ]
  call void @Bfree(ptr noundef %.4370)
  call void @Bfree(ptr noundef %.4363)
  call void @Bfree(ptr noundef %.4355)
  call void @Bfree(ptr noundef %.4)
  br label %438

.loopexit:                                        ; preds = %650, %503, %680, %677, %._crit_edge793, %523, %519, %.thread569, %511, %574, %572, %563, %609, %589, %588, %568, %553
  %.5 = phi ptr [ %.3, %563 ], [ %.3, %568 ], [ %496, %553 ], [ %496, %589 ], [ %496, %588 ], [ %496, %572 ], [ %496, %574 ], [ %496, %609 ], [ %496, %650 ], [ %496, %503 ], [ %496, %680 ], [ %496, %677 ], [ %496, %519 ], [ %524, %523 ], [ %.3, %._crit_edge793 ], [ %496, %511 ], [ %496, %.thread569 ]
  %.not529 = phi i1 [ true, %563 ], [ true, %568 ], [ true, %553 ], [ true, %589 ], [ true, %588 ], [ true, %572 ], [ true, %574 ], [ true, %609 ], [ false, %650 ], [ false, %503 ], [ true, %680 ], [ true, %677 ], [ true, %519 ], [ true, %523 ], [ true, %._crit_edge793 ], [ true, %511 ], [ true, %.thread569 ]
  call void @Bfree(ptr noundef %.4370)
  call void @Bfree(ptr noundef %.4363)
  call void @Bfree(ptr noundef %.4355)
  call void @Bfree(ptr noundef %428)
  call void @Bfree(ptr noundef %.5)
  br i1 %.not529, label %693, label %683

683:                                              ; preds = %.loopexit
  %684 = load i32, ptr %225, align 4, !tbaa !24
  %685 = add nsw i32 %684, %.4411
  store i32 %685, ptr %225, align 4, !tbaa !24
  call void @bigcomp(ptr noundef nonnull %6, ptr noundef %.2403, ptr noundef nonnull %7)
  %686 = load i64, ptr %437, align 8, !tbaa !11
  %687 = and i64 %686, 2146435072
  %688 = icmp eq i64 %687, 2146435072
  br i1 %688, label %288, label %689

689:                                              ; preds = %683
  %690 = icmp eq i64 %687, 0
  %691 = load double, ptr %6, align 8
  %692 = fcmp oeq double %691, 0.000000e+00
  %or.cond41 = select i1 %690, i1 %692, i1 false
  br i1 %or.cond41, label %.thread549, label %693

693:                                              ; preds = %689, %.loopexit
  %694 = load i32, ptr %275, align 4, !tbaa !27
  %.not530 = icmp eq i32 %694, 0
  br i1 %.not530, label %.loopexit587, label %695

695:                                              ; preds = %693
  %696 = load double, ptr %6, align 8, !tbaa !11
  %697 = fmul double %696, 0.000000e+00
  store double %697, ptr %6, align 8, !tbaa !11
  %698 = load i64, ptr %437, align 8, !tbaa !11
  %699 = and i64 %698, 2146435072
  %.not531 = icmp eq i64 %699, 0
  br i1 %.not531, label %700, label %.loopexit587

700:                                              ; preds = %695
  %701 = tail call ptr @__errno_location() #8
  store i32 34, ptr %701, align 4, !tbaa !28
  br label %.loopexit587

.loopexit587:                                     ; preds = %.preheader585, %693, %700, %695, %240, %201, %.loopexit590, %217, %222, %292, %265, %252, %245, %214, %22
  %.2406 = phi i32 [ %.1405, %245 ], [ %.1405, %252 ], [ %.1405, %292 ], [ %.1405, %695 ], [ %.1405, %700 ], [ %.1405, %693 ], [ %.1405, %265 ], [ %.1405, %240 ], [ %.1405, %201 ], [ 0, %.loopexit590 ], [ %.1405, %222 ], [ %.1405, %217 ], [ %.1405, %214 ], [ %.1405, %22 ], [ %.1405, %.preheader585 ]
  %.not535 = icmp eq ptr %1, null
  br i1 %.not535, label %704, label %702

702:                                              ; preds = %.loopexit587
  %703 = load ptr, ptr %5, align 8, !tbaa !12
  store ptr %703, ptr %1, align 8, !tbaa !12
  br label %704

704:                                              ; preds = %702, %.loopexit587
  %.not536 = icmp eq i32 %.2406, 0
  %705 = load double, ptr %6, align 8
  %706 = fneg double %705
  %707 = select i1 %.not536, double %705, double %706
  call void @llvm.lifetime.end.p0(i64 44, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #7
  ret double %707
}

; Function Attrs: nounwind uwtable
declare hidden i32 @match(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @hexnan(ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
declare i32 @llvm.get.rounding() #4

; Function Attrs: nounwind uwtable
declare hidden ptr @s2b(ptr noundef, i32 noundef, i32 noundef, i64 noundef, i32 noundef) local_unnamed_addr #0

; 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) #5

; Function Attrs: nounwind uwtable
declare hidden ptr @d2b(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @i2b(i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @pow5mult(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @mult(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @diff(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i32 @cmp(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden double @sulp(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden double @ratio(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden double @ulp(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @bigcomp(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i1 @llvm.is.fpclass.f64(double, i32 immarg) #6

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nofree nosync nounwind willreturn memory(none) "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 nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { nounwind willreturn 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, !7, i64 40}
!6 = !{!"BCinfo", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 8}
!11 = !{!8, !8, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!6, !7, i64 4}
!15 = !{!6, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = !{!6, !7, i64 16}
!25 = !{!26, !26, i64 0}
!26 = !{!"double", !8, i64 0}
!27 = !{!6, !7, i64 36}
!28 = !{!7, !7, i64 0}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = !{!6, !7, i64 24}
!32 = !{!6, !7, i64 28}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.unroll.disable"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !17}
!37 = distinct !{!37, !17}
!38 = !{!39, !7, i64 8}
!39 = !{!"Bigint", !13, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !8, i64 24}
!40 = !{!39, !7, i64 20}
!41 = !{!39, !7, i64 16}
!42 = !{!6, !7, i64 12}
!43 = !{!44, !44, i64 0}
!44 = !{!"long", !8, i64 0}


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