; LLVM IR from ox-vgg/vise :: src/search_engine/relja_retrival/external/KMCode_relja/gauss_iir (gauss_iir)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.ImageContent = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [34 x i8], align 1

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) #0 align 2

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_Z6smoothiiP12ImageContentff(i32 noundef %0, i32 noundef %1, ptr noundef %2, float noundef %3, float noundef %4) #5 {
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca float, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca float, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  store i32 %0, ptr %6, align 4, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !9
  store float %3, ptr %9, align 4, !tbaa !11
  store float %4, ptr %10, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  %26 = load float, ptr %9, align 4, !tbaa !11
  %27 = fmul float 3.000000e+00, %26
  %28 = call noundef float @_ZSt4rintf(float noundef %27)
  %29 = fptoui float %28 to i32
  store i32 %29, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  %30 = load float, ptr %10, align 4, !tbaa !11
  %31 = fmul float 3.000000e+00, %30
  %32 = call noundef float @_ZSt4rintf(float noundef %31)
  %33 = fptoui float %32 to i32
  store i32 %33, ptr %12, align 4, !tbaa !5
  %34 = load i32, ptr %11, align 4, !tbaa !5
  %35 = load ptr, ptr %8, align 8, !tbaa !9
  %36 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %35)
  %37 = sub i32 %36, 1
  %38 = lshr i32 %37, 1
  %39 = icmp ugt i32 %34, %38
  br i1 %39, label %40, label %45

40:                                               ; preds = %5
  %41 = load ptr, ptr %8, align 8, !tbaa !9
  %42 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %41)
  %43 = sub i32 %42, 1
  %44 = lshr i32 %43, 1
  store i32 %44, ptr %11, align 4, !tbaa !5
  br label %45

45:                                               ; preds = %40, %5
  %46 = load i32, ptr %12, align 4, !tbaa !5
  %47 = load ptr, ptr %8, align 8, !tbaa !9
  %48 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %47)
  %49 = sub i32 %48, 1
  %50 = lshr i32 %49, 1
  %51 = icmp ugt i32 %46, %50
  br i1 %51, label %52, label %57

52:                                               ; preds = %45
  %53 = load ptr, ptr %8, align 8, !tbaa !9
  %54 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %53)
  %55 = sub i32 %54, 1
  %56 = lshr i32 %55, 1
  store i32 %56, ptr %12, align 4, !tbaa !5
  br label %57

57:                                               ; preds = %52, %45
  %58 = load i32, ptr %11, align 4, !tbaa !5
  %59 = mul i32 2, %58
  %60 = add i32 %59, 1
  %61 = load ptr, ptr %8, align 8, !tbaa !9
  %62 = call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %61)
  %63 = icmp ugt i32 %60, %62
  br i1 %63, label %71, label %64

64:                                               ; preds = %57
  %65 = load i32, ptr %12, align 4, !tbaa !5
  %66 = mul i32 2, %65
  %67 = add i32 %66, 1
  %68 = load ptr, ptr %8, align 8, !tbaa !9
  %69 = call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %68)
  %70 = icmp ugt i32 %67, %69
  br i1 %70, label %71, label %74

71:                                               ; preds = %64, %57
  %72 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str)
  %73 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #10
  unreachable

74:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %75 = load i32, ptr %12, align 4, !tbaa !5
  %76 = mul i32 2, %75
  %77 = add i32 %76, 1
  %78 = zext i32 %77 to i64
  %79 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %78, i64 8)
  %80 = extractvalue { i64, i1 } %79, 1
  %81 = extractvalue { i64, i1 } %79, 0
  %82 = select i1 %80, i64 -1, i64 %81
  %83 = call noalias noundef nonnull ptr @_Znam(i64 noundef %82) #11
  store ptr %83, ptr %13, align 8, !tbaa !9
  %84 = load i32, ptr %12, align 4, !tbaa !5
  %85 = mul i32 2, %84
  %86 = add i32 %85, 1
  %87 = load i32, ptr %11, align 4, !tbaa !5
  %88 = mul i32 2, %87
  %89 = add i32 %88, 1
  %90 = mul i32 %86, %89
  %91 = zext i32 %90 to i64
  %92 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %91, i64 4)
  %93 = extractvalue { i64, i1 } %92, 1
  %94 = extractvalue { i64, i1 } %92, 0
  %95 = select i1 %93, i64 -1, i64 %94
  %96 = call noalias noundef nonnull ptr @_Znam(i64 noundef %95) #11
  %97 = load ptr, ptr %13, align 8, !tbaa !9
  %98 = getelementptr inbounds ptr, ptr %97, i64 0
  store ptr %96, ptr %98, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  store i32 1, ptr %14, align 4, !tbaa !5
  br label %99

99:                                               ; preds = %121, %74
  %100 = load i32, ptr %14, align 4, !tbaa !5
  %101 = load i32, ptr %12, align 4, !tbaa !5
  %102 = mul i32 2, %101
  %103 = add i32 %102, 1
  %104 = icmp ult i32 %100, %103
  br i1 %104, label %106, label %105

