; LLVM IR from lesialin/ImageSignalProcessing_C :: src/isp_bnf.ll (Z7isp_bnfPhS_)

; 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
define dso_local void @_Z7isp_bnfPhS_(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  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 1, ptr %5) #3
  store i8 5, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #3
  %21 = load i8, ptr %5, align 1, !tbaa !9
  %22 = zext i8 %21 to i32
  %23 = ashr i32 %22, 1
  %24 = trunc i32 %23 to i8
  store i8 %24, ptr %6, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %25 = load i8, ptr %5, align 1, !tbaa !9
  %26 = zext i8 %25 to i32
  %27 = load i8, ptr %5, align 1, !tbaa !9
  %28 = zext i8 %27 to i32
  %29 = mul nsw i32 %26, %28
  %30 = sext i32 %29 to i64
  %31 = mul i64 2, %30
  %32 = call noalias ptr @malloc(i64 noundef %31) #4
  store ptr %32, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %33 = load i8, ptr %5, align 1, !tbaa !9
  %34 = zext i8 %33 to i32
  %35 = load i8, ptr %5, align 1, !tbaa !9
  %36 = zext i8 %35 to i32
  %37 = mul nsw i32 %34, %36
  %38 = sext i32 %37 to i64
  %39 = mul i64 2, %38
  %40 = call noalias ptr @malloc(i64 noundef %39) #4
  store ptr %40, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  store i32 0, ptr %14, align 4, !tbaa !10
  br label %41

41:                                               ; preds = %329, %2
  %42 = load i32, ptr %14, align 4, !tbaa !10
  %43 = load i32, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 1), align 4, !tbaa !12
  %44 = load i8, ptr %5, align 1, !tbaa !9
  %45 = zext i8 %44 to i32
  %46 = sub i32 %43, %45
  %47 = icmp ult i32 %42, %46
  br i1 %47, label %49, label %48

48:                                               ; preds = %41
  store i32 2, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  br label %332

49:                                               ; preds = %41
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  store i32 0, ptr %16, align 4, !tbaa !10
  br label %50

50:                                               ; preds = %325, %49
  %51 = load i32, ptr %16, align 4, !tbaa !10
  %52 = load i32, ptr @g_isp_config, align 8, !tbaa !27
  %53 = load i8, ptr %5, align 1, !tbaa !9
  %54 = zext i8 %53 to i32
  %55 = sub i32 %52, %54
  %56 = icmp ult i32 %51, %55
  br i1 %56, label %58, label %57

57:                                               ; preds = %50
  store i32 5, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  br label %328

58:                                               ; preds = %50
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = load i32, ptr %14, align 4, !tbaa !10
  %61 = load i8, ptr %6, align 1, !tbaa !9
  %62 = zext i8 %61 to i32
  %63 = add nsw i32 %60, %62
  %64 = load i32, ptr @g_isp_config, align 8, !tbaa !27
  %65 = mul i32 %63, %64
  %66 = load i32, ptr %16, align 4, !tbaa !10
  %67 = load i8, ptr %6, align 1, !tbaa !9
  %68 = zext i8 %67 to i32
  %69 = add nsw i32 %66, %68
  %70 = add i32 %65, %69
  %71 = zext i32 %70 to i64
  %72 = getelementptr inbounds i8, ptr %59, i64 %71
  %73 = load i8, ptr %72, align 1, !tbaa !9
  store i8 %73, ptr %9, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  store i32 0, ptr %17, align 4, !tbaa !10
  br label %74

74:                                               ; preds = %208, %58
  %75 = load i32, ptr %17, align 4, !tbaa !10
  %76 = load i8, ptr %5, align 1, !tbaa !9
  %77 = zext i8 %76 to i32
  %78 = icmp slt i32 %75, %77
  br i1 %78, label %80, label %79

79:                                               ; preds = %74
  store i32 8, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  br label %211

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

81:                                               ; preds = %204, %80
  %82 = load i32, ptr %18, align 4, !tbaa !10
  %83 = load i8, ptr %5, align 1, !tbaa !9
  %84 = zext i8 %83 to i32
  %85 = icmp slt i32 %82, %84
  br i1 %85, label %87, label %86

86:                                               ; preds = %81
  store i32 11, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  br label %207

87:                                               ; preds = %81
  %88 = load ptr, ptr %3, align 8, !tbaa !5
  %89 = load i32, ptr %14, align 4, !tbaa !10
  %90 = load i32, ptr %17, align 4, !tbaa !10
  %91 = add nsw i32 %89, %90
  %92 = load i32, ptr @g_isp_config, align 8, !tbaa !27
  %93 = mul i32 %91, %92
  %94 = load i32, ptr %16, align 4, !tbaa !10
  %95 = load i32, ptr %18, align 4, !tbaa !10
  %96 = add nsw i32 %94, %95
  %97 = add i32 %93, %96
  %98 = zext i32 %97 to i64
  %99 = getelementptr inbounds i8, ptr %88, i64 %98
  %100 = load i8, ptr %99, align 1, !tbaa !9
  store i8 %100, ptr %10, align 1, !tbaa !9
  %101 = load i8, ptr %9, align 1, !tbaa !9
  %102 = zext i8 %101 to i32
  %103 = load i8, ptr %10, align 1, !tbaa !9
  %104 = zext i8 %103 to i32
  %105 = icmp sgt i32 %102, %104
  br i1 %105, label %106, label %112

106:                                              ; preds = %87
  %107 = load i8, ptr %9, align 1, !tbaa !9
  %108 = zext i8 %107 to i32
  %109 = load i8, ptr %10, align 1, !tbaa !9
  %110 = zext i8 %109 to i32
  %111 = sub nsw i32 %108, %110
  br label %118

112:                                              ; preds = %87
  %113 = load i8, ptr %10, align 1, !tbaa !9
  %114 = zext i8 %113 to i32
  %115 = load i8, ptr %9, align 1, !tbaa !9
  %116 = zext i8 %115 to i32
  %117 = sub nsw i32 %114, %116
  br label %118

118:                                              ; preds = %112, %106
  %119 = phi i32 [ %111, %106 ], [ %117, %112 ]
  %120 = trunc i32 %119 to i8
  store i8 %120, ptr %11, align 1, !tbaa !9
  %121 = load i8, ptr %11, align 1, !tbaa !9
  %122 = zext i8 %121 to i32
  %123 = load i16, ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 2), align 2, !tbaa !28
  %124 = zext i16 %123 to i32
  %125 = icmp sge i32 %122, %124
  br i1 %125, label %126, label %137

126:                                              ; preds = %118
  %127 = load i16, ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 1), align 2, !tbaa !28
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = load i32, ptr %18, align 4, !tbaa !10
  %130 = load i8, ptr %5, align 1, !tbaa !9
  %131 = zext i8 %130 to i32
  %132 = mul nsw i32 %129, %131
  %133 = load i32, ptr %18, align 4, !tbaa !10
  %134 = add nsw i32 %132, %133
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds i16, ptr %128, i64 %135
  store i16 %127, ptr %136, align 2, !tbaa !28
  br label %203

137:                                              ; preds = %118
  %138 = load i8, ptr %11, align 1, !tbaa !9
  %139 = zext i8 %138 to i32
  %140 = load i16, ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 2), align 2, !tbaa !28
  %141 = zext i16 %140 to i32
  %142 = icmp slt i32 %139, %141
  br i1 %142, label %143, label %160

