; LLVM IR from lesialin/ImageSignalProcessing_C :: src/isp_nlm.ll (Z7isp_nlmPhS_)

; 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.isp_config_t = type <{ i32, i32, i16, [6 x i8], %"class.std::__cxx11::basic_string", %struct.blc_cfg_t, i16, [6 x i8], %"class.std::__cxx11::basic_string", %struct.awb_gain_t, [12 x float], %"class.std::__cxx11::basic_string", float, [12 x float], %struct.nlm_cfg_t, i8, %struct.bnf_cfg_t, [15 x i16], %struct.eeh_cfg_t, %struct.fcs_cfg_t, %struct.hsc_cfg_t, %struct.bcc_cfg_t, [4 x i8] }>
%struct.blc_cfg_t = type { i16, i16, i16, i16, float, float }
%struct.awb_gain_t = type { float, float, float, float }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%struct.nlm_cfg_t = type { i8, i8, i8 }
%struct.bnf_cfg_t = type { [25 x i16], [4 x i16], [3 x i16] }
%struct.eeh_cfg_t = type { i16, i16, i16, i16, i16, i16 }
%struct.fcs_cfg_t = type { i8, i8 }
%struct.hsc_cfg_t = type { i8, float }
%struct.bcc_cfg_t = type { i8, float }

@g_isp_config = external global %struct.isp_config_t, align 8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z14integrate_grayPhttPj(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, ptr noundef) #0

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z7isp_nlmPhS_(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i16, align 2
  %6 = alloca i16, align 2
  %7 = alloca i16, align 2
  %8 = alloca i16, align 2
  %9 = alloca i16, align 2
  %10 = alloca i16, align 2
  %11 = alloca i16, align 2
  %12 = alloca i16, align 2
  %13 = alloca i16, align 2
  %14 = alloca i16, align 2
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca i16, align 2
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca float, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %5) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %6) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  %37 = load i8, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 14), align 4, !tbaa !9
  store i8 %37, ptr %23, align 1, !tbaa !25
  %38 = load i8, ptr getelementptr inbounds (%struct.nlm_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 14), i32 0, i32 1), align 1, !tbaa !26
  store i8 %38, ptr %24, align 1, !tbaa !25
  %39 = load i8, ptr getelementptr inbounds (%struct.nlm_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 14), i32 0, i32 2), align 2, !tbaa !27
  store i8 %39, ptr %25, align 1, !tbaa !25
  %40 = load i32, ptr @g_isp_config, align 8, !tbaa !28
  %41 = trunc i32 %40 to i16
  store i16 %41, ptr %6, align 2, !tbaa !29
  %42 = load i32, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 1), align 4, !tbaa !30
  %43 = trunc i32 %42 to i16
  store i16 %43, ptr %5, align 2, !tbaa !29
  %44 = load i8, ptr %23, align 1, !tbaa !25
  %45 = zext i8 %44 to i32
  %46 = load i8, ptr %24, align 1, !tbaa !25
  %47 = zext i8 %46 to i32
  %48 = sub nsw i32 %45, %47
  %49 = mul nsw i32 2, %48
  %50 = add nsw i32 %49, 1
  %51 = trunc i32 %50 to i8
  store i8 %51, ptr %18, align 1, !tbaa !25
  %52 = load i8, ptr %24, align 1, !tbaa !25
  %53 = zext i8 %52 to i32
  %54 = mul nsw i32 2, %53
  %55 = add nsw i32 %54, 1
  %56 = load i8, ptr %24, align 1, !tbaa !25
  %57 = zext i8 %56 to i32
  %58 = mul nsw i32 2, %57
  %59 = add nsw i32 %58, 1
  %60 = mul nsw i32 %55, %59
  %61 = load i8, ptr %25, align 1, !tbaa !25
  %62 = zext i8 %61 to i32
  %63 = mul nsw i32 %60, %62
  %64 = load i8, ptr %25, align 1, !tbaa !25
  %65 = zext i8 %64 to i32
  %66 = mul nsw i32 %63, %65
  %67 = sitofp i32 %66 to double
  %68 = fdiv double -1.000000e+00, %67
  %69 = fptrunc double %68 to float
  store float %69, ptr %22, align 4, !tbaa !31
  %70 = load i16, ptr %6, align 2, !tbaa !29
  %71 = zext i16 %70 to i32
  %72 = load i16, ptr %5, align 2, !tbaa !29
  %73 = zext i16 %72 to i32
  %74 = mul nsw i32 %71, %73
  %75 = sext i32 %74 to i64
  %76 = mul i64 %75, 4
  %77 = call noalias ptr @malloc(i64 noundef %76) #8
  store ptr %77, ptr %15, align 8, !tbaa !5
  %78 = load i8, ptr %18, align 1, !tbaa !25
  %79 = zext i8 %78 to i32
  %80 = load i8, ptr %18, align 1, !tbaa !25
  %81 = zext i8 %80 to i32
  %82 = mul nsw i32 %79, %81
  %83 = sext i32 %82 to i64
  %84 = mul i64 %83, 4
  %85 = call noalias ptr @malloc(i64 noundef %84) #8
  store ptr %85, ptr %19, align 8, !tbaa !5
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = load i16, ptr %6, align 2, !tbaa !29
  %88 = load i16, ptr %5, align 2, !tbaa !29
  %89 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_Z14integrate_grayPhttPj(ptr noundef %86, i16 noundef zeroext %87, i16 noundef zeroext %88, ptr noundef %89)
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %90 = load i8, ptr %23, align 1, !tbaa !25
  %91 = zext i8 %90 to i32
  store i32 %91, ptr %26, align 4, !tbaa !32
  br label %92

92:                                               ; preds = %442, %2
  %93 = load i32, ptr %26, align 4, !tbaa !32
  %94 = load i16, ptr %5, align 2, !tbaa !29
  %95 = zext i16 %94 to i32
  %96 = load i8, ptr %23, align 1, !tbaa !25
  %97 = zext i8 %96 to i32
  %98 = sub nsw i32 %95, %97
  %99 = icmp slt i32 %93, %98
  br i1 %99, label %101, label %100

