; LLVM IR from niessner/Matterport :: code/gaps/pkgs/R2Shapes/R2Image.ll (ZN7R2Image7ReadPFMEPKc)

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

%class.R2Image = type { i32, i32, i32, i32, ptr }

@.str = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [89 x i8], align 1
@stderr = external global ptr, align 8
@.str.25 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [12 x i8], align 1

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #1

declare void @_Z7RNAbortPKcz(ptr noundef, ...) #2

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

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #3

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7R2Image7ReadPFMEPKc(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef %1) #4 align 2 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca [256 x i8], align 16
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca [256 x i8], align 16
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca [256 x i8], align 16
  %17 = alloca i32, align 4
  %18 = alloca float, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca i32, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca i32, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i8, align 1
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %44 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #10
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = call noalias ptr @fopen(ptr noundef %45, ptr noundef @.str.25)
  store ptr %46, ptr %6, align 8, !tbaa !5
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = icmp ne ptr %47, null
  br i1 %48, label %53, label %49

49:                                               ; preds = %2
  %50 = load ptr, ptr @stderr, align 8, !tbaa !5
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %50, ptr noundef @.str.62, ptr noundef %51) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %552

53:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  %54 = load ptr, ptr %6, align 8, !tbaa !5
  %55 = call i32 @fgetc(ptr noundef %54)
  store i32 %55, ptr %8, align 4, !tbaa !9
  %56 = load i32, ptr %8, align 4, !tbaa !9
  %57 = icmp ne i32 %56, 80
  br i1 %57, label %58, label %62

58:                                               ; preds = %53
  %59 = load ptr, ptr @stderr, align 8, !tbaa !5
  %60 = load ptr, ptr %5, align 8, !tbaa !5
  %61 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %59, ptr noundef @.str.63, ptr noundef %60) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %551

62:                                               ; preds = %53
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = call i32 @fgetc(ptr noundef %63)
  store i32 %64, ptr %8, align 4, !tbaa !9
  %65 = load i32, ptr %8, align 4, !tbaa !9
  %66 = icmp ne i32 %65, 102
  br i1 %66, label %67, label %71

67:                                               ; preds = %62
  %68 = load ptr, ptr @stderr, align 8, !tbaa !5
  %69 = load ptr, ptr %5, align 8, !tbaa !5
  %70 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef @.str.63, ptr noundef %69) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %551

71:                                               ; preds = %62
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = call i32 @fgetc(ptr noundef %72)
  store i32 %73, ptr %8, align 4, !tbaa !9
  %74 = load i32, ptr %8, align 4, !tbaa !9
  %75 = icmp ne i32 %74, 10
  br i1 %75, label %76, label %80

76:                                               ; preds = %71
  %77 = load ptr, ptr @stderr, align 8, !tbaa !5
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %77, ptr noundef @.str.63, ptr noundef %78) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %551

80:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %10) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #10
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %81

81:                                               ; preds = %123, %80
  %82 = load i32, ptr %11, align 4, !tbaa !9
  %83 = icmp slt i32 %82, 256
  br i1 %83, label %85, label %84

84:                                               ; preds = %81
  store i32 2, ptr %7, align 4
  br label %126

85:                                               ; preds = %81
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = call i32 @fgetc(ptr noundef %86)
  store i32 %87, ptr %8, align 4, !tbaa !9
  %88 = load i32, ptr %8, align 4, !tbaa !9
  %89 = icmp eq i32 %88, 32
  br i1 %89, label %90, label %94

90:                                               ; preds = %85
  %91 = load i32, ptr %9, align 4, !tbaa !9
  %92 = icmp eq i32 %91, 0
  br i1 %92, label %93, label %94

93:                                               ; preds = %90
  br label %123

94:                                               ; preds = %90, %85
  %95 = load i32, ptr %8, align 4, !tbaa !9
  %96 = icmp eq i32 %95, 32
  br i1 %96, label %100, label %97

97:                                               ; preds = %94
  %98 = load i32, ptr %8, align 4, !tbaa !9
  %99 = icmp eq i32 %98, 10
  br i1 %99, label %100, label %104

100:                                              ; preds = %97, %94
  %101 = load i32, ptr %9, align 4, !tbaa !9
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds [256 x i8], ptr %10, i64 0, i64 %102
  store i8 0, ptr %103, align 1, !tbaa !11
  store i32 2, ptr %7, align 4
  br label %126

104:                                              ; preds = %97
  %105 = load i32, ptr %8, align 4, !tbaa !9
  %106 = call i32 @isdigit(i32 noundef %105) #11
  %107 = icmp ne i32 %106, 0
  br i1 %107, label %113, label %108

108:                                              ; preds = %104
  %109 = load ptr, ptr @stderr, align 8, !tbaa !5
  %110 = load i32, ptr %8, align 4, !tbaa !9
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %109, ptr noundef @.str.64, i32 noundef %110, ptr noundef %111) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %126

113:                                              ; preds = %104
  %114 = load i32, ptr %8, align 4, !tbaa !9
  %115 = trunc i32 %114 to i8
  %116 = load i32, ptr %9, align 4, !tbaa !9
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %9, align 4, !tbaa !9
  %118 = sext i32 %116 to i64
  %119 = getelementptr inbounds [256 x i8], ptr %10, i64 0, i64 %118
  store i8 %115, ptr %119, align 1, !tbaa !11
  br label %120

120:                                              ; preds = %113
  br label %121

121:                                              ; preds = %120
  br label %122

122:                                              ; preds = %121
  br label %123

123:                                              ; preds = %122, %93
  %124 = load i32, ptr %11, align 4, !tbaa !9
  %125 = add nsw i32 %124, 1
  store i32 %125, ptr %11, align 4, !tbaa !9
  br label %81, !llvm.loop !12

126:                                              ; preds = %108, %100, %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #10
  %127 = load i32, ptr %7, align 4
  switch i32 %127, label %550 [
    i32 2, label %128
  ]

128:                                              ; preds = %126
  %129 = load i32, ptr %9, align 4, !tbaa !9
  %130 = icmp eq i32 %129, 0
  br i1 %130, label %134, label %131

131:                                              ; preds = %128
  %132 = load i32, ptr %9, align 4, !tbaa !9
  %133 = icmp sgt i32 %132, 128
  br i1 %133, label %134, label %138

134:                                              ; preds = %131, %128
  %135 = load ptr, ptr @stderr, align 8, !tbaa !5
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %135, ptr noundef @.str.65, ptr noundef %136) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %550

138:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #10
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %13) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #10
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %139

139:                                              ; preds = %181, %138
  %140 = load i32, ptr %14, align 4, !tbaa !9
  %141 = icmp slt i32 %140, 256
  br i1 %141, label %143, label %142

142:                                              ; preds = %139
  store i32 5, ptr %7, align 4
  br label %184

143:                                              ; preds = %139
  %144 = load ptr, ptr %6, align 8, !tbaa !5
  %145 = call i32 @fgetc(ptr noundef %144)
  store i32 %145, ptr %8, align 4, !tbaa !9
  %146 = load i32, ptr %8, align 4, !tbaa !9
  %147 = icmp eq i32 %146, 32
  br i1 %147, label %148, label %152

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

151:                                              ; preds = %148
  br label %181

152:                                              ; preds = %148, %143
  %153 = load i32, ptr %8, align 4, !tbaa !9
  %154 = icmp eq i32 %153, 32
  br i1 %154, label %158, label %155

