; LLVM IR from pixpark/gpupixel :: third_party/libyuv/util (ssim)

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

@_ZL2W0 = external hidden constant { { [8 x i16] } }, align 16
@_ZL2W1 = external hidden constant { { [8 x i16] } }, align 16
@_ZL2W2 = external hidden constant { { [8 x i16] } }, align 16
@_ZL2W3 = external hidden constant { { [8 x i16] } }, align 16

; 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 willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef double @_ZL12FinalizeSSIMdddddd(double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) #1

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

97:                                               ; preds = %6
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #4
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = load i32, ptr %11, align 4, !tbaa !9
  %100 = mul nsw i32 0, %99
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds i8, ptr %98, i64 %101
  %103 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %102)
  store <2 x i64> %103, ptr %24, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #4
  %104 = load ptr, ptr %8, align 8, !tbaa !5
  %105 = load i32, ptr %11, align 4, !tbaa !9
  %106 = mul nsw i32 0, %105
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds i8, ptr %104, i64 %107
  %109 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %108)
  store <2 x i64> %109, ptr %25, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #4
  %110 = load <2 x i64>, ptr %24, align 16, !tbaa !13
  %111 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %112 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %110, <2 x i64> noundef %111)
  store <2 x i64> %112, ptr %26, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #4
  %113 = load <2 x i64>, ptr %25, align 16, !tbaa !13
  %114 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %115 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %113, <2 x i64> noundef %114)
  store <2 x i64> %115, ptr %27, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #4
  %116 = load <2 x i64>, ptr %26, align 16, !tbaa !13
  %117 = load <2 x i64>, ptr @_ZL2W0, align 16, !tbaa !13
  %118 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %116, <2 x i64> noundef %117)
  store <2 x i64> %118, ptr %28, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #4
  %119 = load <2 x i64>, ptr %27, align 16, !tbaa !13
  %120 = load <2 x i64>, ptr @_ZL2W0, align 16, !tbaa !13
  %121 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %119, <2 x i64> noundef %120)
  store <2 x i64> %121, ptr %29, align 16, !tbaa !13
  %122 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %123 = load <2 x i64>, ptr %28, align 16, !tbaa !13
  %124 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %125 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %123, <2 x i64> noundef %124)
  %126 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %122, <2 x i64> noundef %125)
  store <2 x i64> %126, ptr %19, align 16, !tbaa !13
  %127 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %128 = load <2 x i64>, ptr %29, align 16, !tbaa !13
  %129 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %130 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %128, <2 x i64> noundef %129)
  %131 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %127, <2 x i64> noundef %130)
  store <2 x i64> %131, ptr %20, align 16, !tbaa !13
  %132 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %133 = load <2 x i64>, ptr %28, align 16, !tbaa !13
  %134 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %135 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %133, <2 x i64> noundef %134)
  %136 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %132, <2 x i64> noundef %135)
  store <2 x i64> %136, ptr %19, align 16, !tbaa !13
  %137 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %138 = load <2 x i64>, ptr %29, align 16, !tbaa !13
  %139 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %140 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %138, <2 x i64> noundef %139)
  %141 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %137, <2 x i64> noundef %140)
  store <2 x i64> %141, ptr %20, align 16, !tbaa !13
  %142 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  %143 = load <2 x i64>, ptr %28, align 16, !tbaa !13
  %144 = load <2 x i64>, ptr %26, align 16, !tbaa !13
  %145 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %143, <2 x i64> noundef %144)
  %146 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %142, <2 x i64> noundef %145)
  store <2 x i64> %146, ptr %21, align 16, !tbaa !13
  %147 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  %148 = load <2 x i64>, ptr %28, align 16, !tbaa !13
  %149 = load <2 x i64>, ptr %27, align 16, !tbaa !13
  %150 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %148, <2 x i64> noundef %149)
  %151 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %147, <2 x i64> noundef %150)
  store <2 x i64> %151, ptr %22, align 16, !tbaa !13
  %152 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  %153 = load <2 x i64>, ptr %29, align 16, !tbaa !13
  %154 = load <2 x i64>, ptr %27, align 16, !tbaa !13
  %155 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %153, <2 x i64> noundef %154)
  %156 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %152, <2 x i64> noundef %155)
  store <2 x i64> %156, ptr %23, align 16, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #4
  br label %157

157:                                              ; preds = %97
  br label %158

158:                                              ; preds = %157
  br label %159

159:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #4
  %160 = load ptr, ptr %7, align 8, !tbaa !5
  %161 = load i32, ptr %11, align 4, !tbaa !9
  %162 = mul nsw i32 1, %161
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i8, ptr %160, i64 %163
  %165 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %164)
  store <2 x i64> %165, ptr %30, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #4
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = load i32, ptr %11, align 4, !tbaa !9
  %168 = mul nsw i32 1, %167
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds i8, ptr %166, i64 %169
  %171 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %170)
  store <2 x i64> %171, ptr %31, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %32) #4
  %172 = load <2 x i64>, ptr %30, align 16, !tbaa !13
  %173 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %174 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %172, <2 x i64> noundef %173)
  store <2 x i64> %174, ptr %32, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #4
  %175 = load <2 x i64>, ptr %31, align 16, !tbaa !13
  %176 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %177 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %175, <2 x i64> noundef %176)
  store <2 x i64> %177, ptr %33, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #4
  %178 = load <2 x i64>, ptr %32, align 16, !tbaa !13
  %179 = load <2 x i64>, ptr @_ZL2W1, align 16, !tbaa !13
  %180 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %178, <2 x i64> noundef %179)
  store <2 x i64> %180, ptr %34, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #4
  %181 = load <2 x i64>, ptr %33, align 16, !tbaa !13
  %182 = load <2 x i64>, ptr @_ZL2W1, align 16, !tbaa !13
  %183 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %181, <2 x i64> noundef %182)
  store <2 x i64> %183, ptr %35, align 16, !tbaa !13
  %184 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %185 = load <2 x i64>, ptr %34, align 16, !tbaa !13
  %186 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %187 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %185, <2 x i64> noundef %186)
  %188 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %184, <2 x i64> noundef %187)
  store <2 x i64> %188, ptr %19, align 16, !tbaa !13
  %189 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %190 = load <2 x i64>, ptr %35, align 16, !tbaa !13
  %191 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %192 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %190, <2 x i64> noundef %191)
  %193 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %189, <2 x i64> noundef %192)
  store <2 x i64> %193, ptr %20, align 16, !tbaa !13
  %194 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %195 = load <2 x i64>, ptr %34, align 16, !tbaa !13
  %196 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %197 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %195, <2 x i64> noundef %196)
  %198 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %194, <2 x i64> noundef %197)
  store <2 x i64> %198, ptr %19, align 16, !tbaa !13
  %199 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %200 = load <2 x i64>, ptr %35, align 16, !tbaa !13
  %201 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %202 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %200, <2 x i64> noundef %201)
  %203 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %199, <2 x i64> noundef %202)
  store <2 x i64> %203, ptr %20, align 16, !tbaa !13
  %204 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  %205 = load <2 x i64>, ptr %34, align 16, !tbaa !13
  %206 = load <2 x i64>, ptr %32, align 16, !tbaa !13
  %207 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %205, <2 x i64> noundef %206)
  %208 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %204, <2 x i64> noundef %207)
  store <2 x i64> %208, ptr %21, align 16, !tbaa !13
  %209 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  %210 = load <2 x i64>, ptr %34, align 16, !tbaa !13
  %211 = load <2 x i64>, ptr %33, align 16, !tbaa !13
  %212 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %210, <2 x i64> noundef %211)
  %213 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %209, <2 x i64> noundef %212)
  store <2 x i64> %213, ptr %22, align 16, !tbaa !13
  %214 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  %215 = load <2 x i64>, ptr %35, align 16, !tbaa !13
  %216 = load <2 x i64>, ptr %33, align 16, !tbaa !13
  %217 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %215, <2 x i64> noundef %216)
  %218 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %214, <2 x i64> noundef %217)
  store <2 x i64> %218, ptr %23, align 16, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #4
  br label %219

219:                                              ; preds = %159
  br label %220

220:                                              ; preds = %219
  br label %221

221:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #4
  %222 = load ptr, ptr %7, align 8, !tbaa !5
  %223 = load i32, ptr %11, align 4, !tbaa !9
  %224 = mul nsw i32 2, %223
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds i8, ptr %222, i64 %225
  %227 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %226)
  store <2 x i64> %227, ptr %36, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #4
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = load i32, ptr %11, align 4, !tbaa !9
  %230 = mul nsw i32 2, %229
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i8, ptr %228, i64 %231
  %233 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %232)
  store <2 x i64> %233, ptr %37, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #4
  %234 = load <2 x i64>, ptr %36, align 16, !tbaa !13
  %235 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %236 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %234, <2 x i64> noundef %235)
  store <2 x i64> %236, ptr %38, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #4
  %237 = load <2 x i64>, ptr %37, align 16, !tbaa !13
  %238 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %239 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %237, <2 x i64> noundef %238)
  store <2 x i64> %239, ptr %39, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #4
  %240 = load <2 x i64>, ptr %38, align 16, !tbaa !13
  %241 = load <2 x i64>, ptr @_ZL2W2, align 16, !tbaa !13
  %242 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %240, <2 x i64> noundef %241)
  store <2 x i64> %242, ptr %40, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #4
  %243 = load <2 x i64>, ptr %39, align 16, !tbaa !13
  %244 = load <2 x i64>, ptr @_ZL2W2, align 16, !tbaa !13
  %245 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %243, <2 x i64> noundef %244)
  store <2 x i64> %245, ptr %41, align 16, !tbaa !13
  %246 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %247 = load <2 x i64>, ptr %40, align 16, !tbaa !13
  %248 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %249 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %247, <2 x i64> noundef %248)
  %250 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %246, <2 x i64> noundef %249)
  store <2 x i64> %250, ptr %19, align 16, !tbaa !13
  %251 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %252 = load <2 x i64>, ptr %41, align 16, !tbaa !13
  %253 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %254 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %252, <2 x i64> noundef %253)
  %255 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %251, <2 x i64> noundef %254)
  store <2 x i64> %255, ptr %20, align 16, !tbaa !13
  %256 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %257 = load <2 x i64>, ptr %40, align 16, !tbaa !13
  %258 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %259 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %257, <2 x i64> noundef %258)
  %260 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %256, <2 x i64> noundef %259)
  store <2 x i64> %260, ptr %19, align 16, !tbaa !13
  %261 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %262 = load <2 x i64>, ptr %41, align 16, !tbaa !13
  %263 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %264 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %262, <2 x i64> noundef %263)
  %265 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %261, <2 x i64> noundef %264)
  store <2 x i64> %265, ptr %20, align 16, !tbaa !13
  %266 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  %267 = load <2 x i64>, ptr %40, align 16, !tbaa !13
  %268 = load <2 x i64>, ptr %38, align 16, !tbaa !13
  %269 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %267, <2 x i64> noundef %268)
  %270 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %266, <2 x i64> noundef %269)
  store <2 x i64> %270, ptr %21, align 16, !tbaa !13
  %271 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  %272 = load <2 x i64>, ptr %40, align 16, !tbaa !13
  %273 = load <2 x i64>, ptr %39, align 16, !tbaa !13
  %274 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %272, <2 x i64> noundef %273)
  %275 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %271, <2 x i64> noundef %274)
  store <2 x i64> %275, ptr %22, align 16, !tbaa !13
  %276 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  %277 = load <2 x i64>, ptr %41, align 16, !tbaa !13
  %278 = load <2 x i64>, ptr %39, align 16, !tbaa !13
  %279 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %277, <2 x i64> noundef %278)
  %280 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %276, <2 x i64> noundef %279)
  store <2 x i64> %280, ptr %23, align 16, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #4
  br label %281

281:                                              ; preds = %221
  br label %282

282:                                              ; preds = %281
  br label %283

283:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #4
  %284 = load ptr, ptr %7, align 8, !tbaa !5
  %285 = load i32, ptr %11, align 4, !tbaa !9
  %286 = mul nsw i32 3, %285
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds i8, ptr %284, i64 %287
  %289 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %288)
  store <2 x i64> %289, ptr %42, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #4
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  %291 = load i32, ptr %11, align 4, !tbaa !9
  %292 = mul nsw i32 3, %291
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i8, ptr %290, i64 %293
  %295 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %294)
  store <2 x i64> %295, ptr %43, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #4
  %296 = load <2 x i64>, ptr %42, align 16, !tbaa !13
  %297 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %298 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %296, <2 x i64> noundef %297)
  store <2 x i64> %298, ptr %44, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #4
  %299 = load <2 x i64>, ptr %43, align 16, !tbaa !13
  %300 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %301 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %299, <2 x i64> noundef %300)
  store <2 x i64> %301, ptr %45, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #4
  %302 = load <2 x i64>, ptr %44, align 16, !tbaa !13
  %303 = load <2 x i64>, ptr @_ZL2W3, align 16, !tbaa !13
  %304 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %302, <2 x i64> noundef %303)
  store <2 x i64> %304, ptr %46, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #4
  %305 = load <2 x i64>, ptr %45, align 16, !tbaa !13
  %306 = load <2 x i64>, ptr @_ZL2W3, align 16, !tbaa !13
  %307 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %305, <2 x i64> noundef %306)
  store <2 x i64> %307, ptr %47, align 16, !tbaa !13
  %308 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %309 = load <2 x i64>, ptr %46, align 16, !tbaa !13
  %310 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %311 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %309, <2 x i64> noundef %310)
  %312 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %308, <2 x i64> noundef %311)
  store <2 x i64> %312, ptr %19, align 16, !tbaa !13
  %313 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %314 = load <2 x i64>, ptr %47, align 16, !tbaa !13
  %315 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %316 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %314, <2 x i64> noundef %315)
  %317 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %313, <2 x i64> noundef %316)
  store <2 x i64> %317, ptr %20, align 16, !tbaa !13
  %318 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %319 = load <2 x i64>, ptr %46, align 16, !tbaa !13
  %320 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %321 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %319, <2 x i64> noundef %320)
  %322 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %318, <2 x i64> noundef %321)
  store <2 x i64> %322, ptr %19, align 16, !tbaa !13
  %323 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %324 = load <2 x i64>, ptr %47, align 16, !tbaa !13
  %325 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %326 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %324, <2 x i64> noundef %325)
  %327 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %323, <2 x i64> noundef %326)
  store <2 x i64> %327, ptr %20, align 16, !tbaa !13
  %328 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  %329 = load <2 x i64>, ptr %46, align 16, !tbaa !13
  %330 = load <2 x i64>, ptr %44, align 16, !tbaa !13
  %331 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %329, <2 x i64> noundef %330)
  %332 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %328, <2 x i64> noundef %331)
  store <2 x i64> %332, ptr %21, align 16, !tbaa !13
  %333 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  %334 = load <2 x i64>, ptr %46, align 16, !tbaa !13
  %335 = load <2 x i64>, ptr %45, align 16, !tbaa !13
  %336 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %334, <2 x i64> noundef %335)
  %337 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %333, <2 x i64> noundef %336)
  store <2 x i64> %337, ptr %22, align 16, !tbaa !13
  %338 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  %339 = load <2 x i64>, ptr %47, align 16, !tbaa !13
  %340 = load <2 x i64>, ptr %45, align 16, !tbaa !13
  %341 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %339, <2 x i64> noundef %340)
  %342 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %338, <2 x i64> noundef %341)
  store <2 x i64> %342, ptr %23, align 16, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #4
  br label %343

343:                                              ; preds = %283
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #4
  %346 = load ptr, ptr %7, align 8, !tbaa !5
  %347 = load i32, ptr %11, align 4, !tbaa !9
  %348 = mul nsw i32 4, %347
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i8, ptr %346, i64 %349
  %351 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %350)
  store <2 x i64> %351, ptr %48, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #4
  %352 = load ptr, ptr %8, align 8, !tbaa !5
  %353 = load i32, ptr %11, align 4, !tbaa !9
  %354 = mul nsw i32 4, %353
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds i8, ptr %352, i64 %355
  %357 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %356)
  store <2 x i64> %357, ptr %49, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #4
  %358 = load <2 x i64>, ptr %48, align 16, !tbaa !13
  %359 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %360 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %358, <2 x i64> noundef %359)
  store <2 x i64> %360, ptr %50, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #4
  %361 = load <2 x i64>, ptr %49, align 16, !tbaa !13
  %362 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %363 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %361, <2 x i64> noundef %362)
  store <2 x i64> %363, ptr %51, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #4
  %364 = load <2 x i64>, ptr %50, align 16, !tbaa !13
  %365 = load <2 x i64>, ptr @_ZL2W2, align 16, !tbaa !13
  %366 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %364, <2 x i64> noundef %365)
  store <2 x i64> %366, ptr %52, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #4
  %367 = load <2 x i64>, ptr %51, align 16, !tbaa !13
  %368 = load <2 x i64>, ptr @_ZL2W2, align 16, !tbaa !13
  %369 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %367, <2 x i64> noundef %368)
  store <2 x i64> %369, ptr %53, align 16, !tbaa !13
  %370 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %371 = load <2 x i64>, ptr %52, align 16, !tbaa !13
  %372 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %373 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %371, <2 x i64> noundef %372)
  %374 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %370, <2 x i64> noundef %373)
  store <2 x i64> %374, ptr %19, align 16, !tbaa !13
  %375 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %376 = load <2 x i64>, ptr %53, align 16, !tbaa !13
  %377 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %378 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %376, <2 x i64> noundef %377)
  %379 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %375, <2 x i64> noundef %378)
  store <2 x i64> %379, ptr %20, align 16, !tbaa !13
  %380 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %381 = load <2 x i64>, ptr %52, align 16, !tbaa !13
  %382 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %383 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %381, <2 x i64> noundef %382)
  %384 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %380, <2 x i64> noundef %383)
  store <2 x i64> %384, ptr %19, align 16, !tbaa !13
  %385 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %386 = load <2 x i64>, ptr %53, align 16, !tbaa !13
  %387 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %388 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %386, <2 x i64> noundef %387)
  %389 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %385, <2 x i64> noundef %388)
  store <2 x i64> %389, ptr %20, align 16, !tbaa !13
  %390 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  %391 = load <2 x i64>, ptr %52, align 16, !tbaa !13
  %392 = load <2 x i64>, ptr %50, align 16, !tbaa !13
  %393 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %391, <2 x i64> noundef %392)
  %394 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %390, <2 x i64> noundef %393)
  store <2 x i64> %394, ptr %21, align 16, !tbaa !13
  %395 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  %396 = load <2 x i64>, ptr %52, align 16, !tbaa !13
  %397 = load <2 x i64>, ptr %51, align 16, !tbaa !13
  %398 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %396, <2 x i64> noundef %397)
  %399 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %395, <2 x i64> noundef %398)
  store <2 x i64> %399, ptr %22, align 16, !tbaa !13
  %400 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  %401 = load <2 x i64>, ptr %53, align 16, !tbaa !13
  %402 = load <2 x i64>, ptr %51, align 16, !tbaa !13
  %403 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %401, <2 x i64> noundef %402)
  %404 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %400, <2 x i64> noundef %403)
  store <2 x i64> %404, ptr %23, align 16, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #4
  br label %405

405:                                              ; preds = %345
  br label %406

406:                                              ; preds = %405
  br label %407

407:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #4
  %408 = load ptr, ptr %7, align 8, !tbaa !5
  %409 = load i32, ptr %11, align 4, !tbaa !9
  %410 = mul nsw i32 5, %409
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds i8, ptr %408, i64 %411
  %413 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %412)
  store <2 x i64> %413, ptr %54, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #4
  %414 = load ptr, ptr %8, align 8, !tbaa !5
  %415 = load i32, ptr %11, align 4, !tbaa !9
  %416 = mul nsw i32 5, %415
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i8, ptr %414, i64 %417
  %419 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %418)
  store <2 x i64> %419, ptr %55, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #4
  %420 = load <2 x i64>, ptr %54, align 16, !tbaa !13
  %421 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %422 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %420, <2 x i64> noundef %421)
  store <2 x i64> %422, ptr %56, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #4
  %423 = load <2 x i64>, ptr %55, align 16, !tbaa !13
  %424 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %425 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %423, <2 x i64> noundef %424)
  store <2 x i64> %425, ptr %57, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #4
  %426 = load <2 x i64>, ptr %56, align 16, !tbaa !13
  %427 = load <2 x i64>, ptr @_ZL2W1, align 16, !tbaa !13
  %428 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %426, <2 x i64> noundef %427)
  store <2 x i64> %428, ptr %58, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #4
  %429 = load <2 x i64>, ptr %57, align 16, !tbaa !13
  %430 = load <2 x i64>, ptr @_ZL2W1, align 16, !tbaa !13
  %431 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %429, <2 x i64> noundef %430)
  store <2 x i64> %431, ptr %59, align 16, !tbaa !13
  %432 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %433 = load <2 x i64>, ptr %58, align 16, !tbaa !13
  %434 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %435 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %433, <2 x i64> noundef %434)
  %436 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %432, <2 x i64> noundef %435)
  store <2 x i64> %436, ptr %19, align 16, !tbaa !13
  %437 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %438 = load <2 x i64>, ptr %59, align 16, !tbaa !13
  %439 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %440 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %438, <2 x i64> noundef %439)
  %441 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %437, <2 x i64> noundef %440)
  store <2 x i64> %441, ptr %20, align 16, !tbaa !13
  %442 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %443 = load <2 x i64>, ptr %58, align 16, !tbaa !13
  %444 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %445 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %443, <2 x i64> noundef %444)
  %446 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %442, <2 x i64> noundef %445)
  store <2 x i64> %446, ptr %19, align 16, !tbaa !13
  %447 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %448 = load <2 x i64>, ptr %59, align 16, !tbaa !13
  %449 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %450 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %448, <2 x i64> noundef %449)
  %451 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %447, <2 x i64> noundef %450)
  store <2 x i64> %451, ptr %20, align 16, !tbaa !13
  %452 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  %453 = load <2 x i64>, ptr %58, align 16, !tbaa !13
  %454 = load <2 x i64>, ptr %56, align 16, !tbaa !13
  %455 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %453, <2 x i64> noundef %454)
  %456 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %452, <2 x i64> noundef %455)
  store <2 x i64> %456, ptr %21, align 16, !tbaa !13
  %457 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  %458 = load <2 x i64>, ptr %58, align 16, !tbaa !13
  %459 = load <2 x i64>, ptr %57, align 16, !tbaa !13
  %460 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %458, <2 x i64> noundef %459)
  %461 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %457, <2 x i64> noundef %460)
  store <2 x i64> %461, ptr %22, align 16, !tbaa !13
  %462 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  %463 = load <2 x i64>, ptr %59, align 16, !tbaa !13
  %464 = load <2 x i64>, ptr %57, align 16, !tbaa !13
  %465 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %463, <2 x i64> noundef %464)
  %466 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %462, <2 x i64> noundef %465)
  store <2 x i64> %466, ptr %23, align 16, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #4
  br label %467

467:                                              ; preds = %407
  br label %468

468:                                              ; preds = %467
  br label %469

469:                                              ; preds = %468
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #4
  %470 = load ptr, ptr %7, align 8, !tbaa !5
  %471 = load i32, ptr %11, align 4, !tbaa !9
  %472 = mul nsw i32 6, %471
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds i8, ptr %470, i64 %473
  %475 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %474)
  store <2 x i64> %475, ptr %60, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #4
  %476 = load ptr, ptr %8, align 8, !tbaa !5
  %477 = load i32, ptr %11, align 4, !tbaa !9
  %478 = mul nsw i32 6, %477
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds i8, ptr %476, i64 %479
  %481 = call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %480)
  store <2 x i64> %481, ptr %61, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %62) #4
  %482 = load <2 x i64>, ptr %60, align 16, !tbaa !13
  %483 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %484 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %482, <2 x i64> noundef %483)
  store <2 x i64> %484, ptr %62, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #4
  %485 = load <2 x i64>, ptr %61, align 16, !tbaa !13
  %486 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %487 = call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %485, <2 x i64> noundef %486)
  store <2 x i64> %487, ptr %63, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %64) #4
  %488 = load <2 x i64>, ptr %62, align 16, !tbaa !13
  %489 = load <2 x i64>, ptr @_ZL2W0, align 16, !tbaa !13
  %490 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %488, <2 x i64> noundef %489)
  store <2 x i64> %490, ptr %64, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 16, ptr %65) #4
  %491 = load <2 x i64>, ptr %63, align 16, !tbaa !13
  %492 = load <2 x i64>, ptr @_ZL2W0, align 16, !tbaa !13
  %493 = call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %491, <2 x i64> noundef %492)
  store <2 x i64> %493, ptr %65, align 16, !tbaa !13
  %494 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %495 = load <2 x i64>, ptr %64, align 16, !tbaa !13
  %496 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %497 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %495, <2 x i64> noundef %496)
  %498 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %494, <2 x i64> noundef %497)
  store <2 x i64> %498, ptr %19, align 16, !tbaa !13
  %499 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %500 = load <2 x i64>, ptr %65, align 16, !tbaa !13
  %501 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %502 = call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %500, <2 x i64> noundef %501)
  %503 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %499, <2 x i64> noundef %502)
  store <2 x i64> %503, ptr %20, align 16, !tbaa !13
  %504 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  %505 = load <2 x i64>, ptr %64, align 16, !tbaa !13
  %506 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %507 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %505, <2 x i64> noundef %506)
  %508 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %504, <2 x i64> noundef %507)
  store <2 x i64> %508, ptr %19, align 16, !tbaa !13
  %509 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  %510 = load <2 x i64>, ptr %65, align 16, !tbaa !13
  %511 = load <2 x i64>, ptr %18, align 16, !tbaa !13
  %512 = call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %510, <2 x i64> noundef %511)
  %513 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %509, <2 x i64> noundef %512)
  store <2 x i64> %513, ptr %20, align 16, !tbaa !13
  %514 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  %515 = load <2 x i64>, ptr %64, align 16, !tbaa !13
  %516 = load <2 x i64>, ptr %62, align 16, !tbaa !13
  %517 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %515, <2 x i64> noundef %516)
  %518 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %514, <2 x i64> noundef %517)
  store <2 x i64> %518, ptr %21, align 16, !tbaa !13
  %519 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  %520 = load <2 x i64>, ptr %64, align 16, !tbaa !13
  %521 = load <2 x i64>, ptr %63, align 16, !tbaa !13
  %522 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %520, <2 x i64> noundef %521)
  %523 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %519, <2 x i64> noundef %522)
  store <2 x i64> %523, ptr %22, align 16, !tbaa !13
  %524 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  %525 = load <2 x i64>, ptr %65, align 16, !tbaa !13
  %526 = load <2 x i64>, ptr %63, align 16, !tbaa !13
  %527 = call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %525, <2 x i64> noundef %526)
  %528 = call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %524, <2 x i64> noundef %527)
  store <2 x i64> %528, ptr %23, align 16, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 16, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #4
  br label %529

529:                                              ; preds = %469
  br label %530

530:                                              ; preds = %529
  br label %531

531:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 16, ptr %66) #4
  %532 = getelementptr inbounds [4 x i32], ptr %66, i64 0, i64 0
  %533 = load <2 x i64>, ptr %19, align 16, !tbaa !13
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef %532, <2 x i64> noundef %533)
  %534 = getelementptr inbounds [4 x i32], ptr %66, i64 0, i64 3
  %535 = load i32, ptr %534, align 4, !tbaa !9
  %536 = getelementptr inbounds [4 x i32], ptr %66, i64 0, i64 2
  %537 = load i32, ptr %536, align 8, !tbaa !9
  %538 = add i32 %535, %537
  %539 = getelementptr inbounds [4 x i32], ptr %66, i64 0, i64 1
  %540 = load i32, ptr %539, align 4, !tbaa !9
  %541 = add i32 %538, %540
  %542 = getelementptr inbounds [4 x i32], ptr %66, i64 0, i64 0
  %543 = load i32, ptr %542, align 16, !tbaa !9
  %544 = add i32 %541, %543
  store i32 %544, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #4
  br label %545

545:                                              ; preds = %531
  br label %546

546:                                              ; preds = %545
  br label %547

547:                                              ; preds = %546
  call void @llvm.lifetime.start.p0(i64 16, ptr %67) #4
  %548 = getelementptr inbounds [4 x i32], ptr %67, i64 0, i64 0
  %549 = load <2 x i64>, ptr %20, align 16, !tbaa !13
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef %548, <2 x i64> noundef %549)
  %550 = getelementptr inbounds [4 x i32], ptr %67, i64 0, i64 3
  %551 = load i32, ptr %550, align 4, !tbaa !9
  %552 = getelementptr inbounds [4 x i32], ptr %67, i64 0, i64 2
  %553 = load i32, ptr %552, align 8, !tbaa !9
  %554 = add i32 %551, %553
  %555 = getelementptr inbounds [4 x i32], ptr %67, i64 0, i64 1
  %556 = load i32, ptr %555, align 4, !tbaa !9
  %557 = add i32 %554, %556
  %558 = getelementptr inbounds [4 x i32], ptr %67, i64 0, i64 0
  %559 = load i32, ptr %558, align 16, !tbaa !9
  %560 = add i32 %557, %559
  store i32 %560, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %67) #4
  br label %561

561:                                              ; preds = %547
  br label %562

562:                                              ; preds = %561
  br label %563

563:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 16, ptr %68) #4
  %564 = getelementptr inbounds [4 x i32], ptr %68, i64 0, i64 0
  %565 = load <2 x i64>, ptr %21, align 16, !tbaa !13
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef %564, <2 x i64> noundef %565)
  %566 = getelementptr inbounds [4 x i32], ptr %68, i64 0, i64 3
  %567 = load i32, ptr %566, align 4, !tbaa !9
  %568 = getelementptr inbounds [4 x i32], ptr %68, i64 0, i64 2
  %569 = load i32, ptr %568, align 8, !tbaa !9
  %570 = add i32 %567, %569
  %571 = getelementptr inbounds [4 x i32], ptr %68, i64 0, i64 1
  %572 = load i32, ptr %571, align 4, !tbaa !9
  %573 = add i32 %570, %572
  %574 = getelementptr inbounds [4 x i32], ptr %68, i64 0, i64 0
  %575 = load i32, ptr %574, align 16, !tbaa !9
  %576 = add i32 %573, %575
  store i32 %576, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %68) #4
  br label %577

577:                                              ; preds = %563
  br label %578

578:                                              ; preds = %577
  br label %579

579:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 16, ptr %69) #4
  %580 = getelementptr inbounds [4 x i32], ptr %69, i64 0, i64 0
  %581 = load <2 x i64>, ptr %22, align 16, !tbaa !13
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef %580, <2 x i64> noundef %581)
  %582 = getelementptr inbounds [4 x i32], ptr %69, i64 0, i64 3
  %583 = load i32, ptr %582, align 4, !tbaa !9
  %584 = getelementptr inbounds [4 x i32], ptr %69, i64 0, i64 2
  %585 = load i32, ptr %584, align 8, !tbaa !9
  %586 = add i32 %583, %585
  %587 = getelementptr inbounds [4 x i32], ptr %69, i64 0, i64 1
  %588 = load i32, ptr %587, align 4, !tbaa !9
  %589 = add i32 %586, %588
  %590 = getelementptr inbounds [4 x i32], ptr %69, i64 0, i64 0
  %591 = load i32, ptr %590, align 16, !tbaa !9
  %592 = add i32 %589, %591
  store i32 %592, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %69) #4
  br label %593

593:                                              ; preds = %579
  br label %594

594:                                              ; preds = %593
  br label %595

595:                                              ; preds = %594
  call void @llvm.lifetime.start.p0(i64 16, ptr %70) #4
  %596 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 0
  %597 = load <2 x i64>, ptr %23, align 16, !tbaa !13
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef %596, <2 x i64> noundef %597)
  %598 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 3
  %599 = load i32, ptr %598, align 4, !tbaa !9
  %600 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 2
  %601 = load i32, ptr %600, align 8, !tbaa !9
  %602 = add i32 %599, %601
  %603 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 1
  %604 = load i32, ptr %603, align 4, !tbaa !9
  %605 = add i32 %602, %604
  %606 = getelementptr inbounds [4 x i32], ptr %70, i64 0, i64 0
  %607 = load i32, ptr %606, align 16, !tbaa !9
  %608 = add i32 %605, %607
  store i32 %608, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %70) #4
  br label %609

609:                                              ; preds = %595
  br label %610

610:                                              ; preds = %609
  %611 = load double, ptr %12, align 8, !tbaa !11
  %612 = load i32, ptr %13, align 4, !tbaa !9
  %613 = uitofp i32 %612 to double
  %614 = load i32, ptr %14, align 4, !tbaa !9
  %615 = uitofp i32 %614 to double
  %616 = load i32, ptr %15, align 4, !tbaa !9
  %617 = uitofp i32 %616 to double
  %618 = load i32, ptr %16, align 4, !tbaa !9
  %619 = uitofp i32 %618 to double
  %620 = load i32, ptr %17, align 4, !tbaa !9
  %621 = uitofp i32 %620 to double
  %622 = call noundef double @_ZL12FinalizeSSIMdddddd(double noundef %611, double noundef %613, double noundef %615, double noundef %617, double noundef %619, double noundef %621)
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  ret double %622
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL17_mm_setzero_si128v() #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef, <2 x i64> noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="128" "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 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!7, !7, i64 0}


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

@_ZL2W0 = external hidden local_unnamed_addr constant { { [8 x i16] } }, align 16
@_ZL2W1 = external hidden local_unnamed_addr constant { { [8 x i16] } }, align 16
@_ZL2W2 = external hidden local_unnamed_addr constant { { [8 x i16] } }, align 16
@_ZL2W3 = external hidden local_unnamed_addr constant { { [8 x i16] } }, align 16