100:                                              ; preds = %92
  store i32 2, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %445

101:                                              ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %102 = load i8, ptr %23, align 1, !tbaa !25
  %103 = zext i8 %102 to i32
  store i32 %103, ptr %28, align 4, !tbaa !32
  br label %104

104:                                              ; preds = %438, %101
  %105 = load i32, ptr %28, align 4, !tbaa !32
  %106 = load i16, ptr %6, align 2, !tbaa !29
  %107 = zext i16 %106 to i32
  %108 = load i8, ptr %23, align 1, !tbaa !25
  %109 = zext i8 %108 to i32
  %110 = sub nsw i32 %107, %109
  %111 = icmp slt i32 %105, %110
  br i1 %111, label %113, label %112

112:                                              ; preds = %104
  store i32 5, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %441

113:                                              ; preds = %104
  %114 = load i32, ptr %28, align 4, !tbaa !32
  %115 = load i8, ptr %24, align 1, !tbaa !25
  %116 = zext i8 %115 to i32
  %117 = sub nsw i32 %114, %116
  %118 = trunc i32 %117 to i16
  store i16 %118, ptr %7, align 2, !tbaa !29
  %119 = load i32, ptr %28, align 4, !tbaa !32
  %120 = load i8, ptr %24, align 1, !tbaa !25
  %121 = zext i8 %120 to i32
  %122 = add nsw i32 %119, %121
  %123 = trunc i32 %122 to i16
  store i16 %123, ptr %8, align 2, !tbaa !29
  %124 = load i32, ptr %26, align 4, !tbaa !32
  %125 = load i8, ptr %24, align 1, !tbaa !25
  %126 = zext i8 %125 to i32
  %127 = sub nsw i32 %124, %126
  %128 = trunc i32 %127 to i16
  store i16 %128, ptr %9, align 2, !tbaa !29
  %129 = load i32, ptr %26, align 4, !tbaa !32
  %130 = load i8, ptr %24, align 1, !tbaa !25
  %131 = zext i8 %130 to i32
  %132 = add nsw i32 %129, %131
  %133 = trunc i32 %132 to i16
  store i16 %133, ptr %10, align 2, !tbaa !29
  %134 = load ptr, ptr %15, align 8, !tbaa !5
  %135 = load i16, ptr %9, align 2, !tbaa !29
  %136 = zext i16 %135 to i32
  %137 = load i16, ptr %6, align 2, !tbaa !29
  %138 = zext i16 %137 to i32
  %139 = mul nsw i32 %136, %138
  %140 = load i16, ptr %7, align 2, !tbaa !29
  %141 = zext i16 %140 to i32
  %142 = add nsw i32 %139, %141
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds i32, ptr %134, i64 %143
  %145 = load i32, ptr %144, align 4, !tbaa !32
  %146 = load ptr, ptr %15, align 8, !tbaa !5
  %147 = load i16, ptr %10, align 2, !tbaa !29
  %148 = zext i16 %147 to i32
  %149 = load i16, ptr %6, align 2, !tbaa !29
  %150 = zext i16 %149 to i32
  %151 = mul nsw i32 %148, %150
  %152 = load i16, ptr %8, align 2, !tbaa !29
  %153 = zext i16 %152 to i32
  %154 = add nsw i32 %151, %153
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds i32, ptr %146, i64 %155
  %157 = load i32, ptr %156, align 4, !tbaa !32
  %158 = add i32 %145, %157
  %159 = load ptr, ptr %15, align 8, !tbaa !5
  %160 = load i16, ptr %9, align 2, !tbaa !29
  %161 = zext i16 %160 to i32
  %162 = load i16, ptr %6, align 2, !tbaa !29
  %163 = zext i16 %162 to i32
  %164 = mul nsw i32 %161, %163
  %165 = load i16, ptr %8, align 2, !tbaa !29
  %166 = zext i16 %165 to i32
  %167 = add nsw i32 %164, %166
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds i32, ptr %159, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !32
  %171 = sub i32 %158, %170
  %172 = load ptr, ptr %15, align 8, !tbaa !5
  %173 = load i16, ptr %10, align 2, !tbaa !29
  %174 = zext i16 %173 to i32
  %175 = load i16, ptr %6, align 2, !tbaa !29
  %176 = zext i16 %175 to i32
  %177 = mul nsw i32 %174, %176
  %178 = load i16, ptr %7, align 2, !tbaa !29
  %179 = zext i16 %178 to i32
  %180 = add nsw i32 %177, %179
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %172, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !32
  %184 = sub i32 %171, %183
  %185 = zext i32 %184 to i64
  store i64 %185, ptr %16, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  store float 0.000000e+00, ptr %29, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  store float 0.000000e+00, ptr %30, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #7
  store i16 0, ptr %31, align 2, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #7
  %186 = load i8, ptr %23, align 1, !tbaa !25
  %187 = zext i8 %186 to i32
  %188 = sub nsw i32 0, %187
  %189 = load i8, ptr %24, align 1, !tbaa !25
  %190 = zext i8 %189 to i32
  %191 = add nsw i32 %188, %190
  store i32 %191, ptr %32, align 4, !tbaa !32
  br label %192

192:                                              ; preds = %331, %113
  %193 = load i32, ptr %32, align 4, !tbaa !32
  %194 = load i8, ptr %23, align 1, !tbaa !25
  %195 = zext i8 %194 to i32
  %196 = load i8, ptr %24, align 1, !tbaa !25
  %197 = zext i8 %196 to i32
  %198 = sub nsw i32 %195, %197
  %199 = icmp slt i32 %193, %198
  br i1 %199, label %201, label %200

200:                                              ; preds = %192
  store i32 8, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #7
  br label %334

201:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  %202 = load i8, ptr %23, align 1, !tbaa !25
  %203 = zext i8 %202 to i32
  %204 = sub nsw i32 0, %203
  %205 = load i8, ptr %24, align 1, !tbaa !25
  %206 = zext i8 %205 to i32
  %207 = add nsw i32 %204, %206
  store i32 %207, ptr %33, align 4, !tbaa !32
  br label %208

