; LLVM IR from Wilson-ZheLin/Introduction-to-Digital-Image-Processing :: 9. Thresholding, Roberts, Prewitt, Sobel, and Edge Detection/src/main.ll (Z5CannyP5Image)

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

%struct.Image = type { i32, i32, i32, ptr, [15 x [100 x i8]], i32 }

@.str.5 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z5CannyP5Image(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca [9 x i32], align 16
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %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 float, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %39 = load ptr, ptr %2, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.Image, ptr %39, i32 0, i32 0
  %41 = load i32, ptr %40, align 8, !tbaa !9
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.Image, ptr %42, i32 0, i32 1
  %44 = load i32, ptr %43, align 4, !tbaa !12
  %45 = mul nsw i32 %41, %44
  %46 = zext i32 %45 to i64
  %47 = call ptr @llvm.stacksave.p0()
  store ptr %47, ptr %14, align 8
  %48 = alloca float, i64 %46, align 16
  store i64 %46, ptr %15, align 8
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = call noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef %49, ptr noundef @.str.5)
  store ptr %50, ptr %7, align 8, !tbaa !5
  %51 = load ptr, ptr %2, align 8, !tbaa !5
  %52 = call noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef %51, ptr noundef @.str.5)
  store ptr %52, ptr %8, align 8, !tbaa !5
  %53 = load ptr, ptr %2, align 8, !tbaa !5
  %54 = call noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef %53, ptr noundef @.str.5)
  store ptr %54, ptr %9, align 8, !tbaa !5
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.Image, ptr %55, i32 0, i32 3
  %57 = load ptr, ptr %56, align 8, !tbaa !13
  store ptr %57, ptr %4, align 8, !tbaa !5
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.Image, ptr %58, i32 0, i32 3
  %60 = load ptr, ptr %59, align 8, !tbaa !13
  store ptr %60, ptr %5, align 8, !tbaa !5
  %61 = load ptr, ptr %9, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.Image, ptr %61, i32 0, i32 3
  %63 = load ptr, ptr %62, align 8, !tbaa !13
  store ptr %63, ptr %6, align 8, !tbaa !5
  %64 = load ptr, ptr %2, align 8, !tbaa !5
  %65 = call noundef ptr @_Z8GaussianP5Image(ptr noundef %64)
  store ptr %65, ptr %2, align 8, !tbaa !5
  %66 = load ptr, ptr %2, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.Image, ptr %66, i32 0, i32 3
  %68 = load ptr, ptr %67, align 8, !tbaa !13
  store ptr %68, ptr %3, align 8, !tbaa !5
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  call void @_Z12SavePNMImageP5ImagePc(ptr noundef %69, ptr noundef @.str.9)
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 0, ptr %16, align 4, !tbaa !14
  br label %70

70:                                               ; preds = %348, %1
  %71 = load i32, ptr %16, align 4, !tbaa !14
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.Image, ptr %72, i32 0, i32 1
  %74 = load i32, ptr %73, align 4, !tbaa !12
  %75 = icmp slt i32 %71, %74
  br i1 %75, label %77, label %76

76:                                               ; preds = %70
  store i32 2, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  br label %351

77:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !14
  br label %78

78:                                               ; preds = %344, %77
  %79 = load i32, ptr %18, align 4, !tbaa !14
  %80 = load ptr, ptr %2, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.Image, ptr %80, i32 0, i32 0
  %82 = load i32, ptr %81, align 8, !tbaa !9
  %83 = icmp slt i32 %79, %82
  br i1 %83, label %85, label %84

84:                                               ; preds = %78
  store i32 5, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %347

85:                                               ; preds = %78
  store i32 0, ptr %10, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 -1, ptr %19, align 4, !tbaa !14
  br label %86

86:                                               ; preds = %138, %85
  %87 = load i32, ptr %19, align 4, !tbaa !14
  %88 = icmp sle i32 %87, 1
  br i1 %88, label %90, label %89

89:                                               ; preds = %86
  store i32 8, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %141

90:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 -1, ptr %20, align 4, !tbaa !14
  br label %91

91:                                               ; preds = %134, %90
  %92 = load i32, ptr %20, align 4, !tbaa !14
  %93 = icmp sle i32 %92, 1
  br i1 %93, label %95, label %94

94:                                               ; preds = %91
  store i32 11, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %137

95:                                               ; preds = %91
  %96 = load i32, ptr %18, align 4, !tbaa !14
  %97 = load i32, ptr %20, align 4, !tbaa !14
  %98 = add nsw i32 %96, %97
  %99 = load i32, ptr %16, align 4, !tbaa !14
  %100 = load i32, ptr %19, align 4, !tbaa !14
  %101 = add nsw i32 %99, %100
  %102 = load ptr, ptr %2, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.Image, ptr %102, i32 0, i32 0
  %104 = load i32, ptr %103, align 8, !tbaa !9
  %105 = load ptr, ptr %2, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.Image, ptr %105, i32 0, i32 1
  %107 = load i32, ptr %106, align 4, !tbaa !12
  %108 = call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %98, i32 noundef %101, i32 noundef %104, i32 noundef %107)
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %110, label %127

110:                                              ; preds = %95
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = load ptr, ptr %2, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.Image, ptr %112, i32 0, i32 0
  %114 = load i32, ptr %113, align 8, !tbaa !9
  %115 = load i32, ptr %16, align 4, !tbaa !14
  %116 = load i32, ptr %19, align 4, !tbaa !14
  %117 = add nsw i32 %115, %116
  %118 = mul nsw i32 %114, %117
  %119 = load i32, ptr %18, align 4, !tbaa !14
  %120 = load i32, ptr %20, align 4, !tbaa !14
  %121 = add nsw i32 %119, %120
  %122 = add nsw i32 %118, %121
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds i8, ptr %111, i64 %123
  %125 = load i8, ptr %124, align 1, !tbaa !15
  %126 = zext i8 %125 to i32
  br label %128

127:                                              ; preds = %95
  br label %128

128:                                              ; preds = %127, %110
  %129 = phi i32 [ %126, %110 ], [ 0, %127 ]
  %130 = load i32, ptr %10, align 4, !tbaa !14
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %10, align 4, !tbaa !14
  %132 = sext i32 %130 to i64
  %133 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 %132
  store i32 %129, ptr %133, align 4, !tbaa !14
  br label %134

134:                                              ; preds = %128
  %135 = load i32, ptr %20, align 4, !tbaa !14
  %136 = add nsw i32 %135, 1
  store i32 %136, ptr %20, align 4, !tbaa !14
  br label %91, !llvm.loop !16

137:                                              ; preds = %94
  br label %138

138:                                              ; preds = %137
  %139 = load i32, ptr %19, align 4, !tbaa !14
  %140 = add nsw i32 %139, 1
  store i32 %140, ptr %19, align 4, !tbaa !14
  br label %86, !llvm.loop !18

141:                                              ; preds = %89
  %142 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 2
  %143 = load i32, ptr %142, align 8, !tbaa !14
  %144 = sitofp i32 %143 to float
  %145 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 5
  %146 = load i32, ptr %145, align 4, !tbaa !14
  %147 = sitofp i32 %146 to float
  %148 = call float @llvm.fmuladd.f32(float %147, float 2.000000e+00, float %144)
  %149 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 8
  %150 = load i32, ptr %149, align 16, !tbaa !14
  %151 = sitofp i32 %150 to float
  %152 = fadd float %148, %151
  %153 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 0
  %154 = load i32, ptr %153, align 16, !tbaa !14
  %155 = sitofp i32 %154 to float
  %156 = fsub float %152, %155
  %157 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 3
  %158 = load i32, ptr %157, align 4, !tbaa !14
  %159 = sitofp i32 %158 to float
  %160 = fneg float %159
  %161 = call float @llvm.fmuladd.f32(float %160, float 2.000000e+00, float %156)
  %162 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 6
  %163 = load i32, ptr %162, align 8, !tbaa !14
  %164 = sitofp i32 %163 to float
  %165 = fsub float %161, %164
  %166 = call noundef float @_ZSt3absf(float noundef %165)
  store float %166, ptr %12, align 4, !tbaa !19
  %167 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 6
  %168 = load i32, ptr %167, align 8, !tbaa !14
  %169 = sitofp i32 %168 to float
  %170 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 7
  %171 = load i32, ptr %170, align 4, !tbaa !14
  %172 = sitofp i32 %171 to float
  %173 = call float @llvm.fmuladd.f32(float %172, float 2.000000e+00, float %169)
  %174 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 8
  %175 = load i32, ptr %174, align 16, !tbaa !14
  %176 = sitofp i32 %175 to float
  %177 = fadd float %173, %176
  %178 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 0
  %179 = load i32, ptr %178, align 16, !tbaa !14
  %180 = sitofp i32 %179 to float
  %181 = fsub float %177, %180
  %182 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 1
  %183 = load i32, ptr %182, align 4, !tbaa !14
  %184 = sitofp i32 %183 to float
  %185 = fneg float %184
  %186 = call float @llvm.fmuladd.f32(float %185, float 2.000000e+00, float %181)
  %187 = getelementptr inbounds [9 x i32], ptr %11, i64 0, i64 2
  %188 = load i32, ptr %187, align 8, !tbaa !14
  %189 = sitofp i32 %188 to float
  %190 = fsub float %186, %189
  %191 = call noundef float @_ZSt3absf(float noundef %190)
  store float %191, ptr %13, align 4, !tbaa !19
  %192 = load float, ptr %12, align 4, !tbaa !19
  %193 = call noundef double @_ZSt3powIfiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(float noundef %192, i32 noundef 2)
  %194 = load float, ptr %13, align 4, !tbaa !19
  %195 = call noundef double @_ZSt3powIfiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(float noundef %194, i32 noundef 2)
  %196 = fadd double %193, %195
  %197 = call double @sqrt(double noundef %196) #7
  %198 = fptosi double %197 to i32
  %199 = trunc i32 %198 to i8
  %200 = load ptr, ptr %4, align 8, !tbaa !5
  %201 = load ptr, ptr %2, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.Image, ptr %201, i32 0, i32 0
  %203 = load i32, ptr %202, align 8, !tbaa !9
  %204 = load i32, ptr %16, align 4, !tbaa !14
  %205 = mul nsw i32 %203, %204
  %206 = load i32, ptr %18, align 4, !tbaa !14
  %207 = add nsw i32 %205, %206
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i8, ptr %200, i64 %208
  store i8 %199, ptr %209, align 1, !tbaa !15
  %210 = load float, ptr %12, align 4, !tbaa !19
  %211 = fpext float %210 to double
  %212 = fcmp oeq double %211, 0.000000e+00
  br i1 %212, label %217, label %213

213:                                              ; preds = %141
  %214 = load float, ptr %13, align 4, !tbaa !19
  %215 = fpext float %214 to double
  %216 = fcmp oeq double %215, 0.000000e+00
  br i1 %216, label %217, label %227