105:                                              ; preds = %99
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  br label %124

106:                                              ; preds = %99
  %107 = load ptr, ptr %13, align 8, !tbaa !9
  %108 = getelementptr inbounds ptr, ptr %107, i64 0
  %109 = load ptr, ptr %108, align 8, !tbaa !9
  %110 = load i32, ptr %14, align 4, !tbaa !5
  %111 = load i32, ptr %11, align 4, !tbaa !5
  %112 = mul i32 2, %111
  %113 = add i32 %112, 1
  %114 = mul i32 %110, %113
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds float, ptr %109, i64 %115
  %117 = load ptr, ptr %13, align 8, !tbaa !9
  %118 = load i32, ptr %14, align 4, !tbaa !5
  %119 = zext i32 %118 to i64
  %120 = getelementptr inbounds ptr, ptr %117, i64 %119
  store ptr %116, ptr %120, align 8, !tbaa !9
  br label %121

121:                                              ; preds = %106
  %122 = load i32, ptr %14, align 4, !tbaa !5
  %123 = add i32 %122, 1
  store i32 %123, ptr %14, align 4, !tbaa !5
  br label %99, !llvm.loop !13

124:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  %125 = load float, ptr %9, align 4, !tbaa !11
  %126 = fmul float -2.000000e+00, %125
  %127 = load float, ptr %9, align 4, !tbaa !11
  %128 = fmul float %126, %127
  store float %128, ptr %15, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  %129 = load float, ptr %10, align 4, !tbaa !11
  %130 = fmul float -2.000000e+00, %129
  %131 = load float, ptr %10, align 4, !tbaa !11
  %132 = fmul float %130, %131
  store float %132, ptr %16, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %133

133:                                              ; preds = %215, %124
  %134 = load i32, ptr %17, align 4, !tbaa !5
  %135 = load i32, ptr %12, align 4, !tbaa !5
  %136 = icmp ule i32 %134, %135
  br i1 %136, label %138, label %137

137:                                              ; preds = %133
  store i32 5, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %218

138:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %139

139:                                              ; preds = %211, %138
  %140 = load i32, ptr %19, align 4, !tbaa !5
  %141 = load i32, ptr %11, align 4, !tbaa !5
  %142 = icmp ule i32 %140, %141
  br i1 %142, label %144, label %143

143:                                              ; preds = %139
  store i32 8, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  br label %214

144:                                              ; preds = %139
  %145 = load i32, ptr %17, align 4, !tbaa !5
  %146 = load i32, ptr %17, align 4, !tbaa !5
  %147 = mul i32 %145, %146
  %148 = uitofp i32 %147 to float
  %149 = load float, ptr %16, align 4, !tbaa !11
  %150 = fdiv float %148, %149
  %151 = load i32, ptr %19, align 4, !tbaa !5
  %152 = load i32, ptr %19, align 4, !tbaa !5
  %153 = mul i32 %151, %152
  %154 = uitofp i32 %153 to float
  %155 = load float, ptr %15, align 4, !tbaa !11
  %156 = fdiv float %154, %155
  %157 = fadd float %150, %156
  %158 = call noundef float @_ZSt3expf(float noundef %157)
  %159 = load ptr, ptr %13, align 8, !tbaa !9
  %160 = load i32, ptr %17, align 4, !tbaa !5
  %161 = sub i32 0, %160
  %162 = load i32, ptr %12, align 4, !tbaa !5
  %163 = add i32 %161, %162
  %164 = zext i32 %163 to i64
  %165 = getelementptr inbounds ptr, ptr %159, i64 %164
  %166 = load ptr, ptr %165, align 8, !tbaa !9
  %167 = load i32, ptr %19, align 4, !tbaa !5
  %168 = sub i32 0, %167
  %169 = load i32, ptr %11, align 4, !tbaa !5
  %170 = add i32 %168, %169
  %171 = zext i32 %170 to i64
  %172 = getelementptr inbounds float, ptr %166, i64 %171
  store float %158, ptr %172, align 4, !tbaa !11
  %173 = load ptr, ptr %13, align 8, !tbaa !9
  %174 = load i32, ptr %17, align 4, !tbaa !5
  %175 = load i32, ptr %12, align 4, !tbaa !5
  %176 = add i32 %174, %175
  %177 = zext i32 %176 to i64
  %178 = getelementptr inbounds ptr, ptr %173, i64 %177
  %179 = load ptr, ptr %178, align 8, !tbaa !9
  %180 = load i32, ptr %19, align 4, !tbaa !5
  %181 = load i32, ptr %11, align 4, !tbaa !5
  %182 = add i32 %180, %181
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds float, ptr %179, i64 %183
  store float %158, ptr %184, align 4, !tbaa !11
  %185 = load ptr, ptr %13, align 8, !tbaa !9
  %186 = load i32, ptr %17, align 4, !tbaa !5
  %187 = sub i32 0, %186
  %188 = load i32, ptr %12, align 4, !tbaa !5
  %189 = add i32 %187, %188
  %190 = zext i32 %189 to i64
  %191 = getelementptr inbounds ptr, ptr %185, i64 %190
  %192 = load ptr, ptr %191, align 8, !tbaa !9
  %193 = load i32, ptr %19, align 4, !tbaa !5
  %194 = load i32, ptr %11, align 4, !tbaa !5
  %195 = add i32 %193, %194
  %196 = zext i32 %195 to i64
  %197 = getelementptr inbounds float, ptr %192, i64 %196
  store float %158, ptr %197, align 4, !tbaa !11
  %198 = load ptr, ptr %13, align 8, !tbaa !9
  %199 = load i32, ptr %17, align 4, !tbaa !5
  %200 = load i32, ptr %12, align 4, !tbaa !5
  %201 = add i32 %199, %200
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds ptr, ptr %198, i64 %202
  %204 = load ptr, ptr %203, align 8, !tbaa !9
  %205 = load i32, ptr %19, align 4, !tbaa !5
  %206 = sub i32 0, %205
  %207 = load i32, ptr %11, align 4, !tbaa !5
  %208 = add i32 %206, %207
  %209 = zext i32 %208 to i64
  %210 = getelementptr inbounds float, ptr %204, i64 %209
  store float %158, ptr %210, align 4, !tbaa !11
  br label %211

