; LLVM IR from lesialin/ImageSignalProcessing_C :: src/isp_dpc.ll (Z7isp_dpcPt)

; 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 }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@g_isp_config = external global %struct.isp_config_t, align 8
@.str = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z7isp_dpcPt(ptr noundef %0) #0 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i16, align 2
  %4 = alloca i16, align 2
  %5 = alloca i16, align 2
  %6 = alloca i8, align 1
  %7 = alloca i8, align 1
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca [8 x i16], align 16
  %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 i16, align 2
  %16 = alloca i16, align 2
  %17 = alloca [4 x i16], align 2
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i16, align 2
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %4) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #6
  store i8 0, ptr %7, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #6
  call void @llvm.memset.p0.i64(ptr align 16 %9, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 2, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %26 = load i32, ptr @g_isp_config, align 8, !tbaa !11
  %27 = trunc i32 %26 to i16
  store i16 %27, ptr %3, align 2, !tbaa !27
  %28 = load i32, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 1), align 4, !tbaa !28
  %29 = trunc i32 %28 to i16
  store i16 %29, ptr %4, align 2, !tbaa !27
  %30 = load i16, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 2), align 8, !tbaa !29
  %31 = zext i16 %30 to i32
  %32 = shl i32 1, %31
  %33 = sub nsw i32 %32, 1
  %34 = trunc i32 %33 to i16
  store i16 %34, ptr %5, align 2, !tbaa !27
  %35 = load i16, ptr getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 6), align 8, !tbaa !30
  %36 = trunc i16 %35 to i8
  store i8 %36, ptr %6, align 1, !tbaa !31
  %37 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(32) getelementptr inbounds (%struct.isp_config_t, ptr @g_isp_config, i32 0, i32 8))
          to label %38 unwind label %46

38:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  store i32 2, ptr %21, align 4, !tbaa !32
  br label %39

39:                                               ; preds = %548, %38
  %40 = load i32, ptr %21, align 4, !tbaa !32
  %41 = load i16, ptr %4, align 2, !tbaa !27
  %42 = zext i16 %41 to i32
  %43 = sub nsw i32 %42, 2
  %44 = icmp slt i32 %40, %43
  br i1 %44, label %50, label %45

45:                                               ; preds = %39
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  br label %551

46:                                               ; preds = %1
  %47 = landingpad { ptr, i32 }
          cleanup
  %48 = extractvalue { ptr, i32 } %47, 0
  store ptr %48, ptr %18, align 8
  %49 = extractvalue { ptr, i32 } %47, 1
  store i32 %49, ptr %19, align 4
  br label %552

50:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 2, ptr %23, align 4, !tbaa !32
  br label %51

51:                                               ; preds = %544, %50
  %52 = load i32, ptr %23, align 4, !tbaa !32
  %53 = load i16, ptr %3, align 2, !tbaa !27
  %54 = zext i16 %53 to i32
  %55 = sub nsw i32 %54, 2
  %56 = icmp slt i32 %52, %55
  br i1 %56, label %58, label %57

57:                                               ; preds = %51
  store i32 5, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %547