217:                                              ; preds = %213, %141
  %218 = load ptr, ptr %2, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.Image, ptr %218, i32 0, i32 0
  %220 = load i32, ptr %219, align 8, !tbaa !9
  %221 = load i32, ptr %16, align 4, !tbaa !14
  %222 = mul nsw i32 %220, %221
  %223 = load i32, ptr %18, align 4, !tbaa !14
  %224 = add nsw i32 %222, %223
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds float, ptr %48, i64 %225
  store float 0.000000e+00, ptr %226, align 4, !tbaa !19
  br label %343

227:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %228 = load float, ptr %12, align 4, !tbaa !19
  %229 = load float, ptr %13, align 4, !tbaa !19
  %230 = call noundef float @_ZSt5atan2ff(float noundef %228, float noundef %229)
  %231 = fpext float %230 to double
  %232 = call noundef double @_ZSt4acosIiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef -1)
  %233 = fdiv double 1.800000e+02, %232
  %234 = fmul double %231, %233
  %235 = fptrunc double %234 to float
  store float %235, ptr %21, align 4, !tbaa !19
  %236 = load float, ptr %21, align 4, !tbaa !19
  %237 = fpext float %236 to double
  %238 = fcmp ole double %237, 2.250000e+01
  br i1 %238, label %239, label %243

239:                                              ; preds = %227
  %240 = load float, ptr %21, align 4, !tbaa !19
  %241 = fpext float %240 to double
  %242 = fcmp oge double %241, -2.250000e+01
  br i1 %242, label %251, label %243

243:                                              ; preds = %239, %227
  %244 = load float, ptr %21, align 4, !tbaa !19
  %245 = fpext float %244 to double
  %246 = fcmp ole double %245, -1.575000e+02
  br i1 %246, label %251, label %247

247:                                              ; preds = %243
  %248 = load float, ptr %21, align 4, !tbaa !19
  %249 = fpext float %248 to double
  %250 = fcmp oge double %249, 1.575000e+02
  br i1 %250, label %251, label %261

251:                                              ; preds = %247, %243, %239
  %252 = load ptr, ptr %2, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.Image, ptr %252, i32 0, i32 0
  %254 = load i32, ptr %253, align 8, !tbaa !9
  %255 = load i32, ptr %16, align 4, !tbaa !14
  %256 = mul nsw i32 %254, %255
  %257 = load i32, ptr %18, align 4, !tbaa !14
  %258 = add nsw i32 %256, %257
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds float, ptr %48, i64 %259
  store float 1.000000e+00, ptr %260, align 4, !tbaa !19
  br label %342

261:                                              ; preds = %247
  %262 = load float, ptr %21, align 4, !tbaa !19
  %263 = fpext float %262 to double
  %264 = fcmp ogt double %263, 2.250000e+01
  br i1 %264, label %265, label %269

265:                                              ; preds = %261
  %266 = load float, ptr %21, align 4, !tbaa !19
  %267 = fpext float %266 to double
  %268 = fcmp ole double %267, 6.750000e+01
  br i1 %268, label %277, label %269

269:                                              ; preds = %265, %261
  %270 = load float, ptr %21, align 4, !tbaa !19
  %271 = fpext float %270 to double
  %272 = fcmp ogt double %271, -1.575000e+02
  br i1 %272, label %273, label %287

273:                                              ; preds = %269
  %274 = load float, ptr %21, align 4, !tbaa !19
  %275 = fpext float %274 to double
  %276 = fcmp ole double %275, -1.125000e+02
  br i1 %276, label %277, label %287

277:                                              ; preds = %273, %265
  %278 = load ptr, ptr %2, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.Image, ptr %278, i32 0, i32 0
  %280 = load i32, ptr %279, align 8, !tbaa !9
  %281 = load i32, ptr %16, align 4, !tbaa !14
  %282 = mul nsw i32 %280, %281
  %283 = load i32, ptr %18, align 4, !tbaa !14
  %284 = add nsw i32 %282, %283
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds float, ptr %48, i64 %285
  store float 2.000000e+00, ptr %286, align 4, !tbaa !19
  br label %341

287:                                              ; preds = %273, %269
  %288 = load float, ptr %21, align 4, !tbaa !19
  %289 = fpext float %288 to double
  %290 = fcmp ogt double %289, 6.750000e+01
  br i1 %290, label %291, label %295

291:                                              ; preds = %287
  %292 = load float, ptr %21, align 4, !tbaa !19
  %293 = fpext float %292 to double
  %294 = fcmp ole double %293, 1.125000e+02
  br i1 %294, label %303, label %295

295:                                              ; preds = %291, %287
  %296 = load float, ptr %21, align 4, !tbaa !19
  %297 = fpext float %296 to double
  %298 = fcmp oge double %297, -1.125000e+02
  br i1 %298, label %299, label %313

299:                                              ; preds = %295
  %300 = load float, ptr %21, align 4, !tbaa !19
  %301 = fpext float %300 to double
  %302 = fcmp olt double %301, -6.750000e+01
  br i1 %302, label %303, label %313

303:                                              ; preds = %299, %291
  %304 = load ptr, ptr %2, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.Image, ptr %304, i32 0, i32 0
  %306 = load i32, ptr %305, align 8, !tbaa !9
  %307 = load i32, ptr %16, align 4, !tbaa !14
  %308 = mul nsw i32 %306, %307
  %309 = load i32, ptr %18, align 4, !tbaa !14
  %310 = add nsw i32 %308, %309
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds float, ptr %48, i64 %311
  store float 3.000000e+00, ptr %312, align 4, !tbaa !19
  br label %340

313:                                              ; preds = %299, %295
  %314 = load float, ptr %21, align 4, !tbaa !19
  %315 = fpext float %314 to double
  %316 = fcmp oge double %315, -6.750000e+01
  br i1 %316, label %317, label %321

317:                                              ; preds = %313
  %318 = load float, ptr %21, align 4, !tbaa !19
  %319 = fpext float %318 to double
  %320 = fcmp olt double %319, -2.250000e+01
  br i1 %320, label %329, label %321

321:                                              ; preds = %317, %313
  %322 = load float, ptr %21, align 4, !tbaa !19
  %323 = fpext float %322 to double
  %324 = fcmp ogt double %323, 1.125000e+02
  br i1 %324, label %325, label %339

325:                                              ; preds = %321
  %326 = load float, ptr %21, align 4, !tbaa !19
  %327 = fpext float %326 to double
  %328 = fcmp olt double %327, 1.575000e+02
  br i1 %328, label %329, label %339

329:                                              ; preds = %325, %317
  %330 = load ptr, ptr %2, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.Image, ptr %330, i32 0, i32 0
  %332 = load i32, ptr %331, align 8, !tbaa !9
  %333 = load i32, ptr %16, align 4, !tbaa !14
  %334 = mul nsw i32 %332, %333
  %335 = load i32, ptr %18, align 4, !tbaa !14
  %336 = add nsw i32 %334, %335
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds float, ptr %48, i64 %337
  store float 4.000000e+00, ptr %338, align 4, !tbaa !19
  br label %339

339:                                              ; preds = %329, %325, %321
  br label %340

340:                                              ; preds = %339, %303
  br label %341

341:                                              ; preds = %340, %277
  br label %342

342:                                              ; preds = %341, %251
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %343

343:                                              ; preds = %342, %217
  br label %344

344:                                              ; preds = %343
  %345 = load i32, ptr %18, align 4, !tbaa !14
  %346 = add nsw i32 %345, 1
  store i32 %346, ptr %18, align 4, !tbaa !14
  br label %78, !llvm.loop !21

347:                                              ; preds = %84
  br label %348

348:                                              ; preds = %347
  %349 = load i32, ptr %16, align 4, !tbaa !14
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %16, align 4, !tbaa !14
  br label %70, !llvm.loop !22

351:                                              ; preds = %76
  %352 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_Z12SavePNMImageP5ImagePc(ptr noundef %352, ptr noundef @.str.10)
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  store i32 0, ptr %22, align 4, !tbaa !14
  br label %353

353:                                              ; preds = %643, %351
  %354 = load i32, ptr %22, align 4, !tbaa !14
  %355 = load ptr, ptr %2, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.Image, ptr %355, i32 0, i32 1
  %357 = load i32, ptr %356, align 4, !tbaa !12
  %358 = icmp slt i32 %354, %357
  br i1 %358, label %360, label %359

359:                                              ; preds = %353
  store i32 14, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %646

360:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 0, ptr %23, align 4, !tbaa !14
  br label %361

361:                                              ; preds = %639, %360
  %362 = load i32, ptr %23, align 4, !tbaa !14
  %363 = load ptr, ptr %2, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.Image, ptr %363, i32 0, i32 0
  %365 = load i32, ptr %364, align 8, !tbaa !9
  %366 = icmp slt i32 %362, %365
  br i1 %366, label %368, label %367

367:                                              ; preds = %361
  store i32 17, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %642

368:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #7
  %369 = load ptr, ptr %2, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.Image, ptr %369, i32 0, i32 0
  %371 = load i32, ptr %370, align 8, !tbaa !9
  %372 = load i32, ptr %22, align 4, !tbaa !14
  %373 = mul nsw i32 %371, %372
  %374 = load i32, ptr %23, align 4, !tbaa !14
  %375 = add nsw i32 %373, %374
  store i32 %375, ptr %24, align 4, !tbaa !14
  %376 = load i32, ptr %24, align 4, !tbaa !14
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds float, ptr %48, i64 %377
  %379 = load float, ptr %378, align 4, !tbaa !19
  %380 = fcmp oeq float %379, 0.000000e+00
  br i1 %380, label %381, label %386

381:                                              ; preds = %368
  %382 = load ptr, ptr %5, align 8, !tbaa !5
  %383 = load i32, ptr %24, align 4, !tbaa !14
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i8, ptr %382, i64 %384
  store i8 0, ptr %385, align 1, !tbaa !15
  br label %638

386:                                              ; preds = %368
  %387 = load i32, ptr %24, align 4, !tbaa !14
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds float, ptr %48, i64 %388
  %390 = load float, ptr %389, align 4, !tbaa !19
  %391 = fcmp oeq float %390, 1.000000e+00
  br i1 %391, label %392, label %438

392:                                              ; preds = %386
  %393 = load ptr, ptr %4, align 8, !tbaa !5
  %394 = load i32, ptr %24, align 4, !tbaa !14
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds i8, ptr %393, i64 %395
  %397 = load i8, ptr %396, align 1, !tbaa !15
  %398 = zext i8 %397 to i32
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = load i32, ptr %24, align 4, !tbaa !14
  %401 = sub nsw i32 %400, 1
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i8, ptr %399, i64 %402
  %404 = load i8, ptr %403, align 1, !tbaa !15
  %405 = zext i8 %404 to i32
  %406 = icmp sge i32 %398, %405
  br i1 %406, label %407, label %432