211:                                              ; preds = %144
  %212 = load i32, ptr %19, align 4, !tbaa !5
  %213 = add i32 %212, 1
  store i32 %213, ptr %19, align 4, !tbaa !5
  br label %139, !llvm.loop !15

214:                                              ; preds = %143
  br label %215

215:                                              ; preds = %214
  %216 = load i32, ptr %17, align 4, !tbaa !5
  %217 = add i32 %216, 1
  store i32 %217, ptr %17, align 4, !tbaa !5
  br label %133, !llvm.loop !16

218:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  store float 0.000000e+00, ptr %20, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #9
  %219 = load i32, ptr %12, align 4, !tbaa !5
  %220 = sub i32 0, %219
  store i32 %220, ptr %21, align 4, !tbaa !5
  br label %221

221:                                              ; preds = %254, %218
  %222 = load i32, ptr %21, align 4, !tbaa !5
  %223 = load i32, ptr %12, align 4, !tbaa !5
  %224 = icmp sle i32 %222, %223
  br i1 %224, label %226, label %225

225:                                              ; preds = %221
  store i32 11, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #9
  br label %257

226:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %227 = load i32, ptr %11, align 4, !tbaa !5
  %228 = sub i32 0, %227
  store i32 %228, ptr %22, align 4, !tbaa !5
  br label %229

229:                                              ; preds = %250, %226
  %230 = load i32, ptr %22, align 4, !tbaa !5
  %231 = load i32, ptr %11, align 4, !tbaa !5
  %232 = icmp sle i32 %230, %231
  br i1 %232, label %234, label %233

233:                                              ; preds = %229
  store i32 14, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %253

234:                                              ; preds = %229
  %235 = load ptr, ptr %13, align 8, !tbaa !9
  %236 = load i32, ptr %21, align 4, !tbaa !5
  %237 = load i32, ptr %12, align 4, !tbaa !5
  %238 = add i32 %236, %237
  %239 = zext i32 %238 to i64
  %240 = getelementptr inbounds ptr, ptr %235, i64 %239
  %241 = load ptr, ptr %240, align 8, !tbaa !9
  %242 = load i32, ptr %22, align 4, !tbaa !5
  %243 = load i32, ptr %11, align 4, !tbaa !5
  %244 = add i32 %242, %243
  %245 = zext i32 %244 to i64
  %246 = getelementptr inbounds float, ptr %241, i64 %245
  %247 = load float, ptr %246, align 4, !tbaa !11
  %248 = load float, ptr %20, align 4, !tbaa !11
  %249 = fadd float %248, %247
  store float %249, ptr %20, align 4, !tbaa !11
  br label %250

250:                                              ; preds = %234
  %251 = load i32, ptr %22, align 4, !tbaa !5
  %252 = add nsw i32 %251, 1
  store i32 %252, ptr %22, align 4, !tbaa !5
  br label %229, !llvm.loop !17

253:                                              ; preds = %233
  br label %254

254:                                              ; preds = %253
  %255 = load i32, ptr %21, align 4, !tbaa !5
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %21, align 4, !tbaa !5
  br label %221, !llvm.loop !18

257:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  store float 0.000000e+00, ptr %23, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  %258 = load i32, ptr %12, align 4, !tbaa !5
  %259 = sub i32 0, %258
  store i32 %259, ptr %24, align 4, !tbaa !5
  br label %260

260:                                              ; preds = %308, %257
  %261 = load i32, ptr %24, align 4, !tbaa !5
  %262 = load i32, ptr %12, align 4, !tbaa !5
  %263 = icmp sle i32 %261, %262
  br i1 %263, label %265, label %264