208:                                              ; preds = %327, %201
  %209 = load i32, ptr %33, align 4, !tbaa !32
  %210 = load i8, ptr %23, align 1, !tbaa !25
  %211 = zext i8 %210 to i32
  %212 = load i8, ptr %24, align 1, !tbaa !25
  %213 = zext i8 %212 to i32
  %214 = sub nsw i32 %211, %213
  %215 = icmp slt i32 %209, %214
  br i1 %215, label %217, label %216

216:                                              ; preds = %208
  store i32 11, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %330

217:                                              ; preds = %208
  %218 = load i32, ptr %28, align 4, !tbaa !32
  %219 = load i32, ptr %33, align 4, !tbaa !32
  %220 = add nsw i32 %218, %219
  %221 = load i8, ptr %24, align 1, !tbaa !25
  %222 = zext i8 %221 to i32
  %223 = sub nsw i32 %220, %222
  %224 = trunc i32 %223 to i16
  store i16 %224, ptr %11, align 2, !tbaa !29
  %225 = load i32, ptr %28, align 4, !tbaa !32
  %226 = load i32, ptr %33, align 4, !tbaa !32
  %227 = add nsw i32 %225, %226
  %228 = load i8, ptr %24, align 1, !tbaa !25
  %229 = zext i8 %228 to i32
  %230 = add nsw i32 %227, %229
  %231 = trunc i32 %230 to i16
  store i16 %231, ptr %12, align 2, !tbaa !29
  %232 = load i32, ptr %26, align 4, !tbaa !32
  %233 = load i32, ptr %32, align 4, !tbaa !32
  %234 = add nsw i32 %232, %233
  %235 = load i8, ptr %24, align 1, !tbaa !25
  %236 = zext i8 %235 to i32
  %237 = sub nsw i32 %234, %236
  %238 = trunc i32 %237 to i16
  store i16 %238, ptr %13, align 2, !tbaa !29
  %239 = load i32, ptr %26, align 4, !tbaa !32
  %240 = load i32, ptr %32, align 4, !tbaa !32
  %241 = add nsw i32 %239, %240
  %242 = load i8, ptr %24, align 1, !tbaa !25
  %243 = zext i8 %242 to i32
  %244 = add nsw i32 %241, %243
  %245 = trunc i32 %244 to i16
  store i16 %245, ptr %14, align 2, !tbaa !29
  %246 = load ptr, ptr %15, align 8, !tbaa !5
  %247 = load i16, ptr %13, align 2, !tbaa !29
  %248 = zext i16 %247 to i32
  %249 = load i16, ptr %6, align 2, !tbaa !29
  %250 = zext i16 %249 to i32
  %251 = mul nsw i32 %248, %250
  %252 = load i16, ptr %11, align 2, !tbaa !29
  %253 = zext i16 %252 to i32
  %254 = add nsw i32 %251, %253
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %246, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !32
  %258 = load ptr, ptr %15, align 8, !tbaa !5
  %259 = load i16, ptr %14, align 2, !tbaa !29
  %260 = zext i16 %259 to i32
  %261 = load i16, ptr %6, align 2, !tbaa !29
  %262 = zext i16 %261 to i32
  %263 = mul nsw i32 %260, %262
  %264 = load i16, ptr %12, align 2, !tbaa !29
  %265 = zext i16 %264 to i32
  %266 = add nsw i32 %263, %265
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds i32, ptr %258, i64 %267
  %269 = load i32, ptr %268, align 4, !tbaa !32
  %270 = add i32 %257, %269
  %271 = load ptr, ptr %15, align 8, !tbaa !5
  %272 = load i16, ptr %13, align 2, !tbaa !29
  %273 = zext i16 %272 to i32
  %274 = load i16, ptr %6, align 2, !tbaa !29
  %275 = zext i16 %274 to i32
  %276 = mul nsw i32 %273, %275
  %277 = load i16, ptr %12, align 2, !tbaa !29
  %278 = zext i16 %277 to i32
  %279 = add nsw i32 %276, %278
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds i32, ptr %271, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !32
  %283 = sub i32 %270, %282
  %284 = load ptr, ptr %15, align 8, !tbaa !5
  %285 = load i16, ptr %14, align 2, !tbaa !29
  %286 = zext i16 %285 to i32
  %287 = load i16, ptr %6, align 2, !tbaa !29
  %288 = zext i16 %287 to i32
  %289 = mul nsw i32 %286, %288
  %290 = load i16, ptr %11, align 2, !tbaa !29
  %291 = zext i16 %290 to i32
  %292 = add nsw i32 %289, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i32, ptr %284, i64 %293
  %295 = load i32, ptr %294, align 4, !tbaa !32
  %296 = sub i32 %283, %295
  %297 = zext i32 %296 to i64
  store i64 %297, ptr %17, align 8, !tbaa !33
  %298 = load float, ptr %22, align 4, !tbaa !31
  %299 = load i64, ptr %16, align 8, !tbaa !33
  %300 = load i64, ptr %17, align 8, !tbaa !33
  %301 = sub nsw i64 %299, %300
  %302 = sitofp i64 %301 to float
  %303 = fmul float %298, %302
  %304 = load i64, ptr %16, align 8, !tbaa !33
  %305 = load i64, ptr %17, align 8, !tbaa !33
  %306 = sub nsw i64 %304, %305
  %307 = sitofp i64 %306 to float
  %308 = fmul float %303, %307
  %309 = call noundef double @_ZSt3powIdfEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 2.718000e+00, float noundef %308)
  %310 = fptrunc double %309 to float
  store float %310, ptr %21, align 4, !tbaa !31
  %311 = load float, ptr %21, align 4, !tbaa !31
  %312 = load float, ptr %29, align 4, !tbaa !31
  %313 = fcmp ogt float %311, %312
  br i1 %313, label %314, label %316