58:                                               ; preds = %51
  store i8 1, ptr %7, align 1, !tbaa !9
  %59 = load i32, ptr %21, align 4, !tbaa !32
  %60 = load i16, ptr %3, align 2, !tbaa !27
  %61 = zext i16 %60 to i32
  %62 = mul nsw i32 %59, %61
  %63 = load i32, ptr %23, align 4, !tbaa !32
  %64 = add nsw i32 %62, %63
  store i32 %64, ptr %20, align 4, !tbaa !32
  %65 = load ptr, ptr %2, align 8, !tbaa !5
  %66 = load i32, ptr %20, align 4, !tbaa !32
  %67 = zext i32 %66 to i64
  %68 = getelementptr inbounds i16, ptr %65, i64 %67
  %69 = load i16, ptr %68, align 2, !tbaa !27
  store i16 %69, ptr %10, align 2, !tbaa !27
  %70 = load ptr, ptr %2, align 8, !tbaa !5
  %71 = load i32, ptr %20, align 4, !tbaa !32
  %72 = load i16, ptr %3, align 2, !tbaa !27
  %73 = zext i16 %72 to i32
  %74 = mul nsw i32 2, %73
  %75 = sub i32 %71, %74
  %76 = sub i32 %75, 2
  %77 = zext i32 %76 to i64
  %78 = getelementptr inbounds i16, ptr %70, i64 %77
  %79 = load i16, ptr %78, align 2, !tbaa !27
  %80 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 0
  store i16 %79, ptr %80, align 16, !tbaa !27
  %81 = load ptr, ptr %2, align 8, !tbaa !5
  %82 = load i32, ptr %20, align 4, !tbaa !32
  %83 = load i16, ptr %3, align 2, !tbaa !27
  %84 = zext i16 %83 to i32
  %85 = mul nsw i32 2, %84
  %86 = sub i32 %82, %85
  %87 = zext i32 %86 to i64
  %88 = getelementptr inbounds i16, ptr %81, i64 %87
  %89 = load i16, ptr %88, align 2, !tbaa !27
  %90 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 1
  store i16 %89, ptr %90, align 2, !tbaa !27
  %91 = load ptr, ptr %2, align 8, !tbaa !5
  %92 = load i32, ptr %20, align 4, !tbaa !32
  %93 = load i16, ptr %3, align 2, !tbaa !27
  %94 = zext i16 %93 to i32
  %95 = mul nsw i32 2, %94
  %96 = sub i32 %92, %95
  %97 = add i32 %96, 2
  %98 = zext i32 %97 to i64
  %99 = getelementptr inbounds i16, ptr %91, i64 %98
  %100 = load i16, ptr %99, align 2, !tbaa !27
  %101 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 2
  store i16 %100, ptr %101, align 4, !tbaa !27
  %102 = load ptr, ptr %2, align 8, !tbaa !5
  %103 = load i32, ptr %20, align 4, !tbaa !32
  %104 = sub i32 %103, 2
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds i16, ptr %102, i64 %105
  %107 = load i16, ptr %106, align 2, !tbaa !27
  %108 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 3
  store i16 %107, ptr %108, align 2, !tbaa !27
  %109 = load ptr, ptr %2, align 8, !tbaa !5
  %110 = load i32, ptr %20, align 4, !tbaa !32
  %111 = add i32 %110, 2
  %112 = zext i32 %111 to i64
  %113 = getelementptr inbounds i16, ptr %109, i64 %112
  %114 = load i16, ptr %113, align 2, !tbaa !27
  %115 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 4
  store i16 %114, ptr %115, align 8, !tbaa !27
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = load i32, ptr %20, align 4, !tbaa !32
  %118 = load i16, ptr %3, align 2, !tbaa !27
  %119 = zext i16 %118 to i32
  %120 = mul nsw i32 2, %119
  %121 = add i32 %117, %120
  %122 = sub i32 %121, 2
  %123 = zext i32 %122 to i64
  %124 = getelementptr inbounds i16, ptr %116, i64 %123
  %125 = load i16, ptr %124, align 2, !tbaa !27
  %126 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 5
  store i16 %125, ptr %126, align 2, !tbaa !27
  %127 = load ptr, ptr %2, align 8, !tbaa !5
  %128 = load i32, ptr %20, align 4, !tbaa !32
  %129 = load i16, ptr %3, align 2, !tbaa !27
  %130 = zext i16 %129 to i32
  %131 = mul nsw i32 2, %130
  %132 = add i32 %128, %131
  %133 = zext i32 %132 to i64
  %134 = getelementptr inbounds i16, ptr %127, i64 %133
  %135 = load i16, ptr %134, align 2, !tbaa !27
  %136 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 6
  store i16 %135, ptr %136, align 4, !tbaa !27
  %137 = load ptr, ptr %2, align 8, !tbaa !5
  %138 = load i32, ptr %20, align 4, !tbaa !32
  %139 = load i16, ptr %3, align 2, !tbaa !27
  %140 = zext i16 %139 to i32
  %141 = mul nsw i32 2, %140
  %142 = add i32 %138, %141
  %143 = add i32 %142, 2
  %144 = zext i32 %143 to i64
  %145 = getelementptr inbounds i16, ptr %137, i64 %144
  %146 = load i16, ptr %145, align 2, !tbaa !27
  %147 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 7
  store i16 %146, ptr %147, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !32
  br label %148

148:                                              ; preds = %202, %58
  %149 = load i32, ptr %24, align 4, !tbaa !32
  %150 = icmp slt i32 %149, 8
  br i1 %150, label %152, label %151

151:                                              ; preds = %148
  store i32 8, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %205

152:                                              ; preds = %148
  %153 = load i32, ptr %24, align 4, !tbaa !32
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 %154
  %156 = load i16, ptr %155, align 2, !tbaa !27
  %157 = zext i16 %156 to i32
  %158 = load i16, ptr %10, align 2, !tbaa !27
  %159 = zext i16 %158 to i32
  %160 = icmp sgt i32 %157, %159
  br i1 %160, label %161, label %170

161:                                              ; preds = %152
  %162 = load i32, ptr %24, align 4, !tbaa !32
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 %163
  %165 = load i16, ptr %164, align 2, !tbaa !27
  %166 = zext i16 %165 to i32
  %167 = load i16, ptr %10, align 2, !tbaa !27
  %168 = zext i16 %167 to i32
  %169 = sub nsw i32 %166, %168
  br label %179

170:                                              ; preds = %152
  %171 = load i16, ptr %10, align 2, !tbaa !27
  %172 = zext i16 %171 to i32
  %173 = load i32, ptr %24, align 4, !tbaa !32
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 %174
  %176 = load i16, ptr %175, align 2, !tbaa !27
  %177 = zext i16 %176 to i32
  %178 = sub nsw i32 %172, %177
  br label %179

179:                                              ; preds = %170, %161
  %180 = phi i32 [ %169, %161 ], [ %178, %170 ]
  %181 = trunc i32 %180 to i16
  store i16 %181, ptr %12, align 2, !tbaa !27
  %182 = load i16, ptr %12, align 2, !tbaa !27
  %183 = zext i16 %182 to i32
  %184 = load i8, ptr %6, align 1, !tbaa !31
  %185 = zext i8 %184 to i32
  %186 = icmp sgt i32 %183, %185
  br i1 %186, label %187, label %194

187:                                              ; preds = %179
  %188 = load i8, ptr %7, align 1, !tbaa !9, !range !33, !noundef !34
  %189 = trunc i8 %188 to i1
  %190 = zext i1 %189 to i32
  %191 = and i32 %190, 1
  %192 = icmp ne i32 %191, 0
  %193 = zext i1 %192 to i8
  store i8 %193, ptr %7, align 1, !tbaa !9
  br label %201

194:                                              ; preds = %179
  %195 = load i8, ptr %7, align 1, !tbaa !9, !range !33, !noundef !34
  %196 = trunc i8 %195 to i1
  %197 = zext i1 %196 to i32
  %198 = and i32 %197, 0
  %199 = icmp ne i32 %198, 0
  %200 = zext i1 %199 to i8
  store i8 %200, ptr %7, align 1, !tbaa !9
  br label %201