264:                                              ; preds = %260
  store i32 17, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %311

265:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %266 = load i32, ptr %11, align 4, !tbaa !5
  %267 = sub i32 0, %266
  store i32 %267, ptr %25, align 4, !tbaa !5
  br label %268

268:                                              ; preds = %304, %265
  %269 = load i32, ptr %25, align 4, !tbaa !5
  %270 = load i32, ptr %11, align 4, !tbaa !5
  %271 = icmp sle i32 %269, %270
  br i1 %271, label %273, label %272

272:                                              ; preds = %268
  store i32 20, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  br label %307

273:                                              ; preds = %268
  %274 = load ptr, ptr %8, align 8, !tbaa !9
  %275 = getelementptr inbounds %class.ImageContent, ptr %274, i32 0, i32 4
  %276 = load ptr, ptr %275, align 8, !tbaa !19
  %277 = load i32, ptr %7, align 4, !tbaa !5
  %278 = load i32, ptr %24, align 4, !tbaa !5
  %279 = add nsw i32 %277, %278
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds ptr, ptr %276, i64 %280
  %282 = load ptr, ptr %281, align 8, !tbaa !9
  %283 = load i32, ptr %6, align 4, !tbaa !5
  %284 = load i32, ptr %25, align 4, !tbaa !5
  %285 = add nsw i32 %283, %284
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds float, ptr %282, i64 %286
  %288 = load float, ptr %287, align 4, !tbaa !11
  %289 = load ptr, ptr %13, align 8, !tbaa !9
  %290 = load i32, ptr %24, align 4, !tbaa !5
  %291 = load i32, ptr %12, align 4, !tbaa !5
  %292 = add i32 %290, %291
  %293 = zext i32 %292 to i64
  %294 = getelementptr inbounds ptr, ptr %289, i64 %293
  %295 = load ptr, ptr %294, align 8, !tbaa !9
  %296 = load i32, ptr %25, align 4, !tbaa !5
  %297 = load i32, ptr %11, align 4, !tbaa !5
  %298 = add i32 %296, %297
  %299 = zext i32 %298 to i64
  %300 = getelementptr inbounds float, ptr %295, i64 %299
  %301 = load float, ptr %300, align 4, !tbaa !11
  %302 = load float, ptr %23, align 4, !tbaa !11
  %303 = call float @llvm.fmuladd.f32(float %288, float %301, float %302)
  store float %303, ptr %23, align 4, !tbaa !11
  br label %304

304:                                              ; preds = %273
  %305 = load i32, ptr %25, align 4, !tbaa !5
  %306 = add nsw i32 %305, 1
  store i32 %306, ptr %25, align 4, !tbaa !5
  br label %268, !llvm.loop !21

307:                                              ; preds = %272
  br label %308

308:                                              ; preds = %307
  %309 = load i32, ptr %24, align 4, !tbaa !5
  %310 = add nsw i32 %309, 1
  store i32 %310, ptr %24, align 4, !tbaa !5
  br label %260, !llvm.loop !22

311:                                              ; preds = %264
  %312 = load ptr, ptr %13, align 8, !tbaa !9
  %313 = getelementptr inbounds ptr, ptr %312, i64 0
  %314 = load ptr, ptr %313, align 8, !tbaa !9
  %315 = icmp eq ptr %314, null
  br i1 %315, label %317, label %316

316:                                              ; preds = %311
  call void @_ZdaPv(ptr noundef %314) #12
  br label %317

317:                                              ; preds = %316, %311
  %318 = load ptr, ptr %13, align 8, !tbaa !9
  %319 = icmp eq ptr %318, null
  br i1 %319, label %321, label %320

320:                                              ; preds = %317
  call void @_ZdaPv(ptr noundef %318) #12
  br label %321