314:                                              ; preds = %217
  %315 = load float, ptr %21, align 4, !tbaa !31
  store float %315, ptr %29, align 4, !tbaa !31
  br label %316

316:                                              ; preds = %314, %217
  %317 = load float, ptr %21, align 4, !tbaa !31
  %318 = load float, ptr %30, align 4, !tbaa !31
  %319 = fadd float %318, %317
  store float %319, ptr %30, align 4, !tbaa !31
  %320 = load float, ptr %21, align 4, !tbaa !31
  %321 = load ptr, ptr %19, align 8, !tbaa !5
  %322 = load i16, ptr %31, align 2, !tbaa !29
  %323 = zext i16 %322 to i64
  %324 = getelementptr inbounds float, ptr %321, i64 %323
  store float %320, ptr %324, align 4, !tbaa !31
  %325 = load i16, ptr %31, align 2, !tbaa !29
  %326 = add i16 %325, 1
  store i16 %326, ptr %31, align 2, !tbaa !29
  br label %327

327:                                              ; preds = %316
  %328 = load i32, ptr %33, align 4, !tbaa !32
  %329 = add nsw i32 %328, 1
  store i32 %329, ptr %33, align 4, !tbaa !32
  br label %208, !llvm.loop !34

330:                                              ; preds = %216
  br label %331

331:                                              ; preds = %330
  %332 = load i32, ptr %32, align 4, !tbaa !32
  %333 = add nsw i32 %332, 1
  store i32 %333, ptr %32, align 4, !tbaa !32
  br label %192, !llvm.loop !36

334:                                              ; preds = %200
  %335 = load float, ptr %29, align 4, !tbaa !31
  %336 = load ptr, ptr %19, align 8, !tbaa !5
  %337 = load i8, ptr %23, align 1, !tbaa !25
  %338 = zext i8 %337 to i32
  %339 = load i8, ptr %24, align 1, !tbaa !25
  %340 = zext i8 %339 to i32
  %341 = sub nsw i32 %338, %340
  %342 = add nsw i32 %341, 1
  %343 = load i8, ptr %18, align 1, !tbaa !25
  %344 = zext i8 %343 to i32
  %345 = mul nsw i32 %342, %344
  %346 = load i8, ptr %23, align 1, !tbaa !25
  %347 = zext i8 %346 to i32
  %348 = add nsw i32 %345, %347
  %349 = load i8, ptr %24, align 1, !tbaa !25
  %350 = zext i8 %349 to i32
  %351 = sub nsw i32 %348, %350
  %352 = add nsw i32 %351, 1
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds float, ptr %336, i64 %353
  store float %335, ptr %354, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  store float 0.000000e+00, ptr %34, align 4, !tbaa !31
  store i16 0, ptr %31, align 2, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #7
  %355 = load i8, ptr %23, align 1, !tbaa !25
  %356 = zext i8 %355 to i32
  %357 = sub nsw i32 0, %356
  %358 = load i8, ptr %24, align 1, !tbaa !25
  %359 = zext i8 %358 to i32
  %360 = add nsw i32 %357, %359
  store i32 %360, ptr %35, align 4, !tbaa !32
  br label %361

361:                                              ; preds = %416, %334
  %362 = load i32, ptr %35, align 4, !tbaa !32
  %363 = load i8, ptr %23, align 1, !tbaa !25
  %364 = zext i8 %363 to i32
  %365 = load i8, ptr %24, align 1, !tbaa !25
  %366 = zext i8 %365 to i32
  %367 = sub nsw i32 %364, %366
  %368 = icmp slt i32 %362, %367
  br i1 %368, label %370, label %369

369:                                              ; preds = %361
  store i32 14, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #7
  br label %419

370:                                              ; preds = %361
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #7
  %371 = load i8, ptr %23, align 1, !tbaa !25
  %372 = zext i8 %371 to i32
  %373 = sub nsw i32 0, %372
  %374 = load i8, ptr %24, align 1, !tbaa !25
  %375 = zext i8 %374 to i32
  %376 = add nsw i32 %373, %375
  store i32 %376, ptr %36, align 4, !tbaa !32
  br label %377

377:                                              ; preds = %412, %370
  %378 = load i32, ptr %36, align 4, !tbaa !32
  %379 = load i8, ptr %23, align 1, !tbaa !25
  %380 = zext i8 %379 to i32
  %381 = load i8, ptr %24, align 1, !tbaa !25
  %382 = zext i8 %381 to i32
  %383 = sub nsw i32 %380, %382
  %384 = icmp slt i32 %378, %383
  br i1 %384, label %386, label %385

385:                                              ; preds = %377
  store i32 17, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #7
  br label %415

386:                                              ; preds = %377
  %387 = load ptr, ptr %19, align 8, !tbaa !5
  %388 = load i16, ptr %31, align 2, !tbaa !29
  %389 = zext i16 %388 to i64
  %390 = getelementptr inbounds float, ptr %387, i64 %389
  %391 = load float, ptr %390, align 4, !tbaa !31
  %392 = load ptr, ptr %3, align 8, !tbaa !5
  %393 = load i32, ptr %26, align 4, !tbaa !32
  %394 = load i32, ptr %35, align 4, !tbaa !32
  %395 = add nsw i32 %393, %394
  %396 = load i16, ptr %6, align 2, !tbaa !29
  %397 = zext i16 %396 to i32
  %398 = mul nsw i32 %395, %397
  %399 = load i32, ptr %28, align 4, !tbaa !32
  %400 = load i32, ptr %36, align 4, !tbaa !32
  %401 = add nsw i32 %399, %400
  %402 = add nsw i32 %398, %401
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds i8, ptr %392, i64 %403
  %405 = load i8, ptr %404, align 1, !tbaa !25
  %406 = zext i8 %405 to i32
  %407 = sitofp i32 %406 to float
  %408 = load float, ptr %34, align 4, !tbaa !31
  %409 = call float @llvm.fmuladd.f32(float %391, float %407, float %408)
  store float %409, ptr %34, align 4, !tbaa !31
  %410 = load i16, ptr %31, align 2, !tbaa !29
  %411 = add i16 %410, 1
  store i16 %411, ptr %31, align 2, !tbaa !29
  br label %412