407:                                              ; preds = %392
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  %409 = load i32, ptr %24, align 4, !tbaa !14
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds i8, ptr %408, i64 %410
  %412 = load i8, ptr %411, align 1, !tbaa !15
  %413 = zext i8 %412 to i32
  %414 = load ptr, ptr %4, align 8, !tbaa !5
  %415 = load i32, ptr %24, align 4, !tbaa !14
  %416 = add nsw i32 %415, 1
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i8, ptr %414, i64 %417
  %419 = load i8, ptr %418, align 1, !tbaa !15
  %420 = zext i8 %419 to i32
  %421 = icmp sge i32 %413, %420
  br i1 %421, label %422, label %432

422:                                              ; preds = %407
  %423 = load ptr, ptr %4, align 8, !tbaa !5
  %424 = load i32, ptr %24, align 4, !tbaa !14
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds i8, ptr %423, i64 %425
  %427 = load i8, ptr %426, align 1, !tbaa !15
  %428 = load ptr, ptr %5, align 8, !tbaa !5
  %429 = load i32, ptr %24, align 4, !tbaa !14
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds i8, ptr %428, i64 %430
  store i8 %427, ptr %431, align 1, !tbaa !15
  br label %437

432:                                              ; preds = %407, %392
  %433 = load ptr, ptr %5, align 8, !tbaa !5
  %434 = load i32, ptr %24, align 4, !tbaa !14
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i8, ptr %433, i64 %435
  store i8 0, ptr %436, align 1, !tbaa !15
  br label %437

437:                                              ; preds = %432, %422
  br label %637

438:                                              ; preds = %386
  %439 = load i32, ptr %24, align 4, !tbaa !14
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds float, ptr %48, i64 %440
  %442 = load float, ptr %441, align 4, !tbaa !19
  %443 = fcmp oeq float %442, 2.000000e+00
  br i1 %443, label %444, label %504

444:                                              ; preds = %438
  %445 = load ptr, ptr %4, align 8, !tbaa !5
  %446 = load i32, ptr %24, align 4, !tbaa !14
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds i8, ptr %445, i64 %447
  %449 = load i8, ptr %448, align 1, !tbaa !15
  %450 = zext i8 %449 to i32
  %451 = load ptr, ptr %4, align 8, !tbaa !5
  %452 = load ptr, ptr %2, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.Image, ptr %452, i32 0, i32 0
  %454 = load i32, ptr %453, align 8, !tbaa !9
  %455 = load i32, ptr %22, align 4, !tbaa !14
  %456 = sub nsw i32 %455, 1
  %457 = mul nsw i32 %454, %456
  %458 = load i32, ptr %23, align 4, !tbaa !14
  %459 = add nsw i32 %457, %458
  %460 = add nsw i32 %459, 1
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds i8, ptr %451, i64 %461
  %463 = load i8, ptr %462, align 1, !tbaa !15
  %464 = zext i8 %463 to i32
  %465 = icmp sge i32 %450, %464
  br i1 %465, label %466, label %498

466:                                              ; preds = %444
  %467 = load ptr, ptr %4, align 8, !tbaa !5
  %468 = load i32, ptr %24, align 4, !tbaa !14
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds i8, ptr %467, i64 %469
  %471 = load i8, ptr %470, align 1, !tbaa !15
  %472 = zext i8 %471 to i32
  %473 = load ptr, ptr %4, align 8, !tbaa !5
  %474 = load ptr, ptr %2, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.Image, ptr %474, i32 0, i32 0
  %476 = load i32, ptr %475, align 8, !tbaa !9
  %477 = load i32, ptr %22, align 4, !tbaa !14
  %478 = add nsw i32 %477, 1
  %479 = mul nsw i32 %476, %478
  %480 = load i32, ptr %23, align 4, !tbaa !14
  %481 = add nsw i32 %479, %480
  %482 = sub nsw i32 %481, 1
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i8, ptr %473, i64 %483
  %485 = load i8, ptr %484, align 1, !tbaa !15
  %486 = zext i8 %485 to i32
  %487 = icmp sge i32 %472, %486
  br i1 %487, label %488, label %498

488:                                              ; preds = %466
  %489 = load ptr, ptr %4, align 8, !tbaa !5
  %490 = load i32, ptr %24, align 4, !tbaa !14
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i8, ptr %489, i64 %491
  %493 = load i8, ptr %492, align 1, !tbaa !15
  %494 = load ptr, ptr %5, align 8, !tbaa !5
  %495 = load i32, ptr %24, align 4, !tbaa !14
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds i8, ptr %494, i64 %496
  store i8 %493, ptr %497, align 1, !tbaa !15
  br label %503

498:                                              ; preds = %466, %444
  %499 = load ptr, ptr %5, align 8, !tbaa !5
  %500 = load i32, ptr %24, align 4, !tbaa !14
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds i8, ptr %499, i64 %501
  store i8 0, ptr %502, align 1, !tbaa !15
  br label %503

503:                                              ; preds = %498, %488
  br label %636

504:                                              ; preds = %438
  %505 = load i32, ptr %24, align 4, !tbaa !14
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds float, ptr %48, i64 %506
  %508 = load float, ptr %507, align 4, !tbaa !19
  %509 = fcmp oeq float %508, 3.000000e+00
  br i1 %509, label %510, label %568

510:                                              ; preds = %504
  %511 = load ptr, ptr %4, align 8, !tbaa !5
  %512 = load i32, ptr %24, align 4, !tbaa !14
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i8, ptr %511, i64 %513
  %515 = load i8, ptr %514, align 1, !tbaa !15
  %516 = zext i8 %515 to i32
  %517 = load ptr, ptr %4, align 8, !tbaa !5
  %518 = load ptr, ptr %2, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.Image, ptr %518, i32 0, i32 0
  %520 = load i32, ptr %519, align 8, !tbaa !9
  %521 = load i32, ptr %22, align 4, !tbaa !14
  %522 = sub nsw i32 %521, 1
  %523 = mul nsw i32 %520, %522
  %524 = load i32, ptr %23, align 4, !tbaa !14
  %525 = add nsw i32 %523, %524
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i8, ptr %517, i64 %526
  %528 = load i8, ptr %527, align 1, !tbaa !15
  %529 = zext i8 %528 to i32
  %530 = icmp sge i32 %516, %529
  br i1 %530, label %531, label %562

531:                                              ; preds = %510
  %532 = load ptr, ptr %4, align 8, !tbaa !5
  %533 = load i32, ptr %24, align 4, !tbaa !14
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds i8, ptr %532, i64 %534
  %536 = load i8, ptr %535, align 1, !tbaa !15
  %537 = zext i8 %536 to i32
  %538 = load ptr, ptr %4, align 8, !tbaa !5
  %539 = load ptr, ptr %2, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.Image, ptr %539, i32 0, i32 0
  %541 = load i32, ptr %540, align 8, !tbaa !9
  %542 = load i32, ptr %22, align 4, !tbaa !14
  %543 = add nsw i32 %542, 1
  %544 = mul nsw i32 %541, %543
  %545 = load i32, ptr %23, align 4, !tbaa !14
  %546 = add nsw i32 %544, %545
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds i8, ptr %538, i64 %547
  %549 = load i8, ptr %548, align 1, !tbaa !15
  %550 = zext i8 %549 to i32
  %551 = icmp sge i32 %537, %550
  br i1 %551, label %552, label %562

552:                                              ; preds = %531
  %553 = load ptr, ptr %4, align 8, !tbaa !5
  %554 = load i32, ptr %24, align 4, !tbaa !14
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds i8, ptr %553, i64 %555
  %557 = load i8, ptr %556, align 1, !tbaa !15
  %558 = load ptr, ptr %5, align 8, !tbaa !5
  %559 = load i32, ptr %24, align 4, !tbaa !14
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds i8, ptr %558, i64 %560
  store i8 %557, ptr %561, align 1, !tbaa !15
  br label %567

562:                                              ; preds = %531, %510
  %563 = load ptr, ptr %5, align 8, !tbaa !5
  %564 = load i32, ptr %24, align 4, !tbaa !14
  %565 = sext i32 %564 to i64
  %566 = getelementptr inbounds i8, ptr %563, i64 %565
  store i8 0, ptr %566, align 1, !tbaa !15
  br label %567

567:                                              ; preds = %562, %552
  br label %635

568:                                              ; preds = %504
  %569 = load i32, ptr %24, align 4, !tbaa !14
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds float, ptr %48, i64 %570
  %572 = load float, ptr %571, align 4, !tbaa !19
  %573 = fcmp oeq float %572, 4.000000e+00
  br i1 %573, label %574, label %634

574:                                              ; preds = %568
  %575 = load ptr, ptr %4, align 8, !tbaa !5
  %576 = load i32, ptr %24, align 4, !tbaa !14
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i8, ptr %575, i64 %577
  %579 = load i8, ptr %578, align 1, !tbaa !15
  %580 = zext i8 %579 to i32
  %581 = load ptr, ptr %4, align 8, !tbaa !5
  %582 = load ptr, ptr %2, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.Image, ptr %582, i32 0, i32 0
  %584 = load i32, ptr %583, align 8, !tbaa !9
  %585 = load i32, ptr %22, align 4, !tbaa !14
  %586 = sub nsw i32 %585, 1
  %587 = mul nsw i32 %584, %586
  %588 = load i32, ptr %23, align 4, !tbaa !14
  %589 = add nsw i32 %587, %588
  %590 = sub nsw i32 %589, 1
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds i8, ptr %581, i64 %591
  %593 = load i8, ptr %592, align 1, !tbaa !15
  %594 = zext i8 %593 to i32
  %595 = icmp sge i32 %580, %594
  br i1 %595, label %596, label %628

596:                                              ; preds = %574
  %597 = load ptr, ptr %4, align 8, !tbaa !5
  %598 = load i32, ptr %24, align 4, !tbaa !14
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds i8, ptr %597, i64 %599
  %601 = load i8, ptr %600, align 1, !tbaa !15
  %602 = zext i8 %601 to i32
  %603 = load ptr, ptr %4, align 8, !tbaa !5
  %604 = load ptr, ptr %2, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.Image, ptr %604, i32 0, i32 0
  %606 = load i32, ptr %605, align 8, !tbaa !9
  %607 = load i32, ptr %22, align 4, !tbaa !14
  %608 = add nsw i32 %607, 1
  %609 = mul nsw i32 %606, %608
  %610 = load i32, ptr %23, align 4, !tbaa !14
  %611 = add nsw i32 %609, %610
  %612 = add nsw i32 %611, 1
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds i8, ptr %603, i64 %613
  %615 = load i8, ptr %614, align 1, !tbaa !15
  %616 = zext i8 %615 to i32
  %617 = icmp sge i32 %602, %616
  br i1 %617, label %618, label %628

618:                                              ; preds = %596
  %619 = load ptr, ptr %4, align 8, !tbaa !5
  %620 = load i32, ptr %24, align 4, !tbaa !14
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds i8, ptr %619, i64 %621
  %623 = load i8, ptr %622, align 1, !tbaa !15
  %624 = load ptr, ptr %5, align 8, !tbaa !5
  %625 = load i32, ptr %24, align 4, !tbaa !14
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds i8, ptr %624, i64 %626
  store i8 %623, ptr %627, align 1, !tbaa !15
  br label %633