321:                                              ; preds = %320, %317
  %322 = load float, ptr %23, align 4, !tbaa !11
  %323 = load float, ptr %20, align 4, !tbaa !11
  %324 = fdiv float %322, %323
  store i32 1, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  ret float %324
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4rintf(float noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #7

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #7

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #8

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin 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 #5 = { 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 #6 = { 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 #7 = { inlinehint 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 #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { noreturn nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = !{!20, !10, i64 16}
!20 = !{!"_ZTS12ImageContent", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [34 x i8], align 1

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0 align 2

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_Z6smoothiiP12ImageContentff(i32 noundef %0, i32 noundef %1, ptr noundef %2, float noundef %3, float noundef %4) local_unnamed_addr #4 {
  %6 = fmul float %3, 3.000000e+00
  %7 = tail call noundef float @_ZSt4rintf(float noundef %6)
  %8 = fptoui float %7 to i32
  %9 = fmul float %4, 3.000000e+00
  %10 = tail call noundef float @_ZSt4rintf(float noundef %9)
  %11 = fptoui float %10 to i32
  %12 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  %13 = add i32 %12, -1
  %14 = lshr i32 %13, 1
  %15 = icmp ult i32 %14, %8
  br i1 %15, label %16, label %20

16:                                               ; preds = %5
  %17 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  %18 = add i32 %17, -1
  %19 = lshr i32 %18, 1
  br label %20

20:                                               ; preds = %16, %5
  %.0104 = phi i32 [ %19, %16 ], [ %8, %5 ]
  %21 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  %22 = add i32 %21, -1
  %23 = lshr i32 %22, 1
  %24 = icmp ult i32 %23, %11
  br i1 %24, label %25, label %29

25:                                               ; preds = %20
  %26 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  %27 = add i32 %26, -1
  %28 = lshr i32 %27, 1
  br label %29

29:                                               ; preds = %25, %20
  %.0105 = phi i32 [ %28, %25 ], [ %11, %20 ]
  %30 = shl i32 %.0104, 1
  %31 = or disjoint i32 %30, 1
  %32 = tail call noundef i32 @_ZNK12ImageContent1xEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  %.not = icmp ult i32 %30, %32
  br i1 %.not, label %33, label %36

33:                                               ; preds = %29
  %34 = shl i32 %.0105, 1
  %35 = tail call noundef i32 @_ZNK12ImageContent1yEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  %.not112 = icmp ult i32 %34, %35
  br i1 %.not112, label %39, label %36

36:                                               ; preds = %33, %29
  %37 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str)
  %38 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 0) #9
  unreachable

39:                                               ; preds = %33
  %40 = or disjoint i32 %34, 1
  %41 = zext i32 %40 to i64
  %42 = shl nuw nsw i64 %41, 3
  %43 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %42) #10
  %44 = mul i32 %40, %31
  %45 = zext i32 %44 to i64
  %46 = shl nuw nsw i64 %45, 2
  %47 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %46) #10
  store ptr %47, ptr %43, align 8, !tbaa !5
  %.not113121 = icmp eq i32 %.0105, 0
  br i1 %.not113121, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %39
  %48 = tail call i32 @llvm.umax.i32(i32 %34, i32 1)
  %umax191 = zext i32 %48 to i64
  %xtraiter = and i64 %umax191, 3
  %49 = icmp ult i32 %34, 4
  br i1 %49, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %umax191, 4294967292
  br label %.lr.ph

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %50 = trunc nuw i64 %indvars.iv.epil to i32
  %51 = mul i32 %31, %50
  %52 = zext i32 %51 to i64
  %53 = getelementptr inbounds float, ptr %47, i64 %52
  %54 = getelementptr inbounds ptr, ptr %43, i64 %indvars.iv.epil
  store ptr %53, ptr %54, align 8, !tbaa !5
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.lr.ph.epil, !llvm.loop !9

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %39
  %55 = fmul float %3, 2.000000e+00
  %56 = fmul float %55, %3
  %57 = fmul float %4, -2.000000e+00
  %58 = fmul float %57, %4
  %59 = zext i32 %.0104 to i64
  %60 = add i32 %.0104, 1
  %61 = zext i32 %.0105 to i64
  %62 = add i32 %.0105, 1
  %invariant.gep = getelementptr inbounds ptr, ptr %43, i64 %61
  br label %.preheader120

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %63 = trunc nuw i64 %indvars.iv to i32
  %64 = mul i32 %31, %63
  %65 = zext i32 %64 to i64
  %66 = getelementptr inbounds float, ptr %47, i64 %65
  %67 = getelementptr inbounds ptr, ptr %43, i64 %indvars.iv
  store ptr %66, ptr %67, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %68 = trunc nuw i64 %indvars.iv.next to i32
  %69 = mul i32 %31, %68
  %70 = zext i32 %69 to i64
  %71 = getelementptr inbounds float, ptr %47, i64 %70
  %72 = getelementptr inbounds ptr, ptr %43, i64 %indvars.iv.next
  store ptr %71, ptr %72, align 8, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %73 = trunc nuw i64 %indvars.iv.next.1 to i32
  %74 = mul i32 %31, %73
  %75 = zext i32 %74 to i64
  %76 = getelementptr inbounds float, ptr %47, i64 %75
  %77 = getelementptr inbounds ptr, ptr %43, i64 %indvars.iv.next.1
  store ptr %76, ptr %77, align 8, !tbaa !5
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %78 = trunc nuw i64 %indvars.iv.next.2 to i32
  %79 = mul i32 %31, %78
  %80 = zext i32 %79 to i64
  %81 = getelementptr inbounds float, ptr %47, i64 %80
  %82 = getelementptr inbounds ptr, ptr %43, i64 %indvars.iv.next.2
  store ptr %81, ptr %82, align 8, !tbaa !5
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !11