143:                                              ; preds = %137
  %144 = load i8, ptr %11, align 1, !tbaa !9
  %145 = zext i8 %144 to i32
  %146 = load i16, ptr getelementptr inbounds ([3 x i16], ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 2), i64 0, i64 1), align 2, !tbaa !28
  %147 = zext i16 %146 to i32
  %148 = icmp sge i32 %145, %147
  br i1 %148, label %149, label %160

149:                                              ; preds = %143
  %150 = load i16, ptr getelementptr inbounds ([4 x i16], ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 1), i64 0, i64 1), align 2, !tbaa !28
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  %152 = load i32, ptr %18, align 4, !tbaa !10
  %153 = load i8, ptr %5, align 1, !tbaa !9
  %154 = zext i8 %153 to i32
  %155 = mul nsw i32 %152, %154
  %156 = load i32, ptr %18, align 4, !tbaa !10
  %157 = add nsw i32 %155, %156
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds i16, ptr %151, i64 %158
  store i16 %150, ptr %159, align 2, !tbaa !28
  br label %202

160:                                              ; preds = %143, %137
  %161 = load i8, ptr %11, align 1, !tbaa !9
  %162 = zext i8 %161 to i32
  %163 = load i16, ptr getelementptr inbounds ([3 x i16], ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 2), i64 0, i64 1), align 2, !tbaa !28
  %164 = zext i16 %163 to i32
  %165 = icmp slt i32 %162, %164
  br i1 %165, label %166, label %183

166:                                              ; preds = %160
  %167 = load i8, ptr %11, align 1, !tbaa !9
  %168 = zext i8 %167 to i32
  %169 = load i16, ptr getelementptr inbounds ([3 x i16], ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 2), i64 0, i64 2), align 2, !tbaa !28
  %170 = zext i16 %169 to i32
  %171 = icmp sge i32 %168, %170
  br i1 %171, label %172, label %183

172:                                              ; preds = %166
  %173 = load i16, ptr getelementptr inbounds ([4 x i16], ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 1), i64 0, i64 2), align 2, !tbaa !28
  %174 = load ptr, ptr %7, align 8, !tbaa !5
  %175 = load i32, ptr %18, align 4, !tbaa !10
  %176 = load i8, ptr %5, align 1, !tbaa !9
  %177 = zext i8 %176 to i32
  %178 = mul nsw i32 %175, %177
  %179 = load i32, ptr %18, align 4, !tbaa !10
  %180 = add nsw i32 %178, %179
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i16, ptr %174, i64 %181
  store i16 %173, ptr %182, align 2, !tbaa !28
  br label %201

183:                                              ; preds = %166, %160
  %184 = load i8, ptr %11, align 1, !tbaa !9
  %185 = zext i8 %184 to i32
  %186 = load i16, ptr getelementptr inbounds ([3 x i16], ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 2), i64 0, i64 2), align 2, !tbaa !28
  %187 = zext i16 %186 to i32
  %188 = icmp slt i32 %185, %187
  br i1 %188, label %189, label %200

189:                                              ; preds = %183
  %190 = load i16, ptr getelementptr inbounds ([4 x i16], ptr getelementptr inbounds (%struct.bnf_cfg_t, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i32 0, i32 1), i64 0, i64 3), align 2, !tbaa !28
  %191 = load ptr, ptr %7, align 8, !tbaa !5
  %192 = load i32, ptr %18, align 4, !tbaa !10
  %193 = load i8, ptr %5, align 1, !tbaa !9
  %194 = zext i8 %193 to i32
  %195 = mul nsw i32 %192, %194
  %196 = load i32, ptr %18, align 4, !tbaa !10
  %197 = add nsw i32 %195, %196
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i16, ptr %191, i64 %198
  store i16 %190, ptr %199, align 2, !tbaa !28
  br label %200

200:                                              ; preds = %189, %183
  br label %201

201:                                              ; preds = %200, %172
  br label %202

202:                                              ; preds = %201, %149
  br label %203

203:                                              ; preds = %202, %126
  br label %204

204:                                              ; preds = %203
  %205 = load i32, ptr %18, align 4, !tbaa !10
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %18, align 4, !tbaa !10
  br label %81, !llvm.loop !29

207:                                              ; preds = %86
  br label %208

208:                                              ; preds = %207
  %209 = load i32, ptr %17, align 4, !tbaa !10
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %17, align 4, !tbaa !10
  br label %74, !llvm.loop !31

211:                                              ; preds = %79
  store i32 0, ptr %12, align 4, !tbaa !10
  store i32 0, ptr %13, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  store i32 0, ptr %19, align 4, !tbaa !10
  br label %212

212:                                              ; preds = %303, %211
  %213 = load i32, ptr %19, align 4, !tbaa !10
  %214 = load i8, ptr %5, align 1, !tbaa !9
  %215 = zext i8 %214 to i32
  %216 = icmp slt i32 %213, %215
  br i1 %216, label %218, label %217

217:                                              ; preds = %212
  store i32 14, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  br label %306

218:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 0, ptr %20, align 4, !tbaa !10
  br label %219

219:                                              ; preds = %299, %218
  %220 = load i32, ptr %20, align 4, !tbaa !10
  %221 = load i8, ptr %5, align 1, !tbaa !9
  %222 = zext i8 %221 to i32
  %223 = icmp slt i32 %220, %222
  br i1 %223, label %225, label %224

224:                                              ; preds = %219
  store i32 17, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  br label %302