628:                                              ; preds = %596, %574
  %629 = load ptr, ptr %5, align 8, !tbaa !5
  %630 = load i32, ptr %24, align 4, !tbaa !14
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds i8, ptr %629, i64 %631
  store i8 0, ptr %632, align 1, !tbaa !15
  br label %633

633:                                              ; preds = %628, %618
  br label %634

634:                                              ; preds = %633, %568
  br label %635

635:                                              ; preds = %634, %567
  br label %636

636:                                              ; preds = %635, %503
  br label %637

637:                                              ; preds = %636, %437
  br label %638

638:                                              ; preds = %637, %381
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #7
  br label %639

639:                                              ; preds = %638
  %640 = load i32, ptr %23, align 4, !tbaa !14
  %641 = add nsw i32 %640, 1
  store i32 %641, ptr %23, align 4, !tbaa !14
  br label %361, !llvm.loop !23

642:                                              ; preds = %367
  br label %643

643:                                              ; preds = %642
  %644 = load i32, ptr %22, align 4, !tbaa !14
  %645 = add nsw i32 %644, 1
  store i32 %645, ptr %22, align 4, !tbaa !14
  br label %353, !llvm.loop !24

646:                                              ; preds = %359
  %647 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_Z12SavePNMImageP5ImagePc(ptr noundef %647, ptr noundef @.str.11)
  %648 = load ptr, ptr %2, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.Image, ptr %648, i32 0, i32 0
  %650 = load i32, ptr %649, align 8, !tbaa !9
  %651 = load ptr, ptr %2, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.Image, ptr %651, i32 0, i32 1
  %653 = load i32, ptr %652, align 4, !tbaa !12
  %654 = mul nsw i32 %650, %653
  %655 = zext i32 %654 to i64
  %656 = alloca i32, i64 %655, align 16
  store i64 %655, ptr %25, align 8
  %657 = load ptr, ptr %2, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.Image, ptr %657, i32 0, i32 0
  %659 = load i32, ptr %658, align 8, !tbaa !9
  %660 = load ptr, ptr %2, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.Image, ptr %660, i32 0, i32 1
  %662 = load i32, ptr %661, align 4, !tbaa !12
  %663 = mul nsw i32 %659, %662
  %664 = zext i32 %663 to i64
  %665 = alloca i32, i64 %664, align 16
  store i64 %664, ptr %26, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  store i32 0, ptr %27, align 4, !tbaa !14
  br label %666

666:                                              ; preds = %731, %646
  %667 = load i32, ptr %27, align 4, !tbaa !14
  %668 = load ptr, ptr %2, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.Image, ptr %668, i32 0, i32 1
  %670 = load i32, ptr %669, align 4, !tbaa !12
  %671 = icmp slt i32 %667, %670
  br i1 %671, label %673, label %672

672:                                              ; preds = %666
  store i32 20, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %734

673:                                              ; preds = %666
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  store i32 0, ptr %28, align 4, !tbaa !14
  br label %674

674:                                              ; preds = %727, %673
  %675 = load i32, ptr %28, align 4, !tbaa !14
  %676 = load ptr, ptr %2, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.Image, ptr %676, i32 0, i32 0
  %678 = load i32, ptr %677, align 8, !tbaa !9
  %679 = icmp slt i32 %675, %678
  br i1 %679, label %681, label %680

680:                                              ; preds = %674
  store i32 23, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %730

681:                                              ; preds = %674
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %682 = load ptr, ptr %2, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.Image, ptr %682, i32 0, i32 0
  %684 = load i32, ptr %683, align 8, !tbaa !9
  %685 = load i32, ptr %27, align 4, !tbaa !14
  %686 = mul nsw i32 %684, %685
  %687 = load i32, ptr %28, align 4, !tbaa !14
  %688 = add nsw i32 %686, %687
  store i32 %688, ptr %29, align 4, !tbaa !14
  %689 = load ptr, ptr %5, align 8, !tbaa !5
  %690 = load i32, ptr %29, align 4, !tbaa !14
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds i8, ptr %689, i64 %691
  %693 = load i8, ptr %692, align 1, !tbaa !15
  %694 = zext i8 %693 to i32
  %695 = icmp sgt i32 %694, 120
  br i1 %695, label %696, label %703

696:                                              ; preds = %681
  %697 = load i32, ptr %29, align 4, !tbaa !14
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds i32, ptr %656, i64 %698
  store i32 1, ptr %699, align 4, !tbaa !14
  %700 = load i32, ptr %29, align 4, !tbaa !14
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds i32, ptr %665, i64 %701
  store i32 1, ptr %702, align 4, !tbaa !14
  br label %726

703:                                              ; preds = %681
  %704 = load ptr, ptr %5, align 8, !tbaa !5
  %705 = load i32, ptr %29, align 4, !tbaa !14
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds i8, ptr %704, i64 %706
  %708 = load i8, ptr %707, align 1, !tbaa !15
  %709 = zext i8 %708 to i32
  %710 = icmp slt i32 %709, 50
  br i1 %710, label %711, label %718

711:                                              ; preds = %703
  %712 = load i32, ptr %29, align 4, !tbaa !14
  %713 = sext i32 %712 to i64
  %714 = getelementptr inbounds i32, ptr %656, i64 %713
  store i32 0, ptr %714, align 4, !tbaa !14
  %715 = load i32, ptr %29, align 4, !tbaa !14
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds i32, ptr %665, i64 %716
  store i32 0, ptr %717, align 4, !tbaa !14
  br label %725

718:                                              ; preds = %703
  %719 = load i32, ptr %29, align 4, !tbaa !14
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds i32, ptr %656, i64 %720
  store i32 2, ptr %721, align 4, !tbaa !14
  %722 = load i32, ptr %29, align 4, !tbaa !14
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i32, ptr %665, i64 %723
  store i32 2, ptr %724, align 4, !tbaa !14
  br label %725

725:                                              ; preds = %718, %711
  br label %726

726:                                              ; preds = %725, %696
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %727

727:                                              ; preds = %726
  %728 = load i32, ptr %28, align 4, !tbaa !14
  %729 = add nsw i32 %728, 1
  store i32 %729, ptr %28, align 4, !tbaa !14
  br label %674, !llvm.loop !25

730:                                              ; preds = %680
  br label %731

731:                                              ; preds = %730
  %732 = load i32, ptr %27, align 4, !tbaa !14
  %733 = add nsw i32 %732, 1
  store i32 %733, ptr %27, align 4, !tbaa !14
  br label %666, !llvm.loop !26

734:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  store i32 0, ptr %30, align 4, !tbaa !14
  br label %735

735:                                              ; preds = %830, %734
  %736 = load i32, ptr %30, align 4, !tbaa !14
  %737 = load ptr, ptr %2, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.Image, ptr %737, i32 0, i32 1
  %739 = load i32, ptr %738, align 4, !tbaa !12
  %740 = icmp slt i32 %736, %739
  br i1 %740, label %742, label %741

741:                                              ; preds = %735
  store i32 26, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  br label %833

742:                                              ; preds = %735
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #7
  store i32 0, ptr %31, align 4, !tbaa !14
  br label %743

743:                                              ; preds = %826, %742
  %744 = load i32, ptr %31, align 4, !tbaa !14
  %745 = load ptr, ptr %2, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.Image, ptr %745, i32 0, i32 0
  %747 = load i32, ptr %746, align 8, !tbaa !9
  %748 = icmp slt i32 %744, %747
  br i1 %748, label %750, label %749

749:                                              ; preds = %743
  store i32 29, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #7
  br label %829

750:                                              ; preds = %743
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %751 = load ptr, ptr %2, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.Image, ptr %751, i32 0, i32 0
  %753 = load i32, ptr %752, align 8, !tbaa !9
  %754 = load i32, ptr %30, align 4, !tbaa !14
  %755 = mul nsw i32 %753, %754
  %756 = load i32, ptr %31, align 4, !tbaa !14
  %757 = add nsw i32 %755, %756
  store i32 %757, ptr %32, align 4, !tbaa !14
  %758 = load i32, ptr %32, align 4, !tbaa !14
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds i32, ptr %656, i64 %759
  %761 = load i32, ptr %760, align 4, !tbaa !14
  %762 = icmp eq i32 %761, 2
  br i1 %762, label %763, label %825

763:                                              ; preds = %750
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 0, ptr %33, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  store i32 -1, ptr %34, align 4, !tbaa !14
  br label %764

764:                                              ; preds = %814, %763
  %765 = load i32, ptr %34, align 4, !tbaa !14
  %766 = icmp sle i32 %765, 1
  br i1 %766, label %768, label %767

767:                                              ; preds = %764
  store i32 32, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %817

768:                                              ; preds = %764
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  store i32 -1, ptr %35, align 4, !tbaa !14
  br label %769

769:                                              ; preds = %810, %768
  %770 = load i32, ptr %35, align 4, !tbaa !14
  %771 = icmp sle i32 %770, 1
  br i1 %771, label %773, label %772

772:                                              ; preds = %769
  store i32 35, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %813

773:                                              ; preds = %769
  %774 = load ptr, ptr %2, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.Image, ptr %774, i32 0, i32 0
  %776 = load i32, ptr %775, align 8, !tbaa !9
  %777 = load i32, ptr %30, align 4, !tbaa !14
  %778 = load i32, ptr %34, align 4, !tbaa !14
  %779 = add nsw i32 %777, %778
  %780 = mul nsw i32 %776, %779
  %781 = load i32, ptr %31, align 4, !tbaa !14
  %782 = load i32, ptr %35, align 4, !tbaa !14
  %783 = add nsw i32 %781, %782
  %784 = add nsw i32 %780, %783
  %785 = sext i32 %784 to i64
  %786 = getelementptr inbounds i32, ptr %656, i64 %785
  %787 = load i32, ptr %786, align 4, !tbaa !14
  %788 = load i32, ptr %33, align 4, !tbaa !14
  %789 = add nsw i32 %788, %787
  store i32 %789, ptr %33, align 4, !tbaa !14
  %790 = load ptr, ptr %2, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.Image, ptr %790, i32 0, i32 0
  %792 = load i32, ptr %791, align 8, !tbaa !9
  %793 = load i32, ptr %30, align 4, !tbaa !14
  %794 = load i32, ptr %34, align 4, !tbaa !14
  %795 = add nsw i32 %793, %794
  %796 = mul nsw i32 %792, %795
  %797 = load i32, ptr %31, align 4, !tbaa !14
  %798 = load i32, ptr %35, align 4, !tbaa !14
  %799 = add nsw i32 %797, %798
  %800 = add nsw i32 %796, %799
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds i32, ptr %656, i64 %801
  %803 = load i32, ptr %802, align 4, !tbaa !14
  %804 = icmp eq i32 %803, 1
  br i1 %804, label %805, label %809

805:                                              ; preds = %773
  %806 = load i32, ptr %32, align 4, !tbaa !14
  %807 = sext i32 %806 to i64
  %808 = getelementptr inbounds i32, ptr %665, i64 %807
  store i32 1, ptr %808, align 4, !tbaa !14
  br label %809