.preheader120:                                    ; preds = %._crit_edge, %95
  %indvars.iv159 = phi i64 [ 0, %._crit_edge ], [ %indvars.iv.next160, %95 ]
  %83 = trunc nuw i64 %indvars.iv159 to i32
  %84 = mul i32 %83, %83
  %85 = uitofp i32 %84 to float
  %86 = fdiv float %85, %58
  %87 = sub i32 %.0105, %83
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds ptr, ptr %43, i64 %88
  %gep = getelementptr inbounds ptr, ptr %invariant.gep, i64 %indvars.iv159
  br label %96

90:                                               ; preds = %95
  %91 = sub i32 0, %.0105
  %.not115131 = icmp slt i32 %.0105, 0
  br i1 %.not115131, label %.preheader.thread, label %.lr.ph135

.lr.ph135:                                        ; preds = %90
  %92 = sub nsw i32 0, %.0104
  %.not118125 = icmp slt i32 %.0104, 0
  br i1 %.not118125, label %.preheader.thread, label %.lr.ph129.preheader

.lr.ph129.preheader:                              ; preds = %.lr.ph135
  %93 = or disjoint i32 %30, 1
  %xtraiter192 = and i32 %93, 3
  %94 = icmp ult i32 %30, 3
  br label %.lr.ph129

95:                                               ; preds = %96
  %indvars.iv.next160 = add nuw nsw i64 %indvars.iv159, 1
  %lftr.wideiv162 = trunc i64 %indvars.iv.next160 to i32
  %exitcond163.not = icmp eq i32 %62, %lftr.wideiv162
  br i1 %exitcond163.not, label %90, label %.preheader120, !llvm.loop !13

96:                                               ; preds = %.preheader120, %96
  %indvars.iv155 = phi i64 [ 0, %.preheader120 ], [ %indvars.iv.next156, %96 ]
  %97 = trunc nuw i64 %indvars.iv155 to i32
  %98 = mul i32 %97, %97
  %99 = uitofp i32 %98 to float
  %100 = fdiv float %99, %56
  %101 = fsub float %86, %100
  %102 = tail call noundef float @_ZSt3expf(float noundef %101)
  %103 = load ptr, ptr %89, align 8, !tbaa !5
  %104 = sub i32 %.0104, %97
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds float, ptr %103, i64 %105
  store float %102, ptr %106, align 4, !tbaa !14
  %107 = load ptr, ptr %gep, align 8, !tbaa !5
  %108 = add nuw nsw i64 %indvars.iv155, %59
  %109 = getelementptr inbounds float, ptr %107, i64 %108
  store float %102, ptr %109, align 4, !tbaa !14
  %110 = getelementptr inbounds float, ptr %103, i64 %108
  store float %102, ptr %110, align 4, !tbaa !14
  %111 = getelementptr inbounds float, ptr %107, i64 %105
  store float %102, ptr %111, align 4, !tbaa !14
  %indvars.iv.next156 = add nuw nsw i64 %indvars.iv155, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next156 to i32
  %exitcond158.not = icmp eq i32 %60, %lftr.wideiv
  br i1 %exitcond158.not, label %95, label %96, !llvm.loop !16

.preheader:                                       ; preds = %._crit_edge130
  br i1 %.not115131, label %.preheader.thread, label %.lr.ph147.split

.lr.ph147.split:                                  ; preds = %.preheader
  %112 = sub nsw i32 0, %.0104
  %113 = getelementptr inbounds i8, ptr %2, i64 16
  %114 = load ptr, ptr %113, align 8, !tbaa !17
  %115 = sext i32 %112 to i64
  %116 = sext i32 %0 to i64
  %117 = sext i32 %91 to i64
  %118 = sext i32 %1 to i64
  %invariant.gep187 = getelementptr ptr, ptr %114, i64 %118
  %xtraiter196 = and i32 %93, 3
  %119 = icmp ult i32 %30, 3
  br label %.lr.ph141

.lr.ph129:                                        ; preds = %.lr.ph129.preheader, %._crit_edge130
  %.099133 = phi i32 [ %131, %._crit_edge130 ], [ %91, %.lr.ph129.preheader ]
  %.0100132 = phi float [ %.lcssa190, %._crit_edge130 ], [ 0.000000e+00, %.lr.ph129.preheader ]
  %120 = add i32 %.099133, %.0105
  %121 = zext i32 %120 to i64
  %122 = getelementptr inbounds ptr, ptr %43, i64 %121
  %123 = load ptr, ptr %122, align 8, !tbaa !5
  br label %124

124:                                              ; preds = %124, %.lr.ph129
  %.098127.prol = phi i32 [ %92, %.lr.ph129 ], [ %130, %124 ]
  %.1101126.prol = phi float [ %.0100132, %.lr.ph129 ], [ %129, %124 ]
  %prol.iter = phi i32 [ 0, %.lr.ph129 ], [ %prol.iter.next, %124 ]
  %125 = add i32 %.098127.prol, %.0104
  %126 = zext i32 %125 to i64
  %127 = getelementptr inbounds float, ptr %123, i64 %126
  %128 = load float, ptr %127, align 4, !tbaa !14
  %129 = fadd float %.1101126.prol, %128
  %130 = add i32 %.098127.prol, 1
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter192
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %124, !llvm.loop !20