225:                                              ; preds = %219
  %226 = load i32, ptr %19, align 4, !tbaa !10
  %227 = load i8, ptr %5, align 1, !tbaa !9
  %228 = zext i8 %227 to i32
  %229 = mul nsw i32 %226, %228
  %230 = load i32, ptr %20, align 4, !tbaa !10
  %231 = add nsw i32 %229, %230
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds [25 x i16], ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 16), i64 0, i64 %232
  %234 = load i16, ptr %233, align 2, !tbaa !28
  %235 = zext i16 %234 to i32
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = load i32, ptr %19, align 4, !tbaa !10
  %238 = load i8, ptr %5, align 1, !tbaa !9
  %239 = zext i8 %238 to i32
  %240 = mul nsw i32 %237, %239
  %241 = load i32, ptr %20, align 4, !tbaa !10
  %242 = add nsw i32 %240, %241
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds i16, ptr %236, i64 %243
  %245 = load i16, ptr %244, align 2, !tbaa !28
  %246 = zext i16 %245 to i32
  %247 = mul nsw i32 %235, %246
  %248 = trunc i32 %247 to i16
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = load i32, ptr %19, align 4, !tbaa !10
  %251 = load i8, ptr %5, align 1, !tbaa !9
  %252 = zext i8 %251 to i32
  %253 = mul nsw i32 %250, %252
  %254 = load i32, ptr %20, align 4, !tbaa !10
  %255 = add nsw i32 %253, %254
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds i16, ptr %249, i64 %256
  store i16 %248, ptr %257, align 2, !tbaa !28
  %258 = load ptr, ptr %8, align 8, !tbaa !5
  %259 = load i32, ptr %19, align 4, !tbaa !10
  %260 = load i8, ptr %5, align 1, !tbaa !9
  %261 = zext i8 %260 to i32
  %262 = mul nsw i32 %259, %261
  %263 = load i32, ptr %20, align 4, !tbaa !10
  %264 = add nsw i32 %262, %263
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds i16, ptr %258, i64 %265
  %267 = load i16, ptr %266, align 2, !tbaa !28
  %268 = zext i16 %267 to i32
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = load i32, ptr %14, align 4, !tbaa !10
  %271 = load i32, ptr %19, align 4, !tbaa !10
  %272 = add nsw i32 %270, %271
  %273 = load i32, ptr @g_isp_config, align 8, !tbaa !27
  %274 = mul i32 %272, %273
  %275 = load i32, ptr %16, align 4, !tbaa !10
  %276 = load i32, ptr %20, align 4, !tbaa !10
  %277 = add nsw i32 %275, %276
  %278 = add i32 %274, %277
  %279 = zext i32 %278 to i64
  %280 = getelementptr inbounds i8, ptr %269, i64 %279
  %281 = load i8, ptr %280, align 1, !tbaa !9
  %282 = zext i8 %281 to i32
  %283 = mul nsw i32 %268, %282
  %284 = load i32, ptr %13, align 4, !tbaa !10
  %285 = add i32 %284, %283
  store i32 %285, ptr %13, align 4, !tbaa !10
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = load i32, ptr %19, align 4, !tbaa !10
  %288 = load i8, ptr %5, align 1, !tbaa !9
  %289 = zext i8 %288 to i32
  %290 = mul nsw i32 %287, %289
  %291 = load i32, ptr %20, align 4, !tbaa !10
  %292 = add nsw i32 %290, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i16, ptr %286, i64 %293
  %295 = load i16, ptr %294, align 2, !tbaa !28
  %296 = zext i16 %295 to i32
  %297 = load i32, ptr %12, align 4, !tbaa !10
  %298 = add i32 %297, %296
  store i32 %298, ptr %12, align 4, !tbaa !10
  br label %299

299:                                              ; preds = %225
  %300 = load i32, ptr %20, align 4, !tbaa !10
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %20, align 4, !tbaa !10
  br label %219, !llvm.loop !32

302:                                              ; preds = %224
  br label %303

303:                                              ; preds = %302
  %304 = load i32, ptr %19, align 4, !tbaa !10
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %19, align 4, !tbaa !10
  br label %212, !llvm.loop !33

306:                                              ; preds = %217
  %307 = load i32, ptr %13, align 4, !tbaa !10
  %308 = load i32, ptr %12, align 4, !tbaa !10
  %309 = udiv i32 %307, %308
  %310 = trunc i32 %309 to i8
  %311 = load ptr, ptr %4, align 8, !tbaa !5
  %312 = load i32, ptr %14, align 4, !tbaa !10
  %313 = load i8, ptr %6, align 1, !tbaa !9
  %314 = zext i8 %313 to i32
  %315 = add nsw i32 %312, %314
  %316 = load i32, ptr @g_isp_config, align 8, !tbaa !27
  %317 = mul i32 %315, %316
  %318 = load i32, ptr %16, align 4, !tbaa !10
  %319 = load i8, ptr %6, align 1, !tbaa !9
  %320 = zext i8 %319 to i32
  %321 = add nsw i32 %318, %320
  %322 = add i32 %317, %321
  %323 = zext i32 %322 to i64
  %324 = getelementptr inbounds i8, ptr %311, i64 %323
  store i8 %310, ptr %324, align 1, !tbaa !9
  br label %325

325:                                              ; preds = %306
  %326 = load i32, ptr %16, align 4, !tbaa !10
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %16, align 4, !tbaa !10
  br label %50, !llvm.loop !34

328:                                              ; preds = %57
  br label %329

329:                                              ; preds = %328
  %330 = load i32, ptr %14, align 4, !tbaa !10
  %331 = add nsw i32 %330, 1
  store i32 %331, ptr %14, align 4, !tbaa !10
  br label %41, !llvm.loop !35

332:                                              ; preds = %48
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #3
  ret void
}

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

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

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

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


; 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 nofree nounwind uwtable
define dso_local void @_Z7isp_bnfPhS_(ptr nocapture noundef readonly %0, ptr nocapture noundef writeonly %1) local_unnamed_addr #0 {
  %3 = tail call noalias dereferenceable_or_null(50) ptr @malloc(i64 noundef 50) #3
  %4 = load i32, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 4), align 4, !tbaa !5
  %.not122 = icmp eq i32 %4, 5
  br i1 %.not122, label %._crit_edge121, label %.preheader110.preheader

.preheader110.preheader:                          ; preds = %2
  %.pre = load i32, ptr @g_isp_config, align 8, !tbaa !24
  %5 = getelementptr inbounds i8, ptr %3, i64 12
  %6 = getelementptr inbounds i8, ptr %3, i64 24
  %7 = getelementptr inbounds i8, ptr %3, i64 36
  %8 = getelementptr inbounds i8, ptr %3, i64 48
  %9 = getelementptr inbounds i8, ptr %3, i64 2
  %10 = getelementptr inbounds i8, ptr %3, i64 4
  %11 = getelementptr inbounds i8, ptr %3, i64 6
  %12 = getelementptr inbounds i8, ptr %3, i64 8
  %13 = getelementptr inbounds i8, ptr %3, i64 10
  %14 = getelementptr inbounds i8, ptr %3, i64 14
  %15 = getelementptr inbounds i8, ptr %3, i64 16
  %16 = getelementptr inbounds i8, ptr %3, i64 26
  %17 = getelementptr inbounds i8, ptr %3, i64 28
  %18 = getelementptr inbounds i8, ptr %3, i64 30
  %19 = getelementptr inbounds i8, ptr %3, i64 32
  %20 = getelementptr inbounds i8, ptr %3, i64 38
  %21 = getelementptr inbounds i8, ptr %3, i64 40
  %22 = getelementptr inbounds i8, ptr %3, i64 42
  %23 = getelementptr inbounds i8, ptr %3, i64 44
  %24 = getelementptr inbounds i8, ptr %3, i64 46
  br label %.preheader110

.preheader110:                                    ; preds = %.preheader110.preheader, %._crit_edge
  %25 = phi i32 [ %4, %.preheader110.preheader ], [ %63, %._crit_edge ]
  %26 = phi i32 [ %.pre, %.preheader110.preheader ], [ %64, %._crit_edge ]
  %indvars.iv135 = phi i64 [ 0, %.preheader110.preheader ], [ %indvars.iv.next136.pre-phi, %._crit_edge ]
  %.not123 = icmp eq i32 %26, 5
  br i1 %.not123, label %.preheader110.._crit_edge_crit_edge, label %.lr.ph

.preheader110.._crit_edge_crit_edge:              ; preds = %.preheader110
  %.pre144 = add nuw nsw i64 %indvars.iv135, 1
  br label %._crit_edge

