; LLVM IR from DeanoC/gfx_imagecompress :: src/amd_hdr_encode.ll (ZN10HDR_Encode12ep_shaker_HDEPA4_fiPiS1_PA4_iiS2_i)

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN10HDR_Encode12totalError_dEPA4_fS1_ii(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10HDR_Encode8mean_d_dEPA4_fPfii(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN10HDR_Encode21index_collapse_kernelEPii(ptr noundef, i32 noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZN10HDR_Encode20quant_single_point_dEPA4_fiPiS1_PA4_iiS2_ii(ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, i32 noundef) #2

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef float @_ZN10HDR_Encode12ep_shaker_HDEPA4_fiPiS1_PA4_iiS2_i(ptr noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5, ptr noundef %6, i32 noundef %7) #2 {
  %9 = alloca float, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca [4 x float], align 16
  %24 = alloca [64 x i32], align 16
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca float, align 4
  %31 = alloca [64 x [4 x float]], align 16
  %32 = alloca [64 x i32], align 16
  %33 = alloca [2 x [4 x i32]], align 16
  %34 = alloca [4 x i32], align 16
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca [2 x [4 x i32]], align 16
  %44 = alloca i32, align 4
  %45 = alloca [64 x i32], align 16
  %46 = alloca [2 x [4 x float]], align 16
  %47 = alloca [2 x [2 x float]], align 16
  %48 = alloca [2 x [4 x float]], align 16
  %49 = alloca [16 x [4 x float]], align 16
  %50 = alloca [16 x i32], align 16
  %51 = alloca [16 x i32], align 16
  %52 = alloca i32, align 4
  %53 = alloca float, align 4
  %54 = alloca float, align 4
  %55 = alloca [64 x [4 x float]], align 16
  %56 = alloca [64 x i32], align 16
  %57 = alloca [2 x [4 x i32]], align 16
  %58 = alloca i32, align 4
  %59 = alloca [2 x [4 x [2 x float]]], align 16
  %60 = alloca [64 x [16 x [4 x float]]], align 16
  %61 = alloca float, align 4
  %62 = alloca [64 x [4 x float]], align 16
  %63 = alloca [64 x i32], align 16
  %64 = alloca [4 x float], align 16
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca [4 x float], align 16
  %72 = alloca i32, align 4
  %73 = alloca float, align 4
  %74 = alloca float, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store i32 %1, ptr %11, align 4, !tbaa !9
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store ptr %4, ptr %14, align 8, !tbaa !5
  store i32 %5, ptr %15, align 4, !tbaa !9
  store ptr %6, ptr %16, align 8, !tbaa !5
  store i32 %7, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  store i32 0, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  store i32 0, ptr %22, align 4, !tbaa !9
  %75 = load i32, ptr %15, align 4, !tbaa !9
  %76 = add nsw i32 %75, 1
  store i32 %76, ptr %18, align 4, !tbaa !9
  br label %77

77:                                               ; preds = %81, %8
  %78 = load i32, ptr %18, align 4, !tbaa !9
  %79 = ashr i32 %78, 1
  store i32 %79, ptr %18, align 4, !tbaa !9
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %84

81:                                               ; preds = %77
  %82 = load i32, ptr %22, align 4, !tbaa !9
  %83 = add nsw i32 %82, 1
  store i32 %83, ptr %22, align 4, !tbaa !9
  br label %77, !llvm.loop !11

84:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 256, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 1, ptr %26, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %98, %84
  %86 = load i32, ptr %20, align 4, !tbaa !9
  %87 = load i32, ptr %11, align 4, !tbaa !9
  %88 = icmp slt i32 %86, %87
  br i1 %88, label %89, label %101

89:                                               ; preds = %85
  %90 = load ptr, ptr %12, align 8, !tbaa !5
  %91 = load i32, ptr %20, align 4, !tbaa !9
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds i32, ptr %90, i64 %92
  %94 = load i32, ptr %93, align 4, !tbaa !9
  %95 = load i32, ptr %20, align 4, !tbaa !9
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 %96
  store i32 %94, ptr %97, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %89
  %99 = load i32, ptr %20, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %20, align 4, !tbaa !9
  br label %85, !llvm.loop !13

101:                                              ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  store float 0x47EFFFFFE0000000, ptr %30, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1024, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 256, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %102 = load ptr, ptr %16, align 8, !tbaa !5
  %103 = getelementptr inbounds i32, ptr %102, i64 0
  %104 = load i32, ptr %103, align 4, !tbaa !9
  %105 = load i32, ptr %17, align 4, !tbaa !9
  %106 = mul nsw i32 2, %105
  %107 = srem i32 %104, %106
  store i32 %107, ptr %35, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %108

108:                                              ; preds = %126, %101
  %109 = load i32, ptr %19, align 4, !tbaa !9
  %110 = load i32, ptr %17, align 4, !tbaa !9
  %111 = icmp slt i32 %109, %110
  br i1 %111, label %112, label %129

112:                                              ; preds = %108
  %113 = load ptr, ptr %16, align 8, !tbaa !5
  %114 = getelementptr inbounds i32, ptr %113, i64 0
  %115 = load i32, ptr %114, align 4, !tbaa !9
  %116 = load i32, ptr %17, align 4, !tbaa !9
  %117 = mul nsw i32 2, %116
  %118 = add nsw i32 %115, %117
  %119 = sub nsw i32 %118, 1
  %120 = load i32, ptr %17, align 4, !tbaa !9
  %121 = mul nsw i32 2, %120
  %122 = sdiv i32 %119, %121
  %123 = load i32, ptr %19, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds [4 x i32], ptr %34, i64 0, i64 %124
  store i32 %122, ptr %125, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %112
  %127 = load i32, ptr %19, align 4, !tbaa !9
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %19, align 4, !tbaa !9
  br label %108, !llvm.loop !16

129:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %130 = load ptr, ptr %10, align 8, !tbaa !5
  %131 = load i32, ptr %11, align 4, !tbaa !9
  %132 = load i32, ptr %17, align 4, !tbaa !9
  %133 = call noundef i32 @_ZN10HDR_Encode10all_same_dEPA4_fii(ptr noundef %130, i32 noundef %131, i32 noundef %132)
  store i32 %133, ptr %36, align 4, !tbaa !9
  %134 = load ptr, ptr %10, align 8, !tbaa !5
  %135 = getelementptr inbounds [4 x float], ptr %23, i64 0, i64 0
  %136 = load i32, ptr %11, align 4, !tbaa !9
  %137 = load i32, ptr %17, align 4, !tbaa !9
  call void @_ZN10HDR_Encode8mean_d_dEPA4_fPfii(ptr noundef %134, ptr noundef %135, i32 noundef %136, i32 noundef %137)
  br label %138

138:                                              ; preds = %1326, %129
  %139 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 0
  %140 = load i32, ptr %11, align 4, !tbaa !9
  call void @_ZN10HDR_Encode21index_collapse_kernelEPii(ptr noundef %139, i32 noundef %140)
  %141 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 0
  %142 = load i32, ptr %11, align 4, !tbaa !9
  %143 = call noundef i32 @_ZN10HDR_Encode9max_indexEPii(ptr noundef %141, i32 noundef %142)
  store i32 %143, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  store i32 -1, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 -1, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  store float 0x47EFFFFFE0000000, ptr %41, align 4, !tbaa !14
  %144 = load i32, ptr %25, align 4, !tbaa !9
  %145 = icmp eq i32 %144, 0
  br i1 %145, label %146, label %243

146:                                              ; preds = %138
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #4
  %147 = load i32, ptr %36, align 4, !tbaa !9
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %149, label %160

149:                                              ; preds = %146
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = load i32, ptr %11, align 4, !tbaa !9
  %152 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 0
  %153 = getelementptr inbounds [64 x [4 x float]], ptr %31, i64 0, i64 0
  %154 = getelementptr inbounds [2 x [4 x i32]], ptr %43, i64 0, i64 0
  %155 = load i32, ptr %15, align 4, !tbaa !9
  %156 = load ptr, ptr %16, align 8, !tbaa !5
  %157 = load i32, ptr %35, align 4, !tbaa !9
  %158 = load i32, ptr %17, align 4, !tbaa !9
  %159 = call noundef float @_ZN10HDR_Encode20quant_single_point_dEPA4_fiPiS1_PA4_iiS2_ii(ptr noundef %150, i32 noundef %151, ptr noundef %152, ptr noundef %153, ptr noundef %154, i32 noundef %155, ptr noundef %156, i32 noundef %157, i32 noundef %158)
  store float %159, ptr %42, align 4, !tbaa !14
  br label %175

160:                                              ; preds = %146
  %161 = load i32, ptr %11, align 4, !tbaa !9
  %162 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 0
  %163 = getelementptr inbounds [64 x [4 x float]], ptr %31, i64 0, i64 0
  %164 = getelementptr inbounds [2 x [4 x i32]], ptr %43, i64 0, i64 0
  %165 = load i32, ptr %15, align 4, !tbaa !9
  %166 = load ptr, ptr %16, align 8, !tbaa !5
  %167 = load i32, ptr %35, align 4, !tbaa !9
  %168 = load i32, ptr %17, align 4, !tbaa !9
  %169 = call noundef float @_ZN10HDR_Encode20quant_single_point_dEPA4_fiPiS1_PA4_iiS2_ii(ptr noundef %23, i32 noundef %161, ptr noundef %162, ptr noundef %163, ptr noundef %164, i32 noundef %165, ptr noundef %166, i32 noundef %167, i32 noundef %168)
  %170 = load ptr, ptr %10, align 8, !tbaa !5
  %171 = getelementptr inbounds [64 x [4 x float]], ptr %31, i64 0, i64 0
  %172 = load i32, ptr %11, align 4, !tbaa !9
  %173 = load i32, ptr %17, align 4, !tbaa !9
  %174 = call noundef float @_ZN10HDR_Encode12totalError_dEPA4_fS1_ii(ptr noundef %170, ptr noundef %171, i32 noundef %172, i32 noundef %173)
  store float %174, ptr %42, align 4, !tbaa !14
  br label %175

175:                                              ; preds = %160, %149
  %176 = load float, ptr %42, align 4, !tbaa !14
  %177 = load float, ptr %30, align 4, !tbaa !14
  %178 = fcmp olt float %176, %177
  br i1 %178, label %179, label %241

179:                                              ; preds = %175
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %236, %179
  %181 = load i32, ptr %20, align 4, !tbaa !9
  %182 = load i32, ptr %11, align 4, !tbaa !9
  %183 = icmp slt i32 %181, %182
  br i1 %183, label %184, label %239

184:                                              ; preds = %180
  %185 = load i32, ptr %20, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 %186
  %188 = load i32, ptr %187, align 4, !tbaa !9
  %189 = load ptr, ptr %12, align 8, !tbaa !5
  %190 = load i32, ptr %20, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds i32, ptr %189, i64 %191
  store i32 %188, ptr %192, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %193

193:                                              ; preds = %232, %184
  %194 = load i32, ptr %19, align 4, !tbaa !9
  %195 = load i32, ptr %17, align 4, !tbaa !9
  %196 = icmp slt i32 %194, %195
  br i1 %196, label %197, label %235

197:                                              ; preds = %193
  %198 = load i32, ptr %20, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [64 x [4 x float]], ptr %31, i64 0, i64 %199
  %201 = load i32, ptr %19, align 4, !tbaa !9
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds [4 x float], ptr %200, i64 0, i64 %202
  %204 = load float, ptr %203, align 4, !tbaa !14
  %205 = load ptr, ptr %13, align 8, !tbaa !5
  %206 = load i32, ptr %20, align 4, !tbaa !9
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds [4 x float], ptr %205, i64 %207
  %209 = load i32, ptr %19, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds [4 x float], ptr %208, i64 0, i64 %210
  store float %204, ptr %211, align 4, !tbaa !14
  %212 = getelementptr inbounds [2 x [4 x i32]], ptr %43, i64 0, i64 0
  %213 = load i32, ptr %19, align 4, !tbaa !9
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds [4 x i32], ptr %212, i64 0, i64 %214
  %216 = load i32, ptr %215, align 4, !tbaa !9
  %217 = load ptr, ptr %14, align 8, !tbaa !5
  %218 = getelementptr inbounds [4 x i32], ptr %217, i64 0
  %219 = load i32, ptr %19, align 4, !tbaa !9
  %220 = sext i32 %219 to i64
  %221 = getelementptr inbounds [4 x i32], ptr %218, i64 0, i64 %220
  store i32 %216, ptr %221, align 4, !tbaa !9
  %222 = getelementptr inbounds [2 x [4 x i32]], ptr %43, i64 0, i64 1
  %223 = load i32, ptr %19, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds [4 x i32], ptr %222, i64 0, i64 %224
  %226 = load i32, ptr %225, align 4, !tbaa !9
  %227 = load ptr, ptr %14, align 8, !tbaa !5
  %228 = getelementptr inbounds [4 x i32], ptr %227, i64 1
  %229 = load i32, ptr %19, align 4, !tbaa !9
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds [4 x i32], ptr %228, i64 0, i64 %230
  store i32 %226, ptr %231, align 4, !tbaa !9
  br label %232

232:                                              ; preds = %197
  %233 = load i32, ptr %19, align 4, !tbaa !9
  %234 = add nsw i32 %233, 1
  store i32 %234, ptr %19, align 4, !tbaa !9
  br label %193, !llvm.loop !17

235:                                              ; preds = %193
  br label %236

236:                                              ; preds = %235
  %237 = load i32, ptr %20, align 4, !tbaa !9
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %20, align 4, !tbaa !9
  br label %180, !llvm.loop !18

239:                                              ; preds = %180
  %240 = load float, ptr %42, align 4, !tbaa !14
  store float %240, ptr %30, align 4, !tbaa !14
  br label %241

241:                                              ; preds = %239, %175
  %242 = load float, ptr %30, align 4, !tbaa !14
  store float %242, ptr %9, align 4
  store i32 1, ptr %44, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  br label %1317

243:                                              ; preds = %138
  store i32 1, ptr %38, align 4, !tbaa !9
  br label %244

244:                                              ; preds = %1197, %243
  %245 = load i32, ptr %25, align 4, !tbaa !9
  %246 = icmp ne i32 %245, 0
  br i1 %246, label %247, label %253

247:                                              ; preds = %244
  %248 = load i32, ptr %38, align 4, !tbaa !9
  %249 = load i32, ptr %25, align 4, !tbaa !9
  %250 = mul nsw i32 %248, %249
  %251 = load i32, ptr %15, align 4, !tbaa !9
  %252 = icmp sle i32 %250, %251
  br label %253

253:                                              ; preds = %247, %244
  %254 = phi i1 [ false, %244 ], [ %252, %247 ]
  br i1 %254, label %255, label %1200

255:                                              ; preds = %253
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %256

256:                                              ; preds = %1193, %255
  %257 = load i32, ptr %37, align 4, !tbaa !9
  %258 = load i32, ptr %15, align 4, !tbaa !9
  %259 = load i32, ptr %38, align 4, !tbaa !9
  %260 = load i32, ptr %25, align 4, !tbaa !9
  %261 = mul nsw i32 %259, %260
  %262 = sub nsw i32 %258, %261
  %263 = icmp sle i32 %257, %262
  br i1 %263, label %264, label %1196

264:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 256, ptr %45) #4
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %281, %264
  %266 = load i32, ptr %20, align 4, !tbaa !9
  %267 = load i32, ptr %11, align 4, !tbaa !9
  %268 = icmp slt i32 %266, %267
  br i1 %268, label %269, label %284

269:                                              ; preds = %265
  %270 = load i32, ptr %20, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 %271
  %273 = load i32, ptr %272, align 4, !tbaa !9
  %274 = load i32, ptr %38, align 4, !tbaa !9
  %275 = mul nsw i32 %273, %274
  %276 = load i32, ptr %37, align 4, !tbaa !9
  %277 = add nsw i32 %275, %276
  %278 = load i32, ptr %20, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %279
  store i32 %277, ptr %280, align 4, !tbaa !9
  br label %281

281:                                              ; preds = %269
  %282 = load i32, ptr %20, align 4, !tbaa !9
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %20, align 4, !tbaa !9
  br label %265, !llvm.loop !19

284:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #4
  call void @llvm.memset.p0.i64(ptr align 16 %47, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 256, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  %285 = load ptr, ptr %10, align 8, !tbaa !5
  %286 = getelementptr inbounds [16 x [4 x float]], ptr %49, i64 0, i64 0
  %287 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 0
  %288 = getelementptr inbounds [16 x i32], ptr %51, i64 0, i64 0
  %289 = getelementptr inbounds [16 x i32], ptr %50, i64 0, i64 0
  %290 = load i32, ptr %11, align 4, !tbaa !9
  %291 = load i32, ptr %17, align 4, !tbaa !9
  %292 = call noundef i32 @_ZN10HDR_Encode16cluster_mean_d_dEPA4_fS1_PiS2_S2_ii(ptr noundef %285, ptr noundef %286, ptr noundef %287, ptr noundef %288, ptr noundef %289, i32 noundef %290, i32 noundef %291)
  store i32 %292, ptr %52, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %293

293:                                              ; preds = %328, %284
  %294 = load i32, ptr %18, align 4, !tbaa !9
  %295 = load i32, ptr %52, align 4, !tbaa !9
  %296 = icmp slt i32 %294, %295
  br i1 %296, label %297, label %331

297:                                              ; preds = %293
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %298

298:                                              ; preds = %324, %297
  %299 = load i32, ptr %19, align 4, !tbaa !9
  %300 = load i32, ptr %17, align 4, !tbaa !9
  %301 = icmp slt i32 %299, %300
  br i1 %301, label %302, label %327

302:                                              ; preds = %298
  %303 = load i32, ptr %18, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds [16 x i32], ptr %51, i64 0, i64 %304
  %306 = load i32, ptr %305, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds [16 x [4 x float]], ptr %49, i64 0, i64 %307
  %309 = load i32, ptr %19, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds [4 x float], ptr %308, i64 0, i64 %310
  %312 = load float, ptr %311, align 4, !tbaa !14
  %313 = fadd float %312, 5.000000e-01
  %314 = call float @llvm.floor.f32(float %313)
  %315 = load i32, ptr %18, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds [16 x i32], ptr %51, i64 0, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !9
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds [16 x [4 x float]], ptr %49, i64 0, i64 %319
  %321 = load i32, ptr %19, align 4, !tbaa !9
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds [4 x float], ptr %320, i64 0, i64 %322
  store float %314, ptr %323, align 4, !tbaa !14
  br label %324

324:                                              ; preds = %302
  %325 = load i32, ptr %19, align 4, !tbaa !9
  %326 = add nsw i32 %325, 1
  store i32 %326, ptr %19, align 4, !tbaa !9
  br label %298, !llvm.loop !20

327:                                              ; preds = %298
  br label %328

328:                                              ; preds = %327
  %329 = load i32, ptr %18, align 4, !tbaa !9
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %18, align 4, !tbaa !9
  br label %293, !llvm.loop !21

331:                                              ; preds = %293
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %332

332:                                              ; preds = %345, %331
  %333 = load i32, ptr %19, align 4, !tbaa !9
  %334 = load i32, ptr %17, align 4, !tbaa !9
  %335 = icmp slt i32 %333, %334
  br i1 %335, label %336, label %348

336:                                              ; preds = %332
  %337 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 1
  %338 = load i32, ptr %19, align 4, !tbaa !9
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds [4 x float], ptr %337, i64 0, i64 %339
  store float 0.000000e+00, ptr %340, align 4, !tbaa !14
  %341 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 0
  %342 = load i32, ptr %19, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [4 x float], ptr %341, i64 0, i64 %343
  store float 0.000000e+00, ptr %344, align 4, !tbaa !14
  br label %345

345:                                              ; preds = %336
  %346 = load i32, ptr %19, align 4, !tbaa !9
  %347 = add nsw i32 %346, 1
  store i32 %347, ptr %19, align 4, !tbaa !9
  br label %332, !llvm.loop !22

348:                                              ; preds = %332
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %349

349:                                              ; preds = %455, %348
  %350 = load i32, ptr %20, align 4, !tbaa !9
  %351 = load i32, ptr %11, align 4, !tbaa !9
  %352 = icmp slt i32 %350, %351
  br i1 %352, label %353, label %458

353:                                              ; preds = %349
  %354 = load i32, ptr %15, align 4, !tbaa !9
  %355 = load i32, ptr %20, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !9
  %359 = sub nsw i32 %354, %358
  %360 = load i32, ptr %15, align 4, !tbaa !9
  %361 = load i32, ptr %20, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !9
  %365 = sub nsw i32 %360, %364
  %366 = mul nsw i32 %359, %365
  %367 = sitofp i32 %366 to float
  %368 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %369 = getelementptr inbounds [2 x float], ptr %368, i64 0, i64 0
  %370 = load float, ptr %369, align 16, !tbaa !14
  %371 = fadd float %370, %367
  store float %371, ptr %369, align 16, !tbaa !14
  %372 = load i32, ptr %20, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %373
  %375 = load i32, ptr %374, align 4, !tbaa !9
  %376 = load i32, ptr %15, align 4, !tbaa !9
  %377 = load i32, ptr %20, align 4, !tbaa !9
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %378
  %380 = load i32, ptr %379, align 4, !tbaa !9
  %381 = sub nsw i32 %376, %380
  %382 = mul nsw i32 %375, %381
  %383 = sitofp i32 %382 to float
  %384 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %385 = getelementptr inbounds [2 x float], ptr %384, i64 0, i64 1
  %386 = load float, ptr %385, align 4, !tbaa !14
  %387 = fadd float %386, %383
  store float %387, ptr %385, align 4, !tbaa !14
  %388 = load i32, ptr %20, align 4, !tbaa !9
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %389
  %391 = load i32, ptr %390, align 4, !tbaa !9
  %392 = load i32, ptr %20, align 4, !tbaa !9
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %393
  %395 = load i32, ptr %394, align 4, !tbaa !9
  %396 = mul nsw i32 %391, %395
  %397 = sitofp i32 %396 to float
  %398 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %399 = getelementptr inbounds [2 x float], ptr %398, i64 0, i64 1
  %400 = load float, ptr %399, align 4, !tbaa !14
  %401 = fadd float %400, %397
  store float %401, ptr %399, align 4, !tbaa !14
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %402

402:                                              ; preds = %451, %353
  %403 = load i32, ptr %19, align 4, !tbaa !9
  %404 = load i32, ptr %17, align 4, !tbaa !9
  %405 = icmp slt i32 %403, %404
  br i1 %405, label %406, label %454

406:                                              ; preds = %402
  %407 = load i32, ptr %15, align 4, !tbaa !9
  %408 = load i32, ptr %20, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !9
  %412 = sub nsw i32 %407, %411
  %413 = sitofp i32 %412 to float
  %414 = load i32, ptr %20, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %415
  %417 = load i32, ptr %416, align 4, !tbaa !9
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds [16 x [4 x float]], ptr %49, i64 0, i64 %418
  %420 = load i32, ptr %19, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds [4 x float], ptr %419, i64 0, i64 %421
  %423 = load float, ptr %422, align 4, !tbaa !14
  %424 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 0
  %425 = load i32, ptr %19, align 4, !tbaa !9
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds [4 x float], ptr %424, i64 0, i64 %426
  %428 = load float, ptr %427, align 4, !tbaa !14
  %429 = call float @llvm.fmuladd.f32(float %413, float %423, float %428)
  store float %429, ptr %427, align 4, !tbaa !14
  %430 = load i32, ptr %20, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %431
  %433 = load i32, ptr %432, align 4, !tbaa !9
  %434 = sitofp i32 %433 to float
  %435 = load i32, ptr %20, align 4, !tbaa !9
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds [64 x i32], ptr %45, i64 0, i64 %436
  %438 = load i32, ptr %437, align 4, !tbaa !9
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds [16 x [4 x float]], ptr %49, i64 0, i64 %439
  %441 = load i32, ptr %19, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds [4 x float], ptr %440, i64 0, i64 %442
  %444 = load float, ptr %443, align 4, !tbaa !14
  %445 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 1
  %446 = load i32, ptr %19, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds [4 x float], ptr %445, i64 0, i64 %447
  %449 = load float, ptr %448, align 4, !tbaa !14
  %450 = call float @llvm.fmuladd.f32(float %434, float %444, float %449)
  store float %450, ptr %448, align 4, !tbaa !14
  br label %451

451:                                              ; preds = %406
  %452 = load i32, ptr %19, align 4, !tbaa !9
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %19, align 4, !tbaa !9
  br label %402, !llvm.loop !23

454:                                              ; preds = %402
  br label %455

455:                                              ; preds = %454
  %456 = load i32, ptr %20, align 4, !tbaa !9
  %457 = add nsw i32 %456, 1
  store i32 %457, ptr %20, align 4, !tbaa !9
  br label %349, !llvm.loop !24

458:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #4
  %459 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %460 = getelementptr inbounds [2 x float], ptr %459, i64 0, i64 0
  %461 = load float, ptr %460, align 16, !tbaa !14
  %462 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %463 = getelementptr inbounds [2 x float], ptr %462, i64 0, i64 1
  %464 = load float, ptr %463, align 4, !tbaa !14
  %465 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %466 = getelementptr inbounds [2 x float], ptr %465, i64 0, i64 1
  %467 = load float, ptr %466, align 4, !tbaa !14
  %468 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %469 = getelementptr inbounds [2 x float], ptr %468, i64 0, i64 1
  %470 = load float, ptr %469, align 4, !tbaa !14
  %471 = fmul float %467, %470
  %472 = fneg float %471
  %473 = call float @llvm.fmuladd.f32(float %461, float %464, float %472)
  store float %473, ptr %53, align 4, !tbaa !14
  %474 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %475 = getelementptr inbounds [2 x float], ptr %474, i64 0, i64 0
  %476 = load float, ptr %475, align 16, !tbaa !14
  %477 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %478 = getelementptr inbounds [2 x float], ptr %477, i64 0, i64 0
  store float %476, ptr %478, align 8, !tbaa !14
  %479 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %480 = getelementptr inbounds [2 x float], ptr %479, i64 0, i64 1
  %481 = load float, ptr %480, align 4, !tbaa !14
  %482 = load float, ptr %53, align 4, !tbaa !14
  %483 = fdiv float %481, %482
  %484 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %485 = getelementptr inbounds [2 x float], ptr %484, i64 0, i64 0
  store float %483, ptr %485, align 16, !tbaa !14
  %486 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %487 = getelementptr inbounds [2 x float], ptr %486, i64 0, i64 0
  %488 = load float, ptr %487, align 8, !tbaa !14
  %489 = load float, ptr %53, align 4, !tbaa !14
  %490 = fdiv float %488, %489
  %491 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %492 = getelementptr inbounds [2 x float], ptr %491, i64 0, i64 1
  store float %490, ptr %492, align 4, !tbaa !14
  %493 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %494 = getelementptr inbounds [2 x float], ptr %493, i64 0, i64 1
  %495 = load float, ptr %494, align 4, !tbaa !14
  %496 = fneg float %495
  %497 = load float, ptr %53, align 4, !tbaa !14
  %498 = fdiv float %496, %497
  %499 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %500 = getelementptr inbounds [2 x float], ptr %499, i64 0, i64 1
  store float %498, ptr %500, align 4, !tbaa !14
  %501 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %502 = getelementptr inbounds [2 x float], ptr %501, i64 0, i64 0
  store float %498, ptr %502, align 8, !tbaa !14
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %503

503:                                              ; preds = %558, %458
  %504 = load i32, ptr %19, align 4, !tbaa !9
  %505 = load i32, ptr %17, align 4, !tbaa !9
  %506 = icmp slt i32 %504, %505
  br i1 %506, label %507, label %561

507:                                              ; preds = %503
  %508 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %509 = getelementptr inbounds [2 x float], ptr %508, i64 0, i64 0
  %510 = load float, ptr %509, align 16, !tbaa !14
  %511 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 0
  %512 = load i32, ptr %19, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds [4 x float], ptr %511, i64 0, i64 %513
  %515 = load float, ptr %514, align 4, !tbaa !14
  %516 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 0
  %517 = getelementptr inbounds [2 x float], ptr %516, i64 0, i64 1
  %518 = load float, ptr %517, align 4, !tbaa !14
  %519 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 1
  %520 = load i32, ptr %19, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds [4 x float], ptr %519, i64 0, i64 %521
  %523 = load float, ptr %522, align 4, !tbaa !14
  %524 = fmul float %518, %523
  %525 = call float @llvm.fmuladd.f32(float %510, float %515, float %524)
  %526 = load i32, ptr %15, align 4, !tbaa !9
  %527 = sitofp i32 %526 to float
  %528 = fmul float %525, %527
  %529 = getelementptr inbounds [2 x [4 x float]], ptr %46, i64 0, i64 0
  %530 = load i32, ptr %19, align 4, !tbaa !9
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds [4 x float], ptr %529, i64 0, i64 %531
  store float %528, ptr %532, align 4, !tbaa !14
  %533 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %534 = getelementptr inbounds [2 x float], ptr %533, i64 0, i64 0
  %535 = load float, ptr %534, align 8, !tbaa !14
  %536 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 0
  %537 = load i32, ptr %19, align 4, !tbaa !9
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds [4 x float], ptr %536, i64 0, i64 %538
  %540 = load float, ptr %539, align 4, !tbaa !14
  %541 = getelementptr inbounds [2 x [2 x float]], ptr %47, i64 0, i64 1
  %542 = getelementptr inbounds [2 x float], ptr %541, i64 0, i64 1
  %543 = load float, ptr %542, align 4, !tbaa !14
  %544 = getelementptr inbounds [2 x [4 x float]], ptr %48, i64 0, i64 1
  %545 = load i32, ptr %19, align 4, !tbaa !9
  %546 = sext i32 %545 to i64
  %547 = getelementptr inbounds [4 x float], ptr %544, i64 0, i64 %546
  %548 = load float, ptr %547, align 4, !tbaa !14
  %549 = fmul float %543, %548
  %550 = call float @llvm.fmuladd.f32(float %535, float %540, float %549)
  %551 = load i32, ptr %15, align 4, !tbaa !9
  %552 = sitofp i32 %551 to float
  %553 = fmul float %550, %552
  %554 = getelementptr inbounds [2 x [4 x float]], ptr %46, i64 0, i64 1
  %555 = load i32, ptr %19, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds [4 x float], ptr %554, i64 0, i64 %556
  store float %553, ptr %557, align 4, !tbaa !14
  br label %558

558:                                              ; preds = %507
  %559 = load i32, ptr %19, align 4, !tbaa !9
  %560 = add nsw i32 %559, 1
  store i32 %560, ptr %19, align 4, !tbaa !9
  br label %503, !llvm.loop !25

561:                                              ; preds = %503
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #4
  store float 0x47EFFFFFE0000000, ptr %54, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1024, ptr %55) #4
  call void @llvm.lifetime.start.p0(i64 256, ptr %56) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  store i32 0, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %59) #4
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %562

562:                                              ; preds = %652, %561
  %563 = load i32, ptr %19, align 4, !tbaa !9
  %564 = load i32, ptr %17, align 4, !tbaa !9
  %565 = icmp slt i32 %563, %564
  br i1 %565, label %566, label %655

566:                                              ; preds = %562
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %567

567:                                              ; preds = %648, %566
  %568 = load i32, ptr %18, align 4, !tbaa !9
  %569 = icmp slt i32 %568, 2
  br i1 %569, label %570, label %651

570:                                              ; preds = %567
  %571 = load i32, ptr %18, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds [2 x [4 x float]], ptr %46, i64 0, i64 %572
  %574 = load i32, ptr %19, align 4, !tbaa !9
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds [4 x float], ptr %573, i64 0, i64 %575
  %577 = load float, ptr %576, align 4, !tbaa !14
  %578 = load i32, ptr %18, align 4, !tbaa !9
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 %579
  %581 = load i32, ptr %19, align 4, !tbaa !9
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds [4 x [2 x float]], ptr %580, i64 0, i64 %582
  %584 = getelementptr inbounds [2 x float], ptr %583, i64 0, i64 1
  store float %577, ptr %584, align 4, !tbaa !14
  %585 = load i32, ptr %18, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 %586
  %588 = load i32, ptr %19, align 4, !tbaa !9
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds [4 x [2 x float]], ptr %587, i64 0, i64 %589
  %591 = getelementptr inbounds [2 x float], ptr %590, i64 0, i64 0
  store float %577, ptr %591, align 8, !tbaa !14
  %592 = load ptr, ptr %16, align 8, !tbaa !5
  %593 = load i32, ptr %19, align 4, !tbaa !9
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds i32, ptr %592, i64 %594
  %596 = load i32, ptr %595, align 4, !tbaa !9
  %597 = shl i32 1, %596
  %598 = sub nsw i32 %597, 1
  %599 = load i32, ptr %18, align 4, !tbaa !9
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 %600
  %602 = load i32, ptr %19, align 4, !tbaa !9
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds [4 x [2 x float]], ptr %601, i64 0, i64 %603
  %605 = getelementptr inbounds [2 x float], ptr %604, i64 0, i64 1
  %606 = load float, ptr %605, align 4, !tbaa !14
  %607 = fptosi float %606 to i32
  %608 = sub nsw i32 %598, %607
  %609 = load i32, ptr %21, align 4, !tbaa !9
  %610 = shl i32 1, %609
  %611 = icmp slt i32 %608, %610
  br i1 %611, label %612, label %630

612:                                              ; preds = %570
  %613 = load ptr, ptr %16, align 8, !tbaa !5
  %614 = load i32, ptr %19, align 4, !tbaa !9
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds i32, ptr %613, i64 %615
  %617 = load i32, ptr %616, align 4, !tbaa !9
  %618 = shl i32 1, %617
  %619 = sub nsw i32 %618, 1
  %620 = load i32, ptr %18, align 4, !tbaa !9
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 %621
  %623 = load i32, ptr %19, align 4, !tbaa !9
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds [4 x [2 x float]], ptr %622, i64 0, i64 %624
  %626 = getelementptr inbounds [2 x float], ptr %625, i64 0, i64 1
  %627 = load float, ptr %626, align 4, !tbaa !14
  %628 = fptosi float %627 to i32
  %629 = sub nsw i32 %619, %628
  br label %633

630:                                              ; preds = %570
  %631 = load i32, ptr %21, align 4, !tbaa !9
  %632 = shl i32 1, %631
  br label %633

633:                                              ; preds = %630, %612
  %634 = phi i32 [ %629, %612 ], [ %632, %630 ]
  %635 = load i32, ptr %21, align 4, !tbaa !9
  %636 = xor i32 %635, -1
  %637 = and i32 %634, %636
  %638 = sitofp i32 %637 to float
  %639 = load i32, ptr %18, align 4, !tbaa !9
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 %640
  %642 = load i32, ptr %19, align 4, !tbaa !9
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds [4 x [2 x float]], ptr %641, i64 0, i64 %643
  %645 = getelementptr inbounds [2 x float], ptr %644, i64 0, i64 1
  %646 = load float, ptr %645, align 4, !tbaa !14
  %647 = fadd float %646, %638
  store float %647, ptr %645, align 4, !tbaa !14
  br label %648

648:                                              ; preds = %633
  %649 = load i32, ptr %18, align 4, !tbaa !9
  %650 = add nsw i32 %649, 1
  store i32 %650, ptr %18, align 4, !tbaa !9
  br label %567, !llvm.loop !26

651:                                              ; preds = %567
  br label %652

652:                                              ; preds = %651
  %653 = load i32, ptr %19, align 4, !tbaa !9
  %654 = add nsw i32 %653, 1
  store i32 %654, ptr %19, align 4, !tbaa !9
  br label %562, !llvm.loop !27

655:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 16384, ptr %60) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #4
  store float 0.000000e+00, ptr %61, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 1024, ptr %62) #4
  call void @llvm.lifetime.start.p0(i64 256, ptr %63) #4
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %656