.prol.loopexit:                                   ; preds = %124
  br i1 %94, label %._crit_edge130, label %.lr.ph129.new

._crit_edge130:                                   ; preds = %.lr.ph129.new, %.prol.loopexit
  %.lcssa190 = phi float [ %129, %.prol.loopexit ], [ %154, %.lr.ph129.new ]
  %131 = add i32 %.099133, 1
  %exitcond165.not = icmp eq i32 %.099133, %.0105
  br i1 %exitcond165.not, label %.preheader, label %.lr.ph129, !llvm.loop !21

.lr.ph129.new:                                    ; preds = %.prol.loopexit, %.lr.ph129.new
  %.098127 = phi i32 [ %155, %.lr.ph129.new ], [ %130, %.prol.loopexit ]
  %.1101126 = phi float [ %154, %.lr.ph129.new ], [ %129, %.prol.loopexit ]
  %132 = add i32 %.098127, %.0104
  %133 = zext i32 %132 to i64
  %134 = getelementptr inbounds float, ptr %123, i64 %133
  %135 = load float, ptr %134, align 4, !tbaa !14
  %136 = fadd float %.1101126, %135
  %137 = add i32 %.098127, 1
  %138 = add i32 %137, %.0104
  %139 = zext i32 %138 to i64
  %140 = getelementptr inbounds float, ptr %123, i64 %139
  %141 = load float, ptr %140, align 4, !tbaa !14
  %142 = fadd float %136, %141
  %143 = add i32 %.098127, 2
  %144 = add i32 %143, %.0104
  %145 = zext i32 %144 to i64
  %146 = getelementptr inbounds float, ptr %123, i64 %145
  %147 = load float, ptr %146, align 4, !tbaa !14
  %148 = fadd float %142, %147
  %149 = add i32 %.098127, 3
  %150 = add i32 %149, %.0104
  %151 = zext i32 %150 to i64
  %152 = getelementptr inbounds float, ptr %123, i64 %151
  %153 = load float, ptr %152, align 4, !tbaa !14
  %154 = fadd float %148, %153
  %155 = add i32 %.098127, 4
  %exitcond164.not.3 = icmp eq i32 %149, %.0104
  br i1 %exitcond164.not.3, label %._crit_edge130, label %.lr.ph129.new, !llvm.loop !22

.lr.ph141:                                        ; preds = %.lr.ph147.split, %._crit_edge142
  %indvars.iv171 = phi i64 [ %117, %.lr.ph147.split ], [ %indvars.iv.next172, %._crit_edge142 ]
  %.097145 = phi float [ 0.000000e+00, %.lr.ph147.split ], [ %.lcssa, %._crit_edge142 ]
  %gep188 = getelementptr ptr, ptr %invariant.gep187, i64 %indvars.iv171
  %156 = load ptr, ptr %gep188, align 8, !tbaa !5
  %157 = trunc nsw i64 %indvars.iv171 to i32
  %158 = add i32 %.0105, %157
  %159 = zext i32 %158 to i64
  %160 = getelementptr inbounds ptr, ptr %43, i64 %159
  %161 = load ptr, ptr %160, align 8, !tbaa !5
  %invariant.gep185 = getelementptr float, ptr %156, i64 %116
  br label %162

162:                                              ; preds = %162, %.lr.ph141
  %indvars.iv166.prol = phi i64 [ %115, %.lr.ph141 ], [ %indvars.iv.next167.prol, %162 ]
  %.1138.prol = phi float [ %.097145, %.lr.ph141 ], [ %169, %162 ]
  %prol.iter198 = phi i32 [ 0, %.lr.ph141 ], [ %prol.iter198.next, %162 ]
  %gep186.prol = getelementptr float, ptr %invariant.gep185, i64 %indvars.iv166.prol
  %163 = load float, ptr %gep186.prol, align 4, !tbaa !14
  %164 = trunc nsw i64 %indvars.iv166.prol to i32
  %165 = add i32 %.0104, %164
  %166 = zext i32 %165 to i64
  %167 = getelementptr inbounds float, ptr %161, i64 %166
  %168 = load float, ptr %167, align 4, !tbaa !14
  %169 = tail call float @llvm.fmuladd.f32(float %163, float %168, float %.1138.prol)
  %indvars.iv.next167.prol = add nsw i64 %indvars.iv166.prol, 1
  %prol.iter198.next = add i32 %prol.iter198, 1
  %prol.iter198.cmp.not = icmp eq i32 %prol.iter198.next, %xtraiter196
  br i1 %prol.iter198.cmp.not, label %.prol.loopexit195, label %162, !llvm.loop !23

.prol.loopexit195:                                ; preds = %162
  br i1 %119, label %._crit_edge142, label %.lr.ph141.new