412:                                              ; preds = %386
  %413 = load i32, ptr %36, align 4, !tbaa !32
  %414 = add nsw i32 %413, 1
  store i32 %414, ptr %36, align 4, !tbaa !32
  br label %377, !llvm.loop !37

415:                                              ; preds = %385
  br label %416

416:                                              ; preds = %415
  %417 = load i32, ptr %35, align 4, !tbaa !32
  %418 = add nsw i32 %417, 1
  store i32 %418, ptr %35, align 4, !tbaa !32
  br label %361, !llvm.loop !38

419:                                              ; preds = %369
  %420 = load float, ptr %30, align 4, !tbaa !31
  %421 = load float, ptr %34, align 4, !tbaa !31
  %422 = fdiv float %421, %420
  store float %422, ptr %34, align 4, !tbaa !31
  %423 = load float, ptr %34, align 4, !tbaa !31
  %424 = fcmp ogt float %423, 2.550000e+02
  br i1 %424, label %425, label %426

425:                                              ; preds = %419
  store float 2.550000e+02, ptr %34, align 4, !tbaa !31
  br label %426

426:                                              ; preds = %425, %419
  %427 = load float, ptr %34, align 4, !tbaa !31
  %428 = fptoui float %427 to i8
  %429 = load ptr, ptr %4, align 8, !tbaa !5
  %430 = load i32, ptr %26, align 4, !tbaa !32
  %431 = load i16, ptr %6, align 2, !tbaa !29
  %432 = zext i16 %431 to i32
  %433 = mul nsw i32 %430, %432
  %434 = load i32, ptr %28, align 4, !tbaa !32
  %435 = add nsw i32 %433, %434
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds i8, ptr %429, i64 %436
  store i8 %428, ptr %437, align 1, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %438

438:                                              ; preds = %426
  %439 = load i32, ptr %28, align 4, !tbaa !32
  %440 = add nsw i32 %439, 1
  store i32 %440, ptr %28, align 4, !tbaa !32
  br label %104, !llvm.loop !39

441:                                              ; preds = %112
  br label %442

442:                                              ; preds = %441
  %443 = load i32, ptr %26, align 4, !tbaa !32
  %444 = add nsw i32 %443, 1
  store i32 %444, ptr %26, align 4, !tbaa !32
  br label %92, !llvm.loop !40

445:                                              ; preds = %100
  %446 = load ptr, ptr %15, align 8, !tbaa !5
  call void @free(ptr noundef %446) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %5) #7
  ret void
}

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3powIdfEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef, float noundef) #4

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

; Function Attrs: nounwind
declare void @free(ptr noundef) #6

attributes #0 = { 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 willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { nounwind 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 = { 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }

!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, !7, i64 252}
!10 = !{!"_ZTS12isp_config_t", !11, i64 0, !11, i64 4, !12, i64 8, !13, i64 16, !16, i64 48, !12, i64 64, !13, i64 72, !18, i64 104, !7, i64 120, !13, i64 168, !17, i64 200, !7, i64 204, !19, i64 252, !20, i64 256, !7, i64 320, !21, i64 350, !22, i64 362, !23, i64 364, !24, i64 372}
!11 = !{!"int", !7, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !7, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTS9blc_cfg_t", !12, i64 0, !12, i64 2, !12, i64 4, !12, i64 6, !17, i64 8, !17, i64 12}
!17 = !{!"float", !7, i64 0}
!18 = !{!"_ZTS10awb_gain_t", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12}
!19 = !{!"_ZTS9nlm_cfg_t", !7, i64 0, !7, i64 1, !7, i64 2}
!20 = !{!"_ZTS9bnf_cfg_t", !7, i64 0, !7, i64 50, !7, i64 58}
!21 = !{!"_ZTS9eeh_cfg_t", !12, i64 0, !12, i64 2, !12, i64 4, !12, i64 6, !12, i64 8, !12, i64 10}
!22 = !{!"_ZTS9fcs_cfg_t", !7, i64 0, !7, i64 1}
!23 = !{!"_ZTS9hsc_cfg_t", !7, i64 0, !17, i64 4}
!24 = !{!"_ZTS9bcc_cfg_t", !7, i64 0, !17, i64 4}
!25 = !{!7, !7, i64 0}
!26 = !{!10, !7, i64 253}
!27 = !{!10, !7, i64 254}
!28 = !{!10, !11, i64 0}
!29 = !{!12, !12, i64 0}
!30 = !{!10, !11, i64 4}
!31 = !{!17, !17, i64 0}
!32 = !{!11, !11, i64 0}
!33 = !{!15, !15, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !35}
!37 = distinct !{!37, !35}
!38 = distinct !{!38, !35}
!39 = distinct !{!39, !35}
!40 = distinct !{!40, !35}


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

%struct.isp_config_t = type <{ i32, i32, i16, [6 x i8], %"class.std::__cxx11::basic_string", %struct.blc_cfg_t, i16, [6 x i8], %"class.std::__cxx11::basic_string", %struct.awb_gain_t, [12 x float], %"class.std::__cxx11::basic_string", float, [12 x float], %struct.nlm_cfg_t, i8, %struct.bnf_cfg_t, [15 x i16], %struct.eeh_cfg_t, %struct.fcs_cfg_t, %struct.hsc_cfg_t, %struct.bcc_cfg_t, [4 x i8] }>
%struct.blc_cfg_t = type { i16, i16, i16, i16, float, float }
%struct.awb_gain_t = type { float, float, float, float }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%struct.nlm_cfg_t = type { i8, i8, i8 }
%struct.bnf_cfg_t = type { [25 x i16], [4 x i16], [3 x i16] }
%struct.eeh_cfg_t = type { i16, i16, i16, i16, i16, i16 }
%struct.fcs_cfg_t = type { i8, i8 }
%struct.hsc_cfg_t = type { i8, float }
%struct.bcc_cfg_t = type { i8, float }

@g_isp_config = external local_unnamed_addr global %struct.isp_config_t, align 8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_Z14integrate_grayPhttPj(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_Z7isp_nlmPhS_(ptr noundef %0, ptr nocapture noundef writeonly %1) local_unnamed_addr #0 {
  %3 = load i8, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 252), align 4, !tbaa !5
  %4 = load i8, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 253), align 1, !tbaa !24
  %5 = load i8, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 254), align 2, !tbaa !25
  %6 = load i32, ptr @g_isp_config, align 8, !tbaa !26
  %7 = trunc i32 %6 to i16
  %8 = load i32, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 4), align 4, !tbaa !27
  %9 = trunc i32 %8 to i16
  %10 = zext i8 %3 to i32
  %11 = zext i8 %4 to i32
  %12 = sub nsw i32 %10, %11
  %13 = shl nsw i32 %12, 1
  %14 = shl nuw nsw i32 %11, 1
  %15 = or disjoint i32 %14, 1
  %16 = zext i8 %5 to i32
  %17 = mul nuw nsw i32 %15, %16
  %18 = mul i32 %17, %17
  %19 = uitofp nneg i32 %18 to double
  %20 = fdiv double -1.000000e+00, %19
  %21 = fptrunc double %20 to float
  %22 = and i32 %6, 65535
  %23 = and i32 %8, 65535
  %24 = mul nuw nsw i32 %23, %22
  %25 = zext nneg i32 %24 to i64
  %26 = shl nuw nsw i64 %25, 2
  %27 = tail call noalias ptr @malloc(i64 noundef %26) #5
  %28 = and i32 %13, 254
  %29 = or disjoint i32 %28, 1
  %30 = shl nuw nsw i32 %29, 2
  %31 = mul nuw nsw i32 %30, %29
  %32 = zext nneg i32 %31 to i64
  %33 = tail call noalias ptr @malloc(i64 noundef %32) #5
  tail call void @_Z14integrate_grayPhttPj(ptr noundef %0, i16 noundef zeroext %7, i16 noundef zeroext %9, ptr noundef %27)
  %34 = sub nsw i32 %23, %10
  %35 = icmp sgt i32 %34, %10
  br i1 %35, label %.preheader164.lr.ph, label %._crit_edge193