.lr.ph:                                           ; preds = %.preheader110
  %27 = trunc nuw nsw i64 %indvars.iv135 to i32
  %28 = trunc i64 %indvars.iv135 to i32
  %29 = add i32 %28, 2
  %30 = add nuw nsw i64 %indvars.iv135, 1
  %31 = trunc nuw nsw i64 %30 to i32
  %32 = trunc i64 %indvars.iv135 to i32
  %33 = add i32 %32, 3
  %34 = trunc i64 %indvars.iv135 to i32
  %35 = add i32 %34, 4
  %36 = trunc nuw nsw i64 %indvars.iv135 to i32
  %37 = trunc i64 %indvars.iv135 to i32
  %38 = add i32 %37, 1
  %39 = trunc i64 %indvars.iv135 to i32
  %40 = add i32 %39, 2
  %41 = trunc i64 %indvars.iv135 to i32
  %42 = add i32 %41, 3
  %43 = trunc i64 %indvars.iv135 to i32
  %44 = add i32 %43, 4
  %45 = load i16, ptr %9, align 2, !tbaa !25
  %46 = load i16, ptr %10, align 2, !tbaa !25
  %47 = load i16, ptr %11, align 2, !tbaa !25
  %48 = load i16, ptr %12, align 2, !tbaa !25
  %49 = load i16, ptr %13, align 2, !tbaa !25
  %50 = load i16, ptr %14, align 2, !tbaa !25
  %51 = load <4 x i16>, ptr %15, align 2, !tbaa !25
  %52 = load i16, ptr %16, align 2, !tbaa !25
  %53 = load i16, ptr %17, align 2, !tbaa !25
  %54 = load i16, ptr %18, align 2, !tbaa !25
  %55 = shufflevector <4 x i16> %51, <4 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %56 = load <2 x i16>, ptr %19, align 2, !tbaa !25
  %57 = load i16, ptr %20, align 2, !tbaa !25
  %58 = load i16, ptr %21, align 2, !tbaa !25
  %59 = load i16, ptr %22, align 2, !tbaa !25
  %60 = load i16, ptr %23, align 2, !tbaa !25
  %61 = load i16, ptr %24, align 2, !tbaa !25
  %62 = shufflevector <2 x i16> %56, <2 x i16> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  br label %.preheader108

._crit_edge121:                                   ; preds = %._crit_edge, %2
  ret void

._crit_edge.loopexit:                             ; preds = %.preheader.preheader
  store i16 %279, ptr %3, align 2, !tbaa !25
  store i16 %292, ptr %5, align 2, !tbaa !25
  store i16 %305, ptr %6, align 2, !tbaa !25
  store i16 %318, ptr %7, align 2, !tbaa !25
  store i16 %330, ptr %8, align 2, !tbaa !25
  %.pre143 = load i32, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 4), align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %.preheader110.._crit_edge_crit_edge, %._crit_edge.loopexit
  %indvars.iv.next136.pre-phi = phi i64 [ %.pre144, %.preheader110.._crit_edge_crit_edge ], [ %30, %._crit_edge.loopexit ]
  %63 = phi i32 [ %25, %.preheader110.._crit_edge_crit_edge ], [ %.pre143, %._crit_edge.loopexit ]
  %64 = phi i32 [ 5, %.preheader110.._crit_edge_crit_edge ], [ %567, %._crit_edge.loopexit ]
  %65 = add i32 %63, -5
  %66 = zext i32 %65 to i64
  %67 = icmp ult i64 %indvars.iv.next136.pre-phi, %66
  br i1 %67, label %.preheader110, label %._crit_edge121, !llvm.loop !26