._crit_edge142:                                   ; preds = %.lr.ph141.new, %.prol.loopexit195
  %.lcssa = phi float [ %169, %.prol.loopexit195 ], [ %197, %.lr.ph141.new ]
  %indvars.iv.next172 = add nsw i64 %indvars.iv171, 1
  %lftr.wideiv174 = trunc i64 %indvars.iv.next172 to i32
  %exitcond175.not = icmp eq i32 %62, %lftr.wideiv174
  br i1 %exitcond175.not, label %.preheader.thread, label %.lr.ph141, !llvm.loop !24

.lr.ph141.new:                                    ; preds = %.prol.loopexit195, %.lr.ph141.new
  %indvars.iv166 = phi i64 [ %indvars.iv.next167.3, %.lr.ph141.new ], [ %indvars.iv.next167.prol, %.prol.loopexit195 ]
  %.1138 = phi float [ %197, %.lr.ph141.new ], [ %169, %.prol.loopexit195 ]
  %gep186 = getelementptr float, ptr %invariant.gep185, i64 %indvars.iv166
  %170 = load float, ptr %gep186, align 4, !tbaa !14
  %171 = trunc nsw i64 %indvars.iv166 to i32
  %172 = add i32 %.0104, %171
  %173 = zext i32 %172 to i64
  %174 = getelementptr inbounds float, ptr %161, i64 %173
  %175 = load float, ptr %174, align 4, !tbaa !14
  %176 = tail call float @llvm.fmuladd.f32(float %170, float %175, float %.1138)
  %indvars.iv.next167 = add nsw i64 %indvars.iv166, 1
  %gep186.1 = getelementptr float, ptr %invariant.gep185, i64 %indvars.iv.next167
  %177 = load float, ptr %gep186.1, align 4, !tbaa !14
  %178 = trunc nsw i64 %indvars.iv.next167 to i32
  %179 = add i32 %.0104, %178
  %180 = zext i32 %179 to i64
  %181 = getelementptr inbounds float, ptr %161, i64 %180
  %182 = load float, ptr %181, align 4, !tbaa !14
  %183 = tail call float @llvm.fmuladd.f32(float %177, float %182, float %176)
  %indvars.iv.next167.1 = add nsw i64 %indvars.iv166, 2
  %gep186.2 = getelementptr float, ptr %invariant.gep185, i64 %indvars.iv.next167.1
  %184 = load float, ptr %gep186.2, align 4, !tbaa !14
  %185 = trunc nsw i64 %indvars.iv.next167.1 to i32
  %186 = add i32 %.0104, %185
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds float, ptr %161, i64 %187
  %189 = load float, ptr %188, align 4, !tbaa !14
  %190 = tail call float @llvm.fmuladd.f32(float %184, float %189, float %183)
  %indvars.iv.next167.2 = add nsw i64 %indvars.iv166, 3
  %gep186.3 = getelementptr float, ptr %invariant.gep185, i64 %indvars.iv.next167.2
  %191 = load float, ptr %gep186.3, align 4, !tbaa !14
  %192 = trunc nsw i64 %indvars.iv.next167.2 to i32
  %193 = add i32 %.0104, %192
  %194 = zext i32 %193 to i64
  %195 = getelementptr inbounds float, ptr %161, i64 %194
  %196 = load float, ptr %195, align 4, !tbaa !14
  %197 = tail call float @llvm.fmuladd.f32(float %191, float %196, float %190)
  %indvars.iv.next167.3 = add nsw i64 %indvars.iv166, 4
  %lftr.wideiv169.3 = trunc i64 %indvars.iv.next167.3 to i32
  %exitcond170.not.3 = icmp eq i32 %60, %lftr.wideiv169.3
  br i1 %exitcond170.not.3, label %._crit_edge142, label %.lr.ph141.new, !llvm.loop !25

.preheader.thread:                                ; preds = %._crit_edge142, %.lr.ph135, %90, %.preheader
  %.0100.lcssa177 = phi float [ %.lcssa190, %.preheader ], [ 0.000000e+00, %90 ], [ 0.000000e+00, %.lr.ph135 ], [ %.lcssa190, %._crit_edge142 ]
  %.097.lcssa = phi float [ 0.000000e+00, %.preheader ], [ 0.000000e+00, %90 ], [ 0.000000e+00, %.lr.ph135 ], [ %.lcssa, %._crit_edge142 ]
  tail call void @_ZdaPv(ptr noundef nonnull %47) #11
  tail call void @_ZdaPv(ptr noundef nonnull %43) #11
  %198 = fdiv float %.097.lcssa, %.0100.lcssa177
  ret float %198
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4rintf(float noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #6

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #7

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { inlinehint 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 #7 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { noreturn nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin 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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.unroll.disable"}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = distinct !{!16, !12}
!17 = !{!18, !6, i64 16}
!18 = !{!"_ZTS12ImageContent", !19, i64 0, !19, i64 4, !19, i64 8, !19, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72}
!19 = !{!"int", !7, i64 0}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}


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