.preheader164.lr.ph:                              ; preds = %2
  %36 = sub nsw i32 %22, %10
  %invariant.gep = getelementptr i8, ptr %33, i64 4
  %37 = icmp sgt i32 %36, %10
  %38 = sub nsw i32 %11, %10
  %39 = icmp slt i32 %38, %12
  %40 = add nsw i32 %12, 1
  %41 = mul nsw i32 %29, %40
  %42 = add nsw i32 %12, %41
  %43 = sext i32 %42 to i64
  %gep = getelementptr float, ptr %invariant.gep, i64 %43
  br i1 %37, label %.preheader164.us.preheader, label %._crit_edge193

.preheader164.us.preheader:                       ; preds = %.preheader164.lr.ph
  %44 = sext i32 %38 to i64
  %45 = zext i8 %3 to i64
  %46 = zext i8 %4 to i64
  %47 = zext nneg i32 %22 to i64
  %wide.trip.count210 = zext nneg i32 %34 to i64
  %wide.trip.count205 = zext i32 %36 to i64
  %wide.trip.count = sext i32 %12 to i64
  br label %.preheader164.us

.preheader164.us:                                 ; preds = %.preheader164.us.preheader, %._crit_edge.us194
  %indvars.iv207 = phi i64 [ %45, %.preheader164.us.preheader ], [ %indvars.iv.next208, %._crit_edge.us194 ]
  %48 = sub nsw i64 %indvars.iv207, %46
  %49 = add nuw nsw i64 %indvars.iv207, %46
  %50 = trunc nsw i64 %48 to i32
  %51 = and i32 %50, 65535
  %52 = mul nuw nsw i32 %51, %22
  %53 = trunc nuw nsw i64 %49 to i32
  %54 = and i32 %53, 65535
  %55 = mul nuw nsw i32 %54, %22
  %56 = mul nuw nsw i64 %indvars.iv207, %47
  %57 = trunc nuw nsw i64 %indvars.iv207 to i32
  %58 = trunc nuw nsw i64 %indvars.iv207 to i32
  %invariant.gep218 = getelementptr inbounds i8, ptr %1, i64 %56
  br label %59

59:                                               ; preds = %.preheader164.us, %._crit_edge186.split.us.us
  %indvars.iv202 = phi i64 [ %45, %.preheader164.us ], [ %indvars.iv.next203, %._crit_edge186.split.us.us ]
  %60 = sub nsw i64 %indvars.iv202, %46
  %61 = add nuw nsw i64 %indvars.iv202, %46
  %62 = trunc nsw i64 %60 to i32
  %63 = and i32 %62, 65535
  %64 = add nuw nsw i32 %63, %52
  %65 = zext nneg i32 %64 to i64
  %66 = getelementptr inbounds i32, ptr %27, i64 %65
  %67 = load i32, ptr %66, align 4, !tbaa !28
  %68 = trunc nuw nsw i64 %61 to i32
  %69 = and i32 %68, 65535
  %70 = add nuw nsw i32 %69, %55
  %71 = zext nneg i32 %70 to i64
  %72 = getelementptr inbounds i32, ptr %27, i64 %71
  %73 = load i32, ptr %72, align 4, !tbaa !28
  %74 = add nuw nsw i32 %69, %52
  %75 = zext nneg i32 %74 to i64
  %76 = getelementptr inbounds i32, ptr %27, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !28
  %78 = add nuw nsw i32 %63, %55
  %79 = zext nneg i32 %78 to i64
  %80 = getelementptr inbounds i32, ptr %27, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !28
  %.neg158.us = add i32 %73, %67
  %82 = add i32 %77, %81
  %83 = sub i32 %.neg158.us, %82
  %84 = zext i32 %83 to i64
  br i1 %39, label %.preheader163.us.us.preheader, label %._crit_edge175.split.us.us.thread