.preheader108:                                    ; preds = %.lr.ph, %.preheader.preheader
  %68 = phi i32 [ %26, %.lr.ph ], [ %567, %.preheader.preheader ]
  %.096119 = phi i32 [ 0, %.lr.ph ], [ %566, %.preheader.preheader ]
  %69 = mul i32 %68, %29
  %70 = add nuw nsw i32 %.096119, 2
  %71 = add i32 %70, %69
  %72 = zext i32 %71 to i64
  %73 = getelementptr inbounds i8, ptr %0, i64 %72
  %74 = load i8, ptr %73, align 1, !tbaa !28
  %75 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 314), align 2, !tbaa !25
  %76 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 306), align 2
  %77 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 316), align 4
  %78 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 308), align 4
  %79 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 318), align 2
  %80 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 310), align 2
  %81 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 312), align 8
  %82 = mul i32 %68, %36
  %83 = add i32 %82, %.096119
  %84 = zext i32 %83 to i64
  %85 = getelementptr inbounds i8, ptr %0, i64 %84
  %86 = load i8, ptr %85, align 1, !tbaa !28
  %87 = icmp ugt i8 %74, %86
  %88 = sub i8 %74, %86
  %89 = sub i8 %86, %74
  %90 = select i1 %87, i8 %88, i8 %89
  %91 = zext i8 %90 to i16
  %.not = icmp ugt i16 %75, %91
  %.not106 = icmp ugt i16 %77, %91
  %or.cond = select i1 %.not, i1 %.not106, i1 false
  %92 = add i32 %83, 1
  %93 = zext i32 %92 to i64
  %94 = getelementptr inbounds i8, ptr %0, i64 %93
  %95 = load i8, ptr %94, align 1, !tbaa !28
  %96 = icmp ugt i8 %74, %95
  %97 = sub i8 %74, %95
  %98 = sub i8 %95, %74
  %99 = select i1 %96, i8 %97, i8 %98
  %100 = zext i8 %99 to i16
  %.not.1 = icmp ugt i16 %75, %100
  %.not106.1 = icmp ugt i16 %77, %100
  %or.cond188 = select i1 %.not.1, i1 %.not106.1, i1 false
  %101 = add i32 %83, 2
  %102 = zext i32 %101 to i64
  %103 = getelementptr inbounds i8, ptr %0, i64 %102
  %104 = load i8, ptr %103, align 1, !tbaa !28
  %105 = icmp ugt i8 %74, %104
  %106 = sub i8 %74, %104
  %107 = sub i8 %104, %74
  %108 = select i1 %105, i8 %106, i8 %107
  %109 = zext i8 %108 to i16
  %.not.2 = icmp ugt i16 %75, %109
  %.not106.2 = icmp ugt i16 %77, %109
  %or.cond189 = select i1 %.not.2, i1 %.not106.2, i1 false
  %110 = add i32 %83, 3
  %111 = zext i32 %110 to i64
  %112 = getelementptr inbounds i8, ptr %0, i64 %111
  %113 = load i8, ptr %112, align 1, !tbaa !28
  %114 = icmp ugt i8 %74, %113
  %115 = sub i8 %74, %113
  %116 = sub i8 %113, %74
  %117 = select i1 %114, i8 %115, i8 %116
  %118 = zext i8 %117 to i16
  %.not.3 = icmp ugt i16 %75, %118
  %.not106.3 = icmp ugt i16 %77, %118
  %or.cond190 = select i1 %.not.3, i1 %.not106.3, i1 false
  %119 = add i32 %83, 4
  %120 = zext i32 %119 to i64
  %121 = getelementptr inbounds i8, ptr %0, i64 %120
  %122 = load i8, ptr %121, align 1, !tbaa !28
  %123 = icmp ugt i8 %74, %122
  %124 = sub i8 %74, %122
  %125 = sub i8 %122, %74
  %126 = select i1 %123, i8 %124, i8 %125
  %127 = zext i8 %126 to i16
  %.not.4 = icmp ugt i16 %75, %127
  %.not106.4 = icmp ugt i16 %77, %127
  %or.cond191 = select i1 %.not.4, i1 %.not106.4, i1 false
  %128 = mul i32 %68, %38
  %129 = add i32 %128, %.096119
  %130 = zext i32 %129 to i64
  %131 = getelementptr inbounds i8, ptr %0, i64 %130
  %132 = load i8, ptr %131, align 1, !tbaa !28
  %133 = icmp ugt i8 %74, %132
  %134 = sub i8 %74, %132
  %135 = sub i8 %132, %74
  %136 = select i1 %133, i8 %134, i8 %135
  %137 = zext i8 %136 to i16
  %.not.1171 = icmp ugt i16 %75, %137
  %.not106.1172 = icmp ugt i16 %77, %137
  %or.cond192 = select i1 %.not.1171, i1 %.not106.1172, i1 false
  %138 = add i32 %129, 1
  %139 = zext i32 %138 to i64
  %140 = getelementptr inbounds i8, ptr %0, i64 %139
  %141 = load i8, ptr %140, align 1, !tbaa !28
  %142 = icmp ugt i8 %74, %141
  %143 = sub i8 %74, %141
  %144 = sub i8 %141, %74
  %145 = select i1 %142, i8 %143, i8 %144
  %146 = zext i8 %145 to i16
  %.not.1.1 = icmp ugt i16 %75, %146
  %.not106.1.1 = icmp ugt i16 %77, %146
  %or.cond193 = select i1 %.not.1.1, i1 %.not106.1.1, i1 false
  %147 = add i32 %129, 2
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds i8, ptr %0, i64 %148
  %150 = load i8, ptr %149, align 1, !tbaa !28
  %151 = icmp ugt i8 %74, %150
  %152 = sub i8 %74, %150
  %153 = sub i8 %150, %74
  %154 = select i1 %151, i8 %152, i8 %153
  %155 = zext i8 %154 to i16
  %.not.2.1 = icmp ugt i16 %75, %155
  %.not106.2.1 = icmp ugt i16 %77, %155
  %or.cond194 = select i1 %.not.2.1, i1 %.not106.2.1, i1 false
  %156 = add i32 %129, 3
  %157 = zext i32 %156 to i64
  %158 = getelementptr inbounds i8, ptr %0, i64 %157
  %159 = load i8, ptr %158, align 1, !tbaa !28
  %160 = icmp ugt i8 %74, %159
  %161 = sub i8 %74, %159
  %162 = sub i8 %159, %74
  %163 = select i1 %160, i8 %161, i8 %162
  %164 = zext i8 %163 to i16
  %.not.3.1 = icmp ugt i16 %75, %164
  %.not106.3.1 = icmp ugt i16 %77, %164
  %or.cond195 = select i1 %.not.3.1, i1 %.not106.3.1, i1 false
  %165 = add i32 %129, 4
  %166 = zext i32 %165 to i64
  %167 = getelementptr inbounds i8, ptr %0, i64 %166
  %168 = load i8, ptr %167, align 1, !tbaa !28
  %169 = icmp ugt i8 %74, %168
  %170 = sub i8 %74, %168
  %171 = sub i8 %168, %74
  %172 = select i1 %169, i8 %170, i8 %171
  %173 = zext i8 %172 to i16
  %.not.4.1 = icmp ugt i16 %75, %173
  %.not106.4.1 = icmp ugt i16 %77, %173
  %or.cond196 = select i1 %.not.4.1, i1 %.not106.4.1, i1 false
  %174 = mul i32 %68, %40
  %175 = add i32 %174, %.096119
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds i8, ptr %0, i64 %176
  %178 = load i8, ptr %177, align 1, !tbaa !28
  %179 = icmp ugt i8 %74, %178
  %180 = sub i8 %74, %178
  %181 = sub i8 %178, %74
  %182 = select i1 %179, i8 %180, i8 %181
  %183 = zext i8 %182 to i16
  %.not.2174 = icmp ugt i16 %75, %183
  %.not106.2175 = icmp ugt i16 %77, %183
  %or.cond197 = select i1 %.not.2174, i1 %.not106.2175, i1 false
  %184 = add i32 %175, 1
  %185 = zext i32 %184 to i64
  %186 = getelementptr inbounds i8, ptr %0, i64 %185
  %187 = load i8, ptr %186, align 1, !tbaa !28
  %188 = icmp ugt i8 %74, %187
  %189 = sub i8 %74, %187
  %190 = sub i8 %187, %74
  %191 = select i1 %188, i8 %189, i8 %190
  %192 = zext i8 %191 to i16
  %.not.1.2 = icmp ugt i16 %75, %192
  %.not106.1.2 = icmp ugt i16 %77, %192
  %or.cond198 = select i1 %.not.1.2, i1 %.not106.1.2, i1 false
  %193 = add i32 %175, 2
  %194 = zext i32 %193 to i64
  %195 = getelementptr inbounds i8, ptr %0, i64 %194
  %196 = load i8, ptr %195, align 1, !tbaa !28
  %197 = icmp ugt i8 %74, %196
  %198 = sub i8 %74, %196
  %199 = sub i8 %196, %74
  %200 = select i1 %197, i8 %198, i8 %199
  %201 = zext i8 %200 to i16
  %.not.2.2 = icmp ugt i16 %75, %201
  %.not106.2.2 = icmp ugt i16 %77, %201
  %or.cond199 = select i1 %.not.2.2, i1 %.not106.2.2, i1 false
  %202 = add i32 %175, 3
  %203 = zext i32 %202 to i64
  %204 = getelementptr inbounds i8, ptr %0, i64 %203
  %205 = load i8, ptr %204, align 1, !tbaa !28
  %206 = icmp ugt i8 %74, %205
  %207 = sub i8 %74, %205
  %208 = sub i8 %205, %74
  %209 = select i1 %206, i8 %207, i8 %208
  %210 = zext i8 %209 to i16
  %.not.3.2 = icmp ugt i16 %75, %210
  %.not106.3.2 = icmp ugt i16 %77, %210
  %or.cond200 = select i1 %.not.3.2, i1 %.not106.3.2, i1 false
  %211 = add i32 %175, 4
  %212 = zext i32 %211 to i64
  %213 = getelementptr inbounds i8, ptr %0, i64 %212
  %214 = load i8, ptr %213, align 1, !tbaa !28
  %215 = icmp ugt i8 %74, %214
  %216 = sub i8 %74, %214
  %217 = sub i8 %214, %74
  %218 = select i1 %215, i8 %216, i8 %217
  %219 = zext i8 %218 to i16
  %.not.4.2 = icmp ugt i16 %75, %219
  %.not106.4.2 = icmp ugt i16 %77, %219
  %or.cond201 = select i1 %.not.4.2, i1 %.not106.4.2, i1 false
  %220 = mul i32 %68, %42
  %221 = add i32 %220, %.096119
  %222 = zext i32 %221 to i64
  %223 = getelementptr inbounds i8, ptr %0, i64 %222
  %224 = load i8, ptr %223, align 1, !tbaa !28
  %225 = icmp ugt i8 %74, %224
  %226 = sub i8 %74, %224
  %227 = sub i8 %224, %74
  %228 = select i1 %225, i8 %226, i8 %227
  %229 = zext i8 %228 to i16
  %.not.3177 = icmp ugt i16 %75, %229
  %.not106.3178 = icmp ugt i16 %77, %229
  %or.cond202 = select i1 %.not.3177, i1 %.not106.3178, i1 false
  %230 = add i32 %221, 1
  %231 = zext i32 %230 to i64
  %232 = getelementptr inbounds i8, ptr %0, i64 %231
  %233 = load i8, ptr %232, align 1, !tbaa !28
  %234 = icmp ugt i8 %74, %233
  %235 = sub i8 %74, %233
  %236 = sub i8 %233, %74
  %237 = select i1 %234, i8 %235, i8 %236
  %238 = zext i8 %237 to i16
  %.not.1.3 = icmp ugt i16 %75, %238
  %.not106.1.3 = icmp ugt i16 %77, %238
  %or.cond203 = select i1 %.not.1.3, i1 %.not106.1.3, i1 false
  %239 = add i32 %221, 2
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds i8, ptr %0, i64 %240
  %242 = load i8, ptr %241, align 1, !tbaa !28
  %243 = icmp ugt i8 %74, %242
  %244 = sub i8 %74, %242
  %245 = sub i8 %242, %74
  %246 = select i1 %243, i8 %244, i8 %245
  %247 = zext i8 %246 to i16
  %.not.2.3 = icmp ugt i16 %75, %247
  %.not106.2.3 = icmp ugt i16 %77, %247
  %or.cond204 = select i1 %.not.2.3, i1 %.not106.2.3, i1 false
  %248 = add i32 %221, 3
  %249 = zext i32 %248 to i64
  %250 = getelementptr inbounds i8, ptr %0, i64 %249
  %251 = load i8, ptr %250, align 1, !tbaa !28
  %252 = icmp ugt i8 %74, %251
  %253 = sub i8 %74, %251
  %254 = sub i8 %251, %74
  %255 = select i1 %252, i8 %253, i8 %254
  %256 = zext i8 %255 to i16
  %.not.3.3 = icmp ugt i16 %75, %256
  %.not106.3.3 = icmp ugt i16 %77, %256
  %or.cond205 = select i1 %.not.3.3, i1 %.not106.3.3, i1 false
  %257 = add i32 %221, 4
  %258 = zext i32 %257 to i64
  %259 = getelementptr inbounds i8, ptr %0, i64 %258
  %260 = load i8, ptr %259, align 1, !tbaa !28
  %261 = icmp ugt i8 %74, %260
  %262 = sub i8 %74, %260
  %263 = sub i8 %260, %74
  %264 = select i1 %261, i8 %262, i8 %263
  %265 = zext i8 %264 to i16
  %.not.4.3 = icmp ugt i16 %75, %265
  %.not106.4.3 = icmp ugt i16 %77, %265
  %or.cond206 = select i1 %.not.4.3, i1 %.not106.4.3, i1 false
  %266 = mul i32 %68, %44
  %267 = add i32 %266, %.096119
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds i8, ptr %0, i64 %268
  %270 = load i8, ptr %269, align 1, !tbaa !28
  %271 = icmp ugt i8 %74, %270
  %272 = sub i8 %74, %270
  %273 = sub i8 %270, %74
  %274 = select i1 %271, i8 %272, i8 %273
  %275 = zext i8 %274 to i16
  %.not.4180 = icmp ugt i16 %75, %275
  br i1 %.not.4180, label %276, label %278

276:                                              ; preds = %.preheader108
  %.not106.4181 = icmp ugt i16 %77, %275
  br i1 %.not106.4181, label %277, label %278

277:                                              ; preds = %276
  %.not107.4182 = icmp ugt i16 %79, %275
  %..4 = select i1 %.not107.4182, i16 %81, i16 %80
  br label %278

278:                                              ; preds = %277, %276, %.preheader108
  %279 = phi i16 [ %76, %.preheader108 ], [ %78, %276 ], [ %..4, %277 ]
  %280 = add i32 %267, 1
  %281 = zext i32 %280 to i64
  %282 = getelementptr inbounds i8, ptr %0, i64 %281
  %283 = load i8, ptr %282, align 1, !tbaa !28
  %284 = icmp ugt i8 %74, %283
  %285 = sub i8 %74, %283
  %286 = sub i8 %283, %74
  %287 = select i1 %284, i8 %285, i8 %286
  %288 = zext i8 %287 to i16
  %.not.1.4 = icmp ugt i16 %75, %288
  br i1 %.not.1.4, label %289, label %291

289:                                              ; preds = %278
  %.not106.1.4 = icmp ugt i16 %77, %288
  br i1 %.not106.1.4, label %290, label %291

290:                                              ; preds = %289
  %.not107.1.4 = icmp ugt i16 %79, %288
  %.156.4 = select i1 %.not107.1.4, i16 %81, i16 %80
  br label %291

291:                                              ; preds = %290, %289, %278
  %292 = phi i16 [ %76, %278 ], [ %78, %289 ], [ %.156.4, %290 ]
  %293 = add i32 %267, 2
  %294 = zext i32 %293 to i64
  %295 = getelementptr inbounds i8, ptr %0, i64 %294
  %296 = load i8, ptr %295, align 1, !tbaa !28
  %297 = icmp ugt i8 %74, %296
  %298 = sub i8 %74, %296
  %299 = sub i8 %296, %74
  %300 = select i1 %297, i8 %298, i8 %299
  %301 = zext i8 %300 to i16
  %.not.2.4 = icmp ugt i16 %75, %301
  br i1 %.not.2.4, label %302, label %304

302:                                              ; preds = %291
  %.not106.2.4 = icmp ugt i16 %77, %301
  br i1 %.not106.2.4, label %303, label %304

303:                                              ; preds = %302
  %.not107.2.4 = icmp ugt i16 %79, %301
  %.157.4 = select i1 %.not107.2.4, i16 %81, i16 %80
  br label %304

304:                                              ; preds = %303, %302, %291
  %305 = phi i16 [ %76, %291 ], [ %78, %302 ], [ %.157.4, %303 ]
  %306 = add i32 %267, 3
  %307 = zext i32 %306 to i64
  %308 = getelementptr inbounds i8, ptr %0, i64 %307
  %309 = load i8, ptr %308, align 1, !tbaa !28
  %310 = icmp ugt i8 %74, %309
  %311 = sub i8 %74, %309
  %312 = sub i8 %309, %74
  %313 = select i1 %310, i8 %311, i8 %312
  %314 = zext i8 %313 to i16
  %.not.3.4 = icmp ugt i16 %75, %314
  br i1 %.not.3.4, label %315, label %317

315:                                              ; preds = %304
  %.not106.3.4 = icmp ugt i16 %77, %314
  br i1 %.not106.3.4, label %316, label %317

316:                                              ; preds = %315
  %.not107.3.4 = icmp ugt i16 %79, %314
  %.158.4 = select i1 %.not107.3.4, i16 %81, i16 %80
  br label %317

317:                                              ; preds = %316, %315, %304
  %318 = phi i16 [ %76, %304 ], [ %78, %315 ], [ %.158.4, %316 ]
  %319 = add i32 %267, 4
  %320 = zext i32 %319 to i64
  %321 = getelementptr inbounds i8, ptr %0, i64 %320
  %322 = load i8, ptr %321, align 1, !tbaa !28
  %323 = icmp ugt i8 %74, %322
  %324 = sub i8 %74, %322
  %325 = sub i8 %322, %74
  %326 = select i1 %323, i8 %324, i8 %325
  %327 = zext i8 %326 to i16
  %.not.4.4 = icmp ugt i16 %75, %327
  br i1 %.not.4.4, label %328, label %.preheader.preheader

328:                                              ; preds = %317
  %.not106.4.4 = icmp ugt i16 %77, %327
  br i1 %.not106.4.4, label %329, label %.preheader.preheader

329:                                              ; preds = %328
  %.not107.4.4 = icmp ugt i16 %79, %327
  %.159.4 = select i1 %.not107.4.4, i16 %81, i16 %80
  br label %.preheader.preheader

.preheader.preheader:                             ; preds = %329, %328, %317
  %330 = phi i16 [ %76, %317 ], [ %78, %328 ], [ %.159.4, %329 ]
  %331 = mul i32 %68, %27
  %332 = add i32 %331, %.096119
  %333 = zext i32 %332 to i64
  %334 = getelementptr inbounds i8, ptr %0, i64 %333
  %335 = load i8, ptr %334, align 1, !tbaa !28
  %336 = zext i8 %335 to i32
  %337 = add i32 %332, 1
  %338 = zext i32 %337 to i64
  %339 = getelementptr inbounds i8, ptr %0, i64 %338
  %340 = load i8, ptr %339, align 1, !tbaa !28
  %341 = zext i8 %340 to i32
  %342 = add i32 %332, 2
  %343 = zext i32 %342 to i64
  %344 = getelementptr inbounds i8, ptr %0, i64 %343
  %345 = load i8, ptr %344, align 1, !tbaa !28
  %346 = zext i8 %345 to i32
  %347 = add i32 %332, 3
  %348 = zext i32 %347 to i64
  %349 = getelementptr inbounds i8, ptr %0, i64 %348
  %350 = load i8, ptr %349, align 1, !tbaa !28
  %351 = zext i8 %350 to i32
  %352 = add i32 %332, 4
  %353 = zext i32 %352 to i64
  %354 = getelementptr inbounds i8, ptr %0, i64 %353
  %355 = load i8, ptr %354, align 1, !tbaa !28
  %356 = zext i8 %355 to i32
  %357 = mul i32 %68, %31
  %358 = add i32 %357, %.096119
  %359 = zext i32 %358 to i64
  %360 = getelementptr inbounds i8, ptr %0, i64 %359
  %361 = load i8, ptr %360, align 1, !tbaa !28
  %362 = zext i8 %361 to i32
  %363 = add i32 %358, 1
  %364 = zext i32 %363 to i64
  %365 = getelementptr inbounds i8, ptr %0, i64 %364
  %366 = load i8, ptr %365, align 1, !tbaa !28
  %367 = zext i8 %366 to i32
  %368 = add i32 %358, 2
  %369 = zext i32 %368 to i64
  %370 = getelementptr inbounds i8, ptr %0, i64 %369
  %371 = load i8, ptr %370, align 1, !tbaa !28
  %372 = zext i8 %371 to i32
  %373 = add i32 %358, 3
  %374 = zext i32 %373 to i64
  %375 = getelementptr inbounds i8, ptr %0, i64 %374
  %376 = load i8, ptr %375, align 1, !tbaa !28
  %377 = zext i8 %376 to i32
  %378 = add i32 %358, 4
  %379 = zext i32 %378 to i64
  %380 = getelementptr inbounds i8, ptr %0, i64 %379
  %381 = load i8, ptr %380, align 1, !tbaa !28
  %382 = zext i8 %381 to i32
  %383 = add i32 %69, %.096119
  %384 = zext i32 %383 to i64
  %385 = getelementptr inbounds i8, ptr %0, i64 %384
  %386 = load i8, ptr %385, align 1, !tbaa !28
  %387 = zext i8 %386 to i32
  %388 = add i32 %383, 1
  %389 = zext i32 %388 to i64
  %390 = getelementptr inbounds i8, ptr %0, i64 %389
  %391 = load i8, ptr %390, align 1, !tbaa !28
  %392 = zext i8 %391 to i32
  %393 = add i32 %383, 2
  %394 = zext i32 %393 to i64
  %395 = getelementptr inbounds i8, ptr %0, i64 %394
  %396 = load i8, ptr %395, align 1, !tbaa !28
  %397 = zext i8 %396 to i32
  %398 = add i32 %383, 3
  %399 = zext i32 %398 to i64
  %400 = getelementptr inbounds i8, ptr %0, i64 %399
  %401 = load i8, ptr %400, align 1, !tbaa !28
  %402 = zext i8 %401 to i32
  %403 = add i32 %383, 4
  %404 = zext i32 %403 to i64
  %405 = getelementptr inbounds i8, ptr %0, i64 %404
  %406 = load i8, ptr %405, align 1, !tbaa !28
  %407 = zext i8 %406 to i32
  %408 = mul i32 %33, %68
  %409 = add i32 %408, %.096119
  %410 = load <16 x i16>, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 256), align 8, !tbaa !25
  %411 = insertelement <16 x i16> poison, i16 %279, i64 0
  %412 = insertelement <16 x i16> %411, i16 %45, i64 1
  %413 = insertelement <16 x i16> %412, i16 %46, i64 2
  %414 = insertelement <16 x i16> %413, i16 %47, i64 3
  %415 = insertelement <16 x i16> %414, i16 %48, i64 4
  %416 = insertelement <16 x i16> %415, i16 %49, i64 5
  %417 = insertelement <16 x i16> %416, i16 %292, i64 6
  %418 = insertelement <16 x i16> %417, i16 %50, i64 7
  %419 = shufflevector <16 x i16> %418, <16 x i16> %55, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison>
  %420 = insertelement <16 x i16> %419, i16 %305, i64 12
  %421 = insertelement <16 x i16> %420, i16 %52, i64 13
  %422 = insertelement <16 x i16> %421, i16 %53, i64 14
  %423 = insertelement <16 x i16> %422, i16 %54, i64 15
  %424 = mul <16 x i16> %423, %410
  %425 = zext <16 x i16> %424 to <16 x i32>
  %426 = extractelement <16 x i32> %425, i64 0
  %427 = mul nuw nsw i32 %426, %336
  %428 = extractelement <16 x i32> %425, i64 1
  %429 = mul nuw nsw i32 %428, %341
  %430 = add nuw nsw i32 %429, %427
  %431 = extractelement <16 x i32> %425, i64 2
  %432 = mul nuw nsw i32 %431, %346
  %433 = add nuw nsw i32 %432, %430
  %434 = extractelement <16 x i32> %425, i64 3
  %435 = mul nuw nsw i32 %434, %351
  %436 = add nuw nsw i32 %435, %433
  %437 = extractelement <16 x i32> %425, i64 4
  %438 = mul nuw nsw i32 %437, %356
  %439 = add nuw nsw i32 %438, %436
  %440 = extractelement <16 x i32> %425, i64 5
  %441 = mul nuw nsw i32 %440, %362
  %442 = add nuw nsw i32 %441, %439
  %443 = extractelement <16 x i32> %425, i64 6
  %444 = mul nuw nsw i32 %443, %367
  %445 = add nuw nsw i32 %444, %442
  %446 = extractelement <16 x i32> %425, i64 7
  %447 = mul nuw nsw i32 %446, %372
  %448 = add nuw nsw i32 %447, %445
  %449 = extractelement <16 x i32> %425, i64 8
  %450 = mul nuw nsw i32 %449, %377
  %451 = add nuw nsw i32 %450, %448
  %452 = extractelement <16 x i32> %425, i64 9
  %453 = mul nuw nsw i32 %452, %382
  %454 = add nuw nsw i32 %453, %451
  %455 = extractelement <16 x i32> %425, i64 10
  %456 = mul nuw nsw i32 %455, %387
  %457 = add nuw nsw i32 %456, %454
  %458 = extractelement <16 x i32> %425, i64 11
  %459 = mul nuw nsw i32 %458, %392
  %460 = add nuw nsw i32 %459, %457
  %461 = extractelement <16 x i32> %425, i64 12
  %462 = mul nuw nsw i32 %461, %397
  %463 = add nuw nsw i32 %462, %460
  %464 = extractelement <16 x i32> %425, i64 13
  %465 = mul nuw nsw i32 %464, %402
  %466 = add nuw nsw i32 %465, %463
  %467 = extractelement <16 x i32> %425, i64 14
  %468 = mul nuw nsw i32 %467, %407
  %469 = add nuw nsw i32 %468, %466
  %470 = zext i32 %409 to i64
  %471 = getelementptr inbounds i8, ptr %0, i64 %470
  %472 = load i8, ptr %471, align 1, !tbaa !28
  %473 = zext i8 %472 to i32
  %474 = extractelement <16 x i32> %425, i64 15
  %475 = mul nuw nsw i32 %474, %473
  %476 = add nuw nsw i32 %475, %469
  %477 = add i32 %409, 1
  %478 = zext i32 %477 to i64
  %479 = getelementptr inbounds i8, ptr %0, i64 %478
  %480 = load i8, ptr %479, align 1, !tbaa !28
  %481 = zext i8 %480 to i32
  %482 = add i32 %409, 2
  %483 = zext i32 %482 to i64
  %484 = getelementptr inbounds i8, ptr %0, i64 %483
  %485 = load i8, ptr %484, align 1, !tbaa !28
  %486 = zext i8 %485 to i32
  %487 = add i32 %409, 3
  %488 = zext i32 %487 to i64
  %489 = getelementptr inbounds i8, ptr %0, i64 %488
  %490 = load i8, ptr %489, align 1, !tbaa !28
  %491 = zext i8 %490 to i32
  %492 = add i32 %409, 4
  %493 = zext i32 %492 to i64
  %494 = getelementptr inbounds i8, ptr %0, i64 %493
  %495 = load i8, ptr %494, align 1, !tbaa !28
  %496 = zext i8 %495 to i32
  %497 = mul i32 %35, %68
  %498 = add i32 %497, %.096119
  %499 = zext i32 %498 to i64
  %500 = getelementptr inbounds i8, ptr %0, i64 %499
  %501 = load i8, ptr %500, align 1, !tbaa !28
  %502 = zext i8 %501 to i32
  %503 = add i32 %498, 1
  %504 = zext i32 %503 to i64
  %505 = getelementptr inbounds i8, ptr %0, i64 %504
  %506 = load i8, ptr %505, align 1, !tbaa !28
  %507 = zext i8 %506 to i32
  %508 = add i32 %498, 2
  %509 = zext i32 %508 to i64
  %510 = getelementptr inbounds i8, ptr %0, i64 %509
  %511 = load i8, ptr %510, align 1, !tbaa !28
  %512 = zext i8 %511 to i32
  %513 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 288), align 8, !tbaa !25
  %514 = insertelement <8 x i16> %62, i16 %318, i64 2
  %515 = insertelement <8 x i16> %514, i16 %57, i64 3
  %516 = insertelement <8 x i16> %515, i16 %58, i64 4
  %517 = insertelement <8 x i16> %516, i16 %59, i64 5
  %518 = insertelement <8 x i16> %517, i16 %60, i64 6
  %519 = insertelement <8 x i16> %518, i16 %61, i64 7
  %520 = mul <8 x i16> %519, %513
  %521 = zext <8 x i16> %520 to <8 x i32>
  %522 = extractelement <8 x i32> %521, i64 0
  %523 = mul nuw nsw i32 %522, %481
  %524 = add nuw nsw i32 %523, %476
  %525 = extractelement <8 x i32> %521, i64 1
  %526 = mul nuw nsw i32 %525, %486
  %527 = add nuw nsw i32 %526, %524
  %528 = extractelement <8 x i32> %521, i64 2
  %529 = mul nuw nsw i32 %528, %491
  %530 = add nuw nsw i32 %529, %527
  %531 = extractelement <8 x i32> %521, i64 3
  %532 = mul nuw nsw i32 %531, %496
  %533 = add nuw nsw i32 %532, %530
  %534 = extractelement <8 x i32> %521, i64 4
  %535 = mul nuw nsw i32 %534, %502
  %536 = add nuw nsw i32 %535, %533
  %537 = extractelement <8 x i32> %521, i64 5
  %538 = mul nuw nsw i32 %537, %507
  %539 = add nuw nsw i32 %538, %536
  %540 = extractelement <8 x i32> %521, i64 6
  %541 = mul nuw nsw i32 %540, %512
  %542 = add nuw nsw i32 %541, %539
  %543 = add i32 %498, 3
  %544 = zext i32 %543 to i64
  %545 = getelementptr inbounds i8, ptr %0, i64 %544
  %546 = load i8, ptr %545, align 1, !tbaa !28
  %547 = zext i8 %546 to i32
  %548 = extractelement <8 x i32> %521, i64 7
  %549 = mul nuw nsw i32 %548, %547
  %550 = add nuw nsw i32 %549, %542
  %551 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 304), align 8, !tbaa !25
  %552 = mul i16 %330, %551
  %553 = zext i16 %552 to i32
  %554 = add i32 %498, 4
  %555 = zext i32 %554 to i64
  %556 = getelementptr inbounds i8, ptr %0, i64 %555
  %557 = load i8, ptr %556, align 1, !tbaa !28
  %558 = zext i8 %557 to i32
  %559 = mul nuw nsw i32 %553, %558
  %560 = add nuw nsw i32 %559, %550
  %561 = tail call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %425)
  %562 = tail call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %521)
  %op.rdx = add i32 %561, %562
  %op.rdx165 = add i32 %op.rdx, %553
  %563 = udiv i32 %560, %op.rdx165
  %564 = trunc i32 %563 to i8
  %565 = getelementptr inbounds i8, ptr %1, i64 %72
  store i8 %564, ptr %565, align 1, !tbaa !28
  %566 = add nuw nsw i32 %.096119, 1
  %567 = load i32, ptr @g_isp_config, align 8, !tbaa !24
  %568 = add i32 %567, -5
  %569 = icmp ult i32 %566, %568
  br i1 %569, label %.preheader108, label %._crit_edge.loopexit, !llvm.loop !29
}

; 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v16i32(<16 x i32>) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v8i32(<8 x i32>) #2

attributes #0 = { mustprogress nofree 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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, !7, i64 4}
!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, !7, i64 0}
!25 = !{!10, !10, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!8, !8, i64 0}
!29 = distinct !{!29, !27}


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