656:                                              ; preds = %776, %655
  %657 = load i32, ptr %18, align 4, !tbaa !9
  %658 = load i32, ptr %11, align 4, !tbaa !9
  %659 = icmp slt i32 %657, %658
  br i1 %659, label %660, label %779

660:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #4
  %661 = load ptr, ptr %10, align 8, !tbaa !5
  %662 = load i32, ptr %18, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds [4 x float], ptr %661, i64 %663
  %665 = getelementptr inbounds [4 x float], ptr %664, i64 0, i64 0
  %666 = load float, ptr %665, align 4, !tbaa !14
  %667 = getelementptr inbounds [4 x float], ptr %64, i64 0, i64 0
  store float %666, ptr %667, align 16, !tbaa !14
  %668 = load ptr, ptr %10, align 8, !tbaa !5
  %669 = load i32, ptr %18, align 4, !tbaa !9
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds [4 x float], ptr %668, i64 %670
  %672 = getelementptr inbounds [4 x float], ptr %671, i64 0, i64 1
  %673 = load float, ptr %672, align 4, !tbaa !14
  %674 = getelementptr inbounds [4 x float], ptr %64, i64 0, i64 1
  store float %673, ptr %674, align 4, !tbaa !14
  %675 = load ptr, ptr %10, align 8, !tbaa !5
  %676 = load i32, ptr %18, align 4, !tbaa !9
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds [4 x float], ptr %675, i64 %677
  %679 = getelementptr inbounds [4 x float], ptr %678, i64 0, i64 2
  %680 = load float, ptr %679, align 4, !tbaa !14
  %681 = getelementptr inbounds [4 x float], ptr %64, i64 0, i64 2
  store float %680, ptr %681, align 8, !tbaa !14
  %682 = load ptr, ptr %10, align 8, !tbaa !5
  %683 = load i32, ptr %18, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds [4 x float], ptr %682, i64 %684
  %686 = getelementptr inbounds [4 x float], ptr %685, i64 0, i64 3
  %687 = load float, ptr %686, align 4, !tbaa !14
  %688 = getelementptr inbounds [4 x float], ptr %64, i64 0, i64 3
  store float %687, ptr %688, align 4, !tbaa !14
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %689

689:                                              ; preds = %772, %660
  %690 = load i32, ptr %19, align 4, !tbaa !9
  %691 = load i32, ptr %22, align 4, !tbaa !9
  %692 = shl i32 1, %691
  %693 = icmp slt i32 %690, %692
  br i1 %693, label %694, label %775

694:                                              ; preds = %689
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %695

695:                                              ; preds = %768, %694
  %696 = load i32, ptr %20, align 4, !tbaa !9
  %697 = load i32, ptr %17, align 4, !tbaa !9
  %698 = icmp slt i32 %696, %697
  br i1 %698, label %699, label %771

699:                                              ; preds = %695
  %700 = load i32, ptr %22, align 4, !tbaa !9
  %701 = sub nsw i32 %700, 2
  %702 = load ptr, ptr %16, align 8, !tbaa !5
  %703 = load i32, ptr %20, align 4, !tbaa !9
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds i32, ptr %702, i64 %704
  %706 = load i32, ptr %705, align 4, !tbaa !9
  %707 = sub nsw i32 %706, 5
  %708 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 0
  %709 = load i32, ptr %20, align 4, !tbaa !9
  %710 = sext i32 %709 to i64
  %711 = getelementptr inbounds [4 x [2 x float]], ptr %708, i64 0, i64 %710
  %712 = getelementptr inbounds [2 x float], ptr %711, i64 0, i64 0
  %713 = load float, ptr %712, align 8, !tbaa !14
  %714 = fptosi float %713 to i32
  %715 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 1
  %716 = load i32, ptr %20, align 4, !tbaa !9
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds [4 x [2 x float]], ptr %715, i64 0, i64 %717
  %719 = getelementptr inbounds [2 x float], ptr %718, i64 0, i64 0
  %720 = load float, ptr %719, align 8, !tbaa !14
  %721 = fptosi float %720 to i32
  %722 = load i32, ptr %19, align 4, !tbaa !9
  %723 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %701, i32 noundef %707, i32 noundef %714, i32 noundef %721, i32 noundef %722)
  %724 = load i32, ptr %20, align 4, !tbaa !9
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds [4 x float], ptr %64, i64 0, i64 %725
  %727 = load float, ptr %726, align 4, !tbaa !14
  %728 = fsub float %723, %727
  %729 = load i32, ptr %22, align 4, !tbaa !9
  %730 = sub nsw i32 %729, 2
  %731 = load ptr, ptr %16, align 8, !tbaa !5
  %732 = load i32, ptr %20, align 4, !tbaa !9
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i32, ptr %731, i64 %733
  %735 = load i32, ptr %734, align 4, !tbaa !9
  %736 = sub nsw i32 %735, 5
  %737 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 0
  %738 = load i32, ptr %20, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds [4 x [2 x float]], ptr %737, i64 0, i64 %739
  %741 = getelementptr inbounds [2 x float], ptr %740, i64 0, i64 0
  %742 = load float, ptr %741, align 8, !tbaa !14
  %743 = fptosi float %742 to i32
  %744 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 1
  %745 = load i32, ptr %20, align 4, !tbaa !9
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds [4 x [2 x float]], ptr %744, i64 0, i64 %746
  %748 = getelementptr inbounds [2 x float], ptr %747, i64 0, i64 0
  %749 = load float, ptr %748, align 8, !tbaa !14
  %750 = fptosi float %749 to i32
  %751 = load i32, ptr %19, align 4, !tbaa !9
  %752 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %730, i32 noundef %736, i32 noundef %743, i32 noundef %750, i32 noundef %751)
  %753 = load i32, ptr %20, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds [4 x float], ptr %64, i64 0, i64 %754
  %756 = load float, ptr %755, align 4, !tbaa !14
  %757 = fsub float %752, %756
  %758 = fmul float %728, %757
  %759 = load i32, ptr %18, align 4, !tbaa !9
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %60, i64 0, i64 %760
  %762 = load i32, ptr %19, align 4, !tbaa !9
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds [16 x [4 x float]], ptr %761, i64 0, i64 %763
  %765 = load i32, ptr %20, align 4, !tbaa !9
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds [4 x float], ptr %764, i64 0, i64 %766
  store float %758, ptr %767, align 4, !tbaa !14
  br label %768

768:                                              ; preds = %699
  %769 = load i32, ptr %20, align 4, !tbaa !9
  %770 = add nsw i32 %769, 1
  store i32 %770, ptr %20, align 4, !tbaa !9
  br label %695, !llvm.loop !28

771:                                              ; preds = %695
  br label %772

772:                                              ; preds = %771
  %773 = load i32, ptr %19, align 4, !tbaa !9
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %19, align 4, !tbaa !9
  br label %689, !llvm.loop !29

775:                                              ; preds = %689
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #4
  br label %776

776:                                              ; preds = %775
  %777 = load i32, ptr %18, align 4, !tbaa !9
  %778 = add nsw i32 %777, 1
  store i32 %778, ptr %18, align 4, !tbaa !9
  br label %656, !llvm.loop !30

779:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #4
  store i32 0, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #4
  store i32 0, ptr %68, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #4
  store i32 0, ptr %69, align 4, !tbaa !9
  store i32 0, ptr %66, align 4, !tbaa !9
  br label %780

780:                                              ; preds = %1070, %779
  %781 = load i32, ptr %66, align 4, !tbaa !9
  %782 = icmp slt i32 %781, 64
  br i1 %782, label %783, label %1073