._crit_edge175.split.us.us.thread:                ; preds = %59
  store float 0.000000e+00, ptr %gep, align 4, !tbaa !29
  br label %._crit_edge186.split.us.us

.preheader163.us.us.preheader:                    ; preds = %59
  %85 = trunc nuw nsw i64 %indvars.iv202 to i32
  br label %.preheader163.us.us

._crit_edge175.split.us.us:                       ; preds = %._crit_edge.us.us
  store float %.2150.us.us, ptr %gep, align 4, !tbaa !29
  br i1 %39, label %.preheader.us.us.preheader, label %._crit_edge186.split.us.us

.preheader.us.us.preheader:                       ; preds = %._crit_edge175.split.us.us
  %86 = trunc nuw nsw i64 %indvars.iv202 to i32
  br label %.preheader.us.us

._crit_edge186.split.us.us:                       ; preds = %._crit_edge.us188.us, %._crit_edge175.split.us.us.thread, %._crit_edge175.split.us.us
  %.0146.lcssa.us214 = phi float [ %129, %._crit_edge175.split.us.us ], [ 0.000000e+00, %._crit_edge175.split.us.us.thread ], [ %129, %._crit_edge.us188.us ]
  %.0140.lcssa.us = phi float [ 0.000000e+00, %._crit_edge175.split.us.us ], [ 0.000000e+00, %._crit_edge175.split.us.us.thread ], [ %160, %._crit_edge.us188.us ]
  %87 = fdiv float %.0140.lcssa.us, %.0146.lcssa.us214
  %88 = fcmp ogt float %87, 2.550000e+02
  %.2.us = select i1 %88, float 2.550000e+02, float %87
  %89 = fptoui float %.2.us to i8
  %gep219 = getelementptr inbounds i8, ptr %invariant.gep218, i64 %indvars.iv202
  store i8 %89, ptr %gep219, align 1, !tbaa !30
  %indvars.iv.next203 = add nuw nsw i64 %indvars.iv202, 1
  %exitcond206.not = icmp eq i64 %indvars.iv.next203, %wide.trip.count205
  br i1 %exitcond206.not, label %._crit_edge.us194, label %59, !llvm.loop !31

.preheader163.us.us:                              ; preds = %.preheader163.us.us.preheader, %._crit_edge.us.us
  %.0142174.us.us = phi i32 [ %134, %._crit_edge.us.us ], [ %38, %.preheader163.us.us.preheader ]
  %.0143173.us.us = phi i16 [ %132, %._crit_edge.us.us ], [ 0, %.preheader163.us.us.preheader ]
  %.0146172.us.us = phi float [ %129, %._crit_edge.us.us ], [ 0.000000e+00, %.preheader163.us.us.preheader ]
  %.0148171.us.us = phi float [ %.2150.us.us, %._crit_edge.us.us ], [ 0.000000e+00, %.preheader163.us.us.preheader ]
  %90 = add nsw i32 %.0142174.us.us, %57
  %91 = sub nuw nsw i32 %90, %11
  %92 = add nuw nsw i32 %90, %11
  %93 = and i32 %91, 65535
  %94 = mul nuw nsw i32 %93, %22
  %95 = and i32 %92, 65535
  %96 = mul nuw nsw i32 %95, %22
  br label %97

97:                                               ; preds = %97, %.preheader163.us.us
  %.0141168.us.us = phi i32 [ %38, %.preheader163.us.us ], [ %133, %97 ]
  %.1144167.us.us = phi i16 [ %.0143173.us.us, %.preheader163.us.us ], [ %132, %97 ]
  %.1147166.us.us = phi float [ %.0146172.us.us, %.preheader163.us.us ], [ %129, %97 ]
  %.1149165.us.us = phi float [ %.0148171.us.us, %.preheader163.us.us ], [ %.2150.us.us, %97 ]
  %98 = add nsw i32 %.0141168.us.us, %85
  %99 = sub nuw nsw i32 %98, %11
  %100 = add nuw nsw i32 %98, %11
  %101 = and i32 %99, 65535
  %102 = add nuw nsw i32 %101, %94
  %103 = zext nneg i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %27, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !28
  %106 = and i32 %100, 65535
  %107 = add nuw nsw i32 %106, %96
  %108 = zext nneg i32 %107 to i64
  %109 = getelementptr inbounds i32, ptr %27, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !28
  %111 = add nuw nsw i32 %106, %94
  %112 = zext nneg i32 %111 to i64
  %113 = getelementptr inbounds i32, ptr %27, i64 %112
  %114 = load i32, ptr %113, align 4, !tbaa !28
  %115 = add nuw nsw i32 %101, %96
  %116 = zext nneg i32 %115 to i64
  %117 = getelementptr inbounds i32, ptr %27, i64 %116
  %118 = load i32, ptr %117, align 4, !tbaa !28
  %.neg162.us.us = add i32 %110, %105
  %119 = add i32 %114, %118
  %120 = sub i32 %.neg162.us.us, %119
  %121 = zext i32 %120 to i64
  %122 = sub nsw i64 %84, %121
  %123 = sitofp i64 %122 to float
  %124 = fmul float %21, %123
  %125 = fmul float %124, %123
  %126 = tail call noundef double @_ZSt3powIdfEN9__gnu_cxx9__promoteIDTplcvNS1_IT_Xsr3std12__is_integerIS2_EE7__valueEE6__typeELi0EcvNS1_IT0_Xsr3std12__is_integerIS5_EE7__valueEE6__typeELi0EEXsr3std12__is_integerIS8_EE7__valueEE6__typeES2_S5_(double noundef 2.718000e+00, float noundef %125)
  %127 = fptrunc double %126 to float
  %128 = fcmp olt float %.1149165.us.us, %127
  %.2150.us.us = select i1 %128, float %127, float %.1149165.us.us
  %129 = fadd float %.1147166.us.us, %127
  %130 = zext i16 %.1144167.us.us to i64
  %131 = getelementptr inbounds float, ptr %33, i64 %130
  store float %127, ptr %131, align 4, !tbaa !29
  %132 = add i16 %.1144167.us.us, 1
  %133 = add nsw i32 %.0141168.us.us, 1
  %exitcond.not = icmp eq i32 %133, %12
  br i1 %exitcond.not, label %._crit_edge.us.us, label %97, !llvm.loop !33