201:                                              ; preds = %194, %187
  br label %202

202:                                              ; preds = %201
  %203 = load i32, ptr %24, align 4, !tbaa !32
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %24, align 4, !tbaa !32
  br label %148, !llvm.loop !35

205:                                              ; preds = %151
  %206 = load i8, ptr %7, align 1, !tbaa !9, !range !33, !noundef !34
  %207 = trunc i8 %206 to i1
  br i1 %207, label %208, label %543

208:                                              ; preds = %205
  %209 = load i16, ptr %10, align 2, !tbaa !27
  %210 = zext i16 %209 to i32
  %211 = shl i32 %210, 1
  %212 = trunc i32 %211 to i16
  store i16 %212, ptr %11, align 2, !tbaa !27
  %213 = call noundef i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str) #6
  %214 = icmp eq i32 %213, 0
  br i1 %214, label %215, label %488

215:                                              ; preds = %208
  %216 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 1
  %217 = load i16, ptr %216, align 2, !tbaa !27
  %218 = zext i16 %217 to i32
  %219 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 6
  %220 = load i16, ptr %219, align 4, !tbaa !27
  %221 = zext i16 %220 to i32
  %222 = add nsw i32 %218, %221
  %223 = trunc i32 %222 to i16
  %224 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 0
  store i16 %223, ptr %224, align 2, !tbaa !27
  %225 = load i16, ptr %11, align 2, !tbaa !27
  %226 = zext i16 %225 to i32
  %227 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 0
  %228 = load i16, ptr %227, align 2, !tbaa !27
  %229 = zext i16 %228 to i32
  %230 = icmp sgt i32 %226, %229
  br i1 %230, label %231, label %238

231:                                              ; preds = %215
  %232 = load i16, ptr %11, align 2, !tbaa !27
  %233 = zext i16 %232 to i32
  %234 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 0
  %235 = load i16, ptr %234, align 2, !tbaa !27
  %236 = zext i16 %235 to i32
  %237 = sub nsw i32 %233, %236
  br label %245

238:                                              ; preds = %215
  %239 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 0
  %240 = load i16, ptr %239, align 2, !tbaa !27
  %241 = zext i16 %240 to i32
  %242 = load i16, ptr %11, align 2, !tbaa !27
  %243 = zext i16 %242 to i32
  %244 = sub nsw i32 %241, %243
  br label %245

245:                                              ; preds = %238, %231
  %246 = phi i32 [ %237, %231 ], [ %244, %238 ]
  %247 = trunc i32 %246 to i16
  store i16 %247, ptr %13, align 2, !tbaa !27
  %248 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 3
  %249 = load i16, ptr %248, align 2, !tbaa !27
  %250 = zext i16 %249 to i32
  %251 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 4
  %252 = load i16, ptr %251, align 8, !tbaa !27
  %253 = zext i16 %252 to i32
  %254 = add nsw i32 %250, %253
  %255 = trunc i32 %254 to i16
  %256 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 1
  store i16 %255, ptr %256, align 2, !tbaa !27
  %257 = load i16, ptr %11, align 2, !tbaa !27
  %258 = zext i16 %257 to i32
  %259 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 1
  %260 = load i16, ptr %259, align 2, !tbaa !27
  %261 = zext i16 %260 to i32
  %262 = icmp sgt i32 %258, %261
  br i1 %262, label %263, label %270

263:                                              ; preds = %245
  %264 = load i16, ptr %11, align 2, !tbaa !27
  %265 = zext i16 %264 to i32
  %266 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 1
  %267 = load i16, ptr %266, align 2, !tbaa !27
  %268 = zext i16 %267 to i32
  %269 = sub nsw i32 %265, %268
  br label %277

270:                                              ; preds = %245
  %271 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 1
  %272 = load i16, ptr %271, align 2, !tbaa !27
  %273 = zext i16 %272 to i32
  %274 = load i16, ptr %11, align 2, !tbaa !27
  %275 = zext i16 %274 to i32
  %276 = sub nsw i32 %273, %275
  br label %277

277:                                              ; preds = %270, %263
  %278 = phi i32 [ %269, %263 ], [ %276, %270 ]
  %279 = trunc i32 %278 to i16
  store i16 %279, ptr %14, align 2, !tbaa !27
  %280 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 2
  %281 = load i16, ptr %280, align 4, !tbaa !27
  %282 = zext i16 %281 to i32
  %283 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 5
  %284 = load i16, ptr %283, align 2, !tbaa !27
  %285 = zext i16 %284 to i32
  %286 = add nsw i32 %282, %285
  %287 = trunc i32 %286 to i16
  %288 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 2
  store i16 %287, ptr %288, align 2, !tbaa !27
  %289 = load i16, ptr %11, align 2, !tbaa !27
  %290 = zext i16 %289 to i32
  %291 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 2
  %292 = load i16, ptr %291, align 2, !tbaa !27
  %293 = zext i16 %292 to i32
  %294 = icmp sgt i32 %290, %293
  br i1 %294, label %295, label %302

295:                                              ; preds = %277
  %296 = load i16, ptr %11, align 2, !tbaa !27
  %297 = zext i16 %296 to i32
  %298 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 2
  %299 = load i16, ptr %298, align 2, !tbaa !27
  %300 = zext i16 %299 to i32
  %301 = sub nsw i32 %297, %300
  br label %309

302:                                              ; preds = %277
  %303 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 2
  %304 = load i16, ptr %303, align 2, !tbaa !27
  %305 = zext i16 %304 to i32
  %306 = load i16, ptr %11, align 2, !tbaa !27
  %307 = zext i16 %306 to i32
  %308 = sub nsw i32 %305, %307
  br label %309

309:                                              ; preds = %302, %295
  %310 = phi i32 [ %301, %295 ], [ %308, %302 ]
  %311 = trunc i32 %310 to i16
  store i16 %311, ptr %15, align 2, !tbaa !27
  %312 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 0
  %313 = load i16, ptr %312, align 16, !tbaa !27
  %314 = zext i16 %313 to i32
  %315 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 7
  %316 = load i16, ptr %315, align 2, !tbaa !27
  %317 = zext i16 %316 to i32
  %318 = add nsw i32 %314, %317
  %319 = trunc i32 %318 to i16
  %320 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 3
  store i16 %319, ptr %320, align 2, !tbaa !27
  %321 = load i16, ptr %11, align 2, !tbaa !27
  %322 = zext i16 %321 to i32
  %323 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 3
  %324 = load i16, ptr %323, align 2, !tbaa !27
  %325 = zext i16 %324 to i32
  %326 = icmp sgt i32 %322, %325
  br i1 %326, label %327, label %334

327:                                              ; preds = %309
  %328 = load i16, ptr %11, align 2, !tbaa !27
  %329 = zext i16 %328 to i32
  %330 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 3
  %331 = load i16, ptr %330, align 2, !tbaa !27
  %332 = zext i16 %331 to i32
  %333 = sub nsw i32 %329, %332
  br label %341

334:                                              ; preds = %309
  %335 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 3
  %336 = load i16, ptr %335, align 2, !tbaa !27
  %337 = zext i16 %336 to i32
  %338 = load i16, ptr %11, align 2, !tbaa !27
  %339 = zext i16 %338 to i32
  %340 = sub nsw i32 %337, %339
  br label %341

341:                                              ; preds = %334, %327
  %342 = phi i32 [ %333, %327 ], [ %340, %334 ]
  %343 = trunc i32 %342 to i16
  store i16 %343, ptr %16, align 2, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #6
  store i16 9999, ptr %25, align 2, !tbaa !27
  %344 = load i16, ptr %13, align 2, !tbaa !27
  %345 = zext i16 %344 to i32
  %346 = load i16, ptr %25, align 2, !tbaa !27
  %347 = zext i16 %346 to i32
  %348 = icmp slt i32 %345, %347
  br i1 %348, label %349, label %351

349:                                              ; preds = %341
  %350 = load i16, ptr %13, align 2, !tbaa !27
  store i16 %350, ptr %25, align 2, !tbaa !27
  br label %351

351:                                              ; preds = %349, %341
  %352 = load i16, ptr %14, align 2, !tbaa !27
  %353 = zext i16 %352 to i32
  %354 = load i16, ptr %25, align 2, !tbaa !27
  %355 = zext i16 %354 to i32
  %356 = icmp slt i32 %353, %355
  br i1 %356, label %357, label %359

357:                                              ; preds = %351
  %358 = load i16, ptr %14, align 2, !tbaa !27
  store i16 %358, ptr %25, align 2, !tbaa !27
  br label %359

359:                                              ; preds = %357, %351
  %360 = load i16, ptr %15, align 2, !tbaa !27
  %361 = zext i16 %360 to i32
  %362 = load i16, ptr %25, align 2, !tbaa !27
  %363 = zext i16 %362 to i32
  %364 = icmp slt i32 %361, %363
  br i1 %364, label %365, label %367

365:                                              ; preds = %359
  %366 = load i16, ptr %15, align 2, !tbaa !27
  store i16 %366, ptr %25, align 2, !tbaa !27
  br label %367

367:                                              ; preds = %365, %359
  %368 = load i16, ptr %16, align 2, !tbaa !27
  %369 = zext i16 %368 to i32
  %370 = load i16, ptr %25, align 2, !tbaa !27
  %371 = zext i16 %370 to i32
  %372 = icmp slt i32 %369, %371
  br i1 %372, label %373, label %375

373:                                              ; preds = %367
  %374 = load i16, ptr %16, align 2, !tbaa !27
  store i16 %374, ptr %25, align 2, !tbaa !27
  br label %375

375:                                              ; preds = %373, %367
  %376 = load i16, ptr %25, align 2, !tbaa !27
  %377 = zext i16 %376 to i32
  %378 = load i16, ptr %13, align 2, !tbaa !27
  %379 = zext i16 %378 to i32
  %380 = icmp eq i32 %377, %379
  br i1 %380, label %381, label %403

381:                                              ; preds = %375
  %382 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 0
  %383 = load i16, ptr %382, align 2, !tbaa !27
  %384 = zext i16 %383 to i32
  %385 = add nsw i32 %384, 1
  %386 = ashr i32 %385, 1
  %387 = trunc i32 %386 to i16
  store i16 %387, ptr %10, align 2, !tbaa !27
  %388 = load i16, ptr %10, align 2, !tbaa !27
  %389 = zext i16 %388 to i32
  %390 = load i16, ptr %5, align 2, !tbaa !27
  %391 = zext i16 %390 to i32
  %392 = icmp sgt i32 %389, %391
  br i1 %392, label %393, label %395

393:                                              ; preds = %381
  %394 = load i16, ptr %5, align 2, !tbaa !27
  br label %397

395:                                              ; preds = %381
  %396 = load i16, ptr %10, align 2, !tbaa !27
  br label %397

397:                                              ; preds = %395, %393
  %398 = phi i16 [ %394, %393 ], [ %396, %395 ]
  %399 = load ptr, ptr %2, align 8, !tbaa !5
  %400 = load i32, ptr %20, align 4, !tbaa !32
  %401 = zext i32 %400 to i64
  %402 = getelementptr inbounds i16, ptr %399, i64 %401
  store i16 %398, ptr %402, align 2, !tbaa !27
  br label %403

403:                                              ; preds = %397, %375
  %404 = load i16, ptr %25, align 2, !tbaa !27
  %405 = zext i16 %404 to i32
  %406 = load i16, ptr %14, align 2, !tbaa !27
  %407 = zext i16 %406 to i32
  %408 = icmp eq i32 %405, %407
  br i1 %408, label %409, label %431

409:                                              ; preds = %403
  %410 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 1
  %411 = load i16, ptr %410, align 2, !tbaa !27
  %412 = zext i16 %411 to i32
  %413 = add nsw i32 %412, 1
  %414 = ashr i32 %413, 1
  %415 = trunc i32 %414 to i16
  store i16 %415, ptr %10, align 2, !tbaa !27
  %416 = load i16, ptr %10, align 2, !tbaa !27
  %417 = zext i16 %416 to i32
  %418 = load i16, ptr %5, align 2, !tbaa !27
  %419 = zext i16 %418 to i32
  %420 = icmp sgt i32 %417, %419
  br i1 %420, label %421, label %423

421:                                              ; preds = %409
  %422 = load i16, ptr %5, align 2, !tbaa !27
  br label %425

423:                                              ; preds = %409
  %424 = load i16, ptr %10, align 2, !tbaa !27
  br label %425

425:                                              ; preds = %423, %421
  %426 = phi i16 [ %422, %421 ], [ %424, %423 ]
  %427 = load ptr, ptr %2, align 8, !tbaa !5
  %428 = load i32, ptr %20, align 4, !tbaa !32
  %429 = zext i32 %428 to i64
  %430 = getelementptr inbounds i16, ptr %427, i64 %429
  store i16 %426, ptr %430, align 2, !tbaa !27
  br label %431

431:                                              ; preds = %425, %403
  %432 = load i16, ptr %25, align 2, !tbaa !27
  %433 = zext i16 %432 to i32
  %434 = load i16, ptr %15, align 2, !tbaa !27
  %435 = zext i16 %434 to i32
  %436 = icmp eq i32 %433, %435
  br i1 %436, label %437, label %459

437:                                              ; preds = %431
  %438 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 2
  %439 = load i16, ptr %438, align 2, !tbaa !27
  %440 = zext i16 %439 to i32
  %441 = add nsw i32 %440, 1
  %442 = ashr i32 %441, 1
  %443 = trunc i32 %442 to i16
  store i16 %443, ptr %10, align 2, !tbaa !27
  %444 = load i16, ptr %10, align 2, !tbaa !27
  %445 = zext i16 %444 to i32
  %446 = load i16, ptr %5, align 2, !tbaa !27
  %447 = zext i16 %446 to i32
  %448 = icmp sgt i32 %445, %447
  br i1 %448, label %449, label %451

449:                                              ; preds = %437
  %450 = load i16, ptr %5, align 2, !tbaa !27
  br label %453

451:                                              ; preds = %437
  %452 = load i16, ptr %10, align 2, !tbaa !27
  br label %453

453:                                              ; preds = %451, %449
  %454 = phi i16 [ %450, %449 ], [ %452, %451 ]
  %455 = load ptr, ptr %2, align 8, !tbaa !5
  %456 = load i32, ptr %20, align 4, !tbaa !32
  %457 = zext i32 %456 to i64
  %458 = getelementptr inbounds i16, ptr %455, i64 %457
  store i16 %454, ptr %458, align 2, !tbaa !27
  br label %459

459:                                              ; preds = %453, %431
  %460 = load i16, ptr %25, align 2, !tbaa !27
  %461 = zext i16 %460 to i32
  %462 = load i16, ptr %16, align 2, !tbaa !27
  %463 = zext i16 %462 to i32
  %464 = icmp eq i32 %461, %463
  br i1 %464, label %465, label %487

465:                                              ; preds = %459
  %466 = getelementptr inbounds [4 x i16], ptr %17, i64 0, i64 3
  %467 = load i16, ptr %466, align 2, !tbaa !27
  %468 = zext i16 %467 to i32
  %469 = add nsw i32 %468, 1
  %470 = ashr i32 %469, 1
  %471 = trunc i32 %470 to i16
  store i16 %471, ptr %10, align 2, !tbaa !27
  %472 = load i16, ptr %10, align 2, !tbaa !27
  %473 = zext i16 %472 to i32
  %474 = load i16, ptr %5, align 2, !tbaa !27
  %475 = zext i16 %474 to i32
  %476 = icmp sgt i32 %473, %475
  br i1 %476, label %477, label %479

477:                                              ; preds = %465
  %478 = load i16, ptr %5, align 2, !tbaa !27
  br label %481

479:                                              ; preds = %465
  %480 = load i16, ptr %10, align 2, !tbaa !27
  br label %481

481:                                              ; preds = %479, %477
  %482 = phi i16 [ %478, %477 ], [ %480, %479 ]
  %483 = load ptr, ptr %2, align 8, !tbaa !5
  %484 = load i32, ptr %20, align 4, !tbaa !32
  %485 = zext i32 %484 to i64
  %486 = getelementptr inbounds i16, ptr %483, i64 %485
  store i16 %482, ptr %486, align 2, !tbaa !27
  br label %487

487:                                              ; preds = %481, %459
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #6
  br label %542

488:                                              ; preds = %208
  %489 = call noundef i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef @.str.1) #6
  %490 = icmp eq i32 %489, 0
  br i1 %490, label %491, label %524

491:                                              ; preds = %488
  %492 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 1
  %493 = load i16, ptr %492, align 2, !tbaa !27
  %494 = zext i16 %493 to i32
  %495 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 3
  %496 = load i16, ptr %495, align 2, !tbaa !27
  %497 = zext i16 %496 to i32
  %498 = add nsw i32 %494, %497
  %499 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 4
  %500 = load i16, ptr %499, align 8, !tbaa !27
  %501 = zext i16 %500 to i32
  %502 = add nsw i32 %498, %501
  %503 = getelementptr inbounds [8 x i16], ptr %9, i64 0, i64 6
  %504 = load i16, ptr %503, align 4, !tbaa !27
  %505 = zext i16 %504 to i32
  %506 = add nsw i32 %502, %505
  %507 = ashr i32 %506, 2
  %508 = trunc i32 %507 to i16
  store i16 %508, ptr %10, align 2, !tbaa !27
  %509 = load i16, ptr %10, align 2, !tbaa !27
  %510 = zext i16 %509 to i32
  %511 = load i16, ptr %5, align 2, !tbaa !27
  %512 = zext i16 %511 to i32
  %513 = icmp sgt i32 %510, %512
  br i1 %513, label %514, label %516

514:                                              ; preds = %491
  %515 = load i16, ptr %5, align 2, !tbaa !27
  br label %518

516:                                              ; preds = %491
  %517 = load i16, ptr %10, align 2, !tbaa !27
  br label %518

518:                                              ; preds = %516, %514
  %519 = phi i16 [ %515, %514 ], [ %517, %516 ]
  %520 = load ptr, ptr %2, align 8, !tbaa !5
  %521 = load i32, ptr %20, align 4, !tbaa !32
  %522 = zext i32 %521 to i64
  %523 = getelementptr inbounds i16, ptr %520, i64 %522
  store i16 %519, ptr %523, align 2, !tbaa !27
  br label %541

524:                                              ; preds = %488
  %525 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.2)
          to label %526 unwind label %537

526:                                              ; preds = %524
  %527 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %525, ptr noundef nonnull align 8 dereferenceable(32) %8)
          to label %528 unwind label %537

528:                                              ; preds = %526
  %529 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %527, ptr noundef @.str.3)
          to label %530 unwind label %537

530:                                              ; preds = %528
  %531 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %529, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %532 unwind label %537

532:                                              ; preds = %530
  %533 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.4)
          to label %534 unwind label %537

534:                                              ; preds = %532
  %535 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %533, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %536 unwind label %537

536:                                              ; preds = %534
  br label %541

537:                                              ; preds = %534, %532, %530, %528, %526, %524
  %538 = landingpad { ptr, i32 }
          cleanup
  %539 = extractvalue { ptr, i32 } %538, 0
  store ptr %539, ptr %18, align 8
  %540 = extractvalue { ptr, i32 } %538, 1
  store i32 %540, ptr %19, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %552

541:                                              ; preds = %536, %518
  br label %542

542:                                              ; preds = %541, %487
  br label %543

543:                                              ; preds = %542, %205
  br label %544

544:                                              ; preds = %543
  %545 = load i32, ptr %23, align 4, !tbaa !32
  %546 = add nsw i32 %545, 1
  store i32 %546, ptr %23, align 4, !tbaa !32
  br label %51, !llvm.loop !37

547:                                              ; preds = %57
  br label %548

548:                                              ; preds = %547
  %549 = load i32, ptr %21, align 4, !tbaa !32
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %21, align 4, !tbaa !32
  br label %39, !llvm.loop !38

551:                                              ; preds = %45
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %3) #6
  ret void

552:                                              ; preds = %537, %46
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %3) #6
  br label %553

553:                                              ; preds = %552
  %554 = load ptr, ptr %18, align 8
  %555 = load i32, ptr %19, align 4
  %556 = insertvalue { ptr, i32 } poison, ptr %554, 0
  %557 = insertvalue { ptr, i32 } %556, i32 %555, 1
  resume { ptr, i32 } %557
}

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #3

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #0 align 2

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nounwind
declare noundef i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #5

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"_ZTS12isp_config_t", !13, i64 0, !13, 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}
!13 = !{!"int", !7, i64 0}
!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 = !{!14, !14, i64 0}
!28 = !{!12, !13, i64 4}
!29 = !{!12, !14, i64 8}
!30 = !{!12, !14, i64 64}
!31 = !{!7, !7, i64 0}
!32 = !{!13, !13, i64 0}
!33 = !{i8 0, i8 2}
!34 = !{}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !36}
!38 = distinct !{!38, !36}


; 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 }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@g_isp_config = external global %struct.isp_config_t, align 8
@.str = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [5 x i8], align 1
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [39 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z7isp_dpcPt(ptr nocapture noundef %0) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #6
  %3 = load i32, ptr @g_isp_config, align 8, !tbaa !5
  %4 = load i32, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 4), align 4, !tbaa !24
  %5 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 8), align 8, !tbaa !25
  %6 = zext nneg i16 %5 to i32
  %notmask = shl nsw i32 -1, %6
  %7 = trunc i32 %notmask to i16
  %8 = xor i16 %7, -1
  %9 = load i16, ptr getelementptr inbounds (i8, ptr @g_isp_config, i64 64), align 8, !tbaa !26
  %10 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull align 8 dereferenceable(32) getelementptr inbounds (i8, ptr @g_isp_config, i64 72))
          to label %.preheader146 unwind label %145