809:                                              ; preds = %805, %773
  br label %810

810:                                              ; preds = %809
  %811 = load i32, ptr %35, align 4, !tbaa !14
  %812 = add nsw i32 %811, 1
  store i32 %812, ptr %35, align 4, !tbaa !14
  br label %769, !llvm.loop !27

813:                                              ; preds = %772
  br label %814

814:                                              ; preds = %813
  %815 = load i32, ptr %34, align 4, !tbaa !14
  %816 = add nsw i32 %815, 1
  store i32 %816, ptr %34, align 4, !tbaa !14
  br label %764, !llvm.loop !28

817:                                              ; preds = %767
  %818 = load i32, ptr %33, align 4, !tbaa !14
  %819 = icmp eq i32 %818, 2
  br i1 %819, label %820, label %824

820:                                              ; preds = %817
  %821 = load i32, ptr %32, align 4, !tbaa !14
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds i32, ptr %665, i64 %822
  store i32 0, ptr %823, align 4, !tbaa !14
  br label %824

824:                                              ; preds = %820, %817
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %825

825:                                              ; preds = %824, %750
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  br label %826

826:                                              ; preds = %825
  %827 = load i32, ptr %31, align 4, !tbaa !14
  %828 = add nsw i32 %827, 1
  store i32 %828, ptr %31, align 4, !tbaa !14
  br label %743, !llvm.loop !29

829:                                              ; preds = %749
  br label %830

830:                                              ; preds = %829
  %831 = load i32, ptr %30, align 4, !tbaa !14
  %832 = add nsw i32 %831, 1
  store i32 %832, ptr %30, align 4, !tbaa !14
  br label %735, !llvm.loop !30

833:                                              ; preds = %741
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  store i32 0, ptr %36, align 4, !tbaa !14
  br label %834

834:                                              ; preds = %877, %833
  %835 = load i32, ptr %36, align 4, !tbaa !14
  %836 = load ptr, ptr %2, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.Image, ptr %836, i32 0, i32 1
  %838 = load i32, ptr %837, align 4, !tbaa !12
  %839 = icmp slt i32 %835, %838
  br i1 %839, label %841, label %840

840:                                              ; preds = %834
  store i32 38, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  br label %880

841:                                              ; preds = %834
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  store i32 0, ptr %37, align 4, !tbaa !14
  br label %842

842:                                              ; preds = %873, %841
  %843 = load i32, ptr %37, align 4, !tbaa !14
  %844 = load ptr, ptr %2, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.Image, ptr %844, i32 0, i32 0
  %846 = load i32, ptr %845, align 8, !tbaa !9
  %847 = icmp slt i32 %843, %846
  br i1 %847, label %849, label %848

848:                                              ; preds = %842
  store i32 41, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %876

849:                                              ; preds = %842
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  %850 = load ptr, ptr %2, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.Image, ptr %850, i32 0, i32 0
  %852 = load i32, ptr %851, align 8, !tbaa !9
  %853 = load i32, ptr %36, align 4, !tbaa !14
  %854 = mul nsw i32 %852, %853
  %855 = load i32, ptr %37, align 4, !tbaa !14
  %856 = add nsw i32 %854, %855
  store i32 %856, ptr %38, align 4, !tbaa !14
  %857 = load i32, ptr %38, align 4, !tbaa !14
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds i32, ptr %665, i64 %858
  %860 = load i32, ptr %859, align 4, !tbaa !14
  %861 = icmp eq i32 %860, 1
  br i1 %861, label %862, label %867

862:                                              ; preds = %849
  %863 = load ptr, ptr %6, align 8, !tbaa !5
  %864 = load i32, ptr %38, align 4, !tbaa !14
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds i8, ptr %863, i64 %865
  store i8 -1, ptr %866, align 1, !tbaa !15
  br label %872

867:                                              ; preds = %849
  %868 = load ptr, ptr %6, align 8, !tbaa !5
  %869 = load i32, ptr %38, align 4, !tbaa !14
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds i8, ptr %868, i64 %870
  store i8 0, ptr %871, align 1, !tbaa !15
  br label %872

872:                                              ; preds = %867, %862
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  br label %873

873:                                              ; preds = %872
  %874 = load i32, ptr %37, align 4, !tbaa !14
  %875 = add nsw i32 %874, 1
  store i32 %875, ptr %37, align 4, !tbaa !14
  br label %842, !llvm.loop !31

876:                                              ; preds = %848
  br label %877

877:                                              ; preds = %876
  %878 = load i32, ptr %36, align 4, !tbaa !14
  %879 = add nsw i32 %878, 1
  store i32 %879, ptr %36, align 4, !tbaa !14
  br label %834, !llvm.loop !32

880:                                              ; preds = %840
  %881 = load ptr, ptr %9, align 8, !tbaa !5
  call void @_Z12SavePNMImageP5ImagePc(ptr noundef %881, ptr noundef @.str.12)
  %882 = load ptr, ptr %14, align 8
  call void @llvm.stackrestore.p0(ptr %882)
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 36, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef, ptr noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3powIfiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(float noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12SavePNMImageP5ImagePc(ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z13boundaryCheckiiii(i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

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

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #5

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #6

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z8GaussianP5Image(ptr noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt5atan2ff(float noundef, float noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4acosIiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef) #2

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #6

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = { nocallback nofree nosync nounwind willreturn }
attributes #7 = { 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, !11, i64 0}
!10 = !{!"_ZTS5Image", !11, i64 0, !11, i64 4, !11, i64 8, !6, i64 16, !7, i64 24, !11, i64 1524}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !11, i64 4}
!13 = !{!10, !6, i64 16}
!14 = !{!11, !11, i64 0}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !7, i64 0}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = distinct !{!23, !17}
!24 = distinct !{!24, !17}
!25 = distinct !{!25, !17}
!26 = distinct !{!26, !17}
!27 = distinct !{!27, !17}
!28 = distinct !{!28, !17}
!29 = distinct !{!29, !17}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}
!32 = distinct !{!32, !17}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str.5 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z5CannyP5Image(ptr noundef %0) local_unnamed_addr #0 {
  %2 = load i32, ptr %0, align 8, !tbaa !5
  %3 = getelementptr inbounds i8, ptr %0, i64 4
  %4 = load i32, ptr %3, align 4, !tbaa !11
  %5 = mul nsw i32 %4, %2
  %6 = zext i32 %5 to i64
  %7 = alloca float, i64 %6, align 16
  %8 = tail call noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef nonnull %0, ptr noundef nonnull @.str.5)
  %9 = tail call noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef nonnull %0, ptr noundef nonnull @.str.5)
  %10 = tail call noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef nonnull %0, ptr noundef nonnull @.str.5)
  %11 = getelementptr inbounds i8, ptr %8, i64 16
  %12 = load ptr, ptr %11, align 8, !tbaa !12
  %13 = getelementptr inbounds i8, ptr %9, i64 16
  %14 = load ptr, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %10, i64 16
  %16 = load ptr, ptr %15, align 8, !tbaa !12
  %17 = tail call noundef ptr @_Z8GaussianP5Image(ptr noundef nonnull %0)
  %18 = getelementptr inbounds i8, ptr %17, i64 16
  %19 = load ptr, ptr %18, align 8, !tbaa !12
  tail call void @_Z12SavePNMImageP5ImagePc(ptr noundef %17, ptr noundef nonnull @.str.9)
  %20 = getelementptr inbounds i8, ptr %17, i64 4
  %21 = load i32, ptr %20, align 4, !tbaa !11
  %22 = icmp sgt i32 %21, 0
  br i1 %22, label %.preheader281.lr.ph, label %._crit_edge288

.preheader281.lr.ph:                              ; preds = %1
  %23 = load i32, ptr %17, align 8, !tbaa !5
  %24 = icmp sgt i32 %23, 0
  br i1 %24, label %.preheader281, label %._crit_edge288

.preheader281:                                    ; preds = %.preheader281.lr.ph, %._crit_edge
  %25 = phi i32 [ %38, %._crit_edge ], [ %21, %.preheader281.lr.ph ]
  %26 = phi i32 [ %39, %._crit_edge ], [ %23, %.preheader281.lr.ph ]
  %.0235287 = phi i32 [ %.pre-phi, %._crit_edge ], [ 0, %.preheader281.lr.ph ]
  %27 = icmp sgt i32 %26, 0
  br i1 %27, label %.preheader280.preheader, label %.preheader281.._crit_edge_crit_edge

.preheader281.._crit_edge_crit_edge:              ; preds = %.preheader281
  %.pre364 = add nuw nsw i32 %.0235287, 1
  br label %._crit_edge

.preheader280.preheader:                          ; preds = %.preheader281
  %28 = add nsw i32 %.0235287, -1
  %29 = add nuw nsw i32 %.0235287, 1
  br label %.preheader280

._crit_edge288:                                   ; preds = %._crit_edge, %.preheader281.lr.ph, %1
  tail call void @_Z12SavePNMImageP5ImagePc(ptr noundef %8, ptr noundef nonnull @.str.10)
  %30 = load i32, ptr %20, align 4, !tbaa !11
  %31 = icmp sgt i32 %30, 0
  br i1 %31, label %.preheader278.lr.ph, label %._crit_edge298

.preheader278.lr.ph:                              ; preds = %._crit_edge288
  %invariant.gep = getelementptr i8, ptr %12, i64 -1
  %invariant.gep289 = getelementptr i8, ptr %12, i64 1
  %32 = load i32, ptr %17, align 8, !tbaa !5
  %33 = icmp sgt i32 %32, 0
  br i1 %33, label %.preheader278, label %._crit_edge298

.preheader280:                                    ; preds = %.preheader280.preheader, %222
  %34 = phi i32 [ %223, %222 ], [ %26, %.preheader280.preheader ]
  %.0238286 = phi i32 [ %61, %222 ], [ 0, %.preheader280.preheader ]
  %35 = add nsw i32 %.0238286, -1
  %36 = load i32, ptr %20, align 4, !tbaa !11
  %37 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %35, i32 noundef %28, i32 noundef %34, i32 noundef %36)
  %.not262 = icmp eq i32 %37, 0
  %.pre = load i32, ptr %17, align 8, !tbaa !5
  br i1 %.not262, label %48, label %41

._crit_edge.loopexit:                             ; preds = %222
  %.pre361 = load i32, ptr %20, align 4, !tbaa !11
  br label %._crit_edge

._crit_edge:                                      ; preds = %.preheader281.._crit_edge_crit_edge, %._crit_edge.loopexit
  %.pre-phi = phi i32 [ %.pre364, %.preheader281.._crit_edge_crit_edge ], [ %29, %._crit_edge.loopexit ]
  %38 = phi i32 [ %25, %.preheader281.._crit_edge_crit_edge ], [ %.pre361, %._crit_edge.loopexit ]
  %39 = phi i32 [ %26, %.preheader281.._crit_edge_crit_edge ], [ %223, %._crit_edge.loopexit ]
  %40 = icmp slt i32 %.pre-phi, %38
  br i1 %40, label %.preheader281, label %._crit_edge288, !llvm.loop !13