155:                                              ; preds = %152
  %156 = load i32, ptr %8, align 4, !tbaa !9
  %157 = icmp eq i32 %156, 10
  br i1 %157, label %158, label %162

158:                                              ; preds = %155, %152
  %159 = load i32, ptr %12, align 4, !tbaa !9
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds [256 x i8], ptr %13, i64 0, i64 %160
  store i8 0, ptr %161, align 1, !tbaa !11
  store i32 5, ptr %7, align 4
  br label %184

162:                                              ; preds = %155
  %163 = load i32, ptr %8, align 4, !tbaa !9
  %164 = call i32 @isdigit(i32 noundef %163) #11
  %165 = icmp ne i32 %164, 0
  br i1 %165, label %171, label %166

166:                                              ; preds = %162
  %167 = load ptr, ptr @stderr, align 8, !tbaa !5
  %168 = load i32, ptr %8, align 4, !tbaa !9
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %167, ptr noundef @.str.66, i32 noundef %168, ptr noundef %169) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %184

171:                                              ; preds = %162
  %172 = load i32, ptr %8, align 4, !tbaa !9
  %173 = trunc i32 %172 to i8
  %174 = load i32, ptr %12, align 4, !tbaa !9
  %175 = add nsw i32 %174, 1
  store i32 %175, ptr %12, align 4, !tbaa !9
  %176 = sext i32 %174 to i64
  %177 = getelementptr inbounds [256 x i8], ptr %13, i64 0, i64 %176
  store i8 %173, ptr %177, align 1, !tbaa !11
  br label %178

178:                                              ; preds = %171
  br label %179

179:                                              ; preds = %178
  br label %180

180:                                              ; preds = %179
  br label %181

181:                                              ; preds = %180, %151
  %182 = load i32, ptr %14, align 4, !tbaa !9
  %183 = add nsw i32 %182, 1
  store i32 %183, ptr %14, align 4, !tbaa !9
  br label %139, !llvm.loop !14

184:                                              ; preds = %166, %158, %142
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #10
  %185 = load i32, ptr %7, align 4
  switch i32 %185, label %549 [
    i32 5, label %186
  ]

186:                                              ; preds = %184
  %187 = load i32, ptr %12, align 4, !tbaa !9
  %188 = icmp eq i32 %187, 0
  br i1 %188, label %192, label %189

189:                                              ; preds = %186
  %190 = load i32, ptr %12, align 4, !tbaa !9
  %191 = icmp sgt i32 %190, 128
  br i1 %191, label %192, label %196

192:                                              ; preds = %189, %186
  %193 = load ptr, ptr @stderr, align 8, !tbaa !5
  %194 = load ptr, ptr %5, align 8, !tbaa !5
  %195 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef @.str.67, ptr noundef %194) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %549

196:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %16) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %243, %196
  %198 = load i32, ptr %17, align 4, !tbaa !9
  %199 = icmp slt i32 %198, 256
  br i1 %199, label %201, label %200

200:                                              ; preds = %197
  store i32 8, ptr %7, align 4
  br label %246

201:                                              ; preds = %197
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = call i32 @fgetc(ptr noundef %202)
  store i32 %203, ptr %8, align 4, !tbaa !9
  %204 = load i32, ptr %8, align 4, !tbaa !9
  %205 = icmp eq i32 %204, 32
  br i1 %205, label %206, label %210

206:                                              ; preds = %201
  %207 = load i32, ptr %15, align 4, !tbaa !9
  %208 = icmp eq i32 %207, 0
  br i1 %208, label %209, label %210

209:                                              ; preds = %206
  br label %243

210:                                              ; preds = %206, %201
  %211 = load i32, ptr %8, align 4, !tbaa !9
  %212 = icmp eq i32 %211, 32
  br i1 %212, label %216, label %213

213:                                              ; preds = %210
  %214 = load i32, ptr %8, align 4, !tbaa !9
  %215 = icmp eq i32 %214, 10
  br i1 %215, label %216, label %220

216:                                              ; preds = %213, %210
  %217 = load i32, ptr %15, align 4, !tbaa !9
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds [256 x i8], ptr %16, i64 0, i64 %218
  store i8 0, ptr %219, align 1, !tbaa !11
  store i32 8, ptr %7, align 4
  br label %246

220:                                              ; preds = %213
  br label %221

221:                                              ; preds = %220
  %222 = load i32, ptr %8, align 4, !tbaa !9
  %223 = call i32 @isdigit(i32 noundef %222) #11
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %236, label %225

225:                                              ; preds = %221
  %226 = load i32, ptr %8, align 4, !tbaa !9
  %227 = icmp ne i32 %226, 46
  br i1 %227, label %228, label %236

228:                                              ; preds = %225
  %229 = load i32, ptr %8, align 4, !tbaa !9
  %230 = icmp ne i32 %229, 45
  br i1 %230, label %231, label %236

231:                                              ; preds = %228
  %232 = load ptr, ptr @stderr, align 8, !tbaa !5
  %233 = load i32, ptr %8, align 4, !tbaa !9
  %234 = load ptr, ptr %5, align 8, !tbaa !5
  %235 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %232, ptr noundef @.str.68, i32 noundef %233, ptr noundef %234) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %246

236:                                              ; preds = %228, %225, %221
  %237 = load i32, ptr %8, align 4, !tbaa !9
  %238 = trunc i32 %237 to i8
  %239 = load i32, ptr %15, align 4, !tbaa !9
  %240 = add nsw i32 %239, 1
  store i32 %240, ptr %15, align 4, !tbaa !9
  %241 = sext i32 %239 to i64
  %242 = getelementptr inbounds [256 x i8], ptr %16, i64 0, i64 %241
  store i8 %238, ptr %242, align 1, !tbaa !11
  br label %243

243:                                              ; preds = %236, %209
  %244 = load i32, ptr %17, align 4, !tbaa !9
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %17, align 4, !tbaa !9
  br label %197, !llvm.loop !15

246:                                              ; preds = %231, %216, %200
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  %247 = load i32, ptr %7, align 4
  switch i32 %247, label %548 [
    i32 8, label %248
  ]

248:                                              ; preds = %246
  %249 = load i32, ptr %15, align 4, !tbaa !9
  %250 = icmp eq i32 %249, 0
  br i1 %250, label %254, label %251

251:                                              ; preds = %248
  %252 = load i32, ptr %15, align 4, !tbaa !9
  %253 = icmp sgt i32 %252, 128
  br i1 %253, label %254, label %258

254:                                              ; preds = %251, %248
  %255 = load ptr, ptr @stderr, align 8, !tbaa !5
  %256 = load ptr, ptr %5, align 8, !tbaa !5
  %257 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %255, ptr noundef @.str.69, ptr noundef %256) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %548

258:                                              ; preds = %251
  %259 = getelementptr inbounds [256 x i8], ptr %10, i64 0, i64 0
  %260 = call i32 @atoi(ptr noundef %259) #11
  %261 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 0
  store i32 %260, ptr %261, align 8, !tbaa !16
  %262 = getelementptr inbounds [256 x i8], ptr %13, i64 0, i64 0
  %263 = call i32 @atoi(ptr noundef %262) #11
  %264 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 1
  store i32 %263, ptr %264, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  %265 = getelementptr inbounds [256 x i8], ptr %16, i64 0, i64 0
  %266 = call double @atof(ptr noundef %265) #11
  %267 = fptrunc double %266 to float
  store float %267, ptr %18, align 4, !tbaa !19
  %268 = load float, ptr %18, align 4, !tbaa !19
  %269 = fcmp oeq float %268, -9.990000e+02
  br i1 %269, label %270, label %273

270:                                              ; preds = %258
  %271 = load ptr, ptr @stderr, align 8, !tbaa !5
  %272 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %271, ptr noundef @.str.70) #10
  br label %273

273:                                              ; preds = %270, %258
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  %274 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 0
  %275 = load i32, ptr %274, align 8, !tbaa !16
  %276 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 1
  %277 = load i32, ptr %276, align 4, !tbaa !18
  %278 = mul nsw i32 %275, %277
  store i32 %278, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %279 = load i32, ptr %19, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %280, i64 4)
  %282 = extractvalue { i64, i1 } %281, 1
  %283 = extractvalue { i64, i1 } %281, 0
  %284 = select i1 %282, i64 -1, i64 %283
  %285 = call noalias noundef nonnull ptr @_Znam(i64 noundef %284) #12
  store ptr %285, ptr %20, align 8, !tbaa !5
  %286 = load ptr, ptr %20, align 8, !tbaa !5
  %287 = icmp ne ptr %286, null
  br i1 %287, label %292, label %288

288:                                              ; preds = %273
  %289 = load ptr, ptr @stderr, align 8, !tbaa !5
  %290 = load ptr, ptr %5, align 8, !tbaa !5
  %291 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %289, ptr noundef @.str.71, ptr noundef %290) #10
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %547

292:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  %293 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %293, ptr %21, align 4, !tbaa !9
  br label %294

294:                                              ; preds = %314, %292
  %295 = load i32, ptr %21, align 4, !tbaa !9
  %296 = icmp sgt i32 %295, 0
  br i1 %296, label %297, label %318

297:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  %298 = load ptr, ptr %20, align 8, !tbaa !5
  %299 = load i32, ptr %19, align 4, !tbaa !9
  %300 = load i32, ptr %21, align 4, !tbaa !9
  %301 = sub nsw i32 %299, %300
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds float, ptr %298, i64 %302
  %304 = load i32, ptr %21, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = load ptr, ptr %6, align 8, !tbaa !5
  %307 = call i64 @fread(ptr noundef %303, i64 noundef 4, i64 noundef %305, ptr noundef %306)
  %308 = trunc i64 %307 to i32
  store i32 %308, ptr %22, align 4, !tbaa !9
  %309 = load i32, ptr %22, align 4, !tbaa !9
  %310 = icmp sle i32 %309, 0
  br i1 %310, label %311, label %314

311:                                              ; preds = %297
  %312 = load ptr, ptr @stderr, align 8, !tbaa !5
  %313 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %312, ptr noundef @.str.72) #10
  call void @abort() #13
  unreachable

314:                                              ; preds = %297
  %315 = load i32, ptr %22, align 4, !tbaa !9
  %316 = load i32, ptr %21, align 4, !tbaa !9
  %317 = sub nsw i32 %316, %315
  store i32 %317, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  br label %294, !llvm.loop !21

318:                                              ; preds = %294
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = call i32 @fclose(ptr noundef %319)
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  store float 0.000000e+00, ptr %23, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  store float 1.000000e+00, ptr %24, align 4, !tbaa !19
  %321 = load i32, ptr %19, align 4, !tbaa !9
  %322 = icmp sgt i32 %321, 0
  br i1 %322, label %323, label %440

323:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store float 0.000000e+00, ptr %25, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  store float 0x47EFFFFFE0000000, ptr %26, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  store float 0xC7EFFFFFE0000000, ptr %27, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %373, %323
  %325 = load i32, ptr %28, align 4, !tbaa !9
  %326 = load i32, ptr %19, align 4, !tbaa !9
  %327 = icmp slt i32 %325, %326
  br i1 %327, label %329, label %328

328:                                              ; preds = %324
  store i32 13, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  br label %376

329:                                              ; preds = %324
  %330 = load ptr, ptr %20, align 8, !tbaa !5
  %331 = load i32, ptr %28, align 4, !tbaa !9
  %332 = sext i32 %331 to i64
  %333 = getelementptr inbounds float, ptr %330, i64 %332
  %334 = load float, ptr %333, align 4, !tbaa !19
  %335 = fcmp oeq float %334, -3.210000e+02
  br i1 %335, label %336, label %337

336:                                              ; preds = %329
  br label %373

337:                                              ; preds = %329
  %338 = load ptr, ptr %20, align 8, !tbaa !5
  %339 = load i32, ptr %28, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds float, ptr %338, i64 %340
  %342 = load float, ptr %341, align 4, !tbaa !19
  %343 = load float, ptr %27, align 4, !tbaa !19
  %344 = fcmp ogt float %342, %343
  br i1 %344, label %345, label %351

345:                                              ; preds = %337
  %346 = load ptr, ptr %20, align 8, !tbaa !5
  %347 = load i32, ptr %28, align 4, !tbaa !9
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds float, ptr %346, i64 %348
  %350 = load float, ptr %349, align 4, !tbaa !19
  store float %350, ptr %27, align 4, !tbaa !19
  br label %351

351:                                              ; preds = %345, %337
  %352 = load ptr, ptr %20, align 8, !tbaa !5
  %353 = load i32, ptr %28, align 4, !tbaa !9
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds float, ptr %352, i64 %354
  %356 = load float, ptr %355, align 4, !tbaa !19
  %357 = load float, ptr %26, align 4, !tbaa !19
  %358 = fcmp olt float %356, %357
  br i1 %358, label %359, label %365

359:                                              ; preds = %351
  %360 = load ptr, ptr %20, align 8, !tbaa !5
  %361 = load i32, ptr %28, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds float, ptr %360, i64 %362
  %364 = load float, ptr %363, align 4, !tbaa !19
  store float %364, ptr %26, align 4, !tbaa !19
  br label %365

365:                                              ; preds = %359, %351
  %366 = load ptr, ptr %20, align 8, !tbaa !5
  %367 = load i32, ptr %28, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds float, ptr %366, i64 %368
  %370 = load float, ptr %369, align 4, !tbaa !19
  %371 = load float, ptr %25, align 4, !tbaa !19
  %372 = fadd float %371, %370
  store float %372, ptr %25, align 4, !tbaa !19
  br label %373

373:                                              ; preds = %365, %336
  %374 = load i32, ptr %28, align 4, !tbaa !9
  %375 = add nsw i32 %374, 1
  store i32 %375, ptr %28, align 4, !tbaa !9
  br label %324, !llvm.loop !22

376:                                              ; preds = %328
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  %377 = load float, ptr %25, align 4, !tbaa !19
  %378 = load i32, ptr %19, align 4, !tbaa !9
  %379 = sitofp i32 %378 to float
  %380 = fdiv float %377, %379
  store float %380, ptr %29, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  store float 0.000000e+00, ptr %30, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %381

381:                                              ; preds = %406, %376
  %382 = load i32, ptr %31, align 4, !tbaa !9
  %383 = load i32, ptr %19, align 4, !tbaa !9
  %384 = icmp slt i32 %382, %383
  br i1 %384, label %386, label %385

385:                                              ; preds = %381
  store i32 16, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %409

386:                                              ; preds = %381
  %387 = load ptr, ptr %20, align 8, !tbaa !5
  %388 = load i32, ptr %31, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds float, ptr %387, i64 %389
  %391 = load float, ptr %390, align 4, !tbaa !19
  %392 = fcmp oeq float %391, -3.210000e+02
  br i1 %392, label %393, label %394

393:                                              ; preds = %386
  br label %406

394:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %395 = load ptr, ptr %20, align 8, !tbaa !5
  %396 = load i32, ptr %31, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds float, ptr %395, i64 %397
  %399 = load float, ptr %398, align 4, !tbaa !19
  %400 = load float, ptr %29, align 4, !tbaa !19
  %401 = fsub float %399, %400
  store float %401, ptr %32, align 4, !tbaa !19
  %402 = load float, ptr %32, align 4, !tbaa !19
  %403 = load float, ptr %32, align 4, !tbaa !19
  %404 = load float, ptr %30, align 4, !tbaa !19
  %405 = call float @llvm.fmuladd.f32(float %402, float %403, float %404)
  store float %405, ptr %30, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %406

406:                                              ; preds = %394, %393
  %407 = load i32, ptr %31, align 4, !tbaa !9
  %408 = add nsw i32 %407, 1
  store i32 %408, ptr %31, align 4, !tbaa !9
  br label %381, !llvm.loop !23

409:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  %410 = load float, ptr %30, align 4, !tbaa !19
  %411 = call noundef float @_ZSt4sqrtf(float noundef %410)
  store float %411, ptr %33, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  %412 = load float, ptr %29, align 4, !tbaa !19
  %413 = load float, ptr %33, align 4, !tbaa !19
  %414 = call float @llvm.fmuladd.f32(float -3.000000e+00, float %413, float %412)
  store float %414, ptr %34, align 4, !tbaa !19
  %415 = load float, ptr %34, align 4, !tbaa !19
  %416 = load float, ptr %26, align 4, !tbaa !19
  %417 = fcmp olt float %415, %416
  br i1 %417, label %418, label %420

418:                                              ; preds = %409
  %419 = load float, ptr %26, align 4, !tbaa !19
  store float %419, ptr %34, align 4, !tbaa !19
  br label %420

420:                                              ; preds = %418, %409
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  %421 = load float, ptr %29, align 4, !tbaa !19
  %422 = load float, ptr %33, align 4, !tbaa !19
  %423 = call float @llvm.fmuladd.f32(float 3.000000e+00, float %422, float %421)
  store float %423, ptr %35, align 4, !tbaa !19
  %424 = load float, ptr %35, align 4, !tbaa !19
  %425 = load float, ptr %27, align 4, !tbaa !19
  %426 = fcmp ogt float %424, %425
  br i1 %426, label %427, label %429

427:                                              ; preds = %420
  %428 = load float, ptr %27, align 4, !tbaa !19
  store float %428, ptr %35, align 4, !tbaa !19
  br label %429

429:                                              ; preds = %427, %420
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  %430 = load float, ptr %35, align 4, !tbaa !19
  %431 = load float, ptr %34, align 4, !tbaa !19
  %432 = fsub float %430, %431
  store float %432, ptr %36, align 4, !tbaa !19
  %433 = load float, ptr %36, align 4, !tbaa !19
  %434 = fcmp ogt float %433, 0.000000e+00
  br i1 %434, label %435, label %439

435:                                              ; preds = %429
  %436 = load float, ptr %34, align 4, !tbaa !19
  store float %436, ptr %23, align 4, !tbaa !19
  %437 = load float, ptr %36, align 4, !tbaa !19
  %438 = fdiv float 1.000000e+00, %437
  store float %438, ptr %24, align 4, !tbaa !19
  br label %439

439:                                              ; preds = %435, %429
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %440

440:                                              ; preds = %439, %318
  %441 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 2
  store i32 3, ptr %441, align 8, !tbaa !24
  %442 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 2
  %443 = load i32, ptr %442, align 8, !tbaa !24
  %444 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 0
  %445 = load i32, ptr %444, align 8, !tbaa !16
  %446 = mul nsw i32 %443, %445
  %447 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 3
  store i32 %446, ptr %447, align 4, !tbaa !25
  %448 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 3
  %449 = load i32, ptr %448, align 4, !tbaa !25
  %450 = srem i32 %449, 4
  %451 = icmp ne i32 %450, 0
  br i1 %451, label %452, label %459

452:                                              ; preds = %440
  %453 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 3
  %454 = load i32, ptr %453, align 4, !tbaa !25
  %455 = sdiv i32 %454, 4
  %456 = add nsw i32 %455, 1
  %457 = mul nsw i32 %456, 4
  %458 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 3
  store i32 %457, ptr %458, align 4, !tbaa !25
  br label %459

459:                                              ; preds = %452, %440
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  %460 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 3
  %461 = load i32, ptr %460, align 4, !tbaa !25
  %462 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 1
  %463 = load i32, ptr %462, align 4, !tbaa !18
  %464 = mul nsw i32 %461, %463
  store i32 %464, ptr %37, align 4, !tbaa !9
  %465 = load i32, ptr %37, align 4, !tbaa !9
  %466 = sext i32 %465 to i64
  %467 = call noalias noundef nonnull ptr @_Znam(i64 noundef %466) #12
  %468 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 4
  store ptr %467, ptr %468, align 8, !tbaa !26
  %469 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 4
  %470 = load ptr, ptr %469, align 8, !tbaa !26
  %471 = icmp ne ptr %470, null
  br i1 %471, label %473, label %472

472:                                              ; preds = %459
  call void (ptr, ...) @_Z7RNAbortPKcz(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1042, ptr noundef @.str.2)
  br label %473

473:                                              ; preds = %472, %459
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %474 = load ptr, ptr %20, align 8, !tbaa !5
  store ptr %474, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %475

475:                                              ; preds = %542, %473
  %476 = load i32, ptr %39, align 4, !tbaa !9
  %477 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 1
  %478 = load i32, ptr %477, align 4, !tbaa !18
  %479 = icmp slt i32 %476, %478
  br i1 %479, label %481, label %480

480:                                              ; preds = %475
  store i32 19, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  br label %545

481:                                              ; preds = %475
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %482 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 4
  %483 = load ptr, ptr %482, align 8, !tbaa !26
  %484 = load i32, ptr %39, align 4, !tbaa !9
  %485 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 3
  %486 = load i32, ptr %485, align 4, !tbaa !25
  %487 = mul nsw i32 %484, %486
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i8, ptr %483, i64 %488
  store ptr %489, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #10
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %490

490:                                              ; preds = %538, %481
  %491 = load i32, ptr %41, align 4, !tbaa !9
  %492 = getelementptr inbounds %class.R2Image, ptr %44, i32 0, i32 0
  %493 = load i32, ptr %492, align 8, !tbaa !16
  %494 = icmp slt i32 %491, %493
  br i1 %494, label %496, label %495

495:                                              ; preds = %490
  store i32 22, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  br label %541

496:                                              ; preds = %490
  %497 = load ptr, ptr %38, align 8, !tbaa !5
  %498 = load float, ptr %497, align 4, !tbaa !19
  %499 = fcmp oeq float %498, -3.210000e+02
  br i1 %499, label %500, label %507

500:                                              ; preds = %496
  %501 = load ptr, ptr %40, align 8, !tbaa !5
  %502 = getelementptr inbounds i8, ptr %501, i32 1
  store ptr %502, ptr %40, align 8, !tbaa !5
  store i8 64, ptr %501, align 1, !tbaa !11
  %503 = load ptr, ptr %40, align 8, !tbaa !5
  %504 = getelementptr inbounds i8, ptr %503, i32 1
  store ptr %504, ptr %40, align 8, !tbaa !5
  store i8 32, ptr %503, align 1, !tbaa !11
  %505 = load ptr, ptr %40, align 8, !tbaa !5
  %506 = getelementptr inbounds i8, ptr %505, i32 1
  store ptr %506, ptr %40, align 8, !tbaa !5
  store i8 0, ptr %505, align 1, !tbaa !11
  br label %535

507:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #10
  %508 = load ptr, ptr %38, align 8, !tbaa !5
  %509 = load float, ptr %508, align 4, !tbaa !19
  %510 = load float, ptr %23, align 4, !tbaa !19
  %511 = fsub float %509, %510
  %512 = fmul float %511, 2.550000e+02
  %513 = load float, ptr %24, align 4, !tbaa !19
  %514 = fmul float %512, %513
  %515 = fptosi float %514 to i32
  store i32 %515, ptr %42, align 4, !tbaa !9
  %516 = load i32, ptr %42, align 4, !tbaa !9
  %517 = icmp slt i32 %516, 0
  br i1 %517, label %518, label %519

518:                                              ; preds = %507
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %519

519:                                              ; preds = %518, %507
  %520 = load i32, ptr %42, align 4, !tbaa !9
  %521 = icmp sgt i32 %520, 255
  br i1 %521, label %522, label %523

522:                                              ; preds = %519
  store i32 255, ptr %42, align 4, !tbaa !9
  br label %523

523:                                              ; preds = %522, %519
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #10
  %524 = load i32, ptr %42, align 4, !tbaa !9
  %525 = trunc i32 %524 to i8
  store i8 %525, ptr %43, align 1, !tbaa !11
  %526 = load i8, ptr %43, align 1, !tbaa !11
  %527 = load ptr, ptr %40, align 8, !tbaa !5
  %528 = getelementptr inbounds i8, ptr %527, i32 1
  store ptr %528, ptr %40, align 8, !tbaa !5
  store i8 %526, ptr %527, align 1, !tbaa !11
  %529 = load i8, ptr %43, align 1, !tbaa !11
  %530 = load ptr, ptr %40, align 8, !tbaa !5
  %531 = getelementptr inbounds i8, ptr %530, i32 1
  store ptr %531, ptr %40, align 8, !tbaa !5
  store i8 %529, ptr %530, align 1, !tbaa !11
  %532 = load i8, ptr %43, align 1, !tbaa !11
  %533 = load ptr, ptr %40, align 8, !tbaa !5
  %534 = getelementptr inbounds i8, ptr %533, i32 1
  store ptr %534, ptr %40, align 8, !tbaa !5
  store i8 %532, ptr %533, align 1, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #10
  br label %535

535:                                              ; preds = %523, %500
  %536 = load ptr, ptr %38, align 8, !tbaa !5
  %537 = getelementptr inbounds float, ptr %536, i32 1
  store ptr %537, ptr %38, align 8, !tbaa !5
  br label %538

538:                                              ; preds = %535
  %539 = load i32, ptr %41, align 4, !tbaa !9
  %540 = add nsw i32 %539, 1
  store i32 %540, ptr %41, align 4, !tbaa !9
  br label %490, !llvm.loop !27

541:                                              ; preds = %495
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %542

542:                                              ; preds = %541
  %543 = load i32, ptr %39, align 4, !tbaa !9
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %39, align 4, !tbaa !9
  br label %475, !llvm.loop !28

545:                                              ; preds = %480
  %546 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %546, ptr %3, align 4
  store i32 1, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  br label %547

547:                                              ; preds = %545, %288
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  br label %548

548:                                              ; preds = %547, %254, %246
  call void @llvm.lifetime.end.p0(i64 256, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  br label %549

549:                                              ; preds = %548, %192, %184
  call void @llvm.lifetime.end.p0(i64 256, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #10
  br label %550

550:                                              ; preds = %549, %134, %126
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  br label %551

551:                                              ; preds = %550, %76, %67, %58
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  br label %552

552:                                              ; preds = %551, %49
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #10
  %553 = load i32, ptr %3, align 4
  ret i32 %553
}

declare noalias ptr @fopen(ptr noundef, ptr noundef) #2

declare i32 @fclose(ptr noundef) #2

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

declare i32 @fgetc(ptr noundef) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @isdigit(i32 noundef) #5

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #6

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare double @atof(ptr noundef nonnull) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #7

; Function Attrs: noreturn nounwind
declare void @abort() #8

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #9

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress 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 #5 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind willreturn memory(read) 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 #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { inlinehint mustprogress 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 #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { noreturn nounwind }

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

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


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str.25 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [12 x i8], align 1

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #1

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

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7R2Image7ReadPFMEPKc(ptr nocapture noundef nonnull align 8 dereferenceable(24) %0, ptr noundef %1) local_unnamed_addr #3 align 2 {
  %3 = alloca [256 x i8], align 16
  %4 = alloca [256 x i8], align 16
  %5 = alloca [256 x i8], align 16
  %6 = tail call noalias ptr @fopen(ptr noundef %1, ptr noundef nonnull @.str.25)
  %.not = icmp eq ptr %6, null
  br i1 %.not, label %7, label %10

7:                                                ; preds = %2
  %8 = load ptr, ptr @stderr, align 8, !tbaa !5
  %9 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %8, ptr noundef nonnull @.str.62, ptr noundef %1) #9
  br label %219

10:                                               ; preds = %2
  %11 = tail call i32 @fgetc(ptr noundef nonnull %6)
  %.not227 = icmp eq i32 %11, 80
  br i1 %.not227, label %15, label %12

12:                                               ; preds = %10
  %13 = load ptr, ptr @stderr, align 8, !tbaa !5
  %14 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %13, ptr noundef nonnull @.str.63, ptr noundef %1) #9
  br label %219

15:                                               ; preds = %10
  %16 = tail call i32 @fgetc(ptr noundef nonnull %6)
  %.not228 = icmp eq i32 %16, 102
  br i1 %.not228, label %20, label %17

17:                                               ; preds = %15
  %18 = load ptr, ptr @stderr, align 8, !tbaa !5
  %19 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %18, ptr noundef nonnull @.str.63, ptr noundef %1) #9
  br label %219

20:                                               ; preds = %15
  %21 = tail call i32 @fgetc(ptr noundef nonnull %6)
  %.not229 = icmp eq i32 %21, 10
  br i1 %.not229, label %25, label %22

22:                                               ; preds = %20
  %23 = load ptr, ptr @stderr, align 8, !tbaa !5
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.63, ptr noundef %1) #9
  br label %219

25:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %3) #10
  br label %26

26:                                               ; preds = %25, %43
  %.0187252 = phi i32 [ 0, %25 ], [ %.1188, %43 ]
  %.0191251 = phi i32 [ 0, %25 ], [ %44, %43 ]
  %27 = tail call i32 @fgetc(ptr noundef nonnull %6)
  %28 = icmp eq i32 %27, 32
  %29 = icmp eq i32 %.0187252, 0
  %or.cond = select i1 %28, i1 %29, i1 false
  br i1 %or.cond, label %43, label %30

30:                                               ; preds = %26
  switch i32 %27, label %34 [
    i32 32, label %31
    i32 10, label %31
  ]

31:                                               ; preds = %30, %30
  %32 = sext i32 %.0187252 to i64
  %33 = getelementptr inbounds [256 x i8], ptr %3, i64 0, i64 %32
  store i8 0, ptr %33, align 1, !tbaa !9
  br label %.critedge

34:                                               ; preds = %30
  %isdigittmp = add i32 %27, -48
  %isdigit = icmp ult i32 %isdigittmp, 10
  br i1 %isdigit, label %38, label %35

35:                                               ; preds = %34
  %36 = load ptr, ptr @stderr, align 8, !tbaa !5
  %37 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %36, ptr noundef nonnull @.str.64, i32 noundef %27, ptr noundef %1) #9
  br label %218

38:                                               ; preds = %34
  %39 = trunc nuw i32 %27 to i8
  %40 = add nsw i32 %.0187252, 1
  %41 = sext i32 %.0187252 to i64
  %42 = getelementptr inbounds [256 x i8], ptr %3, i64 0, i64 %41
  store i8 %39, ptr %42, align 1, !tbaa !9
  br label %43

43:                                               ; preds = %26, %38
  %.1188 = phi i32 [ 0, %26 ], [ %40, %38 ]
  %44 = add nuw nsw i32 %.0191251, 1
  %exitcond.not = icmp eq i32 %44, 256
  br i1 %exitcond.not, label %.critedge, label %26, !llvm.loop !10

.critedge:                                        ; preds = %43, %31
  %.0187249 = phi i32 [ %.0187252, %31 ], [ %.1188, %43 ]
  %45 = icmp eq i32 %.0187249, 0
  %46 = icmp sgt i32 %.0187249, 128
  %or.cond7 = or i1 %45, %46
  br i1 %or.cond7, label %47, label %50

47:                                               ; preds = %.critedge
  %48 = load ptr, ptr @stderr, align 8, !tbaa !5
  %49 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef nonnull @.str.65, ptr noundef %1) #9
  br label %218

50:                                               ; preds = %.critedge
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %4) #10
  br label %51

51:                                               ; preds = %50, %68
  %.0192254 = phi i32 [ 0, %50 ], [ %.1193, %68 ]
  %.0197253 = phi i32 [ 0, %50 ], [ %69, %68 ]
  %52 = tail call i32 @fgetc(ptr noundef nonnull %6)
  %53 = icmp eq i32 %52, 32
  %54 = icmp eq i32 %.0192254, 0
  %or.cond9 = select i1 %53, i1 %54, i1 false
  br i1 %or.cond9, label %68, label %55

55:                                               ; preds = %51
  switch i32 %52, label %59 [
    i32 32, label %56
    i32 10, label %56
  ]

56:                                               ; preds = %55, %55
  %57 = sext i32 %.0192254 to i64
  %58 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %57
  store i8 0, ptr %58, align 1, !tbaa !9
  br label %.critedge236

59:                                               ; preds = %55
  %isdigittmp230 = add i32 %52, -48
  %isdigit231 = icmp ult i32 %isdigittmp230, 10
  br i1 %isdigit231, label %63, label %60

60:                                               ; preds = %59
  %61 = load ptr, ptr @stderr, align 8, !tbaa !5
  %62 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef nonnull @.str.66, i32 noundef %52, ptr noundef %1) #9
  br label %217

63:                                               ; preds = %59
  %64 = trunc nuw i32 %52 to i8
  %65 = add nsw i32 %.0192254, 1
  %66 = sext i32 %.0192254 to i64
  %67 = getelementptr inbounds [256 x i8], ptr %4, i64 0, i64 %66
  store i8 %64, ptr %67, align 1, !tbaa !9
  br label %68

68:                                               ; preds = %51, %63
  %.1193 = phi i32 [ 0, %51 ], [ %65, %63 ]
  %69 = add nuw nsw i32 %.0197253, 1
  %exitcond294.not = icmp eq i32 %69, 256
  br i1 %exitcond294.not, label %.critedge236, label %51, !llvm.loop !12

.critedge236:                                     ; preds = %68, %56
  %.0192245 = phi i32 [ %.0192254, %56 ], [ %.1193, %68 ]
  %70 = icmp eq i32 %.0192245, 0
  %71 = icmp sgt i32 %.0192245, 128
  %or.cond13 = or i1 %70, %71
  br i1 %or.cond13, label %72, label %75

72:                                               ; preds = %.critedge236
  %73 = load ptr, ptr @stderr, align 8, !tbaa !5
  %74 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %73, ptr noundef nonnull @.str.67, ptr noundef %1) #9
  br label %217

75:                                               ; preds = %.critedge236
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #10
  br label %76

76:                                               ; preds = %75, %96
  %.0211256 = phi i32 [ 0, %75 ], [ %.1212, %96 ]
  %.0214255 = phi i32 [ 0, %75 ], [ %97, %96 ]
  %77 = tail call i32 @fgetc(ptr noundef nonnull %6)
  %78 = icmp eq i32 %77, 32
  %79 = icmp eq i32 %.0211256, 0
  %or.cond15 = select i1 %78, i1 %79, i1 false
  br i1 %or.cond15, label %96, label %80

80:                                               ; preds = %76
  switch i32 %77, label %84 [
    i32 32, label %81
    i32 10, label %81
  ]

81:                                               ; preds = %80, %80
  %82 = sext i32 %.0211256 to i64
  %83 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 %82
  store i8 0, ptr %83, align 1, !tbaa !9
  br label %.critedge238

84:                                               ; preds = %80
  %85 = add i32 %77, -58
  %isdigit233 = icmp ult i32 %85, -10
  %86 = add i32 %77, -47
  %87 = icmp ult i32 %86, -2
  %or.cond21 = and i1 %isdigit233, %87
  br i1 %or.cond21, label %88, label %91

88:                                               ; preds = %84
  %89 = load ptr, ptr @stderr, align 8, !tbaa !5
  %90 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %89, ptr noundef nonnull @.str.68, i32 noundef %77, ptr noundef %1) #9
  br label %.loopexit

91:                                               ; preds = %84
  %92 = trunc nuw i32 %77 to i8
  %93 = add nsw i32 %.0211256, 1
  %94 = sext i32 %.0211256 to i64
  %95 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 %94
  store i8 %92, ptr %95, align 1, !tbaa !9
  br label %96

96:                                               ; preds = %76, %91
  %.1212 = phi i32 [ 0, %76 ], [ %93, %91 ]
  %97 = add nuw nsw i32 %.0214255, 1
  %exitcond295.not = icmp eq i32 %97, 256
  br i1 %exitcond295.not, label %.critedge238, label %76, !llvm.loop !13

.critedge238:                                     ; preds = %96, %81
  %.0211241 = phi i32 [ %.0211256, %81 ], [ %.1212, %96 ]
  %98 = icmp eq i32 %.0211241, 0
  %99 = icmp sgt i32 %.0211241, 128
  %or.cond23 = or i1 %98, %99
  br i1 %or.cond23, label %100, label %103

100:                                              ; preds = %.critedge238
  %101 = load ptr, ptr @stderr, align 8, !tbaa !5
  %102 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %101, ptr noundef nonnull @.str.69, ptr noundef %1) #9
  br label %.loopexit

103:                                              ; preds = %.critedge238
  %104 = call i32 @atoi(ptr nocapture noundef %3) #11
  store i32 %104, ptr %0, align 8, !tbaa !14
  %105 = call i32 @atoi(ptr nocapture noundef %4) #11
  %106 = getelementptr inbounds i8, ptr %0, i64 4
  store i32 %105, ptr %106, align 4, !tbaa !17
  %107 = call double @atof(ptr noundef %5) #11
  %108 = fptrunc double %107 to float
  %109 = fcmp oeq float %108, -9.990000e+02
  br i1 %109, label %110, label %113

110:                                              ; preds = %103
  %111 = load ptr, ptr @stderr, align 8, !tbaa !5
  %112 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %111, ptr noundef nonnull @.str.70) #9
  %.pre = load i32, ptr %0, align 8, !tbaa !14
  %.pre305 = load i32, ptr %106, align 4, !tbaa !17
  br label %113

113:                                              ; preds = %110, %103
  %114 = phi i32 [ %.pre305, %110 ], [ %105, %103 ]
  %115 = phi i32 [ %.pre, %110 ], [ %104, %103 ]
  %116 = mul nsw i32 %114, %115
  %117 = sext i32 %116 to i64
  %118 = icmp slt i32 %116, 0
  %119 = shl nsw i64 %117, 2
  %120 = select i1 %118, i64 -1, i64 %119
  %121 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %120) #12
  %122 = icmp sgt i32 %116, 0
  br i1 %122, label %.lr.ph, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %113
  %123 = tail call i32 @fclose(ptr noundef nonnull %6)
  br label %172

124:                                              ; preds = %.lr.ph
  %125 = sub nsw i32 %.0213257, %132
  %126 = icmp sgt i32 %125, 0
  br i1 %126, label %.lr.ph, label %._crit_edge, !llvm.loop !18

.lr.ph:                                           ; preds = %113, %124
  %.0213257 = phi i32 [ %125, %124 ], [ %116, %113 ]
  %127 = sub nsw i32 %116, %.0213257
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds float, ptr %121, i64 %128
  %130 = zext nneg i32 %.0213257 to i64
  %131 = tail call i64 @fread(ptr noundef nonnull %129, i64 noundef 4, i64 noundef %130, ptr noundef nonnull %6)
  %132 = trunc i64 %131 to i32
  %133 = icmp slt i32 %132, 1
  br i1 %133, label %134, label %124

134:                                              ; preds = %.lr.ph
  %135 = load ptr, ptr @stderr, align 8, !tbaa !5
  %136 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %135, ptr noundef nonnull @.str.72) #9
  tail call void @abort() #13
  unreachable

._crit_edge:                                      ; preds = %124
  %137 = tail call i32 @fclose(ptr noundef nonnull %6)
  br i1 %122, label %.preheader.preheader, label %172

.preheader.preheader:                             ; preds = %._crit_edge
  %wide.trip.count = zext nneg i32 %116 to i64
  br label %.preheader

.lr.ph265.preheader:                              ; preds = %148
  %138 = uitofp nneg i32 %116 to float
  %139 = fdiv float %.1206, %138
  %xtraiter = and i64 %wide.trip.count, 1
  %140 = icmp eq i32 %116, 1
  br i1 %140, label %._crit_edge266.unr-lcssa, label %.lr.ph265.preheader.new

.lr.ph265.preheader.new:                          ; preds = %.lr.ph265.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  br label %.lr.ph265

.preheader:                                       ; preds = %.preheader.preheader, %148
  %indvars.iv = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next, %148 ]
  %.0199260 = phi float [ 0xC7EFFFFFE0000000, %.preheader.preheader ], [ %.2201, %148 ]
  %.0202259 = phi float [ 0x47EFFFFFE0000000, %.preheader.preheader ], [ %.2204, %148 ]
  %.0205258 = phi float [ 0.000000e+00, %.preheader.preheader ], [ %.1206, %148 ]
  %141 = getelementptr inbounds float, ptr %121, i64 %indvars.iv
  %142 = load float, ptr %141, align 4, !tbaa !19
  %143 = fcmp oeq float %142, -3.210000e+02
  br i1 %143, label %148, label %144

144:                                              ; preds = %.preheader
  %145 = fcmp ogt float %142, %.0199260
  %.1200 = select i1 %145, float %142, float %.0199260
  %146 = fcmp olt float %142, %.0202259
  %.1203 = select i1 %146, float %142, float %.0202259
  %147 = fadd float %.0205258, %142
  br label %148

148:                                              ; preds = %.preheader, %144
  %.1206 = phi float [ %.0205258, %.preheader ], [ %147, %144 ]
  %.2204 = phi float [ %.0202259, %.preheader ], [ %.1203, %144 ]
  %.2201 = phi float [ %.0199260, %.preheader ], [ %.1200, %144 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond297.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond297.not, label %.lr.ph265.preheader, label %.preheader, !llvm.loop !21

._crit_edge266.unr-lcssa:                         ; preds = %.lr.ph265, %.lr.ph265.preheader
  %.1196.lcssa.ph = phi float [ poison, %.lr.ph265.preheader ], [ %.1196.1, %.lr.ph265 ]
  %indvars.iv298.unr = phi i64 [ 0, %.lr.ph265.preheader ], [ %indvars.iv.next299.1, %.lr.ph265 ]
  %.0195262.unr = phi float [ 0.000000e+00, %.lr.ph265.preheader ], [ %.1196.1, %.lr.ph265 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge266, label %.lr.ph265.epil

.lr.ph265.epil:                                   ; preds = %._crit_edge266.unr-lcssa
  %149 = getelementptr inbounds float, ptr %121, i64 %indvars.iv298.unr
  %150 = load float, ptr %149, align 4, !tbaa !19
  %151 = fcmp oeq float %150, -3.210000e+02
  %152 = fsub float %150, %139
  %153 = tail call float @llvm.fmuladd.f32(float %152, float %152, float %.0195262.unr)
  %.1196.epil = select i1 %151, float %.0195262.unr, float %153
  br label %._crit_edge266

._crit_edge266:                                   ; preds = %._crit_edge266.unr-lcssa, %.lr.ph265.epil
  %.1196.lcssa = phi float [ %.1196.lcssa.ph, %._crit_edge266.unr-lcssa ], [ %.1196.epil, %.lr.ph265.epil ]
  %154 = tail call noundef float @_ZSt4sqrtf(float noundef %.1196.lcssa)
  %155 = tail call float @llvm.fmuladd.f32(float %154, float -3.000000e+00, float %139)
  %156 = fcmp olt float %155, %.2204
  %.0190 = select i1 %156, float %.2204, float %155
  %157 = tail call float @llvm.fmuladd.f32(float %154, float 3.000000e+00, float %139)
  %158 = fcmp ogt float %157, %.2201
  %.0189 = select i1 %158, float %.2201, float %157
  %159 = fsub float %.0189, %.0190
  %160 = fcmp ogt float %159, 0.000000e+00
  %161 = fdiv float 1.000000e+00, %159
  %.0209 = select i1 %160, float %.0190, float 0.000000e+00
  %.0207 = select i1 %160, float %161, float 1.000000e+00
  br label %172

.lr.ph265:                                        ; preds = %.lr.ph265, %.lr.ph265.preheader.new
  %indvars.iv298 = phi i64 [ 0, %.lr.ph265.preheader.new ], [ %indvars.iv.next299.1, %.lr.ph265 ]
  %.0195262 = phi float [ 0.000000e+00, %.lr.ph265.preheader.new ], [ %.1196.1, %.lr.ph265 ]
  %niter = phi i64 [ 0, %.lr.ph265.preheader.new ], [ %niter.next.1, %.lr.ph265 ]
  %162 = getelementptr inbounds float, ptr %121, i64 %indvars.iv298
  %163 = load float, ptr %162, align 4, !tbaa !19
  %164 = fcmp oeq float %163, -3.210000e+02
  %165 = fsub float %163, %139
  %166 = tail call float @llvm.fmuladd.f32(float %165, float %165, float %.0195262)
  %.1196 = select i1 %164, float %.0195262, float %166
  %indvars.iv.next299 = or disjoint i64 %indvars.iv298, 1
  %167 = getelementptr inbounds float, ptr %121, i64 %indvars.iv.next299
  %168 = load float, ptr %167, align 4, !tbaa !19
  %169 = fcmp oeq float %168, -3.210000e+02
  %170 = fsub float %168, %139
  %171 = tail call float @llvm.fmuladd.f32(float %170, float %170, float %.1196)
  %.1196.1 = select i1 %169, float %.1196, float %171
  %indvars.iv.next299.1 = add nuw nsw i64 %indvars.iv298, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge266.unr-lcssa, label %.lr.ph265, !llvm.loop !22

172:                                              ; preds = %._crit_edge.thread, %._crit_edge266, %._crit_edge
  %.1210 = phi float [ %.0209, %._crit_edge266 ], [ 0.000000e+00, %._crit_edge ], [ 0.000000e+00, %._crit_edge.thread ]
  %.1208 = phi float [ %.0207, %._crit_edge266 ], [ 1.000000e+00, %._crit_edge ], [ 1.000000e+00, %._crit_edge.thread ]
  %173 = getelementptr inbounds i8, ptr %0, i64 8
  store i32 3, ptr %173, align 8, !tbaa !23
  %174 = load i32, ptr %0, align 8, !tbaa !14
  %175 = mul nsw i32 %174, 3
  %176 = getelementptr inbounds i8, ptr %0, i64 12
  %177 = and i32 %175, 3
  %.not234 = icmp eq i32 %177, 0
  br i1 %.not234, label %182, label %178

178:                                              ; preds = %172
  %179 = sdiv i32 %175, 4
  %180 = shl nsw i32 %179, 2
  %181 = add i32 %180, 4
  br label %182

182:                                              ; preds = %178, %172
  %storemerge = phi i32 [ %181, %178 ], [ %175, %172 ]
  store i32 %storemerge, ptr %176, align 4, !tbaa !24
  %183 = load i32, ptr %106, align 4, !tbaa !17
  %184 = mul nsw i32 %183, %storemerge
  %185 = sext i32 %184 to i64
  %186 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %185) #12
  %187 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %186, ptr %187, align 8, !tbaa !25
  %188 = icmp sgt i32 %183, 0
  %189 = icmp sgt i32 %174, 0
  %or.cond323 = and i1 %188, %189
  br i1 %or.cond323, label %.lr.ph277.split, label %.loopexit

.lr.ph277.split:                                  ; preds = %182, %._crit_edge272
  %190 = phi i32 [ %198, %._crit_edge272 ], [ %183, %182 ]
  %191 = phi i32 [ %199, %._crit_edge272 ], [ %174, %182 ]
  %.0184275 = phi i32 [ %200, %._crit_edge272 ], [ 0, %182 ]
  %.0185274 = phi ptr [ %.1186.lcssa, %._crit_edge272 ], [ %121, %182 ]
  %192 = icmp sgt i32 %191, 0
  br i1 %192, label %.lr.ph271.preheader, label %._crit_edge272

.lr.ph271.preheader:                              ; preds = %.lr.ph277.split
  %193 = load ptr, ptr %187, align 8, !tbaa !25
  %194 = load i32, ptr %176, align 4, !tbaa !24
  %195 = mul nsw i32 %194, %.0184275
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i8, ptr %193, i64 %196
  br label %.lr.ph271

._crit_edge272.loopexit:                          ; preds = %210
  %.pre306 = load i32, ptr %106, align 4, !tbaa !17
  br label %._crit_edge272

._crit_edge272:                                   ; preds = %._crit_edge272.loopexit, %.lr.ph277.split
  %198 = phi i32 [ %190, %.lr.ph277.split ], [ %.pre306, %._crit_edge272.loopexit ]
  %199 = phi i32 [ %191, %.lr.ph277.split ], [ %215, %._crit_edge272.loopexit ]
  %.1186.lcssa = phi ptr [ %.0185274, %.lr.ph277.split ], [ %213, %._crit_edge272.loopexit ]
  %200 = add nuw nsw i32 %.0184275, 1
  %201 = icmp slt i32 %200, %198
  br i1 %201, label %.lr.ph277.split, label %.loopexit, !llvm.loop !26

.lr.ph271:                                        ; preds = %.lr.ph271.preheader, %210
  %.0181269 = phi i32 [ %214, %210 ], [ 0, %.lr.ph271.preheader ]
  %.0182268 = phi ptr [ %.1183, %210 ], [ %197, %.lr.ph271.preheader ]
  %.1186267 = phi ptr [ %213, %210 ], [ %.0185274, %.lr.ph271.preheader ]
  %202 = load float, ptr %.1186267, align 4, !tbaa !19
  %203 = fcmp oeq float %202, -3.210000e+02
  br i1 %203, label %210, label %204

204:                                              ; preds = %.lr.ph271
  %205 = fsub float %202, %.1210
  %206 = fmul float %205, 2.550000e+02
  %207 = fmul float %.1208, %206
  %208 = fptosi float %207 to i32
  %spec.store.select = tail call i32 @llvm.smax.i32(i32 %208, i32 0)
  %spec.store.select24 = tail call i32 @llvm.umin.i32(i32 %spec.store.select, i32 255)
  %209 = trunc nuw i32 %spec.store.select24 to i8
  br label %210

210:                                              ; preds = %.lr.ph271, %204
  %.sink304 = phi i8 [ %209, %204 ], [ 64, %.lr.ph271 ]
  %.sink303 = phi i8 [ %209, %204 ], [ 32, %.lr.ph271 ]
  %.sink = phi i8 [ %209, %204 ], [ 0, %.lr.ph271 ]
  store i8 %.sink304, ptr %.0182268, align 1
  %211 = getelementptr inbounds i8, ptr %.0182268, i64 1
  store i8 %.sink303, ptr %211, align 1
  %212 = getelementptr inbounds i8, ptr %.0182268, i64 2
  store i8 %.sink, ptr %212, align 1
  %.1183 = getelementptr inbounds i8, ptr %.0182268, i64 3
  %213 = getelementptr inbounds i8, ptr %.1186267, i64 4
  %214 = add nuw nsw i32 %.0181269, 1
  %215 = load i32, ptr %0, align 8, !tbaa !14
  %216 = icmp slt i32 %214, %215
  br i1 %216, label %.lr.ph271, label %._crit_edge272.loopexit, !llvm.loop !28

.loopexit:                                        ; preds = %._crit_edge272, %182, %88, %100
  %.4 = phi i32 [ 0, %100 ], [ 0, %88 ], [ %184, %182 ], [ %184, %._crit_edge272 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #10
  br label %217

217:                                              ; preds = %60, %.loopexit, %72
  %.5 = phi i32 [ 0, %72 ], [ %.4, %.loopexit ], [ 0, %60 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %4) #10
  br label %218

218:                                              ; preds = %35, %217, %47
  %.6 = phi i32 [ 0, %47 ], [ %.5, %217 ], [ 0, %35 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %3) #10
  br label %219

219:                                              ; preds = %12, %17, %22, %218, %7
  %.8 = phi i32 [ 0, %7 ], [ 0, %12 ], [ 0, %17 ], [ 0, %22 ], [ %.6, %218 ]
  ret i32 %.8
}

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fgetc(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #4

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare double @atof(ptr nocapture noundef nonnull) local_unnamed_addr #4

; Function Attrs: noreturn nounwind
declare void @abort() local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #7

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #4 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { inlinehint mustprogress 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 #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { cold nounwind }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { noreturn nounwind }

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

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


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