.preheader146:                                    ; preds = %1
  %11 = and i32 %4, 65535
  %12 = add nsw i32 %11, -2
  %13 = icmp ugt i32 %11, 4
  br i1 %13, label %.preheader.lr.ph, label %._crit_edge151

.preheader.lr.ph:                                 ; preds = %.preheader146
  %14 = and i32 %3, 65535
  %15 = icmp ugt i32 %14, 4
  %16 = and i16 %9, 255
  %17 = zext i16 %8 to i32
  br i1 %15, label %.preheader.us.preheader, label %._crit_edge151

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %18 = add nsw i32 %14, -2
  %19 = shl nuw nsw i32 %14, 1
  %20 = zext nneg i32 %19 to i64
  %21 = zext nneg i32 %14 to i64
  %wide.trip.count157 = zext nneg i32 %12 to i64
  %wide.trip.count = zext i32 %18 to i64
  %invariant.gep = getelementptr i8, ptr %0, i64 -4
  %invariant.gep159 = getelementptr inbounds i8, ptr %0, i64 4
  %invariant.gep161 = getelementptr i8, ptr %0, i64 -4
  %invariant.gep163 = getelementptr inbounds i8, ptr %0, i64 4
  %invariant.gep165 = getelementptr i8, ptr %0, i64 -4
  %invariant.gep167 = getelementptr inbounds i8, ptr %0, i64 4
  %22 = insertelement <8 x i16> poison, i16 %16, i64 0
  %23 = shufflevector <8 x i16> %22, <8 x i16> poison, <8 x i32> zeroinitializer
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us
  %indvars.iv154 = phi i64 [ 2, %.preheader.us.preheader ], [ %indvars.iv.next155, %._crit_edge.us ]
  %24 = mul nuw nsw i64 %indvars.iv154, %21
  br label %25

25:                                               ; preds = %.preheader.us, %143
  %indvars.iv = phi i64 [ 2, %.preheader.us ], [ %indvars.iv.next, %143 ]
  %26 = add nuw nsw i64 %indvars.iv, %24
  %27 = getelementptr inbounds i16, ptr %0, i64 %26
  %28 = load i16, ptr %27, align 2, !tbaa !27
  %29 = sub nuw nsw i64 %26, %20
  %gep = getelementptr i16, ptr %invariant.gep, i64 %29
  %30 = load i16, ptr %gep, align 2, !tbaa !27
  %31 = getelementptr inbounds i16, ptr %0, i64 %29
  %32 = load i16, ptr %31, align 2, !tbaa !27
  %gep160 = getelementptr inbounds i16, ptr %invariant.gep159, i64 %29
  %33 = load i16, ptr %gep160, align 2, !tbaa !27
  %gep162 = getelementptr i16, ptr %invariant.gep161, i64 %26
  %34 = load i16, ptr %gep162, align 2, !tbaa !27
  %gep164 = getelementptr inbounds i16, ptr %invariant.gep163, i64 %26
  %35 = load i16, ptr %gep164, align 2, !tbaa !27
  %36 = add nuw nsw i64 %26, %20
  %gep166 = getelementptr i16, ptr %invariant.gep165, i64 %36
  %37 = load i16, ptr %gep166, align 2, !tbaa !27
  %38 = getelementptr inbounds i16, ptr %0, i64 %36
  %39 = load i16, ptr %38, align 2, !tbaa !27
  %gep168 = getelementptr inbounds i16, ptr %invariant.gep167, i64 %36
  %40 = load i16, ptr %gep168, align 2, !tbaa !27
  %41 = insertelement <8 x i16> poison, i16 %40, i64 0
  %42 = insertelement <8 x i16> %41, i16 %39, i64 1
  %43 = insertelement <8 x i16> %42, i16 %37, i64 2
  %44 = insertelement <8 x i16> %43, i16 %35, i64 3
  %45 = insertelement <8 x i16> %44, i16 %34, i64 4
  %46 = insertelement <8 x i16> %45, i16 %33, i64 5
  %47 = insertelement <8 x i16> %46, i16 %32, i64 6
  %48 = insertelement <8 x i16> %47, i16 %30, i64 7
  %49 = insertelement <8 x i16> poison, i16 %28, i64 0
  %50 = shufflevector <8 x i16> %49, <8 x i16> poison, <8 x i32> zeroinitializer
  %51 = icmp ugt <8 x i16> %48, %50
  %52 = sub <8 x i16> %48, %50
  %53 = sub <8 x i16> %50, %48
  %54 = select <8 x i1> %51, <8 x i16> %52, <8 x i16> %53
  %55 = icmp ugt <8 x i16> %54, %23
  %56 = freeze <8 x i1> %55
  %57 = bitcast <8 x i1> %56 to i8
  %58 = icmp eq i8 %57, -1
  br i1 %58, label %59, label %143

59:                                               ; preds = %25
  %60 = call noundef i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str) #6
  %61 = icmp eq i32 %60, 0
  br i1 %61, label %86, label %62

62:                                               ; preds = %59
  %63 = call noundef i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str.1) #6
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %77, label %65

65:                                               ; preds = %62
  %66 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.2)
          to label %67 unwind label %.split.us

67:                                               ; preds = %65
  %68 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %66, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %69 unwind label %.split.us

69:                                               ; preds = %67
  %70 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull @.str.3)
          to label %71 unwind label %.split.us

71:                                               ; preds = %69
  %72 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %73 unwind label %.split.us

73:                                               ; preds = %71
  %74 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.4)
          to label %75 unwind label %.split.us

75:                                               ; preds = %73
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %143 unwind label %.split.us

77:                                               ; preds = %62
  %78 = zext i16 %32 to i32
  %79 = zext i16 %34 to i32
  %80 = add nuw nsw i32 %79, %78
  %81 = zext i16 %35 to i32
  %82 = add nuw nsw i32 %80, %81
  %83 = zext i16 %39 to i32
  %84 = add nuw nsw i32 %82, %83
  %85 = lshr i32 %84, 2
  br label %.sink.split

86:                                               ; preds = %59
  %87 = shl i16 %28, 1
  %88 = add i16 %39, %32
  %89 = icmp ugt i16 %87, %88
  %90 = sub i16 %87, %88
  %91 = sub i16 %88, %87
  %92 = select i1 %89, i16 %90, i16 %91
  %93 = add i16 %35, %34
  %94 = zext i16 %93 to i32
  %95 = icmp ugt i16 %87, %93
  %96 = sub i16 %87, %93
  %97 = sub i16 %93, %87
  %98 = select i1 %95, i16 %96, i16 %97
  %99 = add i16 %37, %33
  %100 = zext i16 %99 to i32
  %101 = icmp ugt i16 %87, %99
  %102 = sub i16 %87, %99
  %103 = sub i16 %99, %87
  %104 = select i1 %101, i16 %102, i16 %103
  %105 = add i16 %40, %30
  %106 = zext i16 %105 to i32
  %107 = icmp ugt i16 %87, %105
  %108 = sub i16 %87, %105
  %109 = sub i16 %105, %87
  %110 = select i1 %107, i16 %108, i16 %109
  %.0.us = call i16 @llvm.umin.i16(i16 %92, i16 %98)
  %.1.us = call i16 @llvm.umin.i16(i16 %.0.us, i16 %104)
  %.2.us = call i16 @llvm.umin.i16(i16 %.1.us, i16 %110)
  %.3.us = call i16 @llvm.umin.i16(i16 %.2.us, i16 9999)
  %111 = icmp eq i16 %.3.us, %92
  br i1 %111, label %112, label %119

112:                                              ; preds = %86
  %113 = zext i16 %88 to i32
  %114 = add nuw nsw i32 %113, 1
  %115 = lshr i32 %114, 1
  %116 = trunc nuw i32 %115 to i16
  %117 = icmp ugt i32 %115, %17
  %118 = select i1 %117, i16 %8, i16 %116
  store i16 %118, ptr %27, align 2, !tbaa !27
  br label %119

119:                                              ; preds = %112, %86
  %120 = icmp eq i16 %.3.us, %98
  br i1 %120, label %121, label %127

121:                                              ; preds = %119
  %122 = add nuw nsw i32 %94, 1
  %123 = lshr i32 %122, 1
  %124 = trunc nuw i32 %123 to i16
  %125 = icmp ugt i32 %123, %17
  %126 = select i1 %125, i16 %8, i16 %124
  store i16 %126, ptr %27, align 2, !tbaa !27
  br label %127

127:                                              ; preds = %121, %119
  %128 = icmp eq i16 %.3.us, %104
  br i1 %128, label %129, label %135

129:                                              ; preds = %127
  %130 = add nuw nsw i32 %100, 1
  %131 = lshr i32 %130, 1
  %132 = trunc nuw i32 %131 to i16
  %133 = icmp ugt i32 %131, %17
  %134 = select i1 %133, i16 %8, i16 %132
  store i16 %134, ptr %27, align 2, !tbaa !27
  br label %135

135:                                              ; preds = %129, %127
  %136 = icmp eq i16 %.3.us, %110
  br i1 %136, label %137, label %143

137:                                              ; preds = %135
  %138 = add nuw nsw i32 %106, 1
  %139 = lshr i32 %138, 1
  br label %.sink.split

.sink.split:                                      ; preds = %77, %137
  %.sink171 = phi i32 [ %139, %137 ], [ %85, %77 ]
  %140 = trunc nuw i32 %.sink171 to i16
  %141 = icmp ugt i32 %.sink171, %17
  %142 = select i1 %141, i16 %8, i16 %140
  store i16 %142, ptr %27, align 2, !tbaa !27
  br label %143

143:                                              ; preds = %.sink.split, %135, %75, %25
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %25, !llvm.loop !28

._crit_edge.us:                                   ; preds = %143
  %indvars.iv.next155 = add nuw nsw i64 %indvars.iv154, 1
  %exitcond158.not = icmp eq i64 %indvars.iv.next155, %wide.trip.count157
  br i1 %exitcond158.not, label %._crit_edge151, label %.preheader.us, !llvm.loop !30

.split.us:                                        ; preds = %75, %73, %71, %69, %67, %65
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %147

._crit_edge151:                                   ; preds = %._crit_edge.us, %.preheader.lr.ph, %.preheader146
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #6
  ret void

145:                                              ; preds = %1
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %147

147:                                              ; preds = %.split.us, %145
  %.pn = phi { ptr, i32 } [ %144, %.split.us ], [ %146, %145 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #6
  resume { ptr, i32 } %.pn
}

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nounwind
declare noundef i32 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #3

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_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 4}
!25 = !{!6, !10, i64 8}
!26 = !{!6, !10, i64 64}
!27 = !{!10, !10, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}


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