41:                                               ; preds = %.preheader280
  %42 = mul nsw i32 %.pre, %28
  %43 = add nsw i32 %42, %35
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds i8, ptr %19, i64 %44
  %46 = load i8, ptr %45, align 1, !tbaa !16
  %47 = zext i8 %46 to i32
  br label %48

48:                                               ; preds = %.preheader280, %41
  %49 = phi i32 [ %47, %41 ], [ 0, %.preheader280 ]
  %50 = load i32, ptr %20, align 4, !tbaa !11
  %51 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %.0238286, i32 noundef %28, i32 noundef %.pre, i32 noundef %50)
  %.not262.1 = icmp eq i32 %51, 0
  %.pre352 = load i32, ptr %17, align 8, !tbaa !5
  br i1 %.not262.1, label %59, label %52

52:                                               ; preds = %48
  %53 = mul nsw i32 %.pre352, %28
  %54 = add nsw i32 %53, %.0238286
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds i8, ptr %19, i64 %55
  %57 = load i8, ptr %56, align 1, !tbaa !16
  %58 = zext i8 %57 to i32
  br label %59

59:                                               ; preds = %52, %48
  %60 = phi i32 [ %58, %52 ], [ 0, %48 ]
  %61 = add nuw nsw i32 %.0238286, 1
  %62 = load i32, ptr %20, align 4, !tbaa !11
  %63 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %61, i32 noundef %28, i32 noundef %.pre352, i32 noundef %62)
  %.not262.2 = icmp eq i32 %63, 0
  %.pre353 = load i32, ptr %17, align 8, !tbaa !5
  br i1 %.not262.2, label %.preheader279.1, label %64

64:                                               ; preds = %59
  %65 = mul nsw i32 %.pre353, %28
  %66 = add nsw i32 %65, %61
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds i8, ptr %19, i64 %67
  %69 = load i8, ptr %68, align 1, !tbaa !16
  %70 = zext i8 %69 to i32
  br label %.preheader279.1

.preheader279.1:                                  ; preds = %64, %59
  %71 = phi i32 [ %70, %64 ], [ 0, %59 ]
  %72 = load i32, ptr %20, align 4, !tbaa !11
  %73 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %35, i32 noundef %.0235287, i32 noundef %.pre353, i32 noundef %72)
  %.not262.1325 = icmp eq i32 %73, 0
  %.pre354 = load i32, ptr %17, align 8, !tbaa !5
  br i1 %.not262.1325, label %81, label %74

74:                                               ; preds = %.preheader279.1
  %75 = mul nsw i32 %.pre354, %.0235287
  %76 = add nsw i32 %75, %35
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds i8, ptr %19, i64 %77
  %79 = load i8, ptr %78, align 1, !tbaa !16
  %80 = zext i8 %79 to i32
  br label %81

81:                                               ; preds = %74, %.preheader279.1
  %82 = phi i32 [ %80, %74 ], [ 0, %.preheader279.1 ]
  %83 = load i32, ptr %20, align 4, !tbaa !11
  %84 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %.0238286, i32 noundef %.0235287, i32 noundef %.pre354, i32 noundef %83)
  %.pre355 = load i32, ptr %17, align 8, !tbaa !5
  %85 = load i32, ptr %20, align 4, !tbaa !11
  %86 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %61, i32 noundef %.0235287, i32 noundef %.pre355, i32 noundef %85)
  %.not262.2.1 = icmp eq i32 %86, 0
  %.pre356 = load i32, ptr %17, align 8, !tbaa !5
  br i1 %.not262.2.1, label %.preheader279.2, label %87

87:                                               ; preds = %81
  %88 = mul nsw i32 %.pre356, %.0235287
  %89 = add nsw i32 %88, %61
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i8, ptr %19, i64 %90
  %92 = load i8, ptr %91, align 1, !tbaa !16
  %93 = zext i8 %92 to i32
  br label %.preheader279.2

.preheader279.2:                                  ; preds = %87, %81
  %94 = phi i32 [ %93, %87 ], [ 0, %81 ]
  %95 = load i32, ptr %20, align 4, !tbaa !11
  %96 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %35, i32 noundef %29, i32 noundef %.pre356, i32 noundef %95)
  %.not262.2327 = icmp eq i32 %96, 0
  %.pre357 = load i32, ptr %17, align 8, !tbaa !5
  br i1 %.not262.2327, label %104, label %97

97:                                               ; preds = %.preheader279.2
  %98 = mul nsw i32 %.pre357, %29
  %99 = add nsw i32 %98, %35
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i8, ptr %19, i64 %100
  %102 = load i8, ptr %101, align 1, !tbaa !16
  %103 = zext i8 %102 to i32
  br label %104

104:                                              ; preds = %97, %.preheader279.2
  %105 = phi i32 [ %103, %97 ], [ 0, %.preheader279.2 ]
  %106 = load i32, ptr %20, align 4, !tbaa !11
  %107 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %.0238286, i32 noundef %29, i32 noundef %.pre357, i32 noundef %106)
  %.not262.1.2 = icmp eq i32 %107, 0
  %.pre358 = load i32, ptr %17, align 8, !tbaa !5
  br i1 %.not262.1.2, label %115, label %108

108:                                              ; preds = %104
  %109 = mul nsw i32 %.pre358, %29
  %110 = add nsw i32 %109, %.0238286
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds i8, ptr %19, i64 %111
  %113 = load i8, ptr %112, align 1, !tbaa !16
  %114 = zext i8 %113 to i32
  br label %115

115:                                              ; preds = %108, %104
  %116 = phi i32 [ %114, %108 ], [ 0, %104 ]
  %117 = load i32, ptr %20, align 4, !tbaa !11
  %118 = tail call noundef i32 @_Z13boundaryCheckiiii(i32 noundef %61, i32 noundef %29, i32 noundef %.pre358, i32 noundef %117)
  %.not262.2.2 = icmp eq i32 %118, 0
  br i1 %.not262.2.2, label %127, label %119

119:                                              ; preds = %115
  %120 = load i32, ptr %17, align 8, !tbaa !5
  %121 = mul nsw i32 %120, %29
  %122 = add nsw i32 %121, %61
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds i8, ptr %19, i64 %123
  %125 = load i8, ptr %124, align 1, !tbaa !16
  %126 = zext i8 %125 to i32
  br label %127

127:                                              ; preds = %119, %115
  %128 = phi i32 [ %126, %119 ], [ 0, %115 ]
  %129 = uitofp nneg i32 %71 to float
  %130 = uitofp nneg i32 %94 to float
  %131 = tail call float @llvm.fmuladd.f32(float %130, float 2.000000e+00, float %129)
  %132 = uitofp nneg i32 %128 to float
  %133 = fadd float %131, %132
  %134 = uitofp nneg i32 %49 to float
  %135 = fsub float %133, %134
  %136 = uitofp nneg i32 %82 to float
  %137 = fneg float %136
  %138 = tail call float @llvm.fmuladd.f32(float %137, float 2.000000e+00, float %135)
  %139 = uitofp nneg i32 %105 to float
  %140 = fsub float %138, %139
  %141 = tail call noundef float @_ZSt3absf(float noundef %140)
  %142 = uitofp nneg i32 %116 to float
  %143 = tail call float @llvm.fmuladd.f32(float %142, float 2.000000e+00, float %139)
  %144 = fadd float %143, %132
  %145 = fsub float %144, %134
  %146 = uitofp nneg i32 %60 to float
  %147 = fneg float %146
  %148 = tail call float @llvm.fmuladd.f32(float %147, float 2.000000e+00, float %145)
  %149 = fsub float %148, %129
  %150 = tail call noundef float @_ZSt3absf(float noundef %149)
  %151 = tail call noundef double @_ZSt3powIfiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(float noundef %141, i32 noundef 2)
  %152 = tail call noundef double @_ZSt3powIfiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(float noundef %150, i32 noundef 2)
  %153 = fadd double %151, %152
  %154 = tail call double @sqrt(double noundef %153) #6
  %155 = fptosi double %154 to i32
  %156 = trunc i32 %155 to i8
  %157 = load i32, ptr %17, align 8, !tbaa !5
  %158 = mul nsw i32 %157, %.0235287
  %159 = add nsw i32 %158, %.0238286
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i8, ptr %12, i64 %160
  store i8 %156, ptr %161, align 1, !tbaa !16
  %162 = fcmp oeq float %141, 0.000000e+00
  %163 = fcmp oeq float %150, 0.000000e+00
  %or.cond = or i1 %162, %163
  br i1 %or.cond, label %164, label %170

164:                                              ; preds = %127
  %165 = load i32, ptr %17, align 8, !tbaa !5
  %166 = mul nsw i32 %165, %.0235287
  %167 = add nsw i32 %166, %.0238286
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds float, ptr %7, i64 %168
  store float 0.000000e+00, ptr %169, align 4, !tbaa !17
  br label %222

170:                                              ; preds = %127
  %171 = tail call noundef float @_ZSt5atan2ff(float noundef %141, float noundef %150)
  %172 = fpext float %171 to double
  %173 = tail call noundef double @_ZSt4acosIiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef -1)
  %174 = fdiv double 1.800000e+02, %173
  %175 = fmul double %174, %172
  %176 = fptrunc double %175 to float
  %177 = tail call float @llvm.fabs.f32(float %176)
  %or.cond263 = fcmp ugt float %177, 2.250000e+01
  %178 = fcmp ugt float %176, -1.575000e+02
  %or.cond264 = and i1 %178, %or.cond263
  %179 = fcmp ult float %176, 1.575000e+02
  %or.cond265 = and i1 %179, %or.cond264
  br i1 %or.cond265, label %186, label %180

180:                                              ; preds = %170
  %181 = load i32, ptr %17, align 8, !tbaa !5
  %182 = mul nsw i32 %181, %.0235287
  %183 = add nsw i32 %182, %.0238286
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds float, ptr %7, i64 %184
  store float 1.000000e+00, ptr %185, align 4, !tbaa !17
  br label %222

186:                                              ; preds = %170
  %187 = fcmp ule float %176, 2.250000e+01
  %188 = fcmp ugt float %176, 6.750000e+01
  %or.cond266 = or i1 %187, %188
  br i1 %or.cond266, label %189, label %192

189:                                              ; preds = %186
  %190 = fcmp ule float %176, -1.575000e+02
  %191 = fcmp ugt float %176, -1.125000e+02
  %or.cond267 = or i1 %190, %191
  br i1 %or.cond267, label %198, label %192

192:                                              ; preds = %189, %186
  %193 = load i32, ptr %17, align 8, !tbaa !5
  %194 = mul nsw i32 %193, %.0235287
  %195 = add nsw i32 %194, %.0238286
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds float, ptr %7, i64 %196
  store float 2.000000e+00, ptr %197, align 4, !tbaa !17
  br label %222

198:                                              ; preds = %189
  %199 = fcmp ule float %176, 6.750000e+01
  %200 = fcmp ugt float %176, 1.125000e+02
  %or.cond268 = or i1 %199, %200
  br i1 %or.cond268, label %201, label %204