._crit_edge.us.us:                                ; preds = %97
  %134 = add nsw i32 %.0142174.us.us, 1
  %exitcond199.not = icmp eq i32 %134, %12
  br i1 %exitcond199.not, label %._crit_edge175.split.us.us, label %.preheader163.us.us, !llvm.loop !34

.preheader.us.us:                                 ; preds = %.preheader.us.us.preheader, %._crit_edge.us188.us
  %.0139185.us.us = phi i32 [ %162, %._crit_edge.us188.us ], [ %38, %.preheader.us.us.preheader ]
  %.0140184.us.us = phi float [ %160, %._crit_edge.us188.us ], [ 0.000000e+00, %.preheader.us.us.preheader ]
  %.2145183.us.us = phi i16 [ %161, %._crit_edge.us188.us ], [ 0, %.preheader.us.us.preheader ]
  %135 = add nsw i32 %.0139185.us.us, %58
  %136 = mul nsw i32 %135, %22
  %137 = add i32 %136, %86
  br label %138

138:                                              ; preds = %138, %.preheader.us.us
  %indvars.iv = phi i64 [ %44, %.preheader.us.us ], [ %indvars.iv.next.1, %138 ]
  %.1180.us.us = phi float [ %.0140184.us.us, %.preheader.us.us ], [ %160, %138 ]
  %.3179.us.us = phi i16 [ %.2145183.us.us, %.preheader.us.us ], [ %161, %138 ]
  %139 = zext i16 %.3179.us.us to i64
  %140 = getelementptr inbounds float, ptr %33, i64 %139
  %141 = load float, ptr %140, align 4, !tbaa !29
  %142 = trunc nsw i64 %indvars.iv to i32
  %143 = add i32 %137, %142
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds i8, ptr %0, i64 %144
  %146 = load i8, ptr %145, align 1, !tbaa !30
  %147 = uitofp i8 %146 to float
  %148 = tail call float @llvm.fmuladd.f32(float %141, float %147, float %.1180.us.us)
  %149 = add i16 %.3179.us.us, 1
  %150 = zext i16 %149 to i64
  %151 = getelementptr inbounds float, ptr %33, i64 %150
  %152 = load float, ptr %151, align 4, !tbaa !29
  %153 = trunc i64 %indvars.iv to i32
  %154 = add i32 %153, 1
  %155 = add i32 %137, %154
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds i8, ptr %0, i64 %156
  %158 = load i8, ptr %157, align 1, !tbaa !30
  %159 = uitofp i8 %158 to float
  %160 = tail call float @llvm.fmuladd.f32(float %152, float %159, float %148)
  %161 = add i16 %.3179.us.us, 2
  %indvars.iv.next.1 = add nsw i64 %indvars.iv, 2
  %exitcond200.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond200.not.1, label %._crit_edge.us188.us, label %138, !llvm.loop !35

._crit_edge.us188.us:                             ; preds = %138
  %162 = add nsw i32 %.0139185.us.us, 1
  %exitcond201.not = icmp eq i32 %162, %12
  br i1 %exitcond201.not, label %._crit_edge186.split.us.us, label %.preheader.us.us, !llvm.loop !36

._crit_edge.us194:                                ; preds = %._crit_edge186.split.us.us
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  %exitcond211.not = icmp eq i64 %indvars.iv.next208, %wide.trip.count210
  br i1 %exitcond211.not, label %._crit_edge193, label %.preheader164.us, !llvm.loop !37

._crit_edge193:                                   ; preds = %._crit_edge.us194, %.preheader164.lr.ph, %2
  tail call void @free(ptr noundef %27) #6
  ret void
}

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #4

attributes #0 = { 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 nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind allocsize(0) }
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, !8, i64 252}
!6 = !{!"_ZTS12isp_config_t", !7, i64 0, !7, i64 4, !10, i64 8, !11, i64 16, !15, i64 48, !10, i64 64, !11, i64 72, !17, i64 104, !8, i64 120, !11, i64 168, !16, i64 200, !8, i64 204, !18, i64 252, !19, i64 256, !8, i64 320, !20, i64 350, !21, i64 362, !22, i64 364, !23, i64 372}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !12, i64 0, !14, i64 8, !8, i64 16}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !13, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"long", !8, i64 0}
!15 = !{!"_ZTS9blc_cfg_t", !10, i64 0, !10, i64 2, !10, i64 4, !10, i64 6, !16, i64 8, !16, i64 12}
!16 = !{!"float", !8, i64 0}
!17 = !{!"_ZTS10awb_gain_t", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12}
!18 = !{!"_ZTS9nlm_cfg_t", !8, i64 0, !8, i64 1, !8, i64 2}
!19 = !{!"_ZTS9bnf_cfg_t", !8, i64 0, !8, i64 50, !8, i64 58}
!20 = !{!"_ZTS9eeh_cfg_t", !10, i64 0, !10, i64 2, !10, i64 4, !10, i64 6, !10, i64 8, !10, i64 10}
!21 = !{!"_ZTS9fcs_cfg_t", !8, i64 0, !8, i64 1}
!22 = !{!"_ZTS9hsc_cfg_t", !8, i64 0, !16, i64 4}
!23 = !{!"_ZTS9bcc_cfg_t", !8, i64 0, !16, i64 4}
!24 = !{!6, !8, i64 253}
!25 = !{!6, !8, i64 254}
!26 = !{!6, !7, i64 0}
!27 = !{!6, !7, i64 4}
!28 = !{!7, !7, i64 0}
!29 = !{!16, !16, i64 0}
!30 = !{!8, !8, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}


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