783:                                              ; preds = %780
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #4
  store i32 0, ptr %70, align 4, !tbaa !9
  %784 = load i32, ptr %66, align 4, !tbaa !9
  %785 = load i32, ptr %66, align 4, !tbaa !9
  %786 = sub nsw i32 0, %785
  %787 = and i32 %784, %786
  store i32 %787, ptr %67, align 4, !tbaa !9
  store float 0.000000e+00, ptr %61, align 4, !tbaa !14
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %788

788:                                              ; preds = %817, %783
  %789 = load i32, ptr %19, align 4, !tbaa !9
  %790 = load i32, ptr %17, align 4, !tbaa !9
  %791 = icmp slt i32 %789, %790
  br i1 %791, label %792, label %820

792:                                              ; preds = %788
  %793 = load i32, ptr %67, align 4, !tbaa !9
  %794 = load i32, ptr %19, align 4, !tbaa !9
  %795 = mul nsw i32 2, %794
  %796 = ashr i32 %793, %795
  %797 = and i32 %796, 3
  %798 = icmp ne i32 %797, 0
  br i1 %798, label %799, label %816

799:                                              ; preds = %792
  %800 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %800, ptr %70, align 4, !tbaa !9
  %801 = load i32, ptr %65, align 4, !tbaa !9
  %802 = load i32, ptr %67, align 4, !tbaa !9
  %803 = xor i32 %801, %802
  %804 = load i32, ptr %19, align 4, !tbaa !9
  %805 = mul nsw i32 2, %804
  %806 = ashr i32 %803, %805
  %807 = and i32 %806, 1
  store i32 %807, ptr %68, align 4, !tbaa !9
  %808 = load i32, ptr %65, align 4, !tbaa !9
  %809 = load i32, ptr %67, align 4, !tbaa !9
  %810 = xor i32 %808, %809
  %811 = load i32, ptr %19, align 4, !tbaa !9
  %812 = mul nsw i32 2, %811
  %813 = add nsw i32 %812, 1
  %814 = ashr i32 %810, %813
  %815 = and i32 %814, 1
  store i32 %815, ptr %69, align 4, !tbaa !9
  br label %816

816:                                              ; preds = %799, %792
  br label %817

817:                                              ; preds = %816
  %818 = load i32, ptr %19, align 4, !tbaa !9
  %819 = add nsw i32 %818, 1
  store i32 %819, ptr %19, align 4, !tbaa !9
  br label %788, !llvm.loop !31

820:                                              ; preds = %788
  %821 = load i32, ptr %65, align 4, !tbaa !9
  %822 = load i32, ptr %67, align 4, !tbaa !9
  %823 = xor i32 %821, %822
  store i32 %823, ptr %65, align 4, !tbaa !9
  store float 0.000000e+00, ptr %61, align 4, !tbaa !14
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %824

824:                                              ; preds = %1021, %820
  %825 = load i32, ptr %18, align 4, !tbaa !9
  %826 = load i32, ptr %11, align 4, !tbaa !9
  %827 = icmp slt i32 %825, %826
  br i1 %827, label %828, label %1024

828:                                              ; preds = %824
  call void @llvm.lifetime.start.p0(i64 16, ptr %71) #4
  %829 = load ptr, ptr %10, align 8, !tbaa !5
  %830 = load i32, ptr %18, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds [4 x float], ptr %829, i64 %831
  %833 = getelementptr inbounds [4 x float], ptr %832, i64 0, i64 0
  %834 = load float, ptr %833, align 4, !tbaa !14
  %835 = getelementptr inbounds [4 x float], ptr %71, i64 0, i64 0
  store float %834, ptr %835, align 16, !tbaa !14
  %836 = load ptr, ptr %10, align 8, !tbaa !5
  %837 = load i32, ptr %18, align 4, !tbaa !9
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds [4 x float], ptr %836, i64 %838
  %840 = getelementptr inbounds [4 x float], ptr %839, i64 0, i64 1
  %841 = load float, ptr %840, align 4, !tbaa !14
  %842 = getelementptr inbounds [4 x float], ptr %71, i64 0, i64 1
  store float %841, ptr %842, align 4, !tbaa !14
  %843 = load ptr, ptr %10, align 8, !tbaa !5
  %844 = load i32, ptr %18, align 4, !tbaa !9
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds [4 x float], ptr %843, i64 %845
  %847 = getelementptr inbounds [4 x float], ptr %846, i64 0, i64 2
  %848 = load float, ptr %847, align 4, !tbaa !14
  %849 = getelementptr inbounds [4 x float], ptr %71, i64 0, i64 2
  store float %848, ptr %849, align 8, !tbaa !14
  %850 = load ptr, ptr %10, align 8, !tbaa !5
  %851 = load i32, ptr %18, align 4, !tbaa !9
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds [4 x float], ptr %850, i64 %852
  %854 = getelementptr inbounds [4 x float], ptr %853, i64 0, i64 3
  %855 = load float, ptr %854, align 4, !tbaa !14
  %856 = getelementptr inbounds [4 x float], ptr %71, i64 0, i64 3
  store float %855, ptr %856, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #4
  store i32 0, ptr %72, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #4
  store float 0x47EFFFFFE0000000, ptr %73, align 4, !tbaa !14
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %857

857:                                              ; preds = %967, %828
  %858 = load i32, ptr %19, align 4, !tbaa !9
  %859 = load i32, ptr %22, align 4, !tbaa !9
  %860 = shl i32 1, %859
  %861 = icmp slt i32 %858, %860
  br i1 %861, label %862, label %970

862:                                              ; preds = %857
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #4
  store float 0.000000e+00, ptr %74, align 4, !tbaa !14
  %863 = load i32, ptr %22, align 4, !tbaa !9
  %864 = sub nsw i32 %863, 2
  %865 = load ptr, ptr %16, align 8, !tbaa !5
  %866 = load i32, ptr %70, align 4, !tbaa !9
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds i32, ptr %865, i64 %867
  %869 = load i32, ptr %868, align 4, !tbaa !9
  %870 = sub nsw i32 %869, 5
  %871 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 0
  %872 = load i32, ptr %70, align 4, !tbaa !9
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds [4 x [2 x float]], ptr %871, i64 0, i64 %873
  %875 = load i32, ptr %68, align 4, !tbaa !9
  %876 = sext i32 %875 to i64
  %877 = getelementptr inbounds [2 x float], ptr %874, i64 0, i64 %876
  %878 = load float, ptr %877, align 4, !tbaa !14
  %879 = fptosi float %878 to i32
  %880 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 1
  %881 = load i32, ptr %70, align 4, !tbaa !9
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds [4 x [2 x float]], ptr %880, i64 0, i64 %882
  %884 = load i32, ptr %69, align 4, !tbaa !9
  %885 = sext i32 %884 to i64
  %886 = getelementptr inbounds [2 x float], ptr %883, i64 0, i64 %885
  %887 = load float, ptr %886, align 4, !tbaa !14
  %888 = fptosi float %887 to i32
  %889 = load i32, ptr %19, align 4, !tbaa !9
  %890 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %864, i32 noundef %870, i32 noundef %879, i32 noundef %888, i32 noundef %889)
  %891 = load i32, ptr %70, align 4, !tbaa !9
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds [4 x float], ptr %71, i64 0, i64 %892
  %894 = load float, ptr %893, align 4, !tbaa !14
  %895 = fsub float %890, %894
  %896 = load i32, ptr %22, align 4, !tbaa !9
  %897 = sub nsw i32 %896, 2
  %898 = load ptr, ptr %16, align 8, !tbaa !5
  %899 = load i32, ptr %70, align 4, !tbaa !9
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds i32, ptr %898, i64 %900
  %902 = load i32, ptr %901, align 4, !tbaa !9
  %903 = sub nsw i32 %902, 5
  %904 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 0
  %905 = load i32, ptr %70, align 4, !tbaa !9
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds [4 x [2 x float]], ptr %904, i64 0, i64 %906
  %908 = load i32, ptr %68, align 4, !tbaa !9
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds [2 x float], ptr %907, i64 0, i64 %909
  %911 = load float, ptr %910, align 4, !tbaa !14
  %912 = fptosi float %911 to i32
  %913 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 1
  %914 = load i32, ptr %70, align 4, !tbaa !9
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds [4 x [2 x float]], ptr %913, i64 0, i64 %915
  %917 = load i32, ptr %69, align 4, !tbaa !9
  %918 = sext i32 %917 to i64
  %919 = getelementptr inbounds [2 x float], ptr %916, i64 0, i64 %918
  %920 = load float, ptr %919, align 4, !tbaa !14
  %921 = fptosi float %920 to i32
  %922 = load i32, ptr %19, align 4, !tbaa !9
  %923 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %897, i32 noundef %903, i32 noundef %912, i32 noundef %921, i32 noundef %922)
  %924 = load i32, ptr %70, align 4, !tbaa !9
  %925 = sext i32 %924 to i64
  %926 = getelementptr inbounds [4 x float], ptr %71, i64 0, i64 %925
  %927 = load float, ptr %926, align 4, !tbaa !14
  %928 = fsub float %923, %927
  %929 = fmul float %895, %928
  %930 = load i32, ptr %18, align 4, !tbaa !9
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %60, i64 0, i64 %931
  %933 = load i32, ptr %19, align 4, !tbaa !9
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds [16 x [4 x float]], ptr %932, i64 0, i64 %934
  %936 = load i32, ptr %70, align 4, !tbaa !9
  %937 = sext i32 %936 to i64
  %938 = getelementptr inbounds [4 x float], ptr %935, i64 0, i64 %937
  store float %929, ptr %938, align 4, !tbaa !14
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %939

939:                                              ; preds = %956, %862
  %940 = load i32, ptr %20, align 4, !tbaa !9
  %941 = load i32, ptr %17, align 4, !tbaa !9
  %942 = icmp slt i32 %940, %941
  br i1 %942, label %943, label %959

943:                                              ; preds = %939
  %944 = load i32, ptr %18, align 4, !tbaa !9
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %60, i64 0, i64 %945
  %947 = load i32, ptr %19, align 4, !tbaa !9
  %948 = sext i32 %947 to i64
  %949 = getelementptr inbounds [16 x [4 x float]], ptr %946, i64 0, i64 %948
  %950 = load i32, ptr %20, align 4, !tbaa !9
  %951 = sext i32 %950 to i64
  %952 = getelementptr inbounds [4 x float], ptr %949, i64 0, i64 %951
  %953 = load float, ptr %952, align 4, !tbaa !14
  %954 = load float, ptr %74, align 4, !tbaa !14
  %955 = fadd float %954, %953
  store float %955, ptr %74, align 4, !tbaa !14
  br label %956

956:                                              ; preds = %943
  %957 = load i32, ptr %20, align 4, !tbaa !9
  %958 = add nsw i32 %957, 1
  store i32 %958, ptr %20, align 4, !tbaa !9
  br label %939, !llvm.loop !32

959:                                              ; preds = %939
  %960 = load float, ptr %74, align 4, !tbaa !14
  %961 = load float, ptr %73, align 4, !tbaa !14
  %962 = fcmp olt float %960, %961
  br i1 %962, label %963, label %966

963:                                              ; preds = %959
  %964 = load float, ptr %74, align 4, !tbaa !14
  store float %964, ptr %73, align 4, !tbaa !14
  %965 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %965, ptr %72, align 4, !tbaa !9
  br label %966

966:                                              ; preds = %963, %959
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #4
  br label %967

967:                                              ; preds = %966
  %968 = load i32, ptr %19, align 4, !tbaa !9
  %969 = add nsw i32 %968, 1
  store i32 %969, ptr %19, align 4, !tbaa !9
  br label %857, !llvm.loop !33

970:                                              ; preds = %857
  %971 = load i32, ptr %72, align 4, !tbaa !9
  %972 = load i32, ptr %18, align 4, !tbaa !9
  %973 = sext i32 %972 to i64
  %974 = getelementptr inbounds [64 x i32], ptr %63, i64 0, i64 %973
  store i32 %971, ptr %974, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %975

975:                                              ; preds = %1014, %970
  %976 = load i32, ptr %20, align 4, !tbaa !9
  %977 = load i32, ptr %17, align 4, !tbaa !9
  %978 = icmp slt i32 %976, %977
  br i1 %978, label %979, label %1017

979:                                              ; preds = %975
  %980 = load i32, ptr %22, align 4, !tbaa !9
  %981 = sub nsw i32 %980, 2
  %982 = load ptr, ptr %16, align 8, !tbaa !5
  %983 = load i32, ptr %20, align 4, !tbaa !9
  %984 = sext i32 %983 to i64
  %985 = getelementptr inbounds i32, ptr %982, i64 %984
  %986 = load i32, ptr %985, align 4, !tbaa !9
  %987 = sub nsw i32 %986, 5
  %988 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 0
  %989 = load i32, ptr %20, align 4, !tbaa !9
  %990 = sext i32 %989 to i64
  %991 = getelementptr inbounds [4 x [2 x float]], ptr %988, i64 0, i64 %990
  %992 = load i32, ptr %68, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds [2 x float], ptr %991, i64 0, i64 %993
  %995 = load float, ptr %994, align 4, !tbaa !14
  %996 = fptosi float %995 to i32
  %997 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 1
  %998 = load i32, ptr %20, align 4, !tbaa !9
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds [4 x [2 x float]], ptr %997, i64 0, i64 %999
  %1001 = load i32, ptr %69, align 4, !tbaa !9
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds [2 x float], ptr %1000, i64 0, i64 %1002
  %1004 = load float, ptr %1003, align 4, !tbaa !14
  %1005 = fptosi float %1004 to i32
  %1006 = load i32, ptr %72, align 4, !tbaa !9
  %1007 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %981, i32 noundef %987, i32 noundef %996, i32 noundef %1005, i32 noundef %1006)
  %1008 = load i32, ptr %18, align 4, !tbaa !9
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds [64 x [4 x float]], ptr %62, i64 0, i64 %1009
  %1011 = load i32, ptr %20, align 4, !tbaa !9
  %1012 = sext i32 %1011 to i64
  %1013 = getelementptr inbounds [4 x float], ptr %1010, i64 0, i64 %1012
  store float %1007, ptr %1013, align 4, !tbaa !14
  br label %1014

1014:                                             ; preds = %979
  %1015 = load i32, ptr %20, align 4, !tbaa !9
  %1016 = add nsw i32 %1015, 1
  store i32 %1016, ptr %20, align 4, !tbaa !9
  br label %975, !llvm.loop !34

1017:                                             ; preds = %975
  %1018 = load float, ptr %73, align 4, !tbaa !14
  %1019 = load float, ptr %61, align 4, !tbaa !14
  %1020 = fadd float %1019, %1018
  store float %1020, ptr %61, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %71) #4
  br label %1021

1021:                                             ; preds = %1017
  %1022 = load i32, ptr %18, align 4, !tbaa !9
  %1023 = add nsw i32 %1022, 1
  store i32 %1023, ptr %18, align 4, !tbaa !9
  br label %824, !llvm.loop !35

1024:                                             ; preds = %824
  %1025 = load float, ptr %61, align 4, !tbaa !14
  %1026 = load float, ptr %54, align 4, !tbaa !14
  %1027 = fcmp olt float %1025, %1026
  br i1 %1027, label %1028, label %1069

1028:                                             ; preds = %1024
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %1029

1029:                                             ; preds = %1063, %1028
  %1030 = load i32, ptr %18, align 4, !tbaa !9
  %1031 = load i32, ptr %11, align 4, !tbaa !9
  %1032 = icmp slt i32 %1030, %1031
  br i1 %1032, label %1033, label %1066

1033:                                             ; preds = %1029
  %1034 = load i32, ptr %18, align 4, !tbaa !9
  %1035 = sext i32 %1034 to i64
  %1036 = getelementptr inbounds [64 x i32], ptr %63, i64 0, i64 %1035
  %1037 = load i32, ptr %1036, align 4, !tbaa !9
  %1038 = load i32, ptr %18, align 4, !tbaa !9
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds [64 x i32], ptr %56, i64 0, i64 %1039
  store i32 %1037, ptr %1040, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1041

1041:                                             ; preds = %1059, %1033
  %1042 = load i32, ptr %19, align 4, !tbaa !9
  %1043 = load i32, ptr %17, align 4, !tbaa !9
  %1044 = icmp slt i32 %1042, %1043
  br i1 %1044, label %1045, label %1062

1045:                                             ; preds = %1041
  %1046 = load i32, ptr %18, align 4, !tbaa !9
  %1047 = sext i32 %1046 to i64
  %1048 = getelementptr inbounds [64 x [4 x float]], ptr %62, i64 0, i64 %1047
  %1049 = load i32, ptr %19, align 4, !tbaa !9
  %1050 = sext i32 %1049 to i64
  %1051 = getelementptr inbounds [4 x float], ptr %1048, i64 0, i64 %1050
  %1052 = load float, ptr %1051, align 4, !tbaa !14
  %1053 = load i32, ptr %18, align 4, !tbaa !9
  %1054 = sext i32 %1053 to i64
  %1055 = getelementptr inbounds [64 x [4 x float]], ptr %55, i64 0, i64 %1054
  %1056 = load i32, ptr %19, align 4, !tbaa !9
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds [4 x float], ptr %1055, i64 0, i64 %1057
  store float %1052, ptr %1058, align 4, !tbaa !14
  br label %1059

1059:                                             ; preds = %1045
  %1060 = load i32, ptr %19, align 4, !tbaa !9
  %1061 = add nsw i32 %1060, 1
  store i32 %1061, ptr %19, align 4, !tbaa !9
  br label %1041, !llvm.loop !36

1062:                                             ; preds = %1041
  br label %1063

1063:                                             ; preds = %1062
  %1064 = load i32, ptr %18, align 4, !tbaa !9
  %1065 = add nsw i32 %1064, 1
  store i32 %1065, ptr %18, align 4, !tbaa !9
  br label %1029, !llvm.loop !37

1066:                                             ; preds = %1029
  %1067 = load float, ptr %61, align 4, !tbaa !14
  store float %1067, ptr %54, align 4, !tbaa !14
  %1068 = load i32, ptr %65, align 4, !tbaa !9
  store i32 %1068, ptr %58, align 4, !tbaa !9
  br label %1069

1069:                                             ; preds = %1066, %1024
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #4
  br label %1070

1070:                                             ; preds = %1069
  %1071 = load i32, ptr %66, align 4, !tbaa !9
  %1072 = add nsw i32 %1071, 1
  store i32 %1072, ptr %66, align 4, !tbaa !9
  br label %780, !llvm.loop !38

1073:                                             ; preds = %780
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1074

1074:                                             ; preds = %1116, %1073
  %1075 = load i32, ptr %19, align 4, !tbaa !9
  %1076 = load i32, ptr %17, align 4, !tbaa !9
  %1077 = icmp slt i32 %1075, %1076
  br i1 %1077, label %1078, label %1119

1078:                                             ; preds = %1074
  %1079 = load i32, ptr %58, align 4, !tbaa !9
  %1080 = load i32, ptr %19, align 4, !tbaa !9
  %1081 = mul nsw i32 2, %1080
  %1082 = ashr i32 %1079, %1081
  %1083 = and i32 %1082, 1
  store i32 %1083, ptr %68, align 4, !tbaa !9
  %1084 = load i32, ptr %58, align 4, !tbaa !9
  %1085 = load i32, ptr %19, align 4, !tbaa !9
  %1086 = mul nsw i32 2, %1085
  %1087 = add nsw i32 %1086, 1
  %1088 = ashr i32 %1084, %1087
  %1089 = and i32 %1088, 1
  store i32 %1089, ptr %69, align 4, !tbaa !9
  %1090 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 0
  %1091 = load i32, ptr %19, align 4, !tbaa !9
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds [4 x [2 x float]], ptr %1090, i64 0, i64 %1092
  %1094 = load i32, ptr %68, align 4, !tbaa !9
  %1095 = sext i32 %1094 to i64
  %1096 = getelementptr inbounds [2 x float], ptr %1093, i64 0, i64 %1095
  %1097 = load float, ptr %1096, align 4, !tbaa !14
  %1098 = fptosi float %1097 to i32
  %1099 = getelementptr inbounds [2 x [4 x i32]], ptr %57, i64 0, i64 0
  %1100 = load i32, ptr %19, align 4, !tbaa !9
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds [4 x i32], ptr %1099, i64 0, i64 %1101
  store i32 %1098, ptr %1102, align 4, !tbaa !9
  %1103 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %59, i64 0, i64 1
  %1104 = load i32, ptr %19, align 4, !tbaa !9
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds [4 x [2 x float]], ptr %1103, i64 0, i64 %1105
  %1107 = load i32, ptr %69, align 4, !tbaa !9
  %1108 = sext i32 %1107 to i64
  %1109 = getelementptr inbounds [2 x float], ptr %1106, i64 0, i64 %1108
  %1110 = load float, ptr %1109, align 4, !tbaa !14
  %1111 = fptosi float %1110 to i32
  %1112 = getelementptr inbounds [2 x [4 x i32]], ptr %57, i64 0, i64 1
  %1113 = load i32, ptr %19, align 4, !tbaa !9
  %1114 = sext i32 %1113 to i64
  %1115 = getelementptr inbounds [4 x i32], ptr %1112, i64 0, i64 %1114
  store i32 %1111, ptr %1115, align 4, !tbaa !9
  br label %1116

1116:                                             ; preds = %1078
  %1117 = load i32, ptr %19, align 4, !tbaa !9
  %1118 = add nsw i32 %1117, 1
  store i32 %1118, ptr %19, align 4, !tbaa !9
  br label %1074, !llvm.loop !39

1119:                                             ; preds = %1074
  %1120 = load float, ptr %54, align 4, !tbaa !14
  %1121 = load float, ptr %41, align 4, !tbaa !14
  %1122 = fcmp olt float %1120, %1121
  br i1 %1122, label %1123, label %1192

1123:                                             ; preds = %1119
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %1124

1124:                                             ; preds = %1158, %1123
  %1125 = load i32, ptr %18, align 4, !tbaa !9
  %1126 = load i32, ptr %11, align 4, !tbaa !9
  %1127 = icmp slt i32 %1125, %1126
  br i1 %1127, label %1128, label %1161

1128:                                             ; preds = %1124
  %1129 = load i32, ptr %18, align 4, !tbaa !9
  %1130 = sext i32 %1129 to i64
  %1131 = getelementptr inbounds [64 x i32], ptr %56, i64 0, i64 %1130
  %1132 = load i32, ptr %1131, align 4, !tbaa !9
  %1133 = load i32, ptr %18, align 4, !tbaa !9
  %1134 = sext i32 %1133 to i64
  %1135 = getelementptr inbounds [64 x i32], ptr %32, i64 0, i64 %1134
  store i32 %1132, ptr %1135, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1136

1136:                                             ; preds = %1154, %1128
  %1137 = load i32, ptr %19, align 4, !tbaa !9
  %1138 = load i32, ptr %17, align 4, !tbaa !9
  %1139 = icmp slt i32 %1137, %1138
  br i1 %1139, label %1140, label %1157

1140:                                             ; preds = %1136
  %1141 = load i32, ptr %18, align 4, !tbaa !9
  %1142 = sext i32 %1141 to i64
  %1143 = getelementptr inbounds [64 x [4 x float]], ptr %55, i64 0, i64 %1142
  %1144 = load i32, ptr %19, align 4, !tbaa !9
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds [4 x float], ptr %1143, i64 0, i64 %1145
  %1147 = load float, ptr %1146, align 4, !tbaa !14
  %1148 = load i32, ptr %18, align 4, !tbaa !9
  %1149 = sext i32 %1148 to i64
  %1150 = getelementptr inbounds [64 x [4 x float]], ptr %31, i64 0, i64 %1149
  %1151 = load i32, ptr %19, align 4, !tbaa !9
  %1152 = sext i32 %1151 to i64
  %1153 = getelementptr inbounds [4 x float], ptr %1150, i64 0, i64 %1152
  store float %1147, ptr %1153, align 4, !tbaa !14
  br label %1154

1154:                                             ; preds = %1140
  %1155 = load i32, ptr %19, align 4, !tbaa !9
  %1156 = add nsw i32 %1155, 1
  store i32 %1156, ptr %19, align 4, !tbaa !9
  br label %1136, !llvm.loop !40

1157:                                             ; preds = %1136
  br label %1158

1158:                                             ; preds = %1157
  %1159 = load i32, ptr %18, align 4, !tbaa !9
  %1160 = add nsw i32 %1159, 1
  store i32 %1160, ptr %18, align 4, !tbaa !9
  br label %1124, !llvm.loop !41

1161:                                             ; preds = %1124
  %1162 = load float, ptr %54, align 4, !tbaa !14
  store float %1162, ptr %41, align 4, !tbaa !14
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1163

1163:                                             ; preds = %1186, %1161
  %1164 = load i32, ptr %19, align 4, !tbaa !9
  %1165 = load i32, ptr %17, align 4, !tbaa !9
  %1166 = icmp slt i32 %1164, %1165
  br i1 %1166, label %1167, label %1189

1167:                                             ; preds = %1163
  %1168 = getelementptr inbounds [2 x [4 x i32]], ptr %57, i64 0, i64 0
  %1169 = load i32, ptr %19, align 4, !tbaa !9
  %1170 = sext i32 %1169 to i64
  %1171 = getelementptr inbounds [4 x i32], ptr %1168, i64 0, i64 %1170
  %1172 = load i32, ptr %1171, align 4, !tbaa !9
  %1173 = getelementptr inbounds [2 x [4 x i32]], ptr %33, i64 0, i64 0
  %1174 = load i32, ptr %19, align 4, !tbaa !9
  %1175 = sext i32 %1174 to i64
  %1176 = getelementptr inbounds [4 x i32], ptr %1173, i64 0, i64 %1175
  store i32 %1172, ptr %1176, align 4, !tbaa !9
  %1177 = getelementptr inbounds [2 x [4 x i32]], ptr %57, i64 0, i64 1
  %1178 = load i32, ptr %19, align 4, !tbaa !9
  %1179 = sext i32 %1178 to i64
  %1180 = getelementptr inbounds [4 x i32], ptr %1177, i64 0, i64 %1179
  %1181 = load i32, ptr %1180, align 4, !tbaa !9
  %1182 = getelementptr inbounds [2 x [4 x i32]], ptr %33, i64 0, i64 1
  %1183 = load i32, ptr %19, align 4, !tbaa !9
  %1184 = sext i32 %1183 to i64
  %1185 = getelementptr inbounds [4 x i32], ptr %1182, i64 0, i64 %1184
  store i32 %1181, ptr %1185, align 4, !tbaa !9
  br label %1186

1186:                                             ; preds = %1167
  %1187 = load i32, ptr %19, align 4, !tbaa !9
  %1188 = add nsw i32 %1187, 1
  store i32 %1188, ptr %19, align 4, !tbaa !9
  br label %1163, !llvm.loop !42

1189:                                             ; preds = %1163
  %1190 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %1190, ptr %39, align 4, !tbaa !9
  %1191 = load i32, ptr %38, align 4, !tbaa !9
  store i32 %1191, ptr %40, align 4, !tbaa !9
  br label %1192

1192:                                             ; preds = %1189, %1119
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 256, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 1024, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 16384, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 256, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 1024, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 256, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 256, ptr %45) #4
  br label %1193

1193:                                             ; preds = %1192
  %1194 = load i32, ptr %37, align 4, !tbaa !9
  %1195 = add nsw i32 %1194, 1
  store i32 %1195, ptr %37, align 4, !tbaa !9
  br label %256, !llvm.loop !43

1196:                                             ; preds = %256
  br label %1197

1197:                                             ; preds = %1196
  %1198 = load i32, ptr %38, align 4, !tbaa !9
  %1199 = add nsw i32 %1198, 1
  store i32 %1199, ptr %38, align 4, !tbaa !9
  br label %244, !llvm.loop !44

1200:                                             ; preds = %253
  store i32 0, ptr %28, align 4, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %1201

1201:                                             ; preds = %1225, %1200
  %1202 = load i32, ptr %20, align 4, !tbaa !9
  %1203 = load i32, ptr %11, align 4, !tbaa !9
  %1204 = icmp slt i32 %1202, %1203
  br i1 %1204, label %1205, label %1228

1205:                                             ; preds = %1201
  %1206 = load i32, ptr %28, align 4, !tbaa !9
  %1207 = icmp ne i32 %1206, 0
  br i1 %1207, label %1222, label %1208

1208:                                             ; preds = %1205
  %1209 = load i32, ptr %20, align 4, !tbaa !9
  %1210 = sext i32 %1209 to i64
  %1211 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 %1210
  %1212 = load i32, ptr %1211, align 4, !tbaa !9
  %1213 = load i32, ptr %40, align 4, !tbaa !9
  %1214 = mul nsw i32 %1212, %1213
  %1215 = load i32, ptr %39, align 4, !tbaa !9
  %1216 = add nsw i32 %1214, %1215
  %1217 = load i32, ptr %20, align 4, !tbaa !9
  %1218 = sext i32 %1217 to i64
  %1219 = getelementptr inbounds [64 x i32], ptr %32, i64 0, i64 %1218
  %1220 = load i32, ptr %1219, align 4, !tbaa !9
  %1221 = icmp ne i32 %1216, %1220
  br label %1222

1222:                                             ; preds = %1208, %1205
  %1223 = phi i1 [ true, %1205 ], [ %1221, %1208 ]
  %1224 = zext i1 %1223 to i32
  store i32 %1224, ptr %28, align 4, !tbaa !9
  br label %1225

1225:                                             ; preds = %1222
  %1226 = load i32, ptr %20, align 4, !tbaa !9
  %1227 = add nsw i32 %1226, 1
  store i32 %1227, ptr %20, align 4, !tbaa !9
  br label %1201, !llvm.loop !45

1228:                                             ; preds = %1201
  %1229 = load float, ptr %41, align 4, !tbaa !14
  %1230 = load float, ptr %30, align 4, !tbaa !14
  %1231 = fcmp olt float %1229, %1230
  %1232 = zext i1 %1231 to i32
  store i32 %1232, ptr %29, align 4, !tbaa !9
  %1233 = load i32, ptr %29, align 4, !tbaa !9
  %1234 = icmp ne i32 %1233, 0
  br i1 %1234, label %1235, label %1300

1235:                                             ; preds = %1228
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %1236

1236:                                             ; preds = %1295, %1235
  %1237 = load i32, ptr %20, align 4, !tbaa !9
  %1238 = load i32, ptr %11, align 4, !tbaa !9
  %1239 = icmp slt i32 %1237, %1238
  br i1 %1239, label %1240, label %1298

1240:                                             ; preds = %1236
  %1241 = load i32, ptr %20, align 4, !tbaa !9
  %1242 = sext i32 %1241 to i64
  %1243 = getelementptr inbounds [64 x i32], ptr %32, i64 0, i64 %1242
  %1244 = load i32, ptr %1243, align 4, !tbaa !9
  %1245 = load i32, ptr %20, align 4, !tbaa !9
  %1246 = sext i32 %1245 to i64
  %1247 = getelementptr inbounds [64 x i32], ptr %24, i64 0, i64 %1246
  store i32 %1244, ptr %1247, align 4, !tbaa !9
  %1248 = load ptr, ptr %12, align 8, !tbaa !5
  %1249 = load i32, ptr %20, align 4, !tbaa !9
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds i32, ptr %1248, i64 %1250
  store i32 %1244, ptr %1251, align 4, !tbaa !9
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %1252

1252:                                             ; preds = %1291, %1240
  %1253 = load i32, ptr %19, align 4, !tbaa !9
  %1254 = load i32, ptr %17, align 4, !tbaa !9
  %1255 = icmp slt i32 %1253, %1254
  br i1 %1255, label %1256, label %1294

1256:                                             ; preds = %1252
  %1257 = load i32, ptr %20, align 4, !tbaa !9
  %1258 = sext i32 %1257 to i64
  %1259 = getelementptr inbounds [64 x [4 x float]], ptr %31, i64 0, i64 %1258
  %1260 = load i32, ptr %19, align 4, !tbaa !9
  %1261 = sext i32 %1260 to i64
  %1262 = getelementptr inbounds [4 x float], ptr %1259, i64 0, i64 %1261
  %1263 = load float, ptr %1262, align 4, !tbaa !14
  %1264 = load ptr, ptr %13, align 8, !tbaa !5
  %1265 = load i32, ptr %20, align 4, !tbaa !9
  %1266 = sext i32 %1265 to i64
  %1267 = getelementptr inbounds [4 x float], ptr %1264, i64 %1266
  %1268 = load i32, ptr %19, align 4, !tbaa !9
  %1269 = sext i32 %1268 to i64
  %1270 = getelementptr inbounds [4 x float], ptr %1267, i64 0, i64 %1269
  store float %1263, ptr %1270, align 4, !tbaa !14
  %1271 = getelementptr inbounds [2 x [4 x i32]], ptr %33, i64 0, i64 0
  %1272 = load i32, ptr %19, align 4, !tbaa !9
  %1273 = sext i32 %1272 to i64
  %1274 = getelementptr inbounds [4 x i32], ptr %1271, i64 0, i64 %1273
  %1275 = load i32, ptr %1274, align 4, !tbaa !9
  %1276 = load ptr, ptr %14, align 8, !tbaa !5
  %1277 = getelementptr inbounds [4 x i32], ptr %1276, i64 0
  %1278 = load i32, ptr %19, align 4, !tbaa !9
  %1279 = sext i32 %1278 to i64
  %1280 = getelementptr inbounds [4 x i32], ptr %1277, i64 0, i64 %1279
  store i32 %1275, ptr %1280, align 4, !tbaa !9
  %1281 = getelementptr inbounds [2 x [4 x i32]], ptr %33, i64 0, i64 1
  %1282 = load i32, ptr %19, align 4, !tbaa !9
  %1283 = sext i32 %1282 to i64
  %1284 = getelementptr inbounds [4 x i32], ptr %1281, i64 0, i64 %1283
  %1285 = load i32, ptr %1284, align 4, !tbaa !9
  %1286 = load ptr, ptr %14, align 8, !tbaa !5
  %1287 = getelementptr inbounds [4 x i32], ptr %1286, i64 1
  %1288 = load i32, ptr %19, align 4, !tbaa !9
  %1289 = sext i32 %1288 to i64
  %1290 = getelementptr inbounds [4 x i32], ptr %1287, i64 0, i64 %1289
  store i32 %1285, ptr %1290, align 4, !tbaa !9
  br label %1291

1291:                                             ; preds = %1256
  %1292 = load i32, ptr %19, align 4, !tbaa !9
  %1293 = add nsw i32 %1292, 1
  store i32 %1293, ptr %19, align 4, !tbaa !9
  br label %1252, !llvm.loop !46

1294:                                             ; preds = %1252
  br label %1295

1295:                                             ; preds = %1294
  %1296 = load i32, ptr %20, align 4, !tbaa !9
  %1297 = add nsw i32 %1296, 1
  store i32 %1297, ptr %20, align 4, !tbaa !9
  br label %1236, !llvm.loop !47

1298:                                             ; preds = %1236
  %1299 = load float, ptr %41, align 4, !tbaa !14
  store float %1299, ptr %30, align 4, !tbaa !14
  br label %1300

1300:                                             ; preds = %1298, %1228
  %1301 = load i32, ptr %28, align 4, !tbaa !9
  %1302 = icmp ne i32 %1301, 0
  br i1 %1302, label %1303, label %1306

1303:                                             ; preds = %1300
  %1304 = load i32, ptr %29, align 4, !tbaa !9
  %1305 = icmp ne i32 %1304, 0
  br label %1306

1306:                                             ; preds = %1303, %1300
  %1307 = phi i1 [ false, %1300 ], [ %1305, %1303 ]
  %1308 = xor i1 %1307, true
  %1309 = zext i1 %1308 to i32
  store i32 %1309, ptr %27, align 4, !tbaa !9
  %1310 = load i32, ptr %26, align 4, !tbaa !9
  %1311 = icmp sgt i32 %1310, 0
  br i1 %1311, label %1312, label %1315

1312:                                             ; preds = %1306
  %1313 = load i32, ptr %26, align 4, !tbaa !9
  %1314 = add nsw i32 %1313, -1
  store i32 %1314, ptr %26, align 4, !tbaa !9
  br label %1316

1315:                                             ; preds = %1306
  store i32 0, ptr %26, align 4, !tbaa !9
  br label %1316

1316:                                             ; preds = %1315, %1312
  store i32 0, ptr %44, align 4
  br label %1317

1317:                                             ; preds = %1316, %241
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  %1318 = load i32, ptr %44, align 4
  switch i32 %1318, label %1330 [
    i32 0, label %1319
  ]

1319:                                             ; preds = %1317
  br label %1320

1320:                                             ; preds = %1319
  %1321 = load i32, ptr %27, align 4, !tbaa !9
  %1322 = icmp ne i32 %1321, 0
  br i1 %1322, label %1326, label %1323

1323:                                             ; preds = %1320
  %1324 = load i32, ptr %26, align 4, !tbaa !9
  %1325 = icmp ne i32 %1324, 0
  br label %1326

1326:                                             ; preds = %1323, %1320
  %1327 = phi i1 [ false, %1320 ], [ %1325, %1323 ]
  br i1 %1327, label %138, label %1328, !llvm.loop !48

1328:                                             ; preds = %1326
  %1329 = load float, ptr %30, align 4, !tbaa !14
  store float %1329, ptr %9, align 4
  store i32 1, ptr %44, align 4
  br label %1330

1330:                                             ; preds = %1328, %1317
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 256, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 1024, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 256, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  %1331 = load float, ptr %9, align 4
  ret float %1331
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 }

!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 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !15, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12}
!27 = distinct !{!27, !12}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !12}
!36 = distinct !{!36, !12}
!37 = distinct !{!37, !12}
!38 = distinct !{!38, !12}
!39 = distinct !{!39, !12}
!40 = distinct !{!40, !12}
!41 = distinct !{!41, !12}
!42 = distinct !{!42, !12}
!43 = distinct !{!43, !12}
!44 = distinct !{!44, !12}
!45 = distinct !{!45, !12}
!46 = distinct !{!46, !12}
!47 = distinct !{!47, !12}
!48 = distinct !{!48, !12}


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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef float @_ZN10HDR_Encode12ep_shaker_HDEPA4_fiPiS1_PA4_iiS2_i(ptr noundef %0, i32 noundef %1, ptr nocapture noundef %2, ptr nocapture noundef writeonly %3, ptr nocapture noundef writeonly %4, i32 noundef %5, ptr noundef %6, i32 noundef %7) local_unnamed_addr #2 {
  %9 = alloca [4 x float], align 16
  %10 = alloca [64 x i32], align 16
  %11 = alloca [64 x [4 x float]], align 16
  %12 = alloca [64 x i32], align 16
  %13 = alloca [2 x [4 x i32]], align 16
  %14 = alloca [2 x [4 x i32]], align 16
  %15 = alloca [64 x i32], align 16
  %16 = alloca [2 x [4 x float]], align 16
  %17 = alloca [2 x [4 x float]], align 16
  %18 = alloca [16 x [4 x float]], align 16
  %19 = alloca [16 x i32], align 16
  %20 = alloca [16 x i32], align 16
  %21 = alloca [64 x [4 x float]], align 16
  %22 = alloca [64 x i32], align 16
  %23 = alloca [2 x [4 x i32]], align 16
  %24 = alloca [2 x [4 x [2 x float]]], align 16
  %25 = alloca [64 x [16 x [4 x float]]], align 16
  %26 = alloca [64 x [4 x float]], align 16
  %27 = alloca [64 x i32], align 16
  %28 = alloca [4 x float], align 16
  %29 = alloca [4 x float], align 16
  %30 = add i32 %5, 1
  %.not475 = icmp ult i32 %30, 2
  br i1 %.not475, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %8, %.lr.ph
  %.0403477 = phi i32 [ %31, %.lr.ph ], [ %30, %8 ]
  %.0435476 = phi i32 [ %32, %.lr.ph ], [ 0, %8 ]
  %31 = ashr i32 %.0403477, 1
  %32 = add nuw nsw i32 %.0435476, 1
  %.not = icmp ult i32 %31, 2
  br i1 %.not, label %._crit_edge, label %.lr.ph, !llvm.loop !5

._crit_edge:                                      ; preds = %.lr.ph, %8
  %.0435.lcssa = phi i32 [ 0, %8 ], [ %32, %.lr.ph ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %10) #5
  %33 = icmp sgt i32 %1, 0
  %34 = zext i32 %1 to i64
  %35 = shl nuw nsw i64 %34, 2
  br i1 %33, label %.lr.ph480.preheader, label %._crit_edge481

.lr.ph480.preheader:                              ; preds = %._crit_edge
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %10, ptr align 4 %2, i64 %35, i1 false), !tbaa !7
  br label %._crit_edge481

._crit_edge481:                                   ; preds = %._crit_edge, %.lr.ph480.preheader
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #5
  %36 = load i32, ptr %6, align 4, !tbaa !7
  %37 = shl nsw i32 %7, 1
  %38 = srem i32 %36, %37
  %39 = tail call noundef i32 @_ZN10HDR_Encode10all_same_dEPA4_fii(ptr noundef %0, i32 noundef %1, i32 noundef %7)
  call void @_ZN10HDR_Encode8mean_d_dEPA4_fPfii(ptr noundef %0, ptr noundef nonnull %9, i32 noundef %1, i32 noundef %7)
  %40 = icmp slt i32 %7, 1
  %41 = getelementptr inbounds i8, ptr %17, i64 16
  %42 = sitofp i32 %5 to float
  %43 = getelementptr inbounds i8, ptr %16, i64 16
  %44 = shl nuw i32 1, %.0435.lcssa
  %.not632 = icmp eq i32 %.0435.lcssa, 31
  %45 = add nsw i32 %.0435.lcssa, -2
  %46 = getelementptr inbounds i8, ptr %24, i64 32
  %47 = icmp slt i32 %1, 1
  %48 = getelementptr inbounds i8, ptr %23, i64 16
  %49 = getelementptr inbounds i8, ptr %13, i64 16
  %50 = getelementptr i8, ptr %4, i64 16
  %.not456 = icmp eq i32 %39, 0
  %51 = getelementptr inbounds i8, ptr %14, i64 16
  %smax = call i32 @llvm.smax.i32(i32 %44, i32 1)
  %52 = zext i32 %7 to i64
  %53 = shl nuw nsw i64 %52, 2
  %wide.trip.count697 = zext nneg i32 %smax to i64
  %wide.trip.count714 = zext nneg i32 %smax to i64
  %54 = add nsw i64 %34, -1
  %min.iters.check938 = icmp ult i32 %1, 8
  %n.vec941 = and i64 %34, 2147483640
  %cmp.n952 = icmp eq i64 %n.vec941, %34
  %min.iters.check926 = icmp ult i32 %7, 4
  %n.vec929 = and i64 %52, 2147483644
  %cmp.n935 = icmp eq i64 %n.vec929, %52
  %min.iters.check915 = icmp ult i32 %7, 8
  %n.vec918 = and i64 %52, 2147483640
  %cmp.n923 = icmp eq i64 %n.vec918, %52
  %min.iters.check897 = icmp ult i32 %7, 4
  %n.vec900 = and i64 %52, 2147483644
  %cmp.n912 = icmp eq i64 %n.vec900, %52
  %min.iters.check878 = icmp ult i32 %7, 4
  %n.vec881 = and i64 %52, 2147483644
  %broadcast.splatinsert889 = insertelement <4 x float> poison, float %42, i64 0
  %broadcast.splat890 = shufflevector <4 x float> %broadcast.splatinsert889, <4 x float> poison, <4 x i32> zeroinitializer
  %cmp.n894 = icmp eq i64 %n.vec881, %52
  %min.iters.check863 = icmp ult i32 %7, 4
  %n.vec866 = and i64 %52, 2147483644
  %cmp.n875 = icmp eq i64 %n.vec866, %52
  %brmerge824 = or i1 %.not632, %40
  %xtraiter = and i32 %7, 1
  %55 = icmp eq i32 %7, 1
  %unroll_iter = and i32 %7, 2147483646
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  %xtraiter968 = and i64 %52, 3
  %56 = icmp ult i32 %7, 4
  %unroll_iter971 = and i64 %52, 2147483644
  %lcmp.mod969.not = icmp eq i64 %xtraiter968, 0
  %xtraiter973 = and i64 %34, 3
  %57 = icmp ult i32 %1, 4
  %unroll_iter976 = and i64 %34, 2147483644
  %lcmp.mod975.not = icmp eq i64 %xtraiter973, 0
  %xtraiter978 = and i64 %34, 1
  %58 = icmp eq i64 %54, 0
  %unroll_iter981 = and i64 %34, 2147483646
  %lcmp.mod980.not = icmp eq i64 %xtraiter978, 0
  %min.iters.check850 = icmp ult i32 %7, 4
  %n.vec853 = and i64 %52, 2147483644
  %cmp.n860 = icmp eq i64 %n.vec853, %52
  %xtraiter983 = and i64 %34, 1
  %59 = icmp eq i64 %54, 0
  %unroll_iter987 = and i64 %34, 2147483646
  %lcmp.mod985.not = icmp eq i64 %xtraiter983, 0
  %min.iters.check836 = icmp ult i32 %7, 4
  %n.vec839 = and i64 %52, 2147483644
  %cmp.n847 = icmp eq i64 %n.vec839, %52
  %min.iters.check = icmp ult i32 %7, 4
  %n.vec = and i64 %52, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %52
  br label %60

60:                                               ; preds = %424, %._crit_edge481
  %.0440 = phi i32 [ 1, %._crit_edge481 ], [ %.2442, %424 ]
  %.0436 = phi float [ 0x47EFFFFFE0000000, %._crit_edge481 ], [ %.3439, %424 ]
  %.0393 = phi float [ undef, %._crit_edge481 ], [ %.1394, %424 ]
  call void @_ZN10HDR_Encode21index_collapse_kernelEPii(ptr noundef nonnull %10, i32 noundef %1)
  %61 = call noundef i32 @_ZN10HDR_Encode9max_indexEPii(ptr noundef nonnull %10, i32 noundef %1)
  %.not457 = icmp eq i32 %61, 0
  br i1 %.not457, label %62, label %.preheader474

.preheader474:                                    ; preds = %60
  %.not453591 = icmp sgt i32 %61, %5
  br i1 %.not453591, label %.critedge.preheader, label %.preheader469

62:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #5
  br i1 %.not456, label %65, label %63

63:                                               ; preds = %62
  %64 = call noundef float @_ZN10HDR_Encode20quant_single_point_dEPA4_fiPiS1_PA4_iiS2_ii(ptr noundef %0, i32 noundef %1, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %14, i32 noundef %5, ptr noundef nonnull %6, i32 noundef %38, i32 noundef %7)
  br label %68

65:                                               ; preds = %62
  %66 = call noundef float @_ZN10HDR_Encode20quant_single_point_dEPA4_fiPiS1_PA4_iiS2_ii(ptr noundef nonnull %9, i32 noundef %1, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %14, i32 noundef %5, ptr noundef nonnull %6, i32 noundef %38, i32 noundef %7)
  %67 = call noundef float @_ZN10HDR_Encode12totalError_dEPA4_fS1_ii(ptr noundef %0, ptr noundef nonnull %11, i32 noundef %1, i32 noundef %7)
  br label %68

68:                                               ; preds = %65, %63
  %.0414 = phi float [ %64, %63 ], [ %67, %65 ]
  %69 = fcmp uge float %.0414, %.0436
  %brmerge = or i1 %69, %47
  %.0436.mux = select i1 %69, float %.0436, float %.0414
  br i1 %brmerge, label %.loopexit471, label %.lr.ph622

.lr.ph622:                                        ; preds = %68
  br i1 %40, label %.lr.ph622.split.preheader, label %.lr.ph619.us

.lr.ph622.split.preheader:                        ; preds = %.lr.ph622
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2, ptr nonnull align 16 %10, i64 %35, i1 false), !tbaa !7
  br label %.loopexit471

.lr.ph619.us:                                     ; preds = %.lr.ph622, %._crit_edge620.us
  %indvars.iv791 = phi i64 [ %indvars.iv.next792, %._crit_edge620.us ], [ 0, %.lr.ph622 ]
  %70 = getelementptr inbounds [64 x i32], ptr %10, i64 0, i64 %indvars.iv791
  %71 = load i32, ptr %70, align 4, !tbaa !7
  %72 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv791
  store i32 %71, ptr %72, align 4, !tbaa !7
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph619.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph619.us ]
  %73 = getelementptr inbounds [64 x [4 x float]], ptr %11, i64 0, i64 %indvars.iv791, i64 %index
  %wide.load = load <4 x float>, ptr %73, align 16, !tbaa !11
  %74 = getelementptr inbounds [4 x float], ptr %3, i64 %indvars.iv791, i64 %index
  store <4 x float> %wide.load, ptr %74, align 4, !tbaa !11
  %75 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %index
  %wide.load832 = load <4 x i32>, ptr %75, align 16, !tbaa !7
  %76 = getelementptr inbounds [4 x i32], ptr %4, i64 0, i64 %index
  store <4 x i32> %wide.load832, ptr %76, align 4, !tbaa !7
  %77 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %index
  %wide.load833 = load <4 x i32>, ptr %77, align 16, !tbaa !7
  %78 = getelementptr inbounds [4 x i32], ptr %50, i64 0, i64 %index
  store <4 x i32> %wide.load833, ptr %78, align 4, !tbaa !7
  %index.next = add nuw i64 %index, 4
  %79 = icmp eq i64 %index.next, %n.vec
  br i1 %79, label %middle.block, label %vector.body, !llvm.loop !13

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge620.us, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph619.us
  %indvars.iv786.ph = phi i64 [ 0, %.lr.ph619.us ], [ %n.vec, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv786 = phi i64 [ %indvars.iv.next787, %scalar.ph ], [ %indvars.iv786.ph, %scalar.ph.preheader ]
  %80 = getelementptr inbounds [64 x [4 x float]], ptr %11, i64 0, i64 %indvars.iv791, i64 %indvars.iv786
  %81 = load float, ptr %80, align 4, !tbaa !11
  %82 = getelementptr inbounds [4 x float], ptr %3, i64 %indvars.iv791, i64 %indvars.iv786
  store float %81, ptr %82, align 4, !tbaa !11
  %83 = getelementptr inbounds [4 x i32], ptr %14, i64 0, i64 %indvars.iv786
  %84 = load i32, ptr %83, align 4, !tbaa !7
  %85 = getelementptr inbounds [4 x i32], ptr %4, i64 0, i64 %indvars.iv786
  store i32 %84, ptr %85, align 4, !tbaa !7
  %86 = getelementptr inbounds [4 x i32], ptr %51, i64 0, i64 %indvars.iv786
  %87 = load i32, ptr %86, align 4, !tbaa !7
  %88 = getelementptr inbounds [4 x i32], ptr %50, i64 0, i64 %indvars.iv786
  store i32 %87, ptr %88, align 4, !tbaa !7
  %indvars.iv.next787 = add nuw nsw i64 %indvars.iv786, 1
  %exitcond790.not = icmp eq i64 %indvars.iv.next787, %52
  br i1 %exitcond790.not, label %._crit_edge620.us, label %scalar.ph, !llvm.loop !16

._crit_edge620.us:                                ; preds = %scalar.ph, %middle.block
  %indvars.iv.next792 = add nuw nsw i64 %indvars.iv791, 1
  %exitcond795.not = icmp eq i64 %indvars.iv.next792, %34
  br i1 %exitcond795.not, label %.loopexit471, label %.lr.ph619.us, !llvm.loop !17

.loopexit471:                                     ; preds = %._crit_edge620.us, %.lr.ph622.split.preheader, %68
  %.1437 = phi float [ %.0436.mux, %68 ], [ %.0414, %.lr.ph622.split.preheader ], [ %.0414, %._crit_edge620.us ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #5
  br label %423

.critedge.preheader:                              ; preds = %._crit_edge583, %.preheader474
  %.0421.lcssa = phi i32 [ -1, %.preheader474 ], [ %.1422.lcssa, %._crit_edge583 ]
  %.0418.lcssa = phi i32 [ -1, %.preheader474 ], [ %.1419.lcssa, %._crit_edge583 ]
  %.0415.lcssa = phi float [ 0x47EFFFFFE0000000, %.preheader474 ], [ %.1416.lcssa, %._crit_edge583 ]
  br i1 %33, label %.lr.ph609.preheader, label %.critedge._crit_edge.thread

.lr.ph609.preheader:                              ; preds = %.critedge.preheader
  br i1 %59, label %.critedge._crit_edge.unr-lcssa, label %.lr.ph609

.critedge._crit_edge.thread:                      ; preds = %.critedge.preheader
  %89 = fcmp olt float %.0415.lcssa, %.0436
  %.0436.mux631814 = select i1 %89, float %.0415.lcssa, float %.0436
  br label %.loopexit473

.preheader469:                                    ; preds = %.preheader474, %._crit_edge583
  %.pn = phi i32 [ %indvars.iv757, %._crit_edge583 ], [ %30, %.preheader474 ]
  %.0415595 = phi float [ %.1416.lcssa, %._crit_edge583 ], [ 0x47EFFFFFE0000000, %.preheader474 ]
  %.0418594 = phi i32 [ %.1419.lcssa, %._crit_edge583 ], [ -1, %.preheader474 ]
  %.0421593 = phi i32 [ %.1422.lcssa, %._crit_edge583 ], [ -1, %.preheader474 ]
  %.0424592 = phi i32 [ %375, %._crit_edge583 ], [ 1, %.preheader474 ]
  %indvars.iv757 = sub i32 %.pn, %61
  %90 = mul nsw i32 %.0424592, %61
  %.not454577 = icmp sgt i32 %90, %5
  br i1 %.not454577, label %._crit_edge583, label %.lr.ph582.preheader

.lr.ph582.preheader:                              ; preds = %.preheader469
  %broadcast.splatinsert947 = insertelement <4 x i32> poison, i32 %.0424592, i64 0
  %broadcast.splat948 = shufflevector <4 x i32> %broadcast.splatinsert947, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %.lr.ph582

.lr.ph582:                                        ; preds = %.lr.ph582.preheader, %.loopexit463
  %.1416581 = phi float [ %.2417, %.loopexit463 ], [ %.0415595, %.lr.ph582.preheader ]
  %.1419580 = phi i32 [ %.2420, %.loopexit463 ], [ %.0418594, %.lr.ph582.preheader ]
  %.1422579 = phi i32 [ %.2423, %.loopexit463 ], [ %.0421593, %.lr.ph582.preheader ]
  %.0425578 = phi i32 [ %374, %.loopexit463 ], [ 0, %.lr.ph582.preheader ]
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %15) #5
  br i1 %33, label %.lr.ph484.preheader, label %._crit_edge485

.lr.ph484.preheader:                              ; preds = %.lr.ph582
  br i1 %min.iters.check938, label %.lr.ph484.preheader958, label %vector.ph939

vector.ph939:                                     ; preds = %.lr.ph484.preheader
  %broadcast.splatinsert949 = insertelement <4 x i32> poison, i32 %.0425578, i64 0
  %broadcast.splat950 = shufflevector <4 x i32> %broadcast.splatinsert949, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body943

vector.body943:                                   ; preds = %vector.body943, %vector.ph939
  %index944 = phi i64 [ 0, %vector.ph939 ], [ %index.next951, %vector.body943 ]
  %91 = getelementptr inbounds [64 x i32], ptr %10, i64 0, i64 %index944
  %92 = getelementptr inbounds i8, ptr %91, i64 16
  %wide.load945 = load <4 x i32>, ptr %91, align 16, !tbaa !7
  %wide.load946 = load <4 x i32>, ptr %92, align 16, !tbaa !7
  %93 = mul nsw <4 x i32> %wide.load945, %broadcast.splat948
  %94 = mul nsw <4 x i32> %wide.load946, %broadcast.splat948
  %95 = add nsw <4 x i32> %93, %broadcast.splat950
  %96 = add nsw <4 x i32> %94, %broadcast.splat950
  %97 = getelementptr inbounds [64 x i32], ptr %15, i64 0, i64 %index944
  %98 = getelementptr inbounds i8, ptr %97, i64 16
  store <4 x i32> %95, ptr %97, align 16, !tbaa !7
  store <4 x i32> %96, ptr %98, align 16, !tbaa !7
  %index.next951 = add nuw i64 %index944, 8
  %99 = icmp eq i64 %index.next951, %n.vec941
  br i1 %99, label %middle.block936, label %vector.body943, !llvm.loop !18

middle.block936:                                  ; preds = %vector.body943
  br i1 %cmp.n952, label %._crit_edge485, label %.lr.ph484.preheader958

.lr.ph484.preheader958:                           ; preds = %middle.block936, %.lr.ph484.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph484.preheader ], [ %n.vec941, %middle.block936 ]
  br label %.lr.ph484

.lr.ph484:                                        ; preds = %.lr.ph484.preheader958, %.lr.ph484
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph484 ], [ %indvars.iv.ph, %.lr.ph484.preheader958 ]
  %100 = getelementptr inbounds [64 x i32], ptr %10, i64 0, i64 %indvars.iv
  %101 = load i32, ptr %100, align 4, !tbaa !7
  %102 = mul nsw i32 %101, %.0424592
  %103 = add nsw i32 %102, %.0425578
  %104 = getelementptr inbounds [64 x i32], ptr %15, i64 0, i64 %indvars.iv
  store i32 %103, ptr %104, align 4, !tbaa !7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %34
  br i1 %exitcond.not, label %._crit_edge485, label %.lr.ph484, !llvm.loop !19

._crit_edge485:                                   ; preds = %.lr.ph484, %middle.block936, %.lr.ph582
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %18) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #5
  %105 = call noundef i32 @_ZN10HDR_Encode16cluster_mean_d_dEPA4_fS1_PiS2_S2_ii(ptr noundef %0, ptr noundef nonnull %18, ptr noundef nonnull %15, ptr noundef nonnull %20, ptr noundef nonnull %19, i32 noundef %1, i32 noundef %7)
  %106 = icmp sgt i32 %105, 0
  br i1 %106, label %.preheader461.lr.ph, label %.preheader468

.preheader461.lr.ph:                              ; preds = %._crit_edge485
  br i1 %40, label %.preheader467, label %.preheader461.us.preheader

.preheader461.us.preheader:                       ; preds = %.preheader461.lr.ph
  %wide.trip.count659 = zext nneg i32 %105 to i64
  br label %.preheader461.us

.preheader461.us:                                 ; preds = %.preheader461.us.preheader, %._crit_edge488.us
  %indvars.iv656 = phi i64 [ 0, %.preheader461.us.preheader ], [ %indvars.iv.next657, %._crit_edge488.us ]
  %107 = getelementptr inbounds [16 x i32], ptr %20, i64 0, i64 %indvars.iv656
  %108 = load i32, ptr %107, align 4, !tbaa !7
  %109 = sext i32 %108 to i64
  br i1 %min.iters.check926, label %scalar.ph925.preheader, label %vector.body931

vector.body931:                                   ; preds = %.preheader461.us, %vector.body931
  %index932 = phi i64 [ %index.next934, %vector.body931 ], [ 0, %.preheader461.us ]
  %110 = getelementptr inbounds [16 x [4 x float]], ptr %18, i64 0, i64 %109, i64 %index932
  %wide.load933 = load <4 x float>, ptr %110, align 16, !tbaa !11
  %111 = fadd <4 x float> %wide.load933, <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>
  %112 = call <4 x float> @llvm.floor.v4f32(<4 x float> %111)
  store <4 x float> %112, ptr %110, align 16, !tbaa !11
  %index.next934 = add nuw i64 %index932, 4
  %113 = icmp eq i64 %index.next934, %n.vec929
  br i1 %113, label %middle.block924, label %vector.body931, !llvm.loop !20

middle.block924:                                  ; preds = %vector.body931
  br i1 %cmp.n935, label %._crit_edge488.us, label %scalar.ph925.preheader

scalar.ph925.preheader:                           ; preds = %middle.block924, %.preheader461.us
  %indvars.iv651.ph = phi i64 [ 0, %.preheader461.us ], [ %n.vec929, %middle.block924 ]
  br label %scalar.ph925

scalar.ph925:                                     ; preds = %scalar.ph925.preheader, %scalar.ph925
  %indvars.iv651 = phi i64 [ %indvars.iv.next652, %scalar.ph925 ], [ %indvars.iv651.ph, %scalar.ph925.preheader ]
  %114 = getelementptr inbounds [16 x [4 x float]], ptr %18, i64 0, i64 %109, i64 %indvars.iv651
  %115 = load float, ptr %114, align 4, !tbaa !11
  %116 = fadd float %115, 5.000000e-01
  %117 = call float @llvm.floor.f32(float %116)
  store float %117, ptr %114, align 4, !tbaa !11
  %indvars.iv.next652 = add nuw nsw i64 %indvars.iv651, 1
  %exitcond655.not = icmp eq i64 %indvars.iv.next652, %52
  br i1 %exitcond655.not, label %._crit_edge488.us, label %scalar.ph925, !llvm.loop !21

._crit_edge488.us:                                ; preds = %scalar.ph925, %middle.block924
  %indvars.iv.next657 = add nuw nsw i64 %indvars.iv656, 1
  %exitcond660.not = icmp eq i64 %indvars.iv.next657, %wide.trip.count659
  br i1 %exitcond660.not, label %.preheader468, label %.preheader461.us, !llvm.loop !22

.preheader468:                                    ; preds = %._crit_edge488.us, %._crit_edge485
  br i1 %40, label %.preheader467, label %.lr.ph491.preheader

.lr.ph491.preheader:                              ; preds = %.preheader468
  br i1 %min.iters.check915, label %.lr.ph491.preheader957, label %vector.body920

.lr.ph491.preheader957:                           ; preds = %middle.block913, %.lr.ph491.preheader
  %indvars.iv661.ph = phi i64 [ 0, %.lr.ph491.preheader ], [ %n.vec918, %middle.block913 ]
  br label %.lr.ph491

vector.body920:                                   ; preds = %.lr.ph491.preheader, %vector.body920
  %index921 = phi i64 [ %index.next922, %vector.body920 ], [ 0, %.lr.ph491.preheader ]
  %118 = getelementptr inbounds [4 x float], ptr %41, i64 0, i64 %index921
  %119 = getelementptr inbounds i8, ptr %118, i64 16
  store <4 x float> zeroinitializer, ptr %118, align 16, !tbaa !11
  store <4 x float> zeroinitializer, ptr %119, align 16, !tbaa !11
  %120 = getelementptr inbounds [4 x float], ptr %17, i64 0, i64 %index921
  %121 = getelementptr inbounds i8, ptr %120, i64 16
  store <4 x float> zeroinitializer, ptr %120, align 16, !tbaa !11
  store <4 x float> zeroinitializer, ptr %121, align 16, !tbaa !11
  %index.next922 = add nuw i64 %index921, 8
  %122 = icmp eq i64 %index.next922, %n.vec918
  br i1 %122, label %middle.block913, label %vector.body920, !llvm.loop !23

middle.block913:                                  ; preds = %vector.body920
  br i1 %cmp.n923, label %.preheader467, label %.lr.ph491.preheader957

.preheader467:                                    ; preds = %.lr.ph491, %middle.block913, %.preheader461.lr.ph, %.preheader468
  br i1 %33, label %.lr.ph500, label %._crit_edge501

.lr.ph491:                                        ; preds = %.lr.ph491.preheader957, %.lr.ph491
  %indvars.iv661 = phi i64 [ %indvars.iv.next662, %.lr.ph491 ], [ %indvars.iv661.ph, %.lr.ph491.preheader957 ]
  %123 = getelementptr inbounds [4 x float], ptr %41, i64 0, i64 %indvars.iv661
  store float 0.000000e+00, ptr %123, align 4, !tbaa !11
  %124 = getelementptr inbounds [4 x float], ptr %17, i64 0, i64 %indvars.iv661
  store float 0.000000e+00, ptr %124, align 4, !tbaa !11
  %indvars.iv.next662 = add nuw nsw i64 %indvars.iv661, 1
  %exitcond665.not = icmp eq i64 %indvars.iv.next662, %52
  br i1 %exitcond665.not, label %.preheader467, label %.lr.ph491, !llvm.loop !24

.lr.ph500:                                        ; preds = %.preheader467, %._crit_edge495
  %indvars.iv671 = phi i64 [ %indvars.iv.next672, %._crit_edge495 ], [ 0, %.preheader467 ]
  %.sroa.20.3499 = phi float [ %136, %._crit_edge495 ], [ 0.000000e+00, %.preheader467 ]
  %.sroa.9.3498 = phi float [ %133, %._crit_edge495 ], [ 0.000000e+00, %.preheader467 ]
  %.sroa.0.3497 = phi float [ %130, %._crit_edge495 ], [ 0.000000e+00, %.preheader467 ]
  %125 = getelementptr inbounds [64 x i32], ptr %15, i64 0, i64 %indvars.iv671
  %126 = load i32, ptr %125, align 4, !tbaa !7
  %127 = sub nsw i32 %5, %126
  %128 = mul nsw i32 %127, %127
  %129 = uitofp nneg i32 %128 to float
  %130 = fadd float %.sroa.0.3497, %129
  %131 = mul nsw i32 %127, %126
  %132 = sitofp i32 %131 to float
  %133 = fadd float %.sroa.9.3498, %132
  %134 = mul nsw i32 %126, %126
  %135 = uitofp nneg i32 %134 to float
  %136 = fadd float %.sroa.20.3499, %135
  br i1 %40, label %._crit_edge495, label %.lr.ph494

.lr.ph494:                                        ; preds = %.lr.ph500
  %137 = sitofp i32 %127 to float
  %138 = sext i32 %126 to i64
  %139 = sitofp i32 %126 to float
  br i1 %min.iters.check897, label %scalar.ph896.preheader, label %vector.ph898

vector.ph898:                                     ; preds = %.lr.ph494
  %broadcast.splatinsert906 = insertelement <4 x float> poison, float %137, i64 0
  %broadcast.splat907 = shufflevector <4 x float> %broadcast.splatinsert906, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert909 = insertelement <4 x float> poison, float %139, i64 0
  %broadcast.splat910 = shufflevector <4 x float> %broadcast.splatinsert909, <4 x float> poison, <4 x i32> zeroinitializer
  %load_initial = load <4 x float>, ptr %17, align 16
  br label %vector.body902

vector.body902:                                   ; preds = %vector.body902, %vector.ph898
  %store_forwarded = phi <4 x float> [ %load_initial, %vector.ph898 ], [ %144, %vector.body902 ]
  %index903 = phi i64 [ 0, %vector.ph898 ], [ %index.next911, %vector.body902 ]
  %140 = getelementptr inbounds [16 x [4 x float]], ptr %18, i64 0, i64 %138, i64 %index903
  %wide.load904 = load <4 x float>, ptr %140, align 16, !tbaa !11
  %141 = getelementptr inbounds [4 x float], ptr %17, i64 0, i64 %index903
  %142 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat907, <4 x float> %wide.load904, <4 x float> %store_forwarded)
  store <4 x float> %142, ptr %141, align 16, !tbaa !11
  %143 = getelementptr inbounds [4 x float], ptr %41, i64 0, i64 %index903
  %wide.load908 = load <4 x float>, ptr %143, align 16, !tbaa !11
  %144 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat910, <4 x float> %wide.load904, <4 x float> %wide.load908)
  store <4 x float> %144, ptr %143, align 16, !tbaa !11
  %index.next911 = add nuw i64 %index903, 4
  %145 = icmp eq i64 %index.next911, %n.vec900
  br i1 %145, label %middle.block895, label %vector.body902, !llvm.loop !25

middle.block895:                                  ; preds = %vector.body902
  br i1 %cmp.n912, label %._crit_edge495, label %scalar.ph896.preheader

scalar.ph896.preheader:                           ; preds = %middle.block895, %.lr.ph494
  %indvars.iv666.ph = phi i64 [ 0, %.lr.ph494 ], [ %n.vec900, %middle.block895 ]
  br label %scalar.ph896

scalar.ph896:                                     ; preds = %scalar.ph896.preheader, %scalar.ph896
  %indvars.iv666 = phi i64 [ %indvars.iv.next667, %scalar.ph896 ], [ %indvars.iv666.ph, %scalar.ph896.preheader ]
  %146 = getelementptr inbounds [16 x [4 x float]], ptr %18, i64 0, i64 %138, i64 %indvars.iv666
  %147 = load float, ptr %146, align 4, !tbaa !11
  %148 = getelementptr inbounds [4 x float], ptr %17, i64 0, i64 %indvars.iv666
  %149 = load float, ptr %148, align 4, !tbaa !11
  %150 = call float @llvm.fmuladd.f32(float %137, float %147, float %149)
  store float %150, ptr %148, align 4, !tbaa !11
  %151 = getelementptr inbounds [4 x float], ptr %41, i64 0, i64 %indvars.iv666
  %152 = load float, ptr %151, align 4, !tbaa !11
  %153 = call float @llvm.fmuladd.f32(float %139, float %147, float %152)
  store float %153, ptr %151, align 4, !tbaa !11
  %indvars.iv.next667 = add nuw nsw i64 %indvars.iv666, 1
  %exitcond670.not = icmp eq i64 %indvars.iv.next667, %52
  br i1 %exitcond670.not, label %._crit_edge495, label %scalar.ph896, !llvm.loop !26

._crit_edge495:                                   ; preds = %scalar.ph896, %middle.block895, %.lr.ph500
  %indvars.iv.next672 = add nuw nsw i64 %indvars.iv671, 1
  %exitcond675.not = icmp eq i64 %indvars.iv.next672, %34
  br i1 %exitcond675.not, label %._crit_edge501, label %.lr.ph500, !llvm.loop !27

._crit_edge501:                                   ; preds = %._crit_edge495, %.preheader467
  %.sroa.0.3.lcssa = phi float [ 0.000000e+00, %.preheader467 ], [ %130, %._crit_edge495 ]
  %.sroa.9.3.lcssa = phi float [ 0.000000e+00, %.preheader467 ], [ %133, %._crit_edge495 ]
  %.sroa.20.3.lcssa = phi float [ 0.000000e+00, %.preheader467 ], [ %136, %._crit_edge495 ]
  %154 = fneg float %.sroa.9.3.lcssa
  %155 = fmul float %.sroa.9.3.lcssa, %154
  %156 = call float @llvm.fmuladd.f32(float %.sroa.0.3.lcssa, float %.sroa.20.3.lcssa, float %155)
  %157 = fdiv float %.sroa.20.3.lcssa, %156
  %158 = fdiv float %.sroa.0.3.lcssa, %156
  %159 = fdiv float %154, %156
  br i1 %40, label %._crit_edge508.thread, label %.lr.ph507.preheader

.lr.ph507.preheader:                              ; preds = %._crit_edge501
  br i1 %min.iters.check878, label %.lr.ph507.preheader956, label %vector.ph879

.lr.ph507.preheader956:                           ; preds = %middle.block876, %.lr.ph507.preheader
  %indvars.iv676.ph = phi i64 [ 0, %.lr.ph507.preheader ], [ %n.vec881, %middle.block876 ]
  br label %.lr.ph507

vector.ph879:                                     ; preds = %.lr.ph507.preheader
  %broadcast.splatinsert = insertelement <4 x float> poison, float %159, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert887 = insertelement <4 x float> poison, float %157, i64 0
  %broadcast.splat888 = shufflevector <4 x float> %broadcast.splatinsert887, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert891 = insertelement <4 x float> poison, float %158, i64 0
  %broadcast.splat892 = shufflevector <4 x float> %broadcast.splatinsert891, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body883

vector.body883:                                   ; preds = %vector.body883, %vector.ph879
  %index884 = phi i64 [ 0, %vector.ph879 ], [ %index.next893, %vector.body883 ]
  %160 = getelementptr inbounds [4 x float], ptr %17, i64 0, i64 %index884
  %wide.load885 = load <4 x float>, ptr %160, align 16, !tbaa !11
  %161 = getelementptr inbounds [4 x float], ptr %41, i64 0, i64 %index884
  %wide.load886 = load <4 x float>, ptr %161, align 16, !tbaa !11
  %162 = fmul <4 x float> %broadcast.splat, %wide.load886
  %163 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat888, <4 x float> %wide.load885, <4 x float> %162)
  %164 = fmul <4 x float> %163, %broadcast.splat890
  %165 = getelementptr inbounds [4 x float], ptr %16, i64 0, i64 %index884
  store <4 x float> %164, ptr %165, align 16, !tbaa !11
  %166 = fmul <4 x float> %broadcast.splat892, %wide.load886
  %167 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat, <4 x float> %wide.load885, <4 x float> %166)
  %168 = fmul <4 x float> %167, %broadcast.splat890
  %169 = getelementptr inbounds [4 x float], ptr %43, i64 0, i64 %index884
  store <4 x float> %168, ptr %169, align 16, !tbaa !11
  %index.next893 = add nuw i64 %index884, 4
  %170 = icmp eq i64 %index.next893, %n.vec881
  br i1 %170, label %middle.block876, label %vector.body883, !llvm.loop !28

middle.block876:                                  ; preds = %vector.body883
  br i1 %cmp.n894, label %._crit_edge508, label %.lr.ph507.preheader956

._crit_edge508.thread:                            ; preds = %._crit_edge501
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %22)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %24) #5
  br label %._crit_edge511

.lr.ph507:                                        ; preds = %.lr.ph507.preheader956, %.lr.ph507
  %indvars.iv676 = phi i64 [ %indvars.iv.next677, %.lr.ph507 ], [ %indvars.iv676.ph, %.lr.ph507.preheader956 ]
  %171 = getelementptr inbounds [4 x float], ptr %17, i64 0, i64 %indvars.iv676
  %172 = load float, ptr %171, align 4, !tbaa !11
  %173 = getelementptr inbounds [4 x float], ptr %41, i64 0, i64 %indvars.iv676
  %174 = load float, ptr %173, align 4, !tbaa !11
  %175 = fmul float %159, %174
  %176 = call float @llvm.fmuladd.f32(float %157, float %172, float %175)
  %177 = fmul float %176, %42
  %178 = getelementptr inbounds [4 x float], ptr %16, i64 0, i64 %indvars.iv676
  store float %177, ptr %178, align 4, !tbaa !11
  %179 = fmul float %158, %174
  %180 = call float @llvm.fmuladd.f32(float %159, float %172, float %179)
  %181 = fmul float %180, %42
  %182 = getelementptr inbounds [4 x float], ptr %43, i64 0, i64 %indvars.iv676
  store float %181, ptr %182, align 4, !tbaa !11
  %indvars.iv.next677 = add nuw nsw i64 %indvars.iv676, 1
  %exitcond680.not = icmp eq i64 %indvars.iv.next677, %52
  br i1 %exitcond680.not, label %._crit_edge508, label %.lr.ph507, !llvm.loop !29

._crit_edge508:                                   ; preds = %.lr.ph507, %middle.block876
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %22)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %24) #5
  br i1 %40, label %._crit_edge511, label %.preheader460.preheader

.preheader460.preheader:                          ; preds = %._crit_edge508
  br i1 %min.iters.check863, label %.preheader460.preheader955, label %vector.body868

vector.body868:                                   ; preds = %.preheader460.preheader, %vector.body868
  %index869 = phi i64 [ %index.next874, %vector.body868 ], [ 0, %.preheader460.preheader ]
  %183 = getelementptr inbounds i32, ptr %6, i64 %index869
  %wide.load870 = load <4 x i32>, ptr %183, align 4, !tbaa !7
  %184 = shl nsw <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, %wide.load870
  %185 = xor <4 x i32> %184, <i32 -1, i32 -1, i32 -1, i32 -1>
  %186 = getelementptr inbounds [2 x [4 x float]], ptr %16, i64 0, i64 0, i64 %index869
  %wide.load871 = load <4 x float>, ptr %186, align 16, !tbaa !11
  %187 = fptosi <4 x float> %wide.load871 to <4 x i32>
  %188 = sub nsw <4 x i32> %185, %187
  %189 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %188, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
  %190 = sitofp <4 x i32> %189 to <4 x float>
  %191 = fadd <4 x float> %wide.load871, %190
  %192 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %24, i64 0, i64 0, i64 %index869
  %interleaved.vec = shufflevector <4 x float> %wide.load871, <4 x float> %191, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x float> %interleaved.vec, ptr %192, align 16, !tbaa !11
  %193 = getelementptr inbounds [2 x [4 x float]], ptr %16, i64 0, i64 1, i64 %index869
  %wide.load872 = load <4 x float>, ptr %193, align 16, !tbaa !11
  %194 = fptosi <4 x float> %wide.load872 to <4 x i32>
  %195 = sub nsw <4 x i32> %185, %194
  %196 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %195, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
  %197 = sitofp <4 x i32> %196 to <4 x float>
  %198 = fadd <4 x float> %wide.load872, %197
  %199 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %24, i64 0, i64 1, i64 %index869
  %interleaved.vec873 = shufflevector <4 x float> %wide.load872, <4 x float> %198, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
  store <8 x float> %interleaved.vec873, ptr %199, align 16, !tbaa !11
  %index.next874 = add nuw i64 %index869, 4
  %200 = icmp eq i64 %index.next874, %n.vec866
  br i1 %200, label %middle.block861, label %vector.body868, !llvm.loop !30

middle.block861:                                  ; preds = %vector.body868
  br i1 %cmp.n875, label %._crit_edge511, label %.preheader460.preheader955

.preheader460.preheader955:                       ; preds = %middle.block861, %.preheader460.preheader
  %indvars.iv684.ph = phi i64 [ 0, %.preheader460.preheader ], [ %n.vec866, %middle.block861 ]
  br label %.preheader460

.preheader460:                                    ; preds = %.preheader460.preheader955, %.preheader460
  %indvars.iv684 = phi i64 [ %indvars.iv.next685, %.preheader460 ], [ %indvars.iv684.ph, %.preheader460.preheader955 ]
  %201 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv684
  %202 = load i32, ptr %201, align 4, !tbaa !7
  %notmask = shl nsw i32 -1, %202
  %203 = xor i32 %notmask, -1
  %204 = getelementptr inbounds [2 x [4 x float]], ptr %16, i64 0, i64 0, i64 %indvars.iv684
  %205 = load float, ptr %204, align 4, !tbaa !11
  %206 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %24, i64 0, i64 0, i64 %indvars.iv684
  %207 = getelementptr inbounds i8, ptr %206, i64 4
  store float %205, ptr %206, align 8, !tbaa !11
  %208 = fptosi float %205 to i32
  %209 = sub nsw i32 %203, %208
  %. = call i32 @llvm.smin.i32(i32 %209, i32 1)
  %210 = sitofp i32 %. to float
  %211 = fadd float %205, %210
  store float %211, ptr %207, align 4, !tbaa !11
  %212 = getelementptr inbounds [2 x [4 x float]], ptr %16, i64 0, i64 1, i64 %indvars.iv684
  %213 = load float, ptr %212, align 4, !tbaa !11
  %214 = getelementptr inbounds [2 x [4 x [2 x float]]], ptr %24, i64 0, i64 1, i64 %indvars.iv684
  %215 = getelementptr inbounds i8, ptr %214, i64 4
  store float %213, ptr %214, align 8, !tbaa !11
  %216 = fptosi float %213 to i32
  %217 = sub nsw i32 %203, %216
  %..1 = call i32 @llvm.smin.i32(i32 %217, i32 1)
  %218 = sitofp i32 %..1 to float
  %219 = fadd float %213, %218
  store float %219, ptr %215, align 4, !tbaa !11
  %indvars.iv.next685 = add nuw nsw i64 %indvars.iv684, 1
  %exitcond688.not = icmp eq i64 %indvars.iv.next685, %52
  br i1 %exitcond688.not, label %._crit_edge511, label %.preheader460, !llvm.loop !31

._crit_edge511:                                   ; preds = %.preheader460, %middle.block861, %._crit_edge508.thread, %._crit_edge508
  call void @llvm.lifetime.start.p0(i64 16384, ptr nonnull %25) #5
  call void @llvm.lifetime.start.p0(i64 1024, ptr nonnull %26) #5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %27) #5
  br i1 %33, label %.lr.ph519, label %.preheader466.preheader

.preheader466.preheader:                          ; preds = %._crit_edge516, %._crit_edge511
  br label %.preheader466

.lr.ph519:                                        ; preds = %._crit_edge511, %._crit_edge516
  %indvars.iv699 = phi i64 [ %indvars.iv.next700, %._crit_edge516 ], [ 0, %._crit_edge511 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #5
  %220 = getelementptr inbounds [4 x float], ptr %0, i64 %indvars.iv699
  %221 = load <4 x float>, ptr %220, align 4, !tbaa !11
  store <4 x float> %221, ptr %28, align 16, !tbaa !11
  br i1 %brmerge824, label %._crit_edge516, label %.preheader.us

.preheader.us:                                    ; preds = %.lr.ph519, %._crit_edge514.us
  %indvars.iv694 = phi i64 [ %indvars.iv.next695, %._crit_edge514.us ], [ 0, %.lr.ph519 ]
  %222 = trunc nuw nsw i64 %indvars.iv694 to i32
  br label %223

223:                                              ; preds = %.preheader.us, %223
  %indvars.iv689 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next690, %223 ]
  %224 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv689
  %225 = load i32, ptr %224, align 4, !tbaa !7
  %226 = add nsw i32 %225, -5
  %227 = getelementptr inbounds [4 x [2 x float]], ptr %24, i64 0, i64 %indvars.iv689
  %228 = load float, ptr %227, align 8, !tbaa !11
  %229 = fptosi float %228 to i32
  %230 = getelementptr inbounds [4 x [2 x float]], ptr %46, i64 0, i64 %indvars.iv689
  %231 = load float, ptr %230, align 8, !tbaa !11
  %232 = fptosi float %231 to i32
  %233 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %45, i32 noundef %226, i32 noundef %229, i32 noundef %232, i32 noundef %222)
  %234 = getelementptr inbounds [4 x float], ptr %28, i64 0, i64 %indvars.iv689
  %235 = load float, ptr %234, align 4, !tbaa !11
  %236 = fsub float %233, %235
  %237 = load i32, ptr %224, align 4, !tbaa !7
  %238 = add nsw i32 %237, -5
  %239 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %45, i32 noundef %238, i32 noundef %229, i32 noundef %232, i32 noundef %222)
  %240 = fsub float %239, %235
  %241 = fmul float %236, %240
  %242 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %25, i64 0, i64 %indvars.iv699, i64 %indvars.iv694, i64 %indvars.iv689
  store float %241, ptr %242, align 4, !tbaa !11
  %indvars.iv.next690 = add nuw nsw i64 %indvars.iv689, 1
  %exitcond693.not = icmp eq i64 %indvars.iv.next690, %52
  br i1 %exitcond693.not, label %._crit_edge514.us, label %223, !llvm.loop !32

._crit_edge514.us:                                ; preds = %223
  %indvars.iv.next695 = add nuw nsw i64 %indvars.iv694, 1
  %exitcond698.not = icmp eq i64 %indvars.iv.next695, %wide.trip.count697
  br i1 %exitcond698.not, label %._crit_edge516, label %.preheader.us, !llvm.loop !33

._crit_edge516:                                   ; preds = %._crit_edge514.us, %.lr.ph519
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #5
  %indvars.iv.next700 = add nuw nsw i64 %indvars.iv699, 1
  %exitcond703.not = icmp eq i64 %indvars.iv.next700, %34
  br i1 %exitcond703.not, label %.preheader466.preheader, label %.lr.ph519, !llvm.loop !34

.preheader465:                                    ; preds = %.loopexit
  br i1 %40, label %._crit_edge568, label %.lr.ph567

.preheader466:                                    ; preds = %.preheader466.backedge, %.preheader466.preheader
  %.0388565 = phi i32 [ 0, %.preheader466.preheader ], [ %.1389.lcssa, %.preheader466.backedge ]
  %.0390564 = phi i32 [ 0, %.preheader466.preheader ], [ %.1391.lcssa, %.preheader466.backedge ]
  %.0396563 = phi i32 [ 0, %.preheader466.preheader ], [ %.0396563.be, %.preheader466.backedge ]
  %.0397562 = phi i32 [ 0, %.preheader466.preheader ], [ %245, %.preheader466.backedge ]
  %.0399561 = phi i32 [ 0, %.preheader466.preheader ], [ %.0399561.be, %.preheader466.backedge ]
  %.0401560 = phi float [ 0x47EFFFFFE0000000, %.preheader466.preheader ], [ %.0401560.be, %.preheader466.backedge ]
  %243 = sub nsw i32 0, %.0396563
  %244 = and i32 %.0396563, %243
  %245 = xor i32 %244, %.0397562
  br i1 %40, label %._crit_edge526, label %.lr.ph525.preheader

.lr.ph525.preheader:                              ; preds = %.preheader466
  br i1 %55, label %._crit_edge526.loopexit.unr-lcssa, label %.lr.ph525

.lr.ph525:                                        ; preds = %.lr.ph525.preheader, %265
  %.0386523 = phi i32 [ %.1387.1, %265 ], [ 0, %.lr.ph525.preheader ]
  %.1389522 = phi i32 [ %.2.1, %265 ], [ %.0388565, %.lr.ph525.preheader ]
  %.1391521 = phi i32 [ %.2392.1, %265 ], [ %.0390564, %.lr.ph525.preheader ]
  %.8520 = phi i32 [ %266, %265 ], [ 0, %.lr.ph525.preheader ]
  %niter = phi i32 [ %niter.next.1, %265 ], [ 0, %.lr.ph525.preheader ]
  %246 = shl nuw nsw i32 %.8520, 1
  %247 = shl i32 3, %246
  %248 = and i32 %247, %244
  %.not455 = icmp eq i32 %248, 0
  br i1 %.not455, label %.lr.ph525.1, label %249

249:                                              ; preds = %.lr.ph525
  %250 = lshr i32 %245, %246
  %251 = and i32 %250, 1
  %252 = or disjoint i32 %246, 1
  %253 = lshr i32 %245, %252
  %254 = and i32 %253, 1
  br label %.lr.ph525.1

.lr.ph525.1:                                      ; preds = %.lr.ph525, %249
  %.2392 = phi i32 [ %251, %249 ], [ %.1391521, %.lr.ph525 ]
  %.2 = phi i32 [ %254, %249 ], [ %.1389522, %.lr.ph525 ]
  %.1387 = phi i32 [ %.8520, %249 ], [ %.0386523, %.lr.ph525 ]
  %255 = or disjoint i32 %.8520, 1
  %256 = shl nuw nsw i32 %255, 1
  %257 = shl i32 3, %256
  %258 = and i32 %257, %244
  %.not455.1 = icmp eq i32 %258, 0
  br i1 %.not455.1, label %265, label %259

259:                                              ; preds = %.lr.ph525.1
  %260 = lshr i32 %245, %256
  %261 = and i32 %260, 1
  %262 = or disjoint i32 %256, 1
  %263 = lshr i32 %245, %262
  %264 = and i32 %263, 1
  br label %265

265:                                              ; preds = %259, %.lr.ph525.1
  %.2392.1 = phi i32 [ %261, %259 ], [ %.2392, %.lr.ph525.1 ]
  %.2.1 = phi i32 [ %264, %259 ], [ %.2, %.lr.ph525.1 ]
  %.1387.1 = phi i32 [ %255, %259 ], [ %.1387, %.lr.ph525.1 ]
  %266 = add nuw nsw i32 %.8520, 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge526.loopexit.unr-lcssa, label %.lr.ph525, !llvm.loop !35

._crit_edge526.loopexit.unr-lcssa:                ; preds = %265, %.lr.ph525.preheader
  %.2392.lcssa.ph = phi i32 [ poison, %.lr.ph525.preheader ], [ %.2392.1, %265 ]
  %.2.lcssa.ph = phi i32 [ poison, %.lr.ph525.preheader ], [ %.2.1, %265 ]
  %.1387.lcssa.ph = phi i32 [ poison, %.lr.ph525.preheader ], [ %.1387.1, %265 ]
  %.0386523.unr = phi i32 [ 0, %.lr.ph525.preheader ], [ %.1387.1, %265 ]
  %.1389522.unr = phi i32 [ %.0388565, %.lr.ph525.preheader ], [ %.2.1, %265 ]
  %.1391521.unr = phi i32 [ %.0390564, %.lr.ph525.preheader ], [ %.2392.1, %265 ]
  %.8520.unr = phi i32 [ 0, %.lr.ph525.preheader ], [ %266, %265 ]
  br i1 %lcmp.mod.not, label %._crit_edge526, label %.lr.ph525.epil

.lr.ph525.epil:                                   ; preds = %._crit_edge526.loopexit.unr-lcssa
  %267 = shl nuw nsw i32 %.8520.unr, 1
  %268 = shl i32 3, %267
  %269 = and i32 %268, %244
  %.not455.epil = icmp eq i32 %269, 0
  br i1 %.not455.epil, label %._crit_edge526, label %270

270:                                              ; preds = %.lr.ph525.epil
  %271 = lshr i32 %245, %267
  %272 = and i32 %271, 1
  %273 = or disjoint i32 %267, 1
  %274 = lshr i32 %245, %273
  %275 = and i32 %274, 1
  br label %._crit_edge526

._crit_edge526:                                   ; preds = %._crit_edge526.loopexit.unr-lcssa, %270, %.lr.ph525.epil, %.preheader466
  %.1391.lcssa = phi i32 [ %.0390564, %.preheader466 ], [ %.2392.lcssa.ph, %._crit_edge526.loopexit.unr-lcssa ], [ %272, %270 ], [ %.1391521.unr, %.lr.ph525.epil ]
  %.1389.lcssa = phi i32 [ %.0388565, %.preheader466 ], [ %.2.lcssa.ph, %._crit_edge526.loopexit.unr-lcssa ], [ %275, %270 ], [ %.1389522.unr, %.lr.ph525.epil ]
  %.0386.lcssa = phi i32 [ 0, %.preheader466 ], [ %.1387.lcssa.ph, %._crit_edge526.loopexit.unr-lcssa ], [ %.8520.unr, %270 ], [ %.0386523.unr, %.lr.ph525.epil ]
  br i1 %33, label %.lr.ph551, label %._crit_edge552.thread

._crit_edge552.thread:                            ; preds = %._crit_edge526
  %276 = fcmp ule float %.0401560, 0.000000e+00
  %.0401560.mux810 = select i1 %276, float %.0401560, float 0.000000e+00
  %.0399561.mux811 = select i1 %276, i32 %.0399561, i32 %245
  br label %.loopexit

.lr.ph551:                                        ; preds = %._crit_edge526
  %277 = sext i32 %.0386.lcssa to i64
  %278 = getelementptr inbounds i32, ptr %6, i64 %277
  %279 = zext nneg i32 %.1391.lcssa to i64
  %280 = getelementptr inbounds [4 x [2 x float]], ptr %24, i64 0, i64 %277, i64 %279
  %281 = zext nneg i32 %.1389.lcssa to i64
  %282 = getelementptr inbounds [4 x [2 x float]], ptr %46, i64 0, i64 %277, i64 %281
  %283 = getelementptr inbounds [4 x float], ptr %29, i64 0, i64 %277
  br label %284

284:                                              ; preds = %.lr.ph551, %._crit_edge547
  %indvars.iv721 = phi i64 [ 0, %.lr.ph551 ], [ %indvars.iv.next722, %._crit_edge547 ]
  %.0398549 = phi float [ 0.000000e+00, %.lr.ph551 ], [ %332, %._crit_edge547 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #5
  %285 = getelementptr inbounds [4 x float], ptr %0, i64 %indvars.iv721
  %286 = load <4 x float>, ptr %285, align 4, !tbaa !11
  store <4 x float> %286, ptr %29, align 16, !tbaa !11
  br i1 %.not632, label %._crit_edge541, label %.lr.ph540

.lr.ph540:                                        ; preds = %284
  %287 = load float, ptr %280, align 4, !tbaa !11
  %288 = fptosi float %287 to i32
  %289 = load float, ptr %282, align 4, !tbaa !11
  %290 = fptosi float %289 to i32
  br label %291

291:                                              ; preds = %.lr.ph540, %._crit_edge534
  %indvars.iv710 = phi i64 [ 0, %.lr.ph540 ], [ %indvars.iv.next711, %._crit_edge534 ]
  %.0383538 = phi float [ 0x47EFFFFFE0000000, %.lr.ph540 ], [ %.1, %._crit_edge534 ]
  %.0384537 = phi i32 [ 0, %.lr.ph540 ], [ %.1385, %._crit_edge534 ]
  %292 = load i32, ptr %278, align 4, !tbaa !7
  %293 = add nsw i32 %292, -5
  %294 = trunc nuw nsw i64 %indvars.iv710 to i32
  %295 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %45, i32 noundef %293, i32 noundef %288, i32 noundef %290, i32 noundef %294)
  %296 = load float, ptr %283, align 4, !tbaa !11
  %297 = fsub float %295, %296
  %298 = load i32, ptr %278, align 4, !tbaa !7
  %299 = add nsw i32 %298, -5
  %300 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %45, i32 noundef %299, i32 noundef %288, i32 noundef %290, i32 noundef %294)
  %301 = fsub float %300, %296
  %302 = fmul float %297, %301
  %303 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %25, i64 0, i64 %indvars.iv721, i64 %indvars.iv710, i64 %277
  store float %302, ptr %303, align 4, !tbaa !11
  br i1 %40, label %._crit_edge534, label %.lr.ph533.preheader

.lr.ph533.preheader:                              ; preds = %291
  br i1 %56, label %._crit_edge534.loopexit.unr-lcssa, label %.lr.ph533

.lr.ph533:                                        ; preds = %.lr.ph533.preheader, %.lr.ph533
  %indvars.iv705 = phi i64 [ %indvars.iv.next706.3, %.lr.ph533 ], [ 0, %.lr.ph533.preheader ]
  %.0531 = phi float [ %315, %.lr.ph533 ], [ 0.000000e+00, %.lr.ph533.preheader ]
  %niter972 = phi i64 [ %niter972.next.3, %.lr.ph533 ], [ 0, %.lr.ph533.preheader ]
  %304 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %25, i64 0, i64 %indvars.iv721, i64 %indvars.iv710, i64 %indvars.iv705
  %305 = load float, ptr %304, align 16, !tbaa !11
  %306 = fadd float %.0531, %305
  %indvars.iv.next706 = or disjoint i64 %indvars.iv705, 1
  %307 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %25, i64 0, i64 %indvars.iv721, i64 %indvars.iv710, i64 %indvars.iv.next706
  %308 = load float, ptr %307, align 4, !tbaa !11
  %309 = fadd float %306, %308
  %indvars.iv.next706.1 = or disjoint i64 %indvars.iv705, 2
  %310 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %25, i64 0, i64 %indvars.iv721, i64 %indvars.iv710, i64 %indvars.iv.next706.1
  %311 = load float, ptr %310, align 8, !tbaa !11
  %312 = fadd float %309, %311
  %indvars.iv.next706.2 = or disjoint i64 %indvars.iv705, 3
  %313 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %25, i64 0, i64 %indvars.iv721, i64 %indvars.iv710, i64 %indvars.iv.next706.2
  %314 = load float, ptr %313, align 4, !tbaa !11
  %315 = fadd float %312, %314
  %indvars.iv.next706.3 = add nuw nsw i64 %indvars.iv705, 4
  %niter972.next.3 = add i64 %niter972, 4
  %niter972.ncmp.3 = icmp eq i64 %niter972.next.3, %unroll_iter971
  br i1 %niter972.ncmp.3, label %._crit_edge534.loopexit.unr-lcssa, label %.lr.ph533, !llvm.loop !36

._crit_edge534.loopexit.unr-lcssa:                ; preds = %.lr.ph533, %.lr.ph533.preheader
  %.lcssa961.ph = phi float [ poison, %.lr.ph533.preheader ], [ %315, %.lr.ph533 ]
  %indvars.iv705.unr = phi i64 [ 0, %.lr.ph533.preheader ], [ %indvars.iv.next706.3, %.lr.ph533 ]
  %.0531.unr = phi float [ 0.000000e+00, %.lr.ph533.preheader ], [ %315, %.lr.ph533 ]
  br i1 %lcmp.mod969.not, label %._crit_edge534, label %.lr.ph533.epil

.lr.ph533.epil:                                   ; preds = %._crit_edge534.loopexit.unr-lcssa, %.lr.ph533.epil
  %indvars.iv705.epil = phi i64 [ %indvars.iv.next706.epil, %.lr.ph533.epil ], [ %indvars.iv705.unr, %._crit_edge534.loopexit.unr-lcssa ]
  %.0531.epil = phi float [ %318, %.lr.ph533.epil ], [ %.0531.unr, %._crit_edge534.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph533.epil ], [ 0, %._crit_edge534.loopexit.unr-lcssa ]
  %316 = getelementptr inbounds [64 x [16 x [4 x float]]], ptr %25, i64 0, i64 %indvars.iv721, i64 %indvars.iv710, i64 %indvars.iv705.epil
  %317 = load float, ptr %316, align 4, !tbaa !11
  %318 = fadd float %.0531.epil, %317
  %indvars.iv.next706.epil = add nuw nsw i64 %indvars.iv705.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter968
  br i1 %epil.iter.cmp.not, label %._crit_edge534, label %.lr.ph533.epil, !llvm.loop !37

._crit_edge534:                                   ; preds = %._crit_edge534.loopexit.unr-lcssa, %.lr.ph533.epil, %291
  %.0.lcssa = phi float [ 0.000000e+00, %291 ], [ %.lcssa961.ph, %._crit_edge534.loopexit.unr-lcssa ], [ %318, %.lr.ph533.epil ]
  %319 = fcmp olt float %.0.lcssa, %.0383538
  %.1385 = select i1 %319, i32 %294, i32 %.0384537
  %.1 = select i1 %319, float %.0.lcssa, float %.0383538
  %indvars.iv.next711 = add nuw nsw i64 %indvars.iv710, 1
  %exitcond715.not = icmp eq i64 %indvars.iv.next711, %wide.trip.count714
  br i1 %exitcond715.not, label %._crit_edge541, label %291, !llvm.loop !39

._crit_edge541:                                   ; preds = %._crit_edge534, %284
  %.0384.lcssa = phi i32 [ 0, %284 ], [ %.1385, %._crit_edge534 ]
  %.0383.lcssa = phi float [ 0x47EFFFFFE0000000, %284 ], [ %.1, %._crit_edge534 ]
  %320 = getelementptr inbounds [64 x i32], ptr %27, i64 0, i64 %indvars.iv721
  store i32 %.0384.lcssa, ptr %320, align 4, !tbaa !7
  br i1 %40, label %._crit_edge547, label %.lr.ph546

.lr.ph546:                                        ; preds = %._crit_edge541, %.lr.ph546
  %indvars.iv716 = phi i64 [ %indvars.iv.next717, %.lr.ph546 ], [ 0, %._crit_edge541 ]
  %321 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv716
  %322 = load i32, ptr %321, align 4, !tbaa !7
  %323 = add nsw i32 %322, -5
  %324 = getelementptr inbounds [4 x [2 x float]], ptr %24, i64 0, i64 %indvars.iv716, i64 %279
  %325 = load float, ptr %324, align 4, !tbaa !11
  %326 = fptosi float %325 to i32
  %327 = getelementptr inbounds [4 x [2 x float]], ptr %46, i64 0, i64 %indvars.iv716, i64 %281
  %328 = load float, ptr %327, align 4, !tbaa !11
  %329 = fptosi float %328 to i32
  %330 = call noundef float @_ZN10HDR_Encode5rampfEiiiii(i32 noundef %45, i32 noundef %323, i32 noundef %326, i32 noundef %329, i32 noundef %.0384.lcssa)
  %331 = getelementptr inbounds [64 x [4 x float]], ptr %26, i64 0, i64 %indvars.iv721, i64 %indvars.iv716
  store float %330, ptr %331, align 4, !tbaa !11
  %indvars.iv.next717 = add nuw nsw i64 %indvars.iv716, 1
  %exitcond720.not = icmp eq i64 %indvars.iv.next717, %52
  br i1 %exitcond720.not, label %._crit_edge547, label %.lr.ph546, !llvm.loop !40

._crit_edge547:                                   ; preds = %.lr.ph546, %._crit_edge541
  %332 = fadd float %.0398549, %.0383.lcssa
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #5
  %indvars.iv.next722 = add nuw nsw i64 %indvars.iv721, 1
  %exitcond725.not = icmp eq i64 %indvars.iv.next722, %34
  br i1 %exitcond725.not, label %._crit_edge552, label %284, !llvm.loop !41

._crit_edge552:                                   ; preds = %._crit_edge547
  %333 = fcmp uge float %332, %.0401560
  %brmerge627 = or i1 %333, %47
  %.0401560.mux = select i1 %333, float %.0401560, float %332
  %.0399561.mux = select i1 %333, i32 %.0399561, i32 %245
  br i1 %brmerge627, label %.loopexit, label %.lr.ph559

.lr.ph559:                                        ; preds = %._crit_edge552
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %22, ptr nonnull align 16 %27, i64 %35, i1 false), !tbaa !7
  br i1 %40, label %.loopexit.thread, label %.lr.ph556.us.preheader

.lr.ph556.us.preheader:                           ; preds = %.lr.ph559
  br i1 %57, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph556.us

.lr.ph556.us:                                     ; preds = %.lr.ph556.us.preheader, %.lr.ph556.us
  %indvar = phi i64 [ %indvar.next.3, %.lr.ph556.us ], [ 0, %.lr.ph556.us.preheader ]
  %niter977 = phi i64 [ %niter977.next.3, %.lr.ph556.us ], [ 0, %.lr.ph556.us.preheader ]
  %334 = shl nuw nsw i64 %indvar, 4
  %scevgep = getelementptr i8, ptr %21, i64 %334
  %scevgep729 = getelementptr i8, ptr %26, i64 %334
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep, ptr align 16 %scevgep729, i64 %53, i1 false), !tbaa !11
  %indvar.next = shl i64 %indvar, 4
  %335 = or disjoint i64 %indvar.next, 16
  %scevgep.1 = getelementptr i8, ptr %21, i64 %335
  %scevgep729.1 = getelementptr i8, ptr %26, i64 %335
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep.1, ptr align 16 %scevgep729.1, i64 %53, i1 false), !tbaa !11
  %indvar.next.1 = shl i64 %indvar, 4
  %336 = or disjoint i64 %indvar.next.1, 32
  %scevgep.2 = getelementptr i8, ptr %21, i64 %336
  %scevgep729.2 = getelementptr i8, ptr %26, i64 %336
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep.2, ptr align 16 %scevgep729.2, i64 %53, i1 false), !tbaa !11
  %indvar.next.2 = shl i64 %indvar, 4
  %337 = or disjoint i64 %indvar.next.2, 48
  %scevgep.3 = getelementptr i8, ptr %21, i64 %337
  %scevgep729.3 = getelementptr i8, ptr %26, i64 %337
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep.3, ptr align 16 %scevgep729.3, i64 %53, i1 false), !tbaa !11
  %indvar.next.3 = add nuw nsw i64 %indvar, 4
  %niter977.next.3 = add i64 %niter977, 4
  %niter977.ncmp.3 = icmp eq i64 %niter977.next.3, %unroll_iter976
  br i1 %niter977.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph556.us, !llvm.loop !42

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph556.us, %.lr.ph556.us.preheader
  %indvar.unr = phi i64 [ 0, %.lr.ph556.us.preheader ], [ %indvar.next.3, %.lr.ph556.us ]
  br i1 %lcmp.mod975.not, label %.loopexit, label %.lr.ph556.us.epil

.lr.ph556.us.epil:                                ; preds = %.loopexit.loopexit.unr-lcssa, %.lr.ph556.us.epil
  %indvar.epil = phi i64 [ %indvar.next.epil, %.lr.ph556.us.epil ], [ %indvar.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter974 = phi i64 [ %epil.iter974.next, %.lr.ph556.us.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %338 = shl nuw nsw i64 %indvar.epil, 4
  %scevgep.epil = getelementptr i8, ptr %21, i64 %338
  %scevgep729.epil = getelementptr i8, ptr %26, i64 %338
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep.epil, ptr align 16 %scevgep729.epil, i64 %53, i1 false), !tbaa !11
  %indvar.next.epil = add nuw nsw i64 %indvar.epil, 1
  %epil.iter974.next = add i64 %epil.iter974, 1
  %epil.iter974.cmp.not = icmp eq i64 %epil.iter974.next, %xtraiter973
  br i1 %epil.iter974.cmp.not, label %.loopexit, label %.lr.ph556.us.epil, !llvm.loop !43

.loopexit:                                        ; preds = %.loopexit.loopexit.unr-lcssa, %.lr.ph556.us.epil, %._crit_edge552.thread, %._crit_edge552
  %.1402 = phi float [ %.0401560.mux, %._crit_edge552 ], [ %.0401560.mux810, %._crit_edge552.thread ], [ %332, %.lr.ph556.us.epil ], [ %332, %.loopexit.loopexit.unr-lcssa ]
  %.1400 = phi i32 [ %.0399561.mux, %._crit_edge552 ], [ %.0399561.mux811, %._crit_edge552.thread ], [ %245, %.lr.ph556.us.epil ], [ %245, %.loopexit.loopexit.unr-lcssa ]
  %339 = add nuw nsw i32 %.0396563, 1
  %exitcond736.not = icmp eq i32 %339, 64
  br i1 %exitcond736.not, label %.preheader465, label %.preheader466.backedge

.preheader466.backedge:                           ; preds = %.loopexit, %.loopexit.thread
  %.0396563.be = phi i32 [ %339, %.loopexit ], [ %340, %.loopexit.thread ]
  %.0399561.be = phi i32 [ %.1400, %.loopexit ], [ %245, %.loopexit.thread ]
  %.0401560.be = phi float [ %.1402, %.loopexit ], [ %332, %.loopexit.thread ]
  br label %.preheader466, !llvm.loop !44

.loopexit.thread:                                 ; preds = %.lr.ph559
  %340 = add nuw nsw i32 %.0396563, 1
  %exitcond736.not802 = icmp eq i32 %340, 64
  br i1 %exitcond736.not802, label %._crit_edge568, label %.preheader466.backedge

.lr.ph567:                                        ; preds = %.preheader465, %.lr.ph567
  %indvars.iv737 = phi i64 [ %indvars.iv.next738, %.lr.ph567 ], [ 0, %.preheader465 ]
  %341 = shl nuw nsw i64 %indvars.iv737, 1
  %342 = trunc nuw nsw i64 %341 to i32
  %343 = lshr i32 %.1400, %342
  %344 = and i32 %343, 1
  %345 = trunc i64 %341 to i32
  %346 = or disjoint i32 %345, 1
  %347 = lshr i32 %.1400, %346
  %348 = and i32 %347, 1
  %349 = zext nneg i32 %344 to i64
  %350 = getelementptr inbounds [4 x [2 x float]], ptr %24, i64 0, i64 %indvars.iv737, i64 %349
  %351 = load float, ptr %350, align 4, !tbaa !11
  %352 = fptosi float %351 to i32
  %353 = getelementptr inbounds [4 x i32], ptr %23, i64 0, i64 %indvars.iv737
  store i32 %352, ptr %353, align 4, !tbaa !7
  %354 = zext nneg i32 %348 to i64
  %355 = getelementptr inbounds [4 x [2 x float]], ptr %46, i64 0, i64 %indvars.iv737, i64 %354
  %356 = load float, ptr %355, align 4, !tbaa !11
  %357 = fptosi float %356 to i32
  %358 = getelementptr inbounds [4 x i32], ptr %48, i64 0, i64 %indvars.iv737
  store i32 %357, ptr %358, align 4, !tbaa !7
  %indvars.iv.next738 = add nuw nsw i64 %indvars.iv737, 1
  %exitcond741.not = icmp eq i64 %indvars.iv.next738, %52
  br i1 %exitcond741.not, label %._crit_edge568, label %.lr.ph567, !llvm.loop !45

._crit_edge568:                                   ; preds = %.loopexit.thread, %.lr.ph567, %.preheader465
  %.1402803807 = phi float [ %.1402, %.preheader465 ], [ %.1402, %.lr.ph567 ], [ %332, %.loopexit.thread ]
  %359 = fcmp olt float %.1402803807, %.1416581
  br i1 %359, label %.preheader464, label %.loopexit463

.preheader464:                                    ; preds = %._crit_edge568
  br i1 %33, label %.lr.ph574.preheader, label %.preheader462

.lr.ph574.preheader:                              ; preds = %.preheader464
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %12, ptr nonnull align 16 %22, i64 %35, i1 false), !tbaa !7
  br i1 %58, label %.preheader462.loopexit.unr-lcssa, label %.lr.ph574

.preheader462.loopexit.unr-lcssa:                 ; preds = %._crit_edge572.1, %.lr.ph574.preheader
  %indvar742.unr = phi i64 [ 0, %.lr.ph574.preheader ], [ %indvar.next743.1, %._crit_edge572.1 ]
  br i1 %lcmp.mod980.not, label %.preheader462, label %.lr.ph574.epil

.lr.ph574.epil:                                   ; preds = %.preheader462.loopexit.unr-lcssa
  br i1 %40, label %.loopexit463, label %.lr.ph571.preheader.epil

.lr.ph571.preheader.epil:                         ; preds = %.lr.ph574.epil
  %360 = shl nuw nsw i64 %indvar742.unr, 4
  %scevgep745.epil = getelementptr i8, ptr %21, i64 %360
  %scevgep744.epil = getelementptr i8, ptr %11, i64 %360
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep744.epil, ptr align 16 %scevgep745.epil, i64 %53, i1 false), !tbaa !11
  br label %.preheader462

.preheader462:                                    ; preds = %.preheader462.loopexit.unr-lcssa, %.lr.ph571.preheader.epil, %.preheader464
  br i1 %40, label %.loopexit463, label %.lr.ph576.preheader

.lr.ph576.preheader:                              ; preds = %.preheader462
  br i1 %min.iters.check850, label %.lr.ph576.preheader953, label %vector.body855

.lr.ph576.preheader953:                           ; preds = %middle.block848, %.lr.ph576.preheader
  %indvars.iv752.ph = phi i64 [ 0, %.lr.ph576.preheader ], [ %n.vec853, %middle.block848 ]
  br label %.lr.ph576

vector.body855:                                   ; preds = %.lr.ph576.preheader, %vector.body855
  %index856 = phi i64 [ %index.next859, %vector.body855 ], [ 0, %.lr.ph576.preheader ]
  %361 = getelementptr inbounds [4 x i32], ptr %23, i64 0, i64 %index856
  %wide.load857 = load <4 x i32>, ptr %361, align 16, !tbaa !7
  %362 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %index856
  store <4 x i32> %wide.load857, ptr %362, align 16, !tbaa !7
  %363 = getelementptr inbounds [4 x i32], ptr %48, i64 0, i64 %index856
  %wide.load858 = load <4 x i32>, ptr %363, align 16, !tbaa !7
  %364 = getelementptr inbounds [4 x i32], ptr %49, i64 0, i64 %index856
  store <4 x i32> %wide.load858, ptr %364, align 16, !tbaa !7
  %index.next859 = add nuw i64 %index856, 4
  %365 = icmp eq i64 %index.next859, %n.vec853
  br i1 %365, label %middle.block848, label %vector.body855, !llvm.loop !46

middle.block848:                                  ; preds = %vector.body855
  br i1 %cmp.n860, label %.loopexit463, label %.lr.ph576.preheader953

.lr.ph574:                                        ; preds = %.lr.ph574.preheader, %._crit_edge572.1
  %indvar742 = phi i64 [ %indvar.next743.1, %._crit_edge572.1 ], [ 0, %.lr.ph574.preheader ]
  %niter982 = phi i64 [ %niter982.next.1, %._crit_edge572.1 ], [ 0, %.lr.ph574.preheader ]
  br i1 %40, label %._crit_edge572.1, label %.lr.ph571.preheader

.lr.ph571.preheader:                              ; preds = %.lr.ph574
  %366 = shl nuw nsw i64 %indvar742, 4
  %scevgep745 = getelementptr i8, ptr %21, i64 %366
  %scevgep744 = getelementptr i8, ptr %11, i64 %366
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep744, ptr align 16 %scevgep745, i64 %53, i1 false), !tbaa !11
  %indvar.next743 = shl i64 %indvar742, 4
  %367 = or disjoint i64 %indvar.next743, 16
  %scevgep745.1 = getelementptr i8, ptr %21, i64 %367
  %scevgep744.1 = getelementptr i8, ptr %11, i64 %367
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %scevgep744.1, ptr align 16 %scevgep745.1, i64 %53, i1 false), !tbaa !11
  br label %._crit_edge572.1

._crit_edge572.1:                                 ; preds = %.lr.ph574, %.lr.ph571.preheader
  %indvar.next743.1 = add nuw nsw i64 %indvar742, 2
  %niter982.next.1 = add i64 %niter982, 2
  %niter982.ncmp.1 = icmp eq i64 %niter982.next.1, %unroll_iter981
  br i1 %niter982.ncmp.1, label %.preheader462.loopexit.unr-lcssa, label %.lr.ph574, !llvm.loop !47

.lr.ph576:                                        ; preds = %.lr.ph576.preheader953, %.lr.ph576
  %indvars.iv752 = phi i64 [ %indvars.iv.next753, %.lr.ph576 ], [ %indvars.iv752.ph, %.lr.ph576.preheader953 ]
  %368 = getelementptr inbounds [4 x i32], ptr %23, i64 0, i64 %indvars.iv752
  %369 = load i32, ptr %368, align 4, !tbaa !7
  %370 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %indvars.iv752
  store i32 %369, ptr %370, align 4, !tbaa !7
  %371 = getelementptr inbounds [4 x i32], ptr %48, i64 0, i64 %indvars.iv752
  %372 = load i32, ptr %371, align 4, !tbaa !7
  %373 = getelementptr inbounds [4 x i32], ptr %49, i64 0, i64 %indvars.iv752
  store i32 %372, ptr %373, align 4, !tbaa !7
  %indvars.iv.next753 = add nuw nsw i64 %indvars.iv752, 1
  %exitcond756.not = icmp eq i64 %indvars.iv.next753, %52
  br i1 %exitcond756.not, label %.loopexit463, label %.lr.ph576, !llvm.loop !48

.loopexit463:                                     ; preds = %.lr.ph574.epil, %.lr.ph576, %middle.block848, %.preheader462, %._crit_edge568
  %.2423 = phi i32 [ %.1422579, %._crit_edge568 ], [ %.0425578, %.preheader462 ], [ %.0425578, %middle.block848 ], [ %.0425578, %.lr.ph576 ], [ %.0425578, %.lr.ph574.epil ]
  %.2420 = phi i32 [ %.1419580, %._crit_edge568 ], [ %.0424592, %.preheader462 ], [ %.0424592, %middle.block848 ], [ %.0424592, %.lr.ph576 ], [ %.0424592, %.lr.ph574.epil ]
  %.2417 = phi float [ %.1416581, %._crit_edge568 ], [ %.1402803807, %.preheader462 ], [ %.1402803807, %middle.block848 ], [ %.1402803807, %.lr.ph576 ], [ %.1402803807, %.lr.ph574.epil ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %27) #5
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %26) #5
  call void @llvm.lifetime.end.p0(i64 16384, ptr nonnull %25) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %24) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #5
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %22)
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %15) #5
  %374 = add nuw i32 %.0425578, 1
  %exitcond759.not = icmp eq i32 %374, %indvars.iv757
  br i1 %exitcond759.not, label %._crit_edge583, label %.lr.ph582, !llvm.loop !49

._crit_edge583:                                   ; preds = %.loopexit463, %.preheader469
  %.1422.lcssa = phi i32 [ %.0421593, %.preheader469 ], [ %.2423, %.loopexit463 ]
  %.1419.lcssa = phi i32 [ %.0418594, %.preheader469 ], [ %.2420, %.loopexit463 ]
  %.1416.lcssa = phi float [ %.0415595, %.preheader469 ], [ %.2417, %.loopexit463 ]
  %375 = add nuw nsw i32 %.0424592, 1
  %376 = mul nsw i32 %375, %61
  %.not453 = icmp sgt i32 %376, %5
  br i1 %.not453, label %.critedge.preheader, label %.preheader469, !llvm.loop !50

.lr.ph609:                                        ; preds = %.lr.ph609.preheader, %.critedge.1
  %indvars.iv760 = phi i64 [ %indvars.iv.next761.1, %.critedge.1 ], [ 0, %.lr.ph609.preheader ]
  %.0443607 = phi i1 [ %392, %.critedge.1 ], [ false, %.lr.ph609.preheader ]
  %niter988 = phi i64 [ %niter988.next.1, %.critedge.1 ], [ 0, %.lr.ph609.preheader ]
  br i1 %.0443607, label %.critedge.1, label %.critedge

.critedge:                                        ; preds = %.lr.ph609
  %377 = getelementptr inbounds [64 x i32], ptr %10, i64 0, i64 %indvars.iv760
  %378 = load i32, ptr %377, align 8, !tbaa !7
  %379 = mul nsw i32 %378, %.0418.lcssa
  %380 = add nsw i32 %379, %.0421.lcssa
  %381 = getelementptr inbounds [64 x i32], ptr %12, i64 0, i64 %indvars.iv760
  %382 = load i32, ptr %381, align 8, !tbaa !7
  %383 = icmp ne i32 %380, %382
  br i1 %383, label %.critedge.1, label %384

384:                                              ; preds = %.critedge
  %indvars.iv.next761 = or disjoint i64 %indvars.iv760, 1
  %385 = getelementptr inbounds [64 x i32], ptr %10, i64 0, i64 %indvars.iv.next761
  %386 = load i32, ptr %385, align 4, !tbaa !7
  %387 = mul nsw i32 %386, %.0418.lcssa
  %388 = add nsw i32 %387, %.0421.lcssa
  %389 = getelementptr inbounds [64 x i32], ptr %12, i64 0, i64 %indvars.iv.next761
  %390 = load i32, ptr %389, align 4, !tbaa !7
  %391 = icmp ne i32 %388, %390
  br label %.critedge.1

.critedge.1:                                      ; preds = %.lr.ph609, %384, %.critedge
  %392 = phi i1 [ true, %.critedge ], [ %391, %384 ], [ true, %.lr.ph609 ]
  %indvars.iv.next761.1 = add nuw nsw i64 %indvars.iv760, 2
  %niter988.next.1 = add i64 %niter988, 2
  %niter988.ncmp.1 = icmp eq i64 %niter988.next.1, %unroll_iter987
  br i1 %niter988.ncmp.1, label %.critedge._crit_edge.unr-lcssa, label %.lr.ph609, !llvm.loop !51

.critedge._crit_edge.unr-lcssa:                   ; preds = %.critedge.1, %.lr.ph609.preheader
  %.lcssa963.ph = phi i1 [ poison, %.lr.ph609.preheader ], [ %392, %.critedge.1 ]
  %indvars.iv760.unr = phi i64 [ 0, %.lr.ph609.preheader ], [ %indvars.iv.next761.1, %.critedge.1 ]
  %.0443607.unr = phi i1 [ false, %.lr.ph609.preheader ], [ %392, %.critedge.1 ]
  %brmerge997 = select i1 %lcmp.mod985.not, i1 true, i1 %.0443607.unr
  %.lcssa963.ph.mux = select i1 %lcmp.mod985.not, i1 %.lcssa963.ph, i1 true
  br i1 %brmerge997, label %.critedge._crit_edge, label %393

393:                                              ; preds = %.critedge._crit_edge.unr-lcssa
  %394 = getelementptr inbounds [64 x i32], ptr %10, i64 0, i64 %indvars.iv760.unr
  %395 = load i32, ptr %394, align 4, !tbaa !7
  %396 = mul nsw i32 %395, %.0418.lcssa
  %397 = add nsw i32 %396, %.0421.lcssa
  %398 = getelementptr inbounds [64 x i32], ptr %12, i64 0, i64 %indvars.iv760.unr
  %399 = load i32, ptr %398, align 4, !tbaa !7
  %400 = icmp ne i32 %397, %399
  br label %.critedge._crit_edge

.critedge._crit_edge:                             ; preds = %.critedge._crit_edge.unr-lcssa, %393
  %.lcssa963 = phi i1 [ %.lcssa963.ph.mux, %.critedge._crit_edge.unr-lcssa ], [ %400, %393 ]
  %401 = fcmp olt float %.0415.lcssa, %.0436
  %brmerge630.not = and i1 %33, %401
  %.0436.mux631 = select i1 %401, float %.0415.lcssa, float %.0436
  br i1 %brmerge630.not, label %.lr.ph616, label %.loopexit473

.lr.ph616:                                        ; preds = %.critedge._crit_edge
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 16 %10, ptr nonnull align 16 %12, i64 %35, i1 false), !tbaa !7
  br i1 %40, label %.lr.ph616.split.preheader, label %.lr.ph613.us

.lr.ph616.split.preheader:                        ; preds = %.lr.ph616
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2, ptr nonnull align 16 %12, i64 %35, i1 false), !tbaa !7
  br label %.loopexit473

.lr.ph613.us:                                     ; preds = %.lr.ph616, %._crit_edge614.us
  %indvars.iv775 = phi i64 [ %indvars.iv.next776, %._crit_edge614.us ], [ 0, %.lr.ph616 ]
  %402 = getelementptr inbounds [64 x i32], ptr %12, i64 0, i64 %indvars.iv775
  %403 = load i32, ptr %402, align 4, !tbaa !7
  %404 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv775
  store i32 %403, ptr %404, align 4, !tbaa !7
  br i1 %min.iters.check836, label %scalar.ph835.preheader, label %vector.body841

vector.body841:                                   ; preds = %.lr.ph613.us, %vector.body841
  %index842 = phi i64 [ %index.next846, %vector.body841 ], [ 0, %.lr.ph613.us ]
  %405 = getelementptr inbounds [64 x [4 x float]], ptr %11, i64 0, i64 %indvars.iv775, i64 %index842
  %wide.load843 = load <4 x float>, ptr %405, align 16, !tbaa !11
  %406 = getelementptr inbounds [4 x float], ptr %3, i64 %indvars.iv775, i64 %index842
  store <4 x float> %wide.load843, ptr %406, align 4, !tbaa !11
  %407 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %index842
  %wide.load844 = load <4 x i32>, ptr %407, align 16, !tbaa !7
  %408 = getelementptr inbounds [4 x i32], ptr %4, i64 0, i64 %index842
  store <4 x i32> %wide.load844, ptr %408, align 4, !tbaa !7
  %409 = getelementptr inbounds [4 x i32], ptr %49, i64 0, i64 %index842
  %wide.load845 = load <4 x i32>, ptr %409, align 16, !tbaa !7
  %410 = getelementptr inbounds [4 x i32], ptr %50, i64 0, i64 %index842
  store <4 x i32> %wide.load845, ptr %410, align 4, !tbaa !7
  %index.next846 = add nuw i64 %index842, 4
  %411 = icmp eq i64 %index.next846, %n.vec839
  br i1 %411, label %middle.block834, label %vector.body841, !llvm.loop !52

middle.block834:                                  ; preds = %vector.body841
  br i1 %cmp.n847, label %._crit_edge614.us, label %scalar.ph835.preheader

scalar.ph835.preheader:                           ; preds = %middle.block834, %.lr.ph613.us
  %indvars.iv770.ph = phi i64 [ 0, %.lr.ph613.us ], [ %n.vec839, %middle.block834 ]
  br label %scalar.ph835

scalar.ph835:                                     ; preds = %scalar.ph835.preheader, %scalar.ph835
  %indvars.iv770 = phi i64 [ %indvars.iv.next771, %scalar.ph835 ], [ %indvars.iv770.ph, %scalar.ph835.preheader ]
  %412 = getelementptr inbounds [64 x [4 x float]], ptr %11, i64 0, i64 %indvars.iv775, i64 %indvars.iv770
  %413 = load float, ptr %412, align 4, !tbaa !11
  %414 = getelementptr inbounds [4 x float], ptr %3, i64 %indvars.iv775, i64 %indvars.iv770
  store float %413, ptr %414, align 4, !tbaa !11
  %415 = getelementptr inbounds [4 x i32], ptr %13, i64 0, i64 %indvars.iv770
  %416 = load i32, ptr %415, align 4, !tbaa !7
  %417 = getelementptr inbounds [4 x i32], ptr %4, i64 0, i64 %indvars.iv770
  store i32 %416, ptr %417, align 4, !tbaa !7
  %418 = getelementptr inbounds [4 x i32], ptr %49, i64 0, i64 %indvars.iv770
  %419 = load i32, ptr %418, align 4, !tbaa !7
  %420 = getelementptr inbounds [4 x i32], ptr %50, i64 0, i64 %indvars.iv770
  store i32 %419, ptr %420, align 4, !tbaa !7
  %indvars.iv.next771 = add nuw nsw i64 %indvars.iv770, 1
  %exitcond774.not = icmp eq i64 %indvars.iv.next771, %52
  br i1 %exitcond774.not, label %._crit_edge614.us, label %scalar.ph835, !llvm.loop !53

._crit_edge614.us:                                ; preds = %scalar.ph835, %middle.block834
  %indvars.iv.next776 = add nuw nsw i64 %indvars.iv775, 1
  %exitcond779.not = icmp eq i64 %indvars.iv.next776, %34
  br i1 %exitcond779.not, label %.loopexit473, label %.lr.ph613.us, !llvm.loop !54

.loopexit473:                                     ; preds = %._crit_edge614.us, %.critedge._crit_edge.thread, %.lr.ph616.split.preheader, %.critedge._crit_edge
  %421 = phi i1 [ %401, %.critedge._crit_edge ], [ %401, %.lr.ph616.split.preheader ], [ %89, %.critedge._crit_edge.thread ], [ %401, %._crit_edge614.us ]
  %.0443.lcssa815 = phi i1 [ %.lcssa963, %.critedge._crit_edge ], [ %.lcssa963, %.lr.ph616.split.preheader ], [ false, %.critedge._crit_edge.thread ], [ %.lcssa963, %._crit_edge614.us ]
  %.2438 = phi float [ %.0436.mux631, %.critedge._crit_edge ], [ %.0415.lcssa, %.lr.ph616.split.preheader ], [ %.0436.mux631814, %.critedge._crit_edge.thread ], [ %.0415.lcssa, %._crit_edge614.us ]
  %422 = and i1 %421, %.0443.lcssa815
  br label %423

423:                                              ; preds = %.loopexit473, %.loopexit471
  %.1445 = phi i1 [ true, %.loopexit471 ], [ %422, %.loopexit473 ]
  %.2442 = phi i32 [ %.0440, %.loopexit471 ], [ 0, %.loopexit473 ]
  %.3439 = phi float [ %.1437, %.loopexit471 ], [ %.2438, %.loopexit473 ]
  %.1394 = phi float [ %.1437, %.loopexit471 ], [ %.0393, %.loopexit473 ]
  br i1 %.not457, label %427, label %424

424:                                              ; preds = %423
  %425 = icmp ne i32 %.2442, 0
  %426 = select i1 %.1445, i1 %425, i1 false
  br i1 %426, label %60, label %427, !llvm.loop !55

427:                                              ; preds = %424, %423
  %.2395 = phi float [ %.1394, %423 ], [ %.3439, %424 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 1024, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  ret float %.2395
}

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.floor.v4f32(<4 x float>) #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !8, i64 0}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !9, i64 0}
!13 = distinct !{!13, !6, !14, !15}
!14 = !{!"llvm.loop.isvectorized", i32 1}
!15 = !{!"llvm.loop.unroll.runtime.disable"}
!16 = distinct !{!16, !6, !15, !14}
!17 = distinct !{!17, !6}
!18 = distinct !{!18, !6, !14, !15}
!19 = distinct !{!19, !6, !15, !14}
!20 = distinct !{!20, !6, !14, !15}
!21 = distinct !{!21, !6, !15, !14}
!22 = distinct !{!22, !6}
!23 = distinct !{!23, !6, !14, !15}
!24 = distinct !{!24, !6, !15, !14}
!25 = distinct !{!25, !6, !14, !15}
!26 = distinct !{!26, !6, !15, !14}
!27 = distinct !{!27, !6}
!28 = distinct !{!28, !6, !14, !15}
!29 = distinct !{!29, !6, !15, !14}
!30 = distinct !{!30, !6, !14, !15}
!31 = distinct !{!31, !6, !15, !14}
!32 = distinct !{!32, !6}
!33 = distinct !{!33, !6}
!34 = distinct !{!34, !6}
!35 = distinct !{!35, !6}
!36 = distinct !{!36, !6}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.unroll.disable"}
!39 = distinct !{!39, !6}
!40 = distinct !{!40, !6}
!41 = distinct !{!41, !6}
!42 = distinct !{!42, !6}
!43 = distinct !{!43, !38}
!44 = distinct !{!44, !6}
!45 = distinct !{!45, !6}
!46 = distinct !{!46, !6, !14, !15}
!47 = distinct !{!47, !6}
!48 = distinct !{!48, !6, !15, !14}
!49 = distinct !{!49, !6}
!50 = distinct !{!50, !6}
!51 = distinct !{!51, !6}
!52 = distinct !{!52, !6, !14, !15}
!53 = distinct !{!53, !6, !15, !14}
!54 = distinct !{!54, !6}
!55 = distinct !{!55, !6}


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