201:                                              ; preds = %198
  %202 = fcmp oge float %176, -1.125000e+02
  %203 = fcmp olt float %176, -6.750000e+01
  %or.cond269 = and i1 %202, %203
  br i1 %or.cond269, label %204, label %210

204:                                              ; preds = %201, %198
  %205 = load i32, ptr %17, align 8, !tbaa !5
  %206 = mul nsw i32 %205, %.0235287
  %207 = add nsw i32 %206, %.0238286
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds float, ptr %7, i64 %208
  store float 3.000000e+00, ptr %209, align 4, !tbaa !17
  br label %222

210:                                              ; preds = %201
  %211 = fcmp oge float %176, -6.750000e+01
  %212 = fcmp olt float %176, -2.250000e+01
  %or.cond270 = and i1 %211, %212
  br i1 %or.cond270, label %216, label %213

213:                                              ; preds = %210
  %214 = fcmp ogt float %176, 1.125000e+02
  %215 = fcmp olt float %176, 1.575000e+02
  %or.cond271 = and i1 %214, %215
  br i1 %or.cond271, label %216, label %._crit_edge359

._crit_edge359:                                   ; preds = %213
  %.pre360 = load i32, ptr %17, align 8, !tbaa !5
  br label %222

216:                                              ; preds = %213, %210
  %217 = load i32, ptr %17, align 8, !tbaa !5
  %218 = mul nsw i32 %217, %.0235287
  %219 = add nsw i32 %218, %.0238286
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds float, ptr %7, i64 %220
  store float 4.000000e+00, ptr %221, align 4, !tbaa !17
  br label %222

222:                                              ; preds = %._crit_edge359, %180, %204, %216, %192, %164
  %223 = phi i32 [ %.pre360, %._crit_edge359 ], [ %181, %180 ], [ %205, %204 ], [ %217, %216 ], [ %193, %192 ], [ %165, %164 ]
  %224 = icmp slt i32 %61, %223
  br i1 %224, label %.preheader280, label %._crit_edge.loopexit, !llvm.loop !19

.preheader278:                                    ; preds = %.preheader278.lr.ph, %._crit_edge296
  %225 = phi i32 [ %254, %._crit_edge296 ], [ %30, %.preheader278.lr.ph ]
  %226 = phi i32 [ %255, %._crit_edge296 ], [ %32, %.preheader278.lr.ph ]
  %.0241297 = phi i32 [ %.pre-phi366, %._crit_edge296 ], [ 0, %.preheader278.lr.ph ]
  %227 = icmp sgt i32 %226, 0
  br i1 %227, label %.lr.ph, label %.preheader278.._crit_edge296_crit_edge

.preheader278.._crit_edge296_crit_edge:           ; preds = %.preheader278
  %.pre365 = add nuw nsw i32 %.0241297, 1
  br label %._crit_edge296

.lr.ph:                                           ; preds = %.preheader278
  %228 = add nsw i32 %.0241297, -1
  %229 = add nuw nsw i32 %.0241297, 1
  br label %257

._crit_edge298:                                   ; preds = %._crit_edge296, %.preheader278.lr.ph, %._crit_edge288
  tail call void @_Z12SavePNMImageP5ImagePc(ptr noundef %9, ptr noundef nonnull @.str.11)
  %230 = load i32, ptr %17, align 8, !tbaa !5
  %231 = load i32, ptr %20, align 4, !tbaa !11
  %232 = mul nsw i32 %231, %230
  %233 = zext i32 %232 to i64
  %234 = alloca i32, i64 %233, align 16
  %235 = alloca i32, i64 %233, align 16
  %236 = icmp sgt i32 %231, 0
  %237 = icmp sgt i32 %230, 0
  %or.cond375 = select i1 %236, i1 %237, i1 false
  br i1 %or.cond375, label %.preheader277.us.preheader, label %._crit_edge315

.preheader277.us.preheader:                       ; preds = %._crit_edge298
  %238 = zext nneg i32 %230 to i64
  %wide.trip.count332 = zext nneg i32 %231 to i64
  br label %.preheader277.us

.preheader277.us:                                 ; preds = %.preheader277.us.preheader, %._crit_edge301.us
  %indvars.iv329 = phi i64 [ 0, %.preheader277.us.preheader ], [ %indvars.iv.next330, %._crit_edge301.us ]
  %239 = mul nuw nsw i64 %indvars.iv329, %238
  br label %240

240:                                              ; preds = %.preheader277.us, %253
  %indvars.iv = phi i64 [ 0, %.preheader277.us ], [ %indvars.iv.next, %253 ]
  %241 = add nuw nsw i64 %indvars.iv, %239
  %242 = getelementptr inbounds i8, ptr %14, i64 %241
  %243 = load i8, ptr %242, align 1, !tbaa !16
  %244 = icmp ugt i8 %243, 120
  %245 = getelementptr inbounds i32, ptr %235, i64 %241
  br i1 %244, label %251, label %246

246:                                              ; preds = %240
  %247 = icmp ult i8 %243, 50
  %248 = getelementptr inbounds i32, ptr %234, i64 %241
  br i1 %247, label %250, label %249

249:                                              ; preds = %246
  store i32 2, ptr %248, align 4, !tbaa !20
  br label %253

250:                                              ; preds = %246
  store i32 0, ptr %248, align 4, !tbaa !20
  br label %253

251:                                              ; preds = %240
  %252 = getelementptr inbounds i32, ptr %234, i64 %241
  store i32 1, ptr %252, align 4, !tbaa !20
  br label %253

253:                                              ; preds = %251, %250, %249
  %.sink = phi i32 [ 1, %251 ], [ 0, %250 ], [ 2, %249 ]
  store i32 %.sink, ptr %245, align 4, !tbaa !20
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %238
  br i1 %exitcond.not, label %._crit_edge301.us, label %240, !llvm.loop !21

._crit_edge301.us:                                ; preds = %253
  %indvars.iv.next330 = add nuw nsw i64 %indvars.iv329, 1
  %exitcond333.not = icmp eq i64 %indvars.iv.next330, %wide.trip.count332
  br i1 %exitcond333.not, label %.preheader276, label %.preheader277.us, !llvm.loop !22

._crit_edge296.loopexit:                          ; preds = %324
  %.pre362 = load i32, ptr %20, align 4, !tbaa !11
  br label %._crit_edge296

._crit_edge296:                                   ; preds = %.preheader278.._crit_edge296_crit_edge, %._crit_edge296.loopexit
  %.pre-phi366 = phi i32 [ %.pre365, %.preheader278.._crit_edge296_crit_edge ], [ %229, %._crit_edge296.loopexit ]
  %254 = phi i32 [ %225, %.preheader278.._crit_edge296_crit_edge ], [ %.pre362, %._crit_edge296.loopexit ]
  %255 = phi i32 [ %226, %.preheader278.._crit_edge296_crit_edge ], [ %326, %._crit_edge296.loopexit ]
  %256 = icmp slt i32 %.pre-phi366, %254
  br i1 %256, label %.preheader278, label %._crit_edge298, !llvm.loop !23

257:                                              ; preds = %.lr.ph, %324
  %258 = phi i32 [ %226, %.lr.ph ], [ %326, %324 ]
  %.0240295 = phi i32 [ 0, %.lr.ph ], [ %325, %324 ]
  %259 = mul nsw i32 %258, %.0241297
  %260 = add nsw i32 %259, %.0240295
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds float, ptr %7, i64 %261
  %263 = load float, ptr %262, align 4, !tbaa !17
  %264 = fcmp oeq float %263, 0.000000e+00
  br i1 %264, label %.sink.split, label %265

265:                                              ; preds = %257
  %266 = fcmp oeq float %263, 1.000000e+00
  br i1 %266, label %267, label %276

267:                                              ; preds = %265
  %268 = getelementptr inbounds i8, ptr %12, i64 %261
  %269 = load i8, ptr %268, align 1, !tbaa !16
  %270 = getelementptr i8, ptr %268, i64 -1
  %271 = load i8, ptr %270, align 1, !tbaa !16
  %.not260 = icmp ult i8 %269, %271
  br i1 %.not260, label %275, label %272

272:                                              ; preds = %267
  %273 = getelementptr i8, ptr %268, i64 1
  %274 = load i8, ptr %273, align 1, !tbaa !16
  %.not261 = icmp ult i8 %269, %274
  br i1 %.not261, label %275, label %.sink.split

275:                                              ; preds = %272, %267
  br label %.sink.split

276:                                              ; preds = %265
  %277 = fcmp oeq float %263, 2.000000e+00
  br i1 %277, label %278, label %291

278:                                              ; preds = %276
  %279 = getelementptr inbounds i8, ptr %12, i64 %261
  %280 = load i8, ptr %279, align 1, !tbaa !16
  %281 = mul nsw i32 %258, %228
  %282 = add nsw i32 %281, %.0240295
  %283 = sext i32 %282 to i64
  %gep292 = getelementptr i8, ptr %invariant.gep289, i64 %283
  %284 = load i8, ptr %gep292, align 1, !tbaa !16
  %.not258 = icmp ult i8 %280, %284
  br i1 %.not258, label %290, label %285

285:                                              ; preds = %278
  %286 = mul nsw i32 %258, %229
  %287 = add nsw i32 %286, %.0240295
  %288 = sext i32 %287 to i64
  %gep294 = getelementptr i8, ptr %invariant.gep, i64 %288
  %289 = load i8, ptr %gep294, align 1, !tbaa !16
  %.not259 = icmp ult i8 %280, %289
  br i1 %.not259, label %290, label %.sink.split

290:                                              ; preds = %285, %278
  br label %.sink.split

291:                                              ; preds = %276
  %292 = fcmp oeq float %263, 3.000000e+00
  br i1 %292, label %293, label %308

293:                                              ; preds = %291
  %294 = getelementptr inbounds i8, ptr %12, i64 %261
  %295 = load i8, ptr %294, align 1, !tbaa !16
  %296 = mul nsw i32 %258, %228
  %297 = add nsw i32 %296, %.0240295
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i8, ptr %12, i64 %298
  %300 = load i8, ptr %299, align 1, !tbaa !16
  %.not256 = icmp ult i8 %295, %300
  br i1 %.not256, label %307, label %301

301:                                              ; preds = %293
  %302 = mul nsw i32 %258, %229
  %303 = add nsw i32 %302, %.0240295
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i8, ptr %12, i64 %304
  %306 = load i8, ptr %305, align 1, !tbaa !16
  %.not257 = icmp ult i8 %295, %306
  br i1 %.not257, label %307, label %.sink.split

307:                                              ; preds = %301, %293
  br label %.sink.split

308:                                              ; preds = %291
  %309 = fcmp oeq float %263, 4.000000e+00
  br i1 %309, label %310, label %324

310:                                              ; preds = %308
  %311 = getelementptr inbounds i8, ptr %12, i64 %261
  %312 = load i8, ptr %311, align 1, !tbaa !16
  %313 = mul nsw i32 %258, %228
  %314 = add nsw i32 %313, %.0240295
  %315 = sext i32 %314 to i64
  %gep = getelementptr i8, ptr %invariant.gep, i64 %315
  %316 = load i8, ptr %gep, align 1, !tbaa !16
  %.not = icmp ult i8 %312, %316
  br i1 %.not, label %322, label %317

317:                                              ; preds = %310
  %318 = mul nsw i32 %258, %229
  %319 = add nsw i32 %318, %.0240295
  %320 = sext i32 %319 to i64
  %gep290 = getelementptr i8, ptr %invariant.gep289, i64 %320
  %321 = load i8, ptr %gep290, align 1, !tbaa !16
  %.not255 = icmp ult i8 %312, %321
  br i1 %.not255, label %322, label %.sink.split

322:                                              ; preds = %317, %310
  br label %.sink.split

.sink.split:                                      ; preds = %317, %301, %285, %272, %257, %290, %322, %307, %275
  %.sink376 = phi i8 [ 0, %275 ], [ 0, %307 ], [ 0, %322 ], [ 0, %290 ], [ 0, %257 ], [ %269, %272 ], [ %280, %285 ], [ %295, %301 ], [ %312, %317 ]
  %323 = getelementptr inbounds i8, ptr %14, i64 %261
  store i8 %.sink376, ptr %323, align 1, !tbaa !16
  br label %324

324:                                              ; preds = %.sink.split, %308
  %325 = add nuw nsw i32 %.0240295, 1
  %326 = load i32, ptr %17, align 8, !tbaa !5
  %327 = icmp slt i32 %325, %326
  br i1 %327, label %257, label %._crit_edge296.loopexit, !llvm.loop !24

.preheader276:                                    ; preds = %._crit_edge301.us
  br i1 %236, label %.preheader275.us.preheader, label %._crit_edge315

.preheader275.us.preheader:                       ; preds = %.preheader276
  %328 = zext nneg i32 %230 to i64
  %wide.trip.count350 = zext nneg i32 %231 to i64
  %wide.trip.count345 = zext nneg i32 %230 to i64
  br label %.preheader275.us

.preheader275.us:                                 ; preds = %.preheader275.us.preheader, %._crit_edge309.us
  %indvars.iv347 = phi i64 [ 0, %.preheader275.us.preheader ], [ %indvars.iv.next348, %._crit_edge309.us ]
  %329 = mul nuw nsw i64 %indvars.iv347, %328
  %330 = trunc i64 %indvars.iv347 to i32
  %331 = add i32 %330, -1
  %332 = mul i32 %331, %230
  %sext = shl i64 %329, 32
  %333 = ashr exact i64 %sext, 32
  %334 = trunc i64 %indvars.iv347 to i32
  %335 = add i32 %334, 1
  %336 = mul i32 %335, %230
  br label %337

337:                                              ; preds = %.preheader275.us, %343
  %indvars.iv342 = phi i64 [ 0, %.preheader275.us ], [ %indvars.iv.next343, %343 ]
  %338 = add nuw nsw i64 %indvars.iv342, %329
  %339 = getelementptr inbounds i32, ptr %234, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !20
  %341 = icmp eq i32 %340, 2
  br i1 %341, label %.preheader274.us, label %343

342:                                              ; preds = %condstore.split
  %spec.select = zext i1 %402 to i32
  store i32 %spec.select, ptr %403, align 4, !tbaa !20
  br label %343

343:                                              ; preds = %342, %condstore.split, %337
  %indvars.iv.next343 = add nuw nsw i64 %indvars.iv342, 1
  %exitcond346.not = icmp eq i64 %indvars.iv.next343, %wide.trip.count345
  br i1 %exitcond346.not, label %._crit_edge309.us, label %337, !llvm.loop !25

344:                                              ; preds = %.preheader274.us
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %345

345:                                              ; preds = %344, %.preheader274.us
  %346 = sext i32 %405 to i64
  %347 = getelementptr inbounds i32, ptr %234, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !20
  %349 = add nsw i32 %348, %409
  %350 = icmp eq i32 %348, 1
  br i1 %350, label %351, label %352

351:                                              ; preds = %345
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %352

352:                                              ; preds = %351, %345
  %353 = add i32 %405, 1
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %234, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !20
  %357 = add nsw i32 %356, %349
  %358 = icmp eq i32 %356, 1
  br i1 %358, label %359, label %.preheader273.us.1

359:                                              ; preds = %352
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %.preheader273.us.1

.preheader273.us.1:                               ; preds = %359, %352
  %360 = add nuw nsw i64 %333, %indvars.iv342
  %361 = shl i64 %360, 32
  %sext367 = add i64 %361, -4294967296
  %362 = ashr exact i64 %sext367, 30
  %363 = getelementptr inbounds i8, ptr %234, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !20
  %365 = add nsw i32 %364, %357
  %366 = icmp eq i32 %364, 1
  br i1 %366, label %367, label %368

367:                                              ; preds = %.preheader273.us.1
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %368

368:                                              ; preds = %367, %.preheader273.us.1
  %369 = getelementptr inbounds i32, ptr %234, i64 %360
  %370 = load i32, ptr %369, align 4, !tbaa !20
  %371 = add nsw i32 %370, %365
  %372 = icmp eq i32 %370, 1
  br i1 %372, label %373, label %374

373:                                              ; preds = %368
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %374

374:                                              ; preds = %373, %368
  %375 = shl i64 %360, 32
  %sext368 = add i64 %375, 4294967296
  %376 = ashr exact i64 %sext368, 30
  %377 = getelementptr inbounds i8, ptr %234, i64 %376
  %378 = load i32, ptr %377, align 4, !tbaa !20
  %379 = add nsw i32 %378, %371
  %380 = icmp eq i32 %378, 1
  br i1 %380, label %381, label %.preheader273.us.2

381:                                              ; preds = %374
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %.preheader273.us.2

.preheader273.us.2:                               ; preds = %381, %374
  %382 = add i32 %336, %404
  %383 = add i32 %382, -1
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %234, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !20
  %387 = add nsw i32 %386, %379
  %388 = icmp eq i32 %386, 1
  br i1 %388, label %389, label %390

389:                                              ; preds = %.preheader273.us.2
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %390

390:                                              ; preds = %389, %.preheader273.us.2
  %391 = sext i32 %382 to i64
  %392 = getelementptr inbounds i32, ptr %234, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !20
  %394 = add nsw i32 %393, %387
  %395 = icmp eq i32 %393, 1
  br i1 %395, label %396, label %condstore.split

396:                                              ; preds = %390
  store i32 1, ptr %403, align 4, !tbaa !20
  br label %condstore.split

condstore.split:                                  ; preds = %396, %390
  %397 = add i32 %382, 1
  %398 = sext i32 %397 to i64
  %399 = getelementptr inbounds i32, ptr %234, i64 %398
  %400 = load i32, ptr %399, align 4, !tbaa !20
  %401 = add nsw i32 %400, %394
  %.not381 = icmp ne i32 %400, 1
  %402 = icmp ne i32 %401, 2
  %.not382 = and i1 %.not381, %402
  br i1 %.not382, label %343, label %342

.preheader274.us:                                 ; preds = %337
  %403 = getelementptr inbounds i32, ptr %235, i64 %338
  %404 = trunc nuw nsw i64 %indvars.iv342 to i32
  %405 = add i32 %332, %404
  %406 = add i32 %405, -1
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %234, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !20
  %410 = icmp eq i32 %409, 1
  br i1 %410, label %344, label %345

._crit_edge309.us:                                ; preds = %343
  %indvars.iv.next348 = add nuw nsw i64 %indvars.iv347, 1
  %exitcond351.not = icmp eq i64 %indvars.iv.next348, %wide.trip.count350
  br i1 %exitcond351.not, label %.preheader272, label %.preheader275.us, !llvm.loop !26

.preheader272:                                    ; preds = %._crit_edge309.us
  br i1 %236, label %.preheader, label %._crit_edge315

.preheader:                                       ; preds = %.preheader272, %._crit_edge313
  %411 = phi i32 [ %414, %._crit_edge313 ], [ %231, %.preheader272 ]
  %412 = phi i32 [ %415, %._crit_edge313 ], [ %230, %.preheader272 ]
  %.0227314 = phi i32 [ %416, %._crit_edge313 ], [ 0, %.preheader272 ]
  %413 = icmp sgt i32 %412, 0
  br i1 %413, label %.lr.ph312, label %._crit_edge313

._crit_edge315:                                   ; preds = %._crit_edge313, %._crit_edge298, %.preheader276, %.preheader272
  tail call void @_Z12SavePNMImageP5ImagePc(ptr noundef %10, ptr noundef nonnull @.str.12)
  ret void

._crit_edge313.loopexit:                          ; preds = %.lr.ph312
  %.pre363 = load i32, ptr %20, align 4, !tbaa !11
  br label %._crit_edge313

._crit_edge313:                                   ; preds = %._crit_edge313.loopexit, %.preheader
  %414 = phi i32 [ %.pre363, %._crit_edge313.loopexit ], [ %411, %.preheader ]
  %415 = phi i32 [ %427, %._crit_edge313.loopexit ], [ %412, %.preheader ]
  %416 = add nuw nsw i32 %.0227314, 1
  %417 = icmp slt i32 %416, %414
  br i1 %417, label %.preheader, label %._crit_edge315, !llvm.loop !27

.lr.ph312:                                        ; preds = %.preheader, %.lr.ph312
  %418 = phi i32 [ %427, %.lr.ph312 ], [ %412, %.preheader ]
  %.0311 = phi i32 [ %426, %.lr.ph312 ], [ 0, %.preheader ]
  %419 = mul nsw i32 %418, %.0227314
  %420 = add nsw i32 %419, %.0311
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %235, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !20
  %424 = icmp eq i32 %423, 1
  %spec.select380 = sext i1 %424 to i8
  %425 = getelementptr inbounds i8, ptr %16, i64 %421
  store i8 %spec.select380, ptr %425, align 1
  %426 = add nuw nsw i32 %.0311, 1
  %427 = load i32, ptr %17, align 8, !tbaa !5
  %428 = icmp slt i32 %426, %427
  br i1 %428, label %.lr.ph312, label %._crit_edge313.loopexit, !llvm.loop !28
}

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z14CreateNewImageP5ImagePc(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3powIfiEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(float noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z12SavePNMImageP5ImagePc(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z13boundaryCheckiiii(i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z8GaussianP5Image(ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt5atan2ff(float noundef, float noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt4acosIiEN9__gnu_cxx11__enable_ifIXsr12__is_integerIT_EE7__valueEdE6__typeES2_(i32 noundef) local_unnamed_addr #1

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

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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, !7, i64 0}
!6 = !{!"_ZTS5Image", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !8, i64 24, !7, i64 1524}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !10, i64 16}
!13 = distinct !{!13, !14, !15}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!"llvm.loop.unswitch.partial.disable"}
!16 = !{!8, !8, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"float", !8, i64 0}
!19 = distinct !{!19, !14}
!20 = !{!7, !7, i64 0}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14, !15}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14, !15}
!28 = distinct !{!28, !14}


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