; 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 willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef double @_ZL12FinalizeSSIMdddddd(double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef double @GetSSIMFullKernel(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, double noundef %5) local_unnamed_addr #2 {
  %7 = alloca [4 x i32], align 16
  %8 = alloca [4 x i32], align 16
  %9 = alloca [4 x i32], align 16
  %10 = alloca [4 x i32], align 16
  %11 = alloca [4 x i32], align 16
  %12 = add nsw i32 %3, -3
  %13 = mul nsw i32 %12, %4
  %14 = add nsw i32 %2, -3
  %15 = add nsw i32 %14, %13
  %16 = sext i32 %15 to i64
  %17 = getelementptr inbounds i8, ptr %0, i64 %16
  %18 = getelementptr inbounds i8, ptr %1, i64 %16
  %19 = tail call noundef <2 x i64> @_ZL17_mm_setzero_si128v()
  %20 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %17)
  %21 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %18)
  %22 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %20, <2 x i64> noundef %19)
  %23 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %21, <2 x i64> noundef %19)
  %24 = load <2 x i64>, ptr @_ZL2W0, align 16, !tbaa !5
  %25 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %22, <2 x i64> noundef %24)
  %26 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %23, <2 x i64> noundef %24)
  %27 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %25, <2 x i64> noundef %19)
  %28 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %19, <2 x i64> noundef %27)
  %29 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %26, <2 x i64> noundef %19)
  %30 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %19, <2 x i64> noundef %29)
  %31 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %25, <2 x i64> noundef %19)
  %32 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %28, <2 x i64> noundef %31)
  %33 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %26, <2 x i64> noundef %19)
  %34 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %30, <2 x i64> noundef %33)
  %35 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %25, <2 x i64> noundef %22)
  %36 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %19, <2 x i64> noundef %35)
  %37 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %25, <2 x i64> noundef %23)
  %38 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %19, <2 x i64> noundef %37)
  %39 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %26, <2 x i64> noundef %23)
  %40 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %19, <2 x i64> noundef %39)
  %41 = sext i32 %4 to i64
  %42 = getelementptr inbounds i8, ptr %17, i64 %41
  %43 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %42)
  %44 = getelementptr inbounds i8, ptr %18, i64 %41
  %45 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %44)
  %46 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %43, <2 x i64> noundef %19)
  %47 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %45, <2 x i64> noundef %19)
  %48 = load <2 x i64>, ptr @_ZL2W1, align 16, !tbaa !5
  %49 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %46, <2 x i64> noundef %48)
  %50 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %47, <2 x i64> noundef %48)
  %51 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %49, <2 x i64> noundef %19)
  %52 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %32, <2 x i64> noundef %51)
  %53 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %50, <2 x i64> noundef %19)
  %54 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %34, <2 x i64> noundef %53)
  %55 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %49, <2 x i64> noundef %19)
  %56 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %52, <2 x i64> noundef %55)
  %57 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %50, <2 x i64> noundef %19)
  %58 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %54, <2 x i64> noundef %57)
  %59 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %49, <2 x i64> noundef %46)
  %60 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %36, <2 x i64> noundef %59)
  %61 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %49, <2 x i64> noundef %47)
  %62 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %38, <2 x i64> noundef %61)
  %63 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %50, <2 x i64> noundef %47)
  %64 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %40, <2 x i64> noundef %63)
  %65 = shl nsw i32 %4, 1
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds i8, ptr %17, i64 %66
  %68 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %67)
  %69 = getelementptr inbounds i8, ptr %18, i64 %66
  %70 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %69)
  %71 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %68, <2 x i64> noundef %19)
  %72 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %70, <2 x i64> noundef %19)
  %73 = load <2 x i64>, ptr @_ZL2W2, align 16, !tbaa !5
  %74 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %71, <2 x i64> noundef %73)
  %75 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %72, <2 x i64> noundef %73)
  %76 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %74, <2 x i64> noundef %19)
  %77 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %56, <2 x i64> noundef %76)
  %78 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %75, <2 x i64> noundef %19)
  %79 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %58, <2 x i64> noundef %78)
  %80 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %74, <2 x i64> noundef %19)
  %81 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %77, <2 x i64> noundef %80)
  %82 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %75, <2 x i64> noundef %19)
  %83 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %79, <2 x i64> noundef %82)
  %84 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %74, <2 x i64> noundef %71)
  %85 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %60, <2 x i64> noundef %84)
  %86 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %74, <2 x i64> noundef %72)
  %87 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %62, <2 x i64> noundef %86)
  %88 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %75, <2 x i64> noundef %72)
  %89 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %64, <2 x i64> noundef %88)
  %90 = mul nsw i32 %4, 3
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i8, ptr %17, i64 %91
  %93 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %92)
  %94 = getelementptr inbounds i8, ptr %18, i64 %91
  %95 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %94)
  %96 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %93, <2 x i64> noundef %19)
  %97 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %95, <2 x i64> noundef %19)
  %98 = load <2 x i64>, ptr @_ZL2W3, align 16, !tbaa !5
  %99 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %96, <2 x i64> noundef %98)
  %100 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %97, <2 x i64> noundef %98)
  %101 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %99, <2 x i64> noundef %19)
  %102 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %81, <2 x i64> noundef %101)
  %103 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %100, <2 x i64> noundef %19)
  %104 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %83, <2 x i64> noundef %103)
  %105 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %99, <2 x i64> noundef %19)
  %106 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %102, <2 x i64> noundef %105)
  %107 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %100, <2 x i64> noundef %19)
  %108 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %104, <2 x i64> noundef %107)
  %109 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %99, <2 x i64> noundef %96)
  %110 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %85, <2 x i64> noundef %109)
  %111 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %99, <2 x i64> noundef %97)
  %112 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %87, <2 x i64> noundef %111)
  %113 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %100, <2 x i64> noundef %97)
  %114 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %89, <2 x i64> noundef %113)
  %115 = shl nsw i32 %4, 2
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i8, ptr %17, i64 %116
  %118 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %117)
  %119 = getelementptr inbounds i8, ptr %18, i64 %116
  %120 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %119)
  %121 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %118, <2 x i64> noundef %19)
  %122 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %120, <2 x i64> noundef %19)
  %123 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %121, <2 x i64> noundef %73)
  %124 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %122, <2 x i64> noundef %73)
  %125 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %123, <2 x i64> noundef %19)
  %126 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %106, <2 x i64> noundef %125)
  %127 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %124, <2 x i64> noundef %19)
  %128 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %108, <2 x i64> noundef %127)
  %129 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %123, <2 x i64> noundef %19)
  %130 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %126, <2 x i64> noundef %129)
  %131 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %124, <2 x i64> noundef %19)
  %132 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %128, <2 x i64> noundef %131)
  %133 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %123, <2 x i64> noundef %121)
  %134 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %110, <2 x i64> noundef %133)
  %135 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %123, <2 x i64> noundef %122)
  %136 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %112, <2 x i64> noundef %135)
  %137 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %124, <2 x i64> noundef %122)
  %138 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %114, <2 x i64> noundef %137)
  %139 = mul nsw i32 %4, 5
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i8, ptr %17, i64 %140
  %142 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %141)
  %143 = getelementptr inbounds i8, ptr %18, i64 %140
  %144 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %143)
  %145 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %142, <2 x i64> noundef %19)
  %146 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %144, <2 x i64> noundef %19)
  %147 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %145, <2 x i64> noundef %48)
  %148 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %146, <2 x i64> noundef %48)
  %149 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %147, <2 x i64> noundef %19)
  %150 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %130, <2 x i64> noundef %149)
  %151 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %148, <2 x i64> noundef %19)
  %152 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %132, <2 x i64> noundef %151)
  %153 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %147, <2 x i64> noundef %19)
  %154 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %150, <2 x i64> noundef %153)
  %155 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %148, <2 x i64> noundef %19)
  %156 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %152, <2 x i64> noundef %155)
  %157 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %147, <2 x i64> noundef %145)
  %158 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %134, <2 x i64> noundef %157)
  %159 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %147, <2 x i64> noundef %146)
  %160 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %136, <2 x i64> noundef %159)
  %161 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %148, <2 x i64> noundef %146)
  %162 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %138, <2 x i64> noundef %161)
  %163 = mul nsw i32 %4, 6
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i8, ptr %17, i64 %164
  %166 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %165)
  %167 = getelementptr inbounds i8, ptr %18, i64 %164
  %168 = tail call noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef %167)
  %169 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %166, <2 x i64> noundef %19)
  %170 = tail call noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef %168, <2 x i64> noundef %19)
  %171 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %169, <2 x i64> noundef %24)
  %172 = tail call noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef %170, <2 x i64> noundef %24)
  %173 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %171, <2 x i64> noundef %19)
  %174 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %154, <2 x i64> noundef %173)
  %175 = tail call noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef %172, <2 x i64> noundef %19)
  %176 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %156, <2 x i64> noundef %175)
  %177 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %171, <2 x i64> noundef %19)
  %178 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %174, <2 x i64> noundef %177)
  %179 = tail call noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef %172, <2 x i64> noundef %19)
  %180 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %176, <2 x i64> noundef %179)
  %181 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %171, <2 x i64> noundef %169)
  %182 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %158, <2 x i64> noundef %181)
  %183 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %171, <2 x i64> noundef %170)
  %184 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %160, <2 x i64> noundef %183)
  %185 = tail call noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef %172, <2 x i64> noundef %170)
  %186 = tail call noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef %162, <2 x i64> noundef %185)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #5
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef nonnull %7, <2 x i64> noundef %178)
  %187 = load <4 x i32>, ptr %7, align 16, !tbaa !8
  %188 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %187)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #5
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef nonnull %8, <2 x i64> noundef %180)
  %189 = load <4 x i32>, ptr %8, align 16, !tbaa !8
  %190 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %189)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #5
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef nonnull %9, <2 x i64> noundef %182)
  %191 = load <4 x i32>, ptr %9, align 16, !tbaa !8
  %192 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %191)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #5
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef nonnull %10, <2 x i64> noundef %184)
  %193 = load <4 x i32>, ptr %10, align 16, !tbaa !8
  %194 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %193)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #5
  call void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef nonnull %11, <2 x i64> noundef %186)
  %195 = load <4 x i32>, ptr %11, align 16, !tbaa !8
  %196 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %195)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  %197 = uitofp i32 %188 to double
  %198 = uitofp i32 %190 to double
  %199 = uitofp i32 %192 to double
  %200 = uitofp i32 %194 to double
  %201 = uitofp i32 %196 to double
  %202 = call noundef double @_ZL12FinalizeSSIMdddddd(double noundef %5, double noundef %197, double noundef %198, double noundef %199, double noundef %200, double noundef %201)
  ret double %202
}

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL17_mm_setzero_si128v() local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL15_mm_loadl_epi64PKDv2_x(ptr noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL17_mm_unpacklo_epi8Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL15_mm_mullo_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL13_mm_add_epi32Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL18_mm_unpacklo_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL18_mm_unpackhi_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden noundef <2 x i64> @_ZL14_mm_madd_epi16Dv2_xS_(<2 x i64> noundef, <2 x i64> noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare hidden void @_ZL16_mm_storeu_si128PDv2_xS_(ptr noundef, <2 x i64> noundef) local_unnamed_addr #3

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="128" "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 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !6, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass