; LLVM IR from sp-nitech/SPTK :: src/compression (linde_buzo_gray_algorithm)

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

%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl" }
%"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl" = type { %"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl_data" }
%"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.7" = type { i8 }
%"class.sptk::NormalDistributedRandomValueGeneration" = type { %"class.sptk::RandomGenerationInterface", i32, i64, i8, double, double, double }
%"class.sptk::RandomGenerationInterface" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.sptk::LindeBuzoGrayAlgorithm" = type <{ ptr, i32, i32, i32, i32, i32, [4 x i8], double, double, i32, [4 x i8], %"class.sptk::DistanceCalculation", %"class.sptk::StatisticsAccumulation", %"class.sptk::VectorQuantization", i8, [7 x i8] }>
%"class.sptk::DistanceCalculation" = type <{ ptr, i32, i32, i8, [7 x i8] }>
%"class.sptk::StatisticsAccumulation" = type <{ ptr, i32, i32, i8, i8, i8, [5 x i8] }>
%"class.sptk::VectorQuantization" = type <{ ptr, i32, [4 x i8], %"class.sptk::DistanceCalculation", i8, [7 x i8] }>

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK4sptk22LindeBuzoGrayAlgorithm3RunERKSt6vectorIS1_IdSaIdEESaIS3_EEPS5_PS1_IiSaIiEEPd(ptr noundef nonnull align 8 dereferenceable(153) %0, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca i1, align 1
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::vector.5", align 8
  %15 = alloca %"class.std::allocator.7", align 1
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.sptk::NormalDistributedRandomValueGeneration", align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  %29 = alloca double, align 8
  %30 = alloca i32, align 4
  %31 = alloca double, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  %48 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  %50 = call noundef i64 @_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %49) #6
  %51 = trunc i64 %50 to i32
  store i32 %51, ptr %12, align 4, !tbaa !9
  %52 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 14
  %53 = load i8, ptr %52, align 8, !tbaa !11, !range !19, !noundef !20
  %54 = trunc i8 %53 to i1
  br i1 %54, label %55, label %79

55:                                               ; preds = %5
  %56 = load i32, ptr %12, align 4, !tbaa !9
  %57 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 4
  %58 = load i32, ptr %57, align 4, !tbaa !21
  %59 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 3
  %60 = load i32, ptr %59, align 8, !tbaa !22
  %61 = mul nsw i32 %58, %60
  %62 = icmp slt i32 %56, %61
  br i1 %62, label %79, label %63

63:                                               ; preds = %55
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = icmp eq ptr null, %64
  br i1 %65, label %79, label %66

66:                                               ; preds = %63
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  %68 = icmp eq ptr null, %67
  br i1 %68, label %79, label %69

69:                                               ; preds = %66
  %70 = load ptr, ptr %11, align 8, !tbaa !5
  %71 = icmp eq ptr null, %70
  br i1 %71, label %79, label %72

72:                                               ; preds = %69
  %73 = load ptr, ptr %9, align 8, !tbaa !5
  %74 = call noundef i64 @_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %73) #6
  %75 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 2
  %76 = load i32, ptr %75, align 4, !tbaa !23
  %77 = sext i32 %76 to i64
  %78 = icmp ne i64 %74, %77
  br i1 %78, label %79, label %80

79:                                               ; preds = %72, %69, %66, %63, %55, %5
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %556

80:                                               ; preds = %72
  %81 = load ptr, ptr %10, align 8, !tbaa !5
  %82 = call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %81) #6
  %83 = load i32, ptr %12, align 4, !tbaa !9
  %84 = sext i32 %83 to i64
  %85 = icmp ne i64 %82, %84
  br i1 %85, label %86, label %90

86:                                               ; preds = %80
  %87 = load ptr, ptr %10, align 8, !tbaa !5
  %88 = load i32, ptr %12, align 4, !tbaa !9
  %89 = sext i32 %88 to i64
  call void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %87, i64 noundef %89)
  br label %90

90:                                               ; preds = %86, %80
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #6
  %91 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 3
  %92 = load i32, ptr %91, align 8, !tbaa !22
  %93 = sext i32 %92 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #6
  call void @_ZNSaIN4sptk22StatisticsAccumulation6BufferEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #6
  invoke void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %93, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %94 unwind label %109

94:                                               ; preds = %90
  call void @_ZNSt15__new_allocatorIN4sptk22StatisticsAccumulation6BufferEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 56, ptr %18) #6
  %95 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 9
  %96 = load i32, ptr %95, align 8, !tbaa !24
  invoke void @_ZN4sptk38NormalDistributedRandomValueGenerationC1Ei(ptr noundef nonnull align 8 dereferenceable(56) %18, i32 noundef %96)
          to label %97 unwind label %113

97:                                               ; preds = %94
  %98 = load ptr, ptr %11, align 8, !tbaa !5
  store double 0x7FEFFFFFFFFFFFFF, ptr %98, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %99 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 2
  %100 = load i32, ptr %99, align 4, !tbaa !23
  store i32 %100, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %101 = load i32, ptr %19, align 4, !tbaa !9
  %102 = mul nsw i32 %101, 2
  store i32 %102, ptr %20, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %515, %97
  %104 = load i32, ptr %20, align 4, !tbaa !9
  %105 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 3
  %106 = load i32, ptr %105, align 8, !tbaa !22
  %107 = icmp sle i32 %104, %106
  br i1 %107, label %117, label %108

108:                                              ; preds = %103
  store i32 2, ptr %13, align 4
  br label %518

109:                                              ; preds = %90
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %16, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %17, align 4
  call void @_ZNSt15__new_allocatorIN4sptk22StatisticsAccumulation6BufferEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #6
  br label %555

113:                                              ; preds = %94
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %16, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %17, align 4
  br label %554

117:                                              ; preds = %103
  %118 = load ptr, ptr %9, align 8, !tbaa !5
  %119 = load i32, ptr %20, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  invoke void @_ZNSt6vectorIS_IdSaIdEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %120)
          to label %121 unwind label %135

121:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %122 = load ptr, ptr %9, align 8, !tbaa !5
  %123 = call ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %122) #6
  %124 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %22, i32 0, i32 0
  store ptr %123, ptr %124, align 8
  %125 = load i32, ptr %19, align 4, !tbaa !9
  %126 = sext i32 %125 to i64
  %127 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %22, i64 noundef %126) #6
  %128 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %21, i32 0, i32 0
  store ptr %127, ptr %128, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %129

129:                                              ; preds = %146, %121
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %130 = load ptr, ptr %9, align 8, !tbaa !5
  %131 = call ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %130) #6
  %132 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %23, i32 0, i32 0
  store ptr %131, ptr %132, align 8
  %133 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br i1 %133, label %139, label %134

134:                                              ; preds = %129
  store i32 5, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %152

135:                                              ; preds = %117
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %16, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %17, align 4
  br label %520

139:                                              ; preds = %129
  %140 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #6
  %141 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 1
  %142 = load i32, ptr %141, align 8, !tbaa !26
  %143 = add nsw i32 %142, 1
  %144 = sext i32 %143 to i64
  invoke void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %140, i64 noundef %144)
          to label %145 unwind label %148

145:                                              ; preds = %139
  br label %146

146:                                              ; preds = %145
  %147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #6
  br label %129, !llvm.loop !27

148:                                              ; preds = %139
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %16, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  br label %520

152:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %224, %152
  %154 = load i32, ptr %24, align 4, !tbaa !9
  %155 = load i32, ptr %19, align 4, !tbaa !9
  %156 = icmp slt i32 %154, %155
  br i1 %156, label %158, label %157

157:                                              ; preds = %153
  store i32 8, ptr %13, align 4
  br label %227

158:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %159

159:                                              ; preds = %218, %158
  %160 = load i32, ptr %25, align 4, !tbaa !9
  %161 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 1
  %162 = load i32, ptr %161, align 8, !tbaa !26
  %163 = icmp sle i32 %160, %162
  br i1 %163, label %165, label %164

164:                                              ; preds = %159
  store i32 11, ptr %13, align 4
  br label %221

165:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %166 = invoke noundef zeroext i1 @_ZN4sptk38NormalDistributedRandomValueGeneration3GetEPd(ptr noundef nonnull align 8 dereferenceable(56) %18, ptr noundef %26)
          to label %167 unwind label %169

167:                                              ; preds = %165
  br i1 %166, label %173, label %168

168:                                              ; preds = %167
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %215

169:                                              ; preds = %165
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %16, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %520

173:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %174 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 8
  %175 = load double, ptr %174, align 8, !tbaa !29
  %176 = load double, ptr %26, align 8, !tbaa !25
  %177 = fmul double %175, %176
  store double %177, ptr %27, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  %178 = load i32, ptr %24, align 4, !tbaa !9
  %179 = load i32, ptr %19, align 4, !tbaa !9
  %180 = add nsw i32 %178, %179
  store i32 %180, ptr %28, align 4, !tbaa !9
  %181 = load ptr, ptr %9, align 8, !tbaa !5
  %182 = load i32, ptr %24, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %181, i64 noundef %183) #6
  %185 = load i32, ptr %25, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %184, i64 noundef %186) #6
  %188 = load double, ptr %187, align 8, !tbaa !25
  %189 = load double, ptr %27, align 8, !tbaa !25
  %190 = fsub double %188, %189
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = load i32, ptr %28, align 4, !tbaa !9
  %193 = sext i32 %192 to i64
  %194 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %191, i64 noundef %193) #6
  %195 = load i32, ptr %25, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %194, i64 noundef %196) #6
  store double %190, ptr %197, align 8, !tbaa !25
  %198 = load ptr, ptr %9, align 8, !tbaa !5
  %199 = load i32, ptr %24, align 4, !tbaa !9
  %200 = sext i32 %199 to i64
  %201 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %198, i64 noundef %200) #6
  %202 = load i32, ptr %25, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %201, i64 noundef %203) #6
  %205 = load double, ptr %204, align 8, !tbaa !25
  %206 = load double, ptr %27, align 8, !tbaa !25
  %207 = fadd double %205, %206
  %208 = load ptr, ptr %9, align 8, !tbaa !5
  %209 = load i32, ptr %24, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %208, i64 noundef %210) #6
  %212 = load i32, ptr %25, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %211, i64 noundef %213) #6
  store double %207, ptr %214, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  store i32 0, ptr %13, align 4
  br label %215

215:                                              ; preds = %173, %168
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  %216 = load i32, ptr %13, align 4
  switch i32 %216, label %221 [
    i32 0, label %217
  ]

217:                                              ; preds = %215
  br label %218

218:                                              ; preds = %217
  %219 = load i32, ptr %25, align 4, !tbaa !9
  %220 = add nsw i32 %219, 1
  store i32 %220, ptr %25, align 4, !tbaa !9
  br label %159, !llvm.loop !30

221:                                              ; preds = %215, %164
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  %222 = load i32, ptr %13, align 4
  switch i32 %222, label %227 [
    i32 11, label %223
  ]

223:                                              ; preds = %221
  br label %224

224:                                              ; preds = %223
  %225 = load i32, ptr %24, align 4, !tbaa !9
  %226 = add nsw i32 %225, 1
  store i32 %226, ptr %24, align 4, !tbaa !9
  br label %153, !llvm.loop !31

227:                                              ; preds = %221, %157
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  %228 = load i32, ptr %13, align 4
  switch i32 %228, label %518 [
    i32 8, label %229
  ]

229:                                              ; preds = %227
  %230 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %230, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  store double 0x7FEFFFFFFFFFFFFF, ptr %29, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %231

231:                                              ; preds = %504, %229
  %232 = load i32, ptr %30, align 4, !tbaa !9
  %233 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 5
  %234 = load i32, ptr %233, align 8, !tbaa !32
  %235 = icmp slt i32 %232, %234
  br i1 %235, label %237, label %236

236:                                              ; preds = %231
  store i32 14, ptr %13, align 4
  br label %509

237:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  store double 0.000000e+00, ptr %31, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %238

238:                                              ; preds = %249, %237
  %239 = load i32, ptr %32, align 4, !tbaa !9
  %240 = load i32, ptr %19, align 4, !tbaa !9
  %241 = icmp slt i32 %239, %240
  br i1 %241, label %243, label %242

242:                                              ; preds = %238
  store i32 17, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %256

243:                                              ; preds = %238
  %244 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 12
  %245 = load i32, ptr %32, align 4, !tbaa !9
  %246 = sext i32 %245 to i64
  %247 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %246) #6
  invoke void @_ZNK4sptk22StatisticsAccumulation5ClearEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19) %244, ptr noundef %247)
          to label %248 unwind label %252

248:                                              ; preds = %243
  br label %249

249:                                              ; preds = %248
  %250 = load i32, ptr %32, align 4, !tbaa !9
  %251 = add nsw i32 %250, 1
  store i32 %251, ptr %32, align 4, !tbaa !9
  br label %238, !llvm.loop !33

252:                                              ; preds = %243
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %16, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %508

256:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %257

257:                                              ; preds = %318, %256
  %258 = load i32, ptr %33, align 4, !tbaa !9
  %259 = load i32, ptr %12, align 4, !tbaa !9
  %260 = icmp slt i32 %258, %259
  br i1 %260, label %262, label %261

261:                                              ; preds = %257
  store i32 20, ptr %13, align 4
  br label %322

262:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %263 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 13
  %264 = load ptr, ptr %8, align 8, !tbaa !5
  %265 = load i32, ptr %33, align 4, !tbaa !9
  %266 = sext i32 %265 to i64
  %267 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %264, i64 noundef %266) #6
  %268 = load ptr, ptr %9, align 8, !tbaa !5
  %269 = invoke noundef zeroext i1 @_ZNK4sptk18VectorQuantization3RunERKSt6vectorIdSaIdEERKS1_IS3_SaIS3_EEPi(ptr noundef nonnull align 8 dereferenceable(41) %263, ptr noundef nonnull align 8 dereferenceable(24) %267, ptr noundef nonnull align 8 dereferenceable(24) %268, ptr noundef %34)
          to label %270 unwind label %272

270:                                              ; preds = %262
  br i1 %269, label %276, label %271

271:                                              ; preds = %270
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %315

272:                                              ; preds = %276, %262
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %16, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %17, align 4
  br label %321

276:                                              ; preds = %270
  %277 = load i32, ptr %34, align 4, !tbaa !9
  %278 = load ptr, ptr %10, align 8, !tbaa !5
  %279 = load i32, ptr %33, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %278, i64 noundef %280) #6
  store i32 %277, ptr %281, align 4, !tbaa !9
  %282 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 12
  %283 = load ptr, ptr %8, align 8, !tbaa !5
  %284 = load i32, ptr %33, align 4, !tbaa !9
  %285 = sext i32 %284 to i64
  %286 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %283, i64 noundef %285) #6
  %287 = load i32, ptr %34, align 4, !tbaa !9
  %288 = sext i32 %287 to i64
  %289 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %288) #6
  %290 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation3RunERKSt6vectorIdSaIdEEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19) %282, ptr noundef nonnull align 8 dereferenceable(24) %286, ptr noundef %289)
          to label %291 unwind label %272

291:                                              ; preds = %276
  br i1 %290, label %293, label %292

292:                                              ; preds = %291
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %315

293:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %294 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 11
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  %296 = load i32, ptr %33, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %295, i64 noundef %297) #6
  %299 = load ptr, ptr %9, align 8, !tbaa !5
  %300 = load i32, ptr %34, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %299, i64 noundef %301) #6
  %303 = invoke noundef zeroext i1 @_ZNK4sptk19DistanceCalculation3RunERKSt6vectorIdSaIdEES5_Pd(ptr noundef nonnull align 8 dereferenceable(17) %294, ptr noundef nonnull align 8 dereferenceable(24) %298, ptr noundef nonnull align 8 dereferenceable(24) %302, ptr noundef %35)
          to label %304 unwind label %306

304:                                              ; preds = %293
  br i1 %303, label %310, label %305

305:                                              ; preds = %304
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %314

306:                                              ; preds = %293
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %16, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %321

310:                                              ; preds = %304
  %311 = load double, ptr %35, align 8, !tbaa !25
  %312 = load double, ptr %31, align 8, !tbaa !25
  %313 = fadd double %312, %311
  store double %313, ptr %31, align 8, !tbaa !25
  store i32 0, ptr %13, align 4
  br label %314

314:                                              ; preds = %310, %305
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %315

315:                                              ; preds = %314, %292, %271
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  %316 = load i32, ptr %13, align 4
  switch i32 %316, label %322 [
    i32 0, label %317
  ]

317:                                              ; preds = %315
  br label %318

318:                                              ; preds = %317
  %319 = load i32, ptr %33, align 4, !tbaa !9
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %33, align 4, !tbaa !9
  br label %257, !llvm.loop !34

321:                                              ; preds = %306, %272
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  br label %508

322:                                              ; preds = %315, %261
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  %323 = load i32, ptr %13, align 4
  switch i32 %323, label %501 [
    i32 20, label %324
  ]

324:                                              ; preds = %322
  %325 = load double, ptr %31, align 8, !tbaa !25
  %326 = load i32, ptr %12, align 4, !tbaa !9
  %327 = sitofp i32 %326 to double
  %328 = fdiv double %325, %327
  %329 = load ptr, ptr %11, align 8, !tbaa !5
  store double %328, ptr %329, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %330 = load double, ptr %29, align 8, !tbaa !25
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = load double, ptr %331, align 8, !tbaa !25
  %333 = fsub double %330, %332
  %334 = call double @llvm.fabs.f64(double %333)
  %335 = load ptr, ptr %11, align 8, !tbaa !5
  %336 = load double, ptr %335, align 8, !tbaa !25
  %337 = fdiv double %334, %336
  store double %337, ptr %36, align 8, !tbaa !25
  %338 = load ptr, ptr %11, align 8, !tbaa !5
  %339 = load double, ptr %338, align 8, !tbaa !25
  %340 = fcmp oeq double 0.000000e+00, %339
  br i1 %340, label %346, label %341

341:                                              ; preds = %324
  %342 = load double, ptr %36, align 8, !tbaa !25
  %343 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 7
  %344 = load double, ptr %343, align 8, !tbaa !35
  %345 = fcmp olt double %342, %344
  br i1 %345, label %346, label %347

346:                                              ; preds = %341, %324
  store i32 14, ptr %13, align 4
  br label %500

347:                                              ; preds = %341
  %348 = load ptr, ptr %11, align 8, !tbaa !5
  %349 = load double, ptr %348, align 8, !tbaa !25
  store double %349, ptr %29, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  store i32 -1, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  store i32 0, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %350

350:                                              ; preds = %396, %347
  %351 = load i32, ptr %39, align 4, !tbaa !9
  %352 = load i32, ptr %19, align 4, !tbaa !9
  %353 = icmp slt i32 %351, %352
  br i1 %353, label %355, label %354

354:                                              ; preds = %350
  store i32 23, ptr %13, align 4
  br label %399

355:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  %356 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 12
  %357 = load i32, ptr %39, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %358) #6
  %360 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation10GetNumDataERKNS0_6BufferEPi(ptr noundef nonnull align 8 dereferenceable(19) %356, ptr noundef nonnull align 8 dereferenceable(128) %359, ptr noundef %40)
          to label %361 unwind label %363

361:                                              ; preds = %355
  br i1 %360, label %367, label %362

362:                                              ; preds = %361
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %393

363:                                              ; preds = %379, %355
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %16, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  br label %507

367:                                              ; preds = %361
  %368 = load i32, ptr %38, align 4, !tbaa !9
  %369 = load i32, ptr %40, align 4, !tbaa !9
  %370 = icmp slt i32 %368, %369
  br i1 %370, label %371, label %374

371:                                              ; preds = %367
  %372 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %372, ptr %37, align 4, !tbaa !9
  %373 = load i32, ptr %40, align 4, !tbaa !9
  store i32 %373, ptr %38, align 4, !tbaa !9
  br label %374

374:                                              ; preds = %371, %367
  %375 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 4
  %376 = load i32, ptr %375, align 4, !tbaa !21
  %377 = load i32, ptr %40, align 4, !tbaa !9
  %378 = icmp sle i32 %376, %377
  br i1 %378, label %379, label %392

379:                                              ; preds = %374
  %380 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 12
  %381 = load i32, ptr %39, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %382) #6
  %384 = load ptr, ptr %9, align 8, !tbaa !5
  %385 = load i32, ptr %39, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %384, i64 noundef %386) #6
  %388 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation7GetMeanERKNS0_6BufferEPSt6vectorIdSaIdEE(ptr noundef nonnull align 8 dereferenceable(19) %380, ptr noundef nonnull align 8 dereferenceable(128) %383, ptr noundef %387)
          to label %389 unwind label %363

389:                                              ; preds = %379
  br i1 %388, label %391, label %390

390:                                              ; preds = %389
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %393

391:                                              ; preds = %389
  br label %392

392:                                              ; preds = %391, %374
  store i32 0, ptr %13, align 4
  br label %393

393:                                              ; preds = %392, %390, %362
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  %394 = load i32, ptr %13, align 4
  switch i32 %394, label %399 [
    i32 0, label %395
  ]

395:                                              ; preds = %393
  br label %396

396:                                              ; preds = %395
  %397 = load i32, ptr %39, align 4, !tbaa !9
  %398 = add nsw i32 %397, 1
  store i32 %398, ptr %39, align 4, !tbaa !9
  br label %350, !llvm.loop !36

399:                                              ; preds = %393, %354
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  %400 = load i32, ptr %13, align 4
  switch i32 %400, label %499 [
    i32 23, label %401
  ]

401:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %402

402:                                              ; preds = %492, %401
  %403 = load i32, ptr %41, align 4, !tbaa !9
  %404 = load i32, ptr %19, align 4, !tbaa !9
  %405 = icmp slt i32 %403, %404
  br i1 %405, label %407, label %406

406:                                              ; preds = %402
  store i32 26, ptr %13, align 4
  br label %496

407:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  %408 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 12
  %409 = load i32, ptr %41, align 4, !tbaa !9
  %410 = sext i32 %409 to i64
  %411 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %410) #6
  %412 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation10GetNumDataERKNS0_6BufferEPi(ptr noundef nonnull align 8 dereferenceable(19) %408, ptr noundef nonnull align 8 dereferenceable(128) %411, ptr noundef %42)
          to label %413 unwind label %415

413:                                              ; preds = %407
  br i1 %412, label %419, label %414

414:                                              ; preds = %413
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %489

415:                                              ; preds = %407
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %16, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %17, align 4
  br label %495

419:                                              ; preds = %413
  %420 = load i32, ptr %42, align 4, !tbaa !9
  %421 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 4
  %422 = load i32, ptr %421, align 4, !tbaa !21
  %423 = icmp slt i32 %420, %422
  br i1 %423, label %424, label %488

424:                                              ; preds = %419
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %425

425:                                              ; preds = %482, %424
  %426 = load i32, ptr %43, align 4, !tbaa !9
  %427 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 1
  %428 = load i32, ptr %427, align 8, !tbaa !26
  %429 = icmp sle i32 %426, %428
  br i1 %429, label %431, label %430

430:                                              ; preds = %425
  store i32 29, ptr %13, align 4
  br label %485

431:                                              ; preds = %425
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %432 = invoke noundef zeroext i1 @_ZN4sptk38NormalDistributedRandomValueGeneration3GetEPd(ptr noundef nonnull align 8 dereferenceable(56) %18, ptr noundef %44)
          to label %433 unwind label %435

433:                                              ; preds = %431
  br i1 %432, label %439, label %434

434:                                              ; preds = %433
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %479

435:                                              ; preds = %431
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %16, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  br label %495

439:                                              ; preds = %433
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %440 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 8
  %441 = load double, ptr %440, align 8, !tbaa !29
  %442 = load double, ptr %44, align 8, !tbaa !25
  %443 = fmul double %441, %442
  store double %443, ptr %45, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  %444 = load i32, ptr %37, align 4, !tbaa !9
  store i32 %444, ptr %46, align 4, !tbaa !9
  %445 = load ptr, ptr %9, align 8, !tbaa !5
  %446 = load i32, ptr %46, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %445, i64 noundef %447) #6
  %449 = load i32, ptr %43, align 4, !tbaa !9
  %450 = sext i32 %449 to i64
  %451 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %448, i64 noundef %450) #6
  %452 = load double, ptr %451, align 8, !tbaa !25
  %453 = load double, ptr %45, align 8, !tbaa !25
  %454 = fsub double %452, %453
  %455 = load ptr, ptr %9, align 8, !tbaa !5
  %456 = load i32, ptr %41, align 4, !tbaa !9
  %457 = sext i32 %456 to i64
  %458 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %455, i64 noundef %457) #6
  %459 = load i32, ptr %43, align 4, !tbaa !9
  %460 = sext i32 %459 to i64
  %461 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %458, i64 noundef %460) #6
  store double %454, ptr %461, align 8, !tbaa !25
  %462 = load ptr, ptr %9, align 8, !tbaa !5
  %463 = load i32, ptr %46, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %462, i64 noundef %464) #6
  %466 = load i32, ptr %43, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %465, i64 noundef %467) #6
  %469 = load double, ptr %468, align 8, !tbaa !25
  %470 = load double, ptr %45, align 8, !tbaa !25
  %471 = fadd double %469, %470
  %472 = load ptr, ptr %9, align 8, !tbaa !5
  %473 = load i32, ptr %46, align 4, !tbaa !9
  %474 = sext i32 %473 to i64
  %475 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %472, i64 noundef %474) #6
  %476 = load i32, ptr %43, align 4, !tbaa !9
  %477 = sext i32 %476 to i64
  %478 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %475, i64 noundef %477) #6
  store double %471, ptr %478, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  store i32 0, ptr %13, align 4
  br label %479

479:                                              ; preds = %439, %434
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  %480 = load i32, ptr %13, align 4
  switch i32 %480, label %485 [
    i32 0, label %481
  ]

481:                                              ; preds = %479
  br label %482

482:                                              ; preds = %481
  %483 = load i32, ptr %43, align 4, !tbaa !9
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr %43, align 4, !tbaa !9
  br label %425, !llvm.loop !37

485:                                              ; preds = %479, %430
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  %486 = load i32, ptr %13, align 4
  switch i32 %486, label %489 [
    i32 29, label %487
  ]

487:                                              ; preds = %485
  br label %488

488:                                              ; preds = %487, %419
  store i32 0, ptr %13, align 4
  br label %489

489:                                              ; preds = %488, %485, %414
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  %490 = load i32, ptr %13, align 4
  switch i32 %490, label %496 [
    i32 0, label %491
  ]

491:                                              ; preds = %489
  br label %492

492:                                              ; preds = %491
  %493 = load i32, ptr %41, align 4, !tbaa !9
  %494 = add nsw i32 %493, 1
  store i32 %494, ptr %41, align 4, !tbaa !9
  br label %402, !llvm.loop !38

495:                                              ; preds = %435, %415
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  br label %507

496:                                              ; preds = %489, %406
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  %497 = load i32, ptr %13, align 4
  switch i32 %497, label %499 [
    i32 26, label %498
  ]

498:                                              ; preds = %496
  store i32 0, ptr %13, align 4
  br label %499

499:                                              ; preds = %498, %496, %399
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %500

500:                                              ; preds = %499, %346
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %501

501:                                              ; preds = %500, %322
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  %502 = load i32, ptr %13, align 4
  switch i32 %502, label %509 [
    i32 0, label %503
  ]

503:                                              ; preds = %501
  br label %504

504:                                              ; preds = %503
  %505 = load i32, ptr %30, align 4, !tbaa !9
  %506 = add nsw i32 %505, 1
  store i32 %506, ptr %30, align 4, !tbaa !9
  br label %231, !llvm.loop !39

507:                                              ; preds = %495, %363
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %508

508:                                              ; preds = %507, %321, %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %520

509:                                              ; preds = %501, %236
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  %510 = load i32, ptr %13, align 4
  switch i32 %510, label %512 [
    i32 14, label %511
  ]

511:                                              ; preds = %509
  store i32 0, ptr %13, align 4
  br label %512

512:                                              ; preds = %511, %509
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  %513 = load i32, ptr %13, align 4
  switch i32 %513, label %518 [
    i32 0, label %514
  ]

514:                                              ; preds = %512
  br label %515

515:                                              ; preds = %514
  %516 = load i32, ptr %20, align 4, !tbaa !9
  %517 = mul nsw i32 %516, 2
  store i32 %517, ptr %20, align 4, !tbaa !9
  br label %103, !llvm.loop !40

518:                                              ; preds = %512, %227, %108
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  %519 = load i32, ptr %13, align 4
  switch i32 %519, label %552 [
    i32 2, label %521
  ]

520:                                              ; preds = %508, %169, %148, %135
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %553

521:                                              ; preds = %518
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %522

522:                                              ; preds = %546, %521
  %523 = load i32, ptr %47, align 4, !tbaa !9
  %524 = load i32, ptr %12, align 4, !tbaa !9
  %525 = icmp slt i32 %523, %524
  br i1 %525, label %527, label %526

526:                                              ; preds = %522
  store i32 32, ptr %13, align 4
  br label %549

527:                                              ; preds = %522
  %528 = getelementptr inbounds %"class.sptk::LindeBuzoGrayAlgorithm", ptr %48, i32 0, i32 13
  %529 = load ptr, ptr %8, align 8, !tbaa !5
  %530 = load i32, ptr %47, align 4, !tbaa !9
  %531 = sext i32 %530 to i64
  %532 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %529, i64 noundef %531) #6
  %533 = load ptr, ptr %9, align 8, !tbaa !5
  %534 = load ptr, ptr %10, align 8, !tbaa !5
  %535 = load i32, ptr %47, align 4, !tbaa !9
  %536 = sext i32 %535 to i64
  %537 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %534, i64 noundef %536) #6
  %538 = invoke noundef zeroext i1 @_ZNK4sptk18VectorQuantization3RunERKSt6vectorIdSaIdEERKS1_IS3_SaIS3_EEPi(ptr noundef nonnull align 8 dereferenceable(41) %528, ptr noundef nonnull align 8 dereferenceable(24) %532, ptr noundef nonnull align 8 dereferenceable(24) %533, ptr noundef %537)
          to label %539 unwind label %541

539:                                              ; preds = %527
  br i1 %538, label %545, label %540

540:                                              ; preds = %539
  store i1 false, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %549

541:                                              ; preds = %527
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %16, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  br label %553

545:                                              ; preds = %539
  br label %546

546:                                              ; preds = %545
  %547 = load i32, ptr %47, align 4, !tbaa !9
  %548 = add nsw i32 %547, 1
  store i32 %548, ptr %47, align 4, !tbaa !9
  br label %522, !llvm.loop !41

549:                                              ; preds = %540, %526
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  %550 = load i32, ptr %13, align 4
  switch i32 %550, label %552 [
    i32 32, label %551
  ]

551:                                              ; preds = %549
  store i1 true, ptr %6, align 1
  store i32 1, ptr %13, align 4
  br label %552

552:                                              ; preds = %551, %549, %518
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @_ZN4sptk25RandomGenerationInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %18) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr %18) #6
  call void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #6
  br label %556

553:                                              ; preds = %541, %520
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @_ZN4sptk25RandomGenerationInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %18) #6
  br label %554

554:                                              ; preds = %553, %113
  call void @llvm.lifetime.end.p0(i64 56, ptr %18) #6
  call void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  br label %555

555:                                              ; preds = %554, %109
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  br label %558

556:                                              ; preds = %552, %79
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  %557 = load i1, ptr %6, align 1
  ret i1 %557

558:                                              ; preds = %555
  %559 = load ptr, ptr %16, align 8
  %560 = load i32, ptr %17, align 4
  %561 = insertvalue { ptr, i32 } poison, ptr %559, 0
  %562 = insertvalue { ptr, i32 } %561, i32 %560, 1
  resume { ptr, i32 } %562
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIN4sptk22StatisticsAccumulation6BufferEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

declare void @_ZN4sptk38NormalDistributedRandomValueGenerationC1Ei(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_IdSaIdEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

declare noundef zeroext i1 @_ZN4sptk38NormalDistributedRandomValueGeneration3GetEPd(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

declare void @_ZNK4sptk22StatisticsAccumulation5ClearEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

declare noundef zeroext i1 @_ZNK4sptk18VectorQuantization3RunERKSt6vectorIdSaIdEERKS1_IS3_SaIS3_EEPi(ptr noundef nonnull align 8 dereferenceable(41), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

declare noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation3RunERKSt6vectorIdSaIdEEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #3

declare noundef zeroext i1 @_ZNK4sptk19DistanceCalculation3RunERKSt6vectorIdSaIdEES5_Pd(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #5

declare noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation10GetNumDataERKNS0_6BufferEPi(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) #3

declare noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation7GetMeanERKNS0_6BufferEPSt6vectorIdSaIdEE(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIN4sptk22StatisticsAccumulation6BufferEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

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

!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, !16, i64 152}
!12 = !{!"_ZTSN4sptk22LindeBuzoGrayAlgorithmE", !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !13, i64 32, !13, i64 40, !10, i64 48, !14, i64 56, !17, i64 80, !18, i64 104, !16, i64 152}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTSN4sptk19DistanceCalculationE", !10, i64 8, !15, i64 12, !16, i64 16}
!15 = !{!"_ZTSN4sptk19DistanceCalculation15DistanceMetricsE", !7, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = !{!"_ZTSN4sptk22StatisticsAccumulationE", !10, i64 8, !10, i64 12, !16, i64 16, !16, i64 17, !16, i64 18}
!18 = !{!"_ZTSN4sptk18VectorQuantizationE", !10, i64 8, !14, i64 16, !16, i64 40}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!12, !10, i64 20}
!22 = !{!12, !10, i64 16}
!23 = !{!12, !10, i64 12}
!24 = !{!12, !10, i64 48}
!25 = !{!13, !13, i64 0}
!26 = !{!12, !10, i64 8}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!12, !13, i64 40}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}
!32 = !{!12, !10, i64 24}
!33 = distinct !{!33, !28}
!34 = distinct !{!34, !28}
!35 = !{!12, !13, i64 32}
!36 = distinct !{!36, !28}
!37 = distinct !{!37, !28}
!38 = distinct !{!38, !28}
!39 = distinct !{!39, !28}
!40 = distinct !{!40, !28}
!41 = distinct !{!41, !28}


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

%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl" }
%"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl" = type { %"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl_data" }
%"struct.std::_Vector_base<sptk::StatisticsAccumulation::Buffer, std::allocator<sptk::StatisticsAccumulation::Buffer>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.7" = type { i8 }
%"class.sptk::NormalDistributedRandomValueGeneration" = type { %"class.sptk::RandomGenerationInterface", i32, i64, i8, double, double, double }
%"class.sptk::RandomGenerationInterface" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK4sptk22LindeBuzoGrayAlgorithm3RunERKSt6vectorIS1_IdSaIdEESaIS3_EEPS5_PS1_IiSaIiEEPd(ptr noundef nonnull align 8 dereferenceable(153) %0, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef %2, ptr noundef %3, ptr noundef writeonly %4) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::vector.5", align 8
  %7 = alloca %"class.std::allocator.7", align 1
  %8 = alloca %"class.sptk::NormalDistributedRandomValueGeneration", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca double, align 8
  %13 = alloca i32, align 4
  %14 = alloca double, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca double, align 8
  %18 = tail call noundef i64 @_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #7
  %19 = trunc i64 %18 to i32
  %20 = getelementptr inbounds i8, ptr %0, i64 152
  %21 = load i8, ptr %20, align 8, !tbaa !5, !range !16, !noundef !17
  %22 = trunc nuw i8 %21 to i1
  br i1 %22, label %23, label %224

23:                                               ; preds = %5
  %24 = getelementptr inbounds i8, ptr %0, i64 20
  %25 = load i32, ptr %24, align 4, !tbaa !18
  %26 = getelementptr inbounds i8, ptr %0, i64 16
  %27 = load i32, ptr %26, align 8, !tbaa !19
  %28 = mul nsw i32 %27, %25
  %29 = icmp sgt i32 %28, %19
  %30 = icmp eq ptr %2, null
  %or.cond = or i1 %30, %29
  %31 = icmp eq ptr %3, null
  %or.cond18 = or i1 %31, %or.cond
  %32 = icmp eq ptr %4, null
  %or.cond20 = or i1 %32, %or.cond18
  br i1 %or.cond20, label %224, label %33

33:                                               ; preds = %23
  %34 = tail call noundef i64 @_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  %35 = getelementptr inbounds i8, ptr %0, i64 12
  %36 = load i32, ptr %35, align 4, !tbaa !20
  %37 = sext i32 %36 to i64
  %.not = icmp eq i64 %34, %37
  br i1 %.not, label %38, label %224

38:                                               ; preds = %33
  %39 = tail call noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #7
  %sext = shl i64 %18, 32
  %40 = ashr exact i64 %sext, 32
  %.not214 = icmp eq i64 %39, %40
  br i1 %.not214, label %42, label %41

41:                                               ; preds = %38
  tail call void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %40)
  br label %42

42:                                               ; preds = %41, %38
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #7
  %43 = load i32, ptr %26, align 8, !tbaa !19
  %44 = sext i32 %43 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #7
  call void @_ZNSaIN4sptk22StatisticsAccumulation6BufferEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  invoke void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %44, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %45 unwind label %61

45:                                               ; preds = %42
  call void @_ZNSt15__new_allocatorIN4sptk22StatisticsAccumulation6BufferEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %8) #7
  %46 = getelementptr inbounds i8, ptr %0, i64 48
  %47 = load i32, ptr %46, align 8, !tbaa !21
  invoke void @_ZN4sptk38NormalDistributedRandomValueGenerationC1Ei(ptr noundef nonnull align 8 dereferenceable(56) %8, i32 noundef %47)
          to label %48 unwind label %63

48:                                               ; preds = %45
  store double 0x7FEFFFFFFFFFFFFF, ptr %4, align 8, !tbaa !22
  %49 = load i32, ptr %35, align 4, !tbaa !20
  %.0206316 = shl nsw i32 %49, 1
  %50 = load i32, ptr %26, align 8, !tbaa !19
  %.not215317 = icmp sgt i32 %.0206316, %50
  br i1 %.not215317, label %.preheader, label %.lr.ph321

.lr.ph321:                                        ; preds = %48
  %51 = getelementptr inbounds i8, ptr %0, i64 8
  %52 = getelementptr inbounds i8, ptr %0, i64 40
  %53 = getelementptr inbounds i8, ptr %0, i64 24
  %54 = getelementptr inbounds i8, ptr %0, i64 80
  %.not218295 = icmp sgt i32 %19, 0
  %55 = getelementptr inbounds i8, ptr %0, i64 104
  %56 = getelementptr inbounds i8, ptr %0, i64 56
  %57 = sitofp i32 %19 to double
  %58 = getelementptr inbounds i8, ptr %0, i64 32
  %wide.trip.count342 = and i64 %18, 2147483647
  br label %65

.preheader:                                       ; preds = %.thread266, %48
  %.not225322 = icmp slt i32 %19, 1
  br i1 %.not225322, label %.thread271, label %.lr.ph324

.lr.ph324:                                        ; preds = %.preheader
  %59 = getelementptr inbounds i8, ptr %0, i64 104
  %60 = and i64 %18, 2147483647
  %wide.trip.count360 = and i64 %18, 2147483647
  br label %214

61:                                               ; preds = %42
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIN4sptk22StatisticsAccumulation6BufferEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #7
  br label %223

63:                                               ; preds = %45
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %222

65:                                               ; preds = %.lr.ph321, %.thread266
  %.0206319 = phi i32 [ %.0206316, %.lr.ph321 ], [ %.0206, %.thread266 ]
  %.0203318 = phi i32 [ %49, %.lr.ph321 ], [ %.0206319, %.thread266 ]
  %66 = sext i32 %.0206319 to i64
  invoke void @_ZNSt6vectorIS_IdSaIdEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %66)
          to label %67 unwind label %77

67:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %68 = call ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  store ptr %68, ptr %10, align 8
  %69 = sext i32 %.0203318 to i64
  %70 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %10, i64 noundef %69) #7
  store ptr %70, ptr %9, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %71 = call ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  store ptr %71, ptr %11, align 8
  %72 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br i1 %72, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %83, %67
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  %73 = icmp sgt i32 %.0203318, 0
  br i1 %73, label %.preheader281.lr.ph, label %.preheader282

.preheader281.lr.ph:                              ; preds = %._crit_edge
  %74 = load i32, ptr %51, align 8, !tbaa !23
  %75 = icmp slt i32 %74, 0
  br i1 %75, label %.preheader282, label %.preheader281.preheader

.preheader281.preheader:                          ; preds = %.preheader281.lr.ph
  %76 = zext nneg i32 %.0203318 to i64
  br label %.preheader281

77:                                               ; preds = %65
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %221

.lr.ph:                                           ; preds = %67, %83
  %79 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #7
  %80 = load i32, ptr %51, align 8, !tbaa !23
  %81 = add nsw i32 %80, 1
  %82 = sext i32 %81 to i64
  invoke void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %79, i64 noundef %82)
          to label %83 unwind label %87

83:                                               ; preds = %.lr.ph
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %85 = call ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #7
  store ptr %85, ptr %11, align 8
  %86 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br i1 %86, label %.lr.ph, label %._crit_edge, !llvm.loop !24

87:                                               ; preds = %.lr.ph
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  br label %221

.preheader282:                                    ; preds = %._crit_edge291, %.preheader281.lr.ph, %._crit_edge
  %89 = load i32, ptr %53, align 8, !tbaa !26
  %90 = icmp sgt i32 %89, 0
  br i1 %90, label %.preheader280.lr.ph, label %.thread266

.preheader280.lr.ph:                              ; preds = %.preheader282
  %91 = icmp sgt i32 %.0206319, 0
  %wide.trip.count337 = zext nneg i32 %.0206319 to i64
  %wide.trip.count347 = zext nneg i32 %.0206319 to i64
  %wide.trip.count355 = zext nneg i32 %.0206319 to i64
  br label %.preheader280

.preheader281:                                    ; preds = %.preheader281.preheader, %._crit_edge291
  %92 = phi i32 [ %74, %.preheader281.preheader ], [ %117, %._crit_edge291 ]
  %indvars.iv331 = phi i64 [ 0, %.preheader281.preheader ], [ %indvars.iv.next332, %._crit_edge291 ]
  %.not216288 = icmp slt i32 %92, 0
  br i1 %.not216288, label %._crit_edge291, label %.lr.ph290

.lr.ph290:                                        ; preds = %.preheader281
  %93 = add nuw nsw i64 %indvars.iv331, %76
  br label %94

94:                                               ; preds = %.lr.ph290, %99
  %indvars.iv = phi i64 [ 0, %.lr.ph290 ], [ %indvars.iv.next, %99 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %95 = invoke noundef zeroext i1 @_ZN4sptk38NormalDistributedRandomValueGeneration3GetEPd(ptr noundef nonnull align 8 dereferenceable(56) %8, ptr noundef nonnull %12)
          to label %96 unwind label %97

96:                                               ; preds = %94
  br i1 %95, label %99, label %.thread238

97:                                               ; preds = %94
  %98 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br label %221

99:                                               ; preds = %96
  %100 = load double, ptr %52, align 8, !tbaa !27
  %101 = load double, ptr %12, align 8, !tbaa !22
  %102 = fmul double %100, %101
  %103 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv331) #7
  %104 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %103, i64 noundef %indvars.iv) #7
  %105 = load double, ptr %104, align 8, !tbaa !22
  %106 = fsub double %105, %102
  %107 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %93) #7
  %108 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %107, i64 noundef %indvars.iv) #7
  store double %106, ptr %108, align 8, !tbaa !22
  %109 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv331) #7
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %109, i64 noundef %indvars.iv) #7
  %111 = load double, ptr %110, align 8, !tbaa !22
  %112 = fadd double %102, %111
  %113 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv331) #7
  %114 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef %indvars.iv) #7
  store double %112, ptr %114, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %115 = load i32, ptr %51, align 8, !tbaa !23
  %116 = sext i32 %115 to i64
  %.not216.not = icmp slt i64 %indvars.iv, %116
  br i1 %.not216.not, label %94, label %._crit_edge291, !llvm.loop !28

.thread238:                                       ; preds = %96
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br label %.thread271

._crit_edge291:                                   ; preds = %99, %.preheader281
  %117 = phi i32 [ %92, %.preheader281 ], [ %115, %99 ]
  %indvars.iv.next332 = add nuw nsw i64 %indvars.iv331, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next332, %76
  br i1 %exitcond.not, label %.preheader282, label %.preheader281, !llvm.loop !29

.preheader280:                                    ; preds = %.preheader280.lr.ph, %._crit_edge311
  %.0191313 = phi i32 [ 0, %.preheader280.lr.ph ], [ %209, %._crit_edge311 ]
  %.0192312 = phi double [ 0x7FEFFFFFFFFFFFFF, %.preheader280.lr.ph ], [ %149, %._crit_edge311 ]
  br i1 %91, label %.lr.ph294, label %.preheader279

.preheader279:                                    ; preds = %119, %.preheader280
  br i1 %.not218295, label %.lr.ph298, label %._crit_edge299

.lr.ph294:                                        ; preds = %.preheader280, %119
  %indvars.iv334 = phi i64 [ %indvars.iv.next335, %119 ], [ 0, %.preheader280 ]
  %118 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv334) #7
  invoke void @_ZNK4sptk22StatisticsAccumulation5ClearEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19) %54, ptr noundef nonnull %118)
          to label %119 unwind label %120

119:                                              ; preds = %.lr.ph294
  %indvars.iv.next335 = add nuw nsw i64 %indvars.iv334, 1
  %exitcond338.not = icmp eq i64 %indvars.iv.next335, %wide.trip.count337
  br i1 %exitcond338.not, label %.preheader279, label %.lr.ph294, !llvm.loop !31

120:                                              ; preds = %.lr.ph294
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %221

.lr.ph298:                                        ; preds = %.preheader279, %146
  %indvars.iv339 = phi i64 [ %indvars.iv.next340, %146 ], [ 0, %.preheader279 ]
  %.0187296 = phi double [ %147, %146 ], [ 0.000000e+00, %.preheader279 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  %122 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv339) #7
  %123 = invoke noundef zeroext i1 @_ZNK4sptk18VectorQuantization3RunERKSt6vectorIdSaIdEERKS1_IS3_SaIS3_EEPi(ptr noundef nonnull align 8 dereferenceable(41) %55, ptr noundef nonnull align 8 dereferenceable(24) %122, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull %13)
          to label %124 unwind label %125

124:                                              ; preds = %.lr.ph298
  br i1 %123, label %127, label %.thread245

125:                                              ; preds = %127, %.lr.ph298
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %148

127:                                              ; preds = %124
  %128 = load i32, ptr %13, align 4, !tbaa !32
  %129 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %indvars.iv339) #7
  store i32 %128, ptr %129, align 4, !tbaa !32
  %130 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv339) #7
  %131 = load i32, ptr %13, align 4, !tbaa !32
  %132 = sext i32 %131 to i64
  %133 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %132) #7
  %134 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation3RunERKSt6vectorIdSaIdEEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19) %54, ptr noundef nonnull align 8 dereferenceable(24) %130, ptr noundef nonnull %133)
          to label %135 unwind label %125

135:                                              ; preds = %127
  br i1 %134, label %136, label %.thread245

136:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %137 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv339) #7
  %138 = load i32, ptr %13, align 4, !tbaa !32
  %139 = sext i32 %138 to i64
  %140 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %139) #7
  %141 = invoke noundef zeroext i1 @_ZNK4sptk19DistanceCalculation3RunERKSt6vectorIdSaIdEES5_Pd(ptr noundef nonnull align 8 dereferenceable(17) %56, ptr noundef nonnull align 8 dereferenceable(24) %137, ptr noundef nonnull align 8 dereferenceable(24) %140, ptr noundef nonnull %14)
          to label %142 unwind label %144

142:                                              ; preds = %136
  %143 = load double, ptr %14, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br i1 %141, label %146, label %.thread245

144:                                              ; preds = %136
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br label %148

.thread245:                                       ; preds = %135, %124, %142
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br label %.thread271

146:                                              ; preds = %142
  %147 = fadd double %.0187296, %143
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  %indvars.iv.next340 = add nuw nsw i64 %indvars.iv339, 1
  %exitcond343.not = icmp eq i64 %indvars.iv.next340, %wide.trip.count342
  br i1 %exitcond343.not, label %._crit_edge299, label %.lr.ph298, !llvm.loop !33

148:                                              ; preds = %144, %125
  %.pn = phi { ptr, i32 } [ %145, %144 ], [ %126, %125 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br label %221

._crit_edge299:                                   ; preds = %146, %.preheader279
  %.0187.lcssa = phi double [ 0.000000e+00, %.preheader279 ], [ %147, %146 ]
  %149 = fdiv double %.0187.lcssa, %57
  store double %149, ptr %4, align 8, !tbaa !22
  %150 = fcmp oeq double %149, 0.000000e+00
  br i1 %150, label %.thread266, label %151

151:                                              ; preds = %._crit_edge299
  %152 = fsub double %.0192312, %149
  %153 = call double @llvm.fabs.f64(double %152)
  %154 = fdiv double %153, %149
  %155 = load double, ptr %58, align 8, !tbaa !34
  %156 = fcmp olt double %154, %155
  br i1 %156, label %.thread266, label %.preheader278

.preheader278:                                    ; preds = %151
  br i1 %91, label %.lr.ph304, label %._crit_edge311

.preheader277:                                    ; preds = %173
  br i1 %91, label %.lr.ph310, label %._crit_edge311

.lr.ph310:                                        ; preds = %.preheader277
  %157 = sext i32 %spec.select to i64
  br label %174

.lr.ph304:                                        ; preds = %.preheader278, %173
  %indvars.iv344 = phi i64 [ %indvars.iv.next345, %173 ], [ 0, %.preheader278 ]
  %.0170302 = phi i32 [ %spec.select233, %173 ], [ 0, %.preheader278 ]
  %.0173301 = phi i32 [ %spec.select, %173 ], [ -1, %.preheader278 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #7
  %158 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv344) #7
  %159 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation10GetNumDataERKNS0_6BufferEPi(ptr noundef nonnull align 8 dereferenceable(19) %54, ptr noundef nonnull align 8 dereferenceable(128) %158, ptr noundef nonnull %15)
          to label %160 unwind label %161

160:                                              ; preds = %.lr.ph304
  br i1 %159, label %163, label %.thread253

161:                                              ; preds = %168, %.lr.ph304
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  br label %221

163:                                              ; preds = %160
  %164 = load i32, ptr %15, align 4, !tbaa !32
  %165 = icmp slt i32 %.0170302, %164
  %166 = trunc nuw nsw i64 %indvars.iv344 to i32
  %spec.select = select i1 %165, i32 %166, i32 %.0173301
  %spec.select233 = call i32 @llvm.smax.i32(i32 %.0170302, i32 %164)
  %167 = load i32, ptr %24, align 4, !tbaa !18
  %.not219 = icmp sgt i32 %167, %164
  br i1 %.not219, label %173, label %168

168:                                              ; preds = %163
  %169 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv344) #7
  %170 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv344) #7
  %171 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation7GetMeanERKNS0_6BufferEPSt6vectorIdSaIdEE(ptr noundef nonnull align 8 dereferenceable(19) %54, ptr noundef nonnull align 8 dereferenceable(128) %169, ptr noundef nonnull %170)
          to label %172 unwind label %161

172:                                              ; preds = %168
  br i1 %171, label %173, label %.thread253

.thread253:                                       ; preds = %172, %160
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  br label %.thread271

173:                                              ; preds = %172, %163
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  %indvars.iv.next345 = add nuw nsw i64 %indvars.iv344, 1
  %exitcond348.not = icmp eq i64 %indvars.iv.next345, %wide.trip.count347
  br i1 %exitcond348.not, label %.preheader277, label %.lr.ph304, !llvm.loop !35

174:                                              ; preds = %.lr.ph310, %.thread256
  %indvars.iv352 = phi i64 [ 0, %.lr.ph310 ], [ %indvars.iv.next353, %.thread256 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  %175 = call noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %6, i64 noundef %indvars.iv352) #7
  %176 = invoke noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation10GetNumDataERKNS0_6BufferEPi(ptr noundef nonnull align 8 dereferenceable(19) %54, ptr noundef nonnull align 8 dereferenceable(128) %175, ptr noundef nonnull %16)
          to label %177 unwind label %178

177:                                              ; preds = %174
  br i1 %176, label %180, label %.loopexit

178:                                              ; preds = %174
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %208

180:                                              ; preds = %177
  %181 = load i32, ptr %16, align 4, !tbaa !32
  %182 = load i32, ptr %24, align 4, !tbaa !18
  %183 = icmp sge i32 %181, %182
  %184 = load i32, ptr %51, align 8
  %.not221306 = icmp slt i32 %184, 0
  %or.cond328 = select i1 %183, i1 true, i1 %.not221306
  br i1 %or.cond328, label %.thread256, label %.lr.ph308

.lr.ph308:                                        ; preds = %180, %189
  %indvars.iv349 = phi i64 [ %indvars.iv.next350, %189 ], [ 0, %180 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  %185 = invoke noundef zeroext i1 @_ZN4sptk38NormalDistributedRandomValueGeneration3GetEPd(ptr noundef nonnull align 8 dereferenceable(56) %8, ptr noundef nonnull %17)
          to label %186 unwind label %187

186:                                              ; preds = %.lr.ph308
  br i1 %185, label %189, label %207

187:                                              ; preds = %.lr.ph308
  %188 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  br label %208

189:                                              ; preds = %186
  %190 = load double, ptr %52, align 8, !tbaa !27
  %191 = load double, ptr %17, align 8, !tbaa !22
  %192 = fmul double %190, %191
  %193 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %157) #7
  %194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %193, i64 noundef %indvars.iv349) #7
  %195 = load double, ptr %194, align 8, !tbaa !22
  %196 = fsub double %195, %192
  %197 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %indvars.iv352) #7
  %198 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %197, i64 noundef %indvars.iv349) #7
  store double %196, ptr %198, align 8, !tbaa !22
  %199 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %157) #7
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %199, i64 noundef %indvars.iv349) #7
  %201 = load double, ptr %200, align 8, !tbaa !22
  %202 = fadd double %192, %201
  %203 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2, i64 noundef %157) #7
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %203, i64 noundef %indvars.iv349) #7
  store double %202, ptr %204, align 8, !tbaa !22
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  %indvars.iv.next350 = add nuw nsw i64 %indvars.iv349, 1
  %205 = load i32, ptr %51, align 8, !tbaa !23
  %206 = sext i32 %205 to i64
  %.not221.not = icmp slt i64 %indvars.iv349, %206
  br i1 %.not221.not, label %.lr.ph308, label %.thread256, !llvm.loop !36

207:                                              ; preds = %186
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  br label %.loopexit

.thread256:                                       ; preds = %189, %180
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  %indvars.iv.next353 = add nuw nsw i64 %indvars.iv352, 1
  %exitcond356.not = icmp eq i64 %indvars.iv.next353, %wide.trip.count355
  br i1 %exitcond356.not, label %._crit_edge311, label %174, !llvm.loop !37

208:                                              ; preds = %187, %178
  %.pn222 = phi { ptr, i32 } [ %188, %187 ], [ %179, %178 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  br label %221

.loopexit:                                        ; preds = %177, %207
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  br label %.thread271

._crit_edge311:                                   ; preds = %.thread256, %.preheader278, %.preheader277
  %209 = add nuw nsw i32 %.0191313, 1
  %210 = load i32, ptr %53, align 8, !tbaa !26
  %211 = icmp slt i32 %209, %210
  br i1 %211, label %.preheader280, label %.thread266, !llvm.loop !38

.thread266:                                       ; preds = %._crit_edge311, %151, %._crit_edge299, %.preheader282
  %.0206 = shl nsw i32 %.0206319, 1
  %212 = load i32, ptr %26, align 8, !tbaa !19
  %.not215 = icmp sgt i32 %.0206, %212
  br i1 %.not215, label %.preheader, label %65, !llvm.loop !39

213:                                              ; preds = %218
  %indvars.iv.next358 = add nuw nsw i64 %indvars.iv357, 1
  %exitcond361 = icmp eq i64 %indvars.iv.next358, %wide.trip.count360
  br i1 %exitcond361, label %.thread271.loopexit.split.loop.exit, label %214, !llvm.loop !40

214:                                              ; preds = %.lr.ph324, %213
  %indvars.iv357 = phi i64 [ 0, %.lr.ph324 ], [ %indvars.iv.next358, %213 ]
  %215 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1, i64 noundef %indvars.iv357) #7
  %216 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %indvars.iv357) #7
  %217 = invoke noundef zeroext i1 @_ZNK4sptk18VectorQuantization3RunERKSt6vectorIdSaIdEERKS1_IS3_SaIS3_EEPi(ptr noundef nonnull align 8 dereferenceable(41) %59, ptr noundef nonnull align 8 dereferenceable(24) %215, ptr noundef nonnull align 8 dereferenceable(24) %2, ptr noundef nonnull %216)
          to label %218 unwind label %219

218:                                              ; preds = %214
  br i1 %217, label %213, label %.thread271

219:                                              ; preds = %214
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %221

.thread271.loopexit.split.loop.exit:              ; preds = %213
  %.not225.le = icmp uge i64 %indvars.iv.next358, %60
  br label %.thread271

.thread271:                                       ; preds = %218, %.thread271.loopexit.split.loop.exit, %.preheader, %.thread245, %.thread253, %.loopexit, %.thread238
  %.27 = phi i1 [ false, %.thread238 ], [ false, %.loopexit ], [ false, %.thread253 ], [ false, %.thread245 ], [ true, %.preheader ], [ %.not225.le, %.thread271.loopexit.split.loop.exit ], [ false, %218 ]
  call void @_ZN4sptk25RandomGenerationInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #7
  call void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  br label %224

221:                                              ; preds = %77, %87, %97, %161, %208, %148, %120, %219
  %.pn228.pn = phi { ptr, i32 } [ %220, %219 ], [ %88, %87 ], [ %98, %97 ], [ %78, %77 ], [ %121, %120 ], [ %.pn, %148 ], [ %.pn222, %208 ], [ %162, %161 ]
  call void @_ZN4sptk25RandomGenerationInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %8) #7
  br label %222

222:                                              ; preds = %221, %63
  %.pn228.pn.pn = phi { ptr, i32 } [ %.pn228.pn, %221 ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %8) #7
  call void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  br label %223

223:                                              ; preds = %222, %61
  %.pn228.pn.pn.pn = phi { ptr, i32 } [ %.pn228.pn.pn, %222 ], [ %62, %61 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  resume { ptr, i32 } %.pn228.pn.pn.pn

224:                                              ; preds = %5, %23, %33, %.thread271
  %.28 = phi i1 [ %.27, %.thread271 ], [ false, %33 ], [ false, %23 ], [ false, %5 ]
  ret i1 %.28
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIS_IdSaIdEESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIiSaIiEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIiSaIiEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIN4sptk22StatisticsAccumulation6BufferEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEC2EmRKS3_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

declare void @_ZN4sptk38NormalDistributedRandomValueGenerationC1Ei(ptr noundef nonnull align 8 dereferenceable(56), i32 noundef) unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_IdSaIdEESaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt6vectorIdSaIdEES1_IS3_SaIS3_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZN4sptk38NormalDistributedRandomValueGeneration3GetEPd(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

declare void @_ZNK4sptk22StatisticsAccumulation5ClearEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(128) ptr @_ZNSt6vectorIN4sptk22StatisticsAccumulation6BufferESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK4sptk18VectorQuantization3RunERKSt6vectorIdSaIdEERKS1_IS3_SaIS3_EEPi(ptr noundef nonnull align 8 dereferenceable(41), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIS_IdSaIdEESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiSaIiEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation3RunERKSt6vectorIdSaIdEEPNS0_6BufferE(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZNK4sptk19DistanceCalculation3RunERKSt6vectorIdSaIdEES5_Pd(ptr noundef nonnull align 8 dereferenceable(17), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #5

declare noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation10GetNumDataERKNS0_6BufferEPi(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZNK4sptk22StatisticsAccumulation7GetMeanERKNS0_6BufferEPSt6vectorIdSaIdEE(ptr noundef nonnull align 8 dereferenceable(19), ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIN4sptk22StatisticsAccumulation6BufferEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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, !13, i64 152}
!6 = !{!"_ZTSN4sptk22LindeBuzoGrayAlgorithmE", !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !10, i64 32, !10, i64 40, !7, i64 48, !11, i64 56, !14, i64 80, !15, i64 104, !13, i64 152}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"_ZTSN4sptk19DistanceCalculationE", !7, i64 8, !12, i64 12, !13, i64 16}
!12 = !{!"_ZTSN4sptk19DistanceCalculation15DistanceMetricsE", !8, i64 0}
!13 = !{!"bool", !8, i64 0}
!14 = !{!"_ZTSN4sptk22StatisticsAccumulationE", !7, i64 8, !7, i64 12, !13, i64 16, !13, i64 17, !13, i64 18}
!15 = !{!"_ZTSN4sptk18VectorQuantizationE", !7, i64 8, !11, i64 16, !13, i64 40}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!6, !7, i64 20}
!19 = !{!6, !7, i64 16}
!20 = !{!6, !7, i64 12}
!21 = !{!6, !7, i64 48}
!22 = !{!10, !10, i64 0}
!23 = !{!6, !7, i64 8}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!6, !7, i64 24}
!27 = !{!6, !10, i64 40}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25, !30}
!30 = !{!"llvm.loop.unswitch.partial.disable"}
!31 = distinct !{!31, !25}
!32 = !{!7, !7, i64 0}
!33 = distinct !{!33, !25}
!34 = !{!6, !10, i64 32}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}


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