; LLVM IR from Dimandragon/non-parametric-dsp :: alglib-cpp/src/ap.ll (ZN6alglib8read_csvEPKcciRNS_13real_2d_arrayE)

; 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.22" = type { %"struct.std::_Vector_base.23" }
%"struct.std::_Vector_base.23" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.lconv = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }

@_ZTIN6alglib8ap_errorE = external dso_local constant { ptr, ptr }, align 8
@.str.119 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [62 x i8], align 1

; Function Attrs: noreturn nounwind
declare void @abort() #0

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

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

declare i32 @fclose(ptr noundef) #2

declare noalias ptr @fopen(ptr noundef, ptr noundef) #2

declare i32 @__gxx_personality_v0(...)

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6alglib17ae_matrix_wrapper9setlengthEll(ptr noundef nonnull align 8 dereferenceable(97), i64 noundef, i64 noundef) #4 align 2

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

; Function Attrs: nounwind
declare ptr @localeconv() #6

; Function Attrs: inlinehint mustprogress nounwind willreturn memory(read) uwtable
declare double @atof(ptr noundef nonnull) #7

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6alglib8read_csvEPKcciRNS_13real_2d_arrayE(ptr noundef %0, i8 noundef signext %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(97) %3) #4 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i8, align 1
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca %"class.std::vector.22", align 8
  %18 = alloca i8, align 1
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i8, align 1
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca %"class.std::vector.24", align 8
  %27 = alloca %"class.std::vector.24", align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i8 %1, ptr %6, align 1, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !10
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #8
  %44 = load i32, ptr %7, align 4, !tbaa !10
  %45 = and i32 %44, 1
  %46 = icmp ne i32 %45, 0
  %47 = zext i1 %46 to i8
  store i8 %47, ptr %10, align 1, !tbaa !12
  %48 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN6alglib17ae_matrix_wrapper9setlengthEll(ptr noundef nonnull align 8 dereferenceable(97) %48, i64 noundef 0, i64 noundef 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  %50 = call noalias ptr @fopen(ptr noundef %49, ptr noundef @.str.119)
  store ptr %50, ptr %11, align 8, !tbaa !5
  %51 = load ptr, ptr %11, align 8, !tbaa !5
  %52 = icmp eq ptr %51, null
  br i1 %52, label %53, label %60

53:                                               ; preds = %4
  %54 = call ptr @__cxa_allocate_exception(i64 32) #8
  invoke void @_ZN6alglib8ap_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef @.str.120)
          to label %55 unwind label %56

55:                                               ; preds = %53
  call void @__cxa_throw(ptr %54, ptr @_ZTIN6alglib8ap_errorE, ptr @_ZN6alglib8ap_errorD2Ev) #9
  unreachable

56:                                               ; preds = %53
  %57 = landingpad { ptr, i32 }
          cleanup
  %58 = extractvalue { ptr, i32 } %57, 0
  store ptr %58, ptr %12, align 8
  %59 = extractvalue { ptr, i32 } %57, 1
  store i32 %59, ptr %13, align 4
  call void @__cxa_free_exception(ptr %54) #8
  br label %452

60:                                               ; preds = %4
  %61 = load ptr, ptr %11, align 8, !tbaa !5
  %62 = call i32 @fseek(ptr noundef %61, i64 noundef 0, i32 noundef 2)
  store i32 %62, ptr %9, align 4, !tbaa !10
  %63 = load i32, ptr %9, align 4, !tbaa !10
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %66, label %65

65:                                               ; preds = %60
  call void @abort() #10
  unreachable

66:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %67 = load ptr, ptr %11, align 8, !tbaa !5
  %68 = call i64 @ftell(ptr noundef %67)
  store i64 %68, ptr %14, align 8, !tbaa !14
  %69 = load i64, ptr %14, align 8, !tbaa !14
  %70 = icmp sge i64 %69, 0
  br i1 %70, label %72, label %71

71:                                               ; preds = %66
  call void @abort() #10
  unreachable

72:                                               ; preds = %66
  %73 = load i64, ptr %14, align 8, !tbaa !14
  %74 = icmp eq i64 %73, 0
  br i1 %74, label %75, label %78

75:                                               ; preds = %72
  %76 = load ptr, ptr %11, align 8, !tbaa !5
  %77 = call i32 @fclose(ptr noundef %76)
  store i32 1, ptr %15, align 4
  br label %445

78:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %79 = load i64, ptr %14, align 8, !tbaa !14
  store i64 %79, ptr %16, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #8
  call void @_ZNSt6vectorIcSaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  %80 = load i64, ptr %16, align 8, !tbaa !14
  %81 = add i64 %80, 2
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #8
  store i8 0, ptr %18, align 1, !tbaa !9
  invoke void @_ZNSt6vectorIcSaIcEE6resizeEmRKc(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef %81, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %82 unwind label %90

82:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %83 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #8
  store ptr %83, ptr %19, align 8, !tbaa !5
  %84 = load ptr, ptr %11, align 8, !tbaa !5
  %85 = invoke i32 @fseek(ptr noundef %84, i64 noundef 0, i32 noundef 0)
          to label %86 unwind label %94

86:                                               ; preds = %82
  store i32 %85, ptr %9, align 4, !tbaa !10
  %87 = load i32, ptr %9, align 4, !tbaa !10
  %88 = icmp eq i32 %87, 0
  br i1 %88, label %98, label %89

89:                                               ; preds = %86
  call void @abort() #10
  unreachable

90:                                               ; preds = %78
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %12, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #8
  br label %451

94:                                               ; preds = %82
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %12, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %13, align 4
  br label %450

98:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %99 = load ptr, ptr %19, align 8, !tbaa !5
  %100 = load i64, ptr %16, align 8, !tbaa !14
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = invoke i64 @fread(ptr noundef %99, i64 noundef 1, i64 noundef %100, ptr noundef %101)
          to label %103 unwind label %108

103:                                              ; preds = %98
  store i64 %102, ptr %20, align 8, !tbaa !14
  %104 = load i64, ptr %20, align 8, !tbaa !14
  %105 = load i64, ptr %16, align 8, !tbaa !14
  %106 = icmp eq i64 %104, %105
  br i1 %106, label %112, label %107

107:                                              ; preds = %103
  call void @abort() #10
  unreachable

108:                                              ; preds = %112, %98
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %12, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %13, align 4
  br label %449

112:                                              ; preds = %103
  %113 = load ptr, ptr %11, align 8, !tbaa !5
  %114 = invoke i32 @fclose(ptr noundef %113)
          to label %115 unwind label %108

115:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store i64 0, ptr %21, align 8, !tbaa !14
  br label %116

116:                                              ; preds = %133, %115
  %117 = load i64, ptr %21, align 8, !tbaa !14
  %118 = load i64, ptr %16, align 8, !tbaa !14
  %119 = icmp ult i64 %117, %118
  br i1 %119, label %121, label %120

120:                                              ; preds = %116
  store i32 2, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %136

121:                                              ; preds = %116
  %122 = load ptr, ptr %19, align 8, !tbaa !5
  %123 = load i64, ptr %21, align 8, !tbaa !14
  %124 = getelementptr inbounds i8, ptr %122, i64 %123
  %125 = load i8, ptr %124, align 1, !tbaa !9
  %126 = sext i8 %125 to i32
  %127 = icmp eq i32 %126, 0
  br i1 %127, label %128, label %132

128:                                              ; preds = %121
  %129 = load ptr, ptr %19, align 8, !tbaa !5
  %130 = load i64, ptr %21, align 8, !tbaa !14
  %131 = getelementptr inbounds i8, ptr %129, i64 %130
  store i8 32, ptr %131, align 1, !tbaa !9
  br label %132

132:                                              ; preds = %128, %121
  br label %133

133:                                              ; preds = %132
  %134 = load i64, ptr %21, align 8, !tbaa !14
  %135 = add i64 %134, 1
  store i64 %135, ptr %21, align 8, !tbaa !14
  br label %116, !llvm.loop !16

136:                                              ; preds = %120
  br label %137

137:                                              ; preds = %165, %136
  %138 = load i64, ptr %16, align 8, !tbaa !14
  %139 = icmp ugt i64 %138, 0
  br i1 %139, label %140, label %167

140:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #8
  %141 = load ptr, ptr %19, align 8, !tbaa !5
  %142 = load i64, ptr %16, align 8, !tbaa !14
  %143 = sub i64 %142, 1
  %144 = getelementptr inbounds i8, ptr %141, i64 %143
  %145 = load i8, ptr %144, align 1, !tbaa !9
  store i8 %145, ptr %22, align 1, !tbaa !9
  %146 = load i8, ptr %22, align 1, !tbaa !9
  %147 = sext i8 %146 to i32
  %148 = icmp eq i32 %147, 32
  br i1 %148, label %161, label %149

149:                                              ; preds = %140
  %150 = load i8, ptr %22, align 1, !tbaa !9
  %151 = sext i8 %150 to i32
  %152 = icmp eq i32 %151, 9
  br i1 %152, label %161, label %153

153:                                              ; preds = %149
  %154 = load i8, ptr %22, align 1, !tbaa !9
  %155 = sext i8 %154 to i32
  %156 = icmp eq i32 %155, 10
  br i1 %156, label %161, label %157

157:                                              ; preds = %153
  %158 = load i8, ptr %22, align 1, !tbaa !9
  %159 = sext i8 %158 to i32
  %160 = icmp eq i32 %159, 13
  br i1 %160, label %161, label %164

161:                                              ; preds = %157, %153, %149, %140
  %162 = load i64, ptr %16, align 8, !tbaa !14
  %163 = add i64 %162, -1
  store i64 %163, ptr %16, align 8, !tbaa !14
  store i32 6, ptr %15, align 4
  br label %165, !llvm.loop !18

164:                                              ; preds = %157
  store i32 5, ptr %15, align 4
  br label %165

165:                                              ; preds = %164, %161
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  %166 = load i32, ptr %15, align 4
  switch i32 %166, label %458 [
    i32 6, label %137
    i32 5, label %167
  ]

167:                                              ; preds = %165, %137
  %168 = load i64, ptr %16, align 8, !tbaa !14
  %169 = icmp eq i64 %168, 0
  br i1 %169, label %170, label %171

170:                                              ; preds = %167
  store i32 1, ptr %15, align 4
  br label %444

171:                                              ; preds = %167
  %172 = load ptr, ptr %19, align 8, !tbaa !5
  %173 = load i64, ptr %16, align 8, !tbaa !14
  %174 = add i64 %173, 0
  %175 = getelementptr inbounds i8, ptr %172, i64 %174
  store i8 10, ptr %175, align 1, !tbaa !9
  %176 = load ptr, ptr %19, align 8, !tbaa !5
  %177 = load i64, ptr %16, align 8, !tbaa !14
  %178 = add i64 %177, 1
  %179 = getelementptr inbounds i8, ptr %176, i64 %178
  store i8 0, ptr %179, align 1, !tbaa !9
  %180 = load i64, ptr %16, align 8, !tbaa !14
  %181 = add i64 %180, 2
  store i64 %181, ptr %16, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  store i64 0, ptr %23, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  store i64 0, ptr %24, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  store i64 0, ptr %25, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #8
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #8
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  store i64 0, ptr %28, align 8, !tbaa !14
  br label %182

182:                                              ; preds = %311, %171
  %183 = load ptr, ptr %19, align 8, !tbaa !5
  %184 = load i64, ptr %28, align 8, !tbaa !14
  %185 = getelementptr inbounds i8, ptr %183, i64 %184
  %186 = load i8, ptr %185, align 1, !tbaa !9
  %187 = sext i8 %186 to i32
  %188 = icmp ne i32 %187, 0
  br i1 %188, label %190, label %189

189:                                              ; preds = %182
  store i32 7, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %319

190:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  store i64 0, ptr %29, align 8, !tbaa !14
  br label %191

191:                                              ; preds = %201, %190
  %192 = load ptr, ptr %19, align 8, !tbaa !5
  %193 = load i64, ptr %28, align 8, !tbaa !14
  %194 = load i64, ptr %29, align 8, !tbaa !14
  %195 = add i64 %193, %194
  %196 = getelementptr inbounds i8, ptr %192, i64 %195
  %197 = load i8, ptr %196, align 1, !tbaa !9
  %198 = sext i8 %197 to i32
  %199 = icmp ne i32 %198, 10
  br i1 %199, label %200, label %204

200:                                              ; preds = %191
  br label %201

201:                                              ; preds = %200
  %202 = load i64, ptr %29, align 8, !tbaa !14
  %203 = add i64 %202, 1
  store i64 %203, ptr %29, align 8, !tbaa !14
  br label %191, !llvm.loop !19

204:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  store i64 1, ptr %30, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  store i64 0, ptr %31, align 8, !tbaa !14
  br label %205

205:                                              ; preds = %225, %204
  %206 = load i64, ptr %31, align 8, !tbaa !14
  %207 = load i64, ptr %29, align 8, !tbaa !14
  %208 = icmp ult i64 %206, %207
  br i1 %208, label %210, label %209

209:                                              ; preds = %205
  store i32 12, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %228

210:                                              ; preds = %205
  %211 = load ptr, ptr %19, align 8, !tbaa !5
  %212 = load i64, ptr %28, align 8, !tbaa !14
  %213 = load i64, ptr %31, align 8, !tbaa !14
  %214 = add i64 %212, %213
  %215 = getelementptr inbounds i8, ptr %211, i64 %214
  %216 = load i8, ptr %215, align 1, !tbaa !9
  %217 = sext i8 %216 to i32
  %218 = load i8, ptr %6, align 1, !tbaa !9
  %219 = sext i8 %218 to i32
  %220 = icmp eq i32 %217, %219
  br i1 %220, label %221, label %224

221:                                              ; preds = %210
  %222 = load i64, ptr %30, align 8, !tbaa !14
  %223 = add i64 %222, 1
  store i64 %223, ptr %30, align 8, !tbaa !14
  br label %224

224:                                              ; preds = %221, %210
  br label %225

225:                                              ; preds = %224
  %226 = load i64, ptr %31, align 8, !tbaa !14
  %227 = add i64 %226, 1
  store i64 %227, ptr %31, align 8, !tbaa !14
  br label %205, !llvm.loop !20

228:                                              ; preds = %209
  %229 = load i64, ptr %24, align 8, !tbaa !14
  %230 = icmp ugt i64 %229, 0
  br i1 %230, label %231, label %246

231:                                              ; preds = %228
  %232 = load i64, ptr %24, align 8, !tbaa !14
  %233 = load i64, ptr %30, align 8, !tbaa !14
  %234 = icmp ne i64 %232, %233
  br i1 %234, label %235, label %246

235:                                              ; preds = %231
  %236 = call ptr @__cxa_allocate_exception(i64 32) #8
  invoke void @_ZN6alglib8ap_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %236, ptr noundef @.str.121)
          to label %237 unwind label %238

237:                                              ; preds = %235
  invoke void @__cxa_throw(ptr %236, ptr @_ZTIN6alglib8ap_errorE, ptr @_ZN6alglib8ap_errorD2Ev) #9
          to label %458 unwind label %242

238:                                              ; preds = %235
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %12, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %13, align 4
  call void @__cxa_free_exception(ptr %236) #8
  br label %318

242:                                              ; preds = %237
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %12, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %13, align 4
  br label %318

246:                                              ; preds = %231, %228
  %247 = load i64, ptr %30, align 8, !tbaa !14
  store i64 %247, ptr %24, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  store i64 0, ptr %32, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  store i64 0, ptr %33, align 8, !tbaa !14
  br label %248

248:                                              ; preds = %307, %246
  %249 = load i64, ptr %33, align 8, !tbaa !14
  %250 = load i64, ptr %29, align 8, !tbaa !14
  %251 = add i64 %250, 1
  %252 = icmp ult i64 %249, %251
  br i1 %252, label %254, label %253

253:                                              ; preds = %248
  store i32 15, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %311

254:                                              ; preds = %248
  %255 = load ptr, ptr %19, align 8, !tbaa !5
  %256 = load i64, ptr %28, align 8, !tbaa !14
  %257 = load i64, ptr %33, align 8, !tbaa !14
  %258 = add i64 %256, %257
  %259 = getelementptr inbounds i8, ptr %255, i64 %258
  %260 = load i8, ptr %259, align 1, !tbaa !9
  %261 = sext i8 %260 to i32
  %262 = load i8, ptr %6, align 1, !tbaa !9
  %263 = sext i8 %262 to i32
  %264 = icmp eq i32 %261, %263
  br i1 %264, label %274, label %265

265:                                              ; preds = %254
  %266 = load ptr, ptr %19, align 8, !tbaa !5
  %267 = load i64, ptr %28, align 8, !tbaa !14
  %268 = load i64, ptr %33, align 8, !tbaa !14
  %269 = add i64 %267, %268
  %270 = getelementptr inbounds i8, ptr %266, i64 %269
  %271 = load i8, ptr %270, align 1, !tbaa !9
  %272 = sext i8 %271 to i32
  %273 = icmp eq i32 %272, 10
  br i1 %273, label %274, label %306

274:                                              ; preds = %265, %254
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %275 = load i64, ptr %28, align 8, !tbaa !14
  %276 = load i64, ptr %32, align 8, !tbaa !14
  %277 = add i64 %275, %276
  store i64 %277, ptr %34, align 8, !tbaa !14
  invoke void @_ZNSt6vectorImSaImEE9push_backEOm(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %278 unwind label %298

278:                                              ; preds = %274
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %279 = load i64, ptr %33, align 8, !tbaa !14
  %280 = load i64, ptr %32, align 8, !tbaa !14
  %281 = sub i64 %279, %280
  store i64 %281, ptr %35, align 8, !tbaa !14
  invoke void @_ZNSt6vectorImSaImEE9push_backEOm(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %282 unwind label %302

282:                                              ; preds = %278
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  %283 = load i64, ptr %33, align 8, !tbaa !14
  %284 = load i64, ptr %32, align 8, !tbaa !14
  %285 = sub i64 %283, %284
  %286 = load i64, ptr %25, align 8, !tbaa !14
  %287 = icmp ugt i64 %285, %286
  br i1 %287, label %288, label %292

288:                                              ; preds = %282
  %289 = load i64, ptr %33, align 8, !tbaa !14
  %290 = load i64, ptr %32, align 8, !tbaa !14
  %291 = sub i64 %289, %290
  br label %294

292:                                              ; preds = %282
  %293 = load i64, ptr %25, align 8, !tbaa !14
  br label %294

294:                                              ; preds = %292, %288
  %295 = phi i64 [ %291, %288 ], [ %293, %292 ]
  store i64 %295, ptr %25, align 8, !tbaa !14
  %296 = load i64, ptr %33, align 8, !tbaa !14
  %297 = add i64 %296, 1
  store i64 %297, ptr %32, align 8, !tbaa !14
  br label %306

298:                                              ; preds = %274
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %12, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %310

302:                                              ; preds = %278
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %12, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %310

306:                                              ; preds = %294, %265
  br label %307

307:                                              ; preds = %306
  %308 = load i64, ptr %33, align 8, !tbaa !14
  %309 = add i64 %308, 1
  store i64 %309, ptr %33, align 8, !tbaa !14
  br label %248, !llvm.loop !21

310:                                              ; preds = %302, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %318

311:                                              ; preds = %253
  %312 = load i64, ptr %23, align 8, !tbaa !14
  %313 = add i64 %312, 1
  store i64 %313, ptr %23, align 8, !tbaa !14
  %314 = load i64, ptr %28, align 8, !tbaa !14
  %315 = load i64, ptr %29, align 8, !tbaa !14
  %316 = add i64 %314, %315
  %317 = add i64 %316, 1
  store i64 %317, ptr %28, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %182, !llvm.loop !22

318:                                              ; preds = %310, %242, %238
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %448

319:                                              ; preds = %189
  %320 = load i64, ptr %23, align 8, !tbaa !14
  %321 = icmp uge i64 %320, 1
  br i1 %321, label %323, label %322

322:                                              ; preds = %319
  call void @abort() #10
  unreachable

323:                                              ; preds = %319
  %324 = load i64, ptr %24, align 8, !tbaa !14
  %325 = icmp uge i64 %324, 1
  br i1 %325, label %327, label %326

326:                                              ; preds = %323
  call void @abort() #10
  unreachable

327:                                              ; preds = %323
  %328 = load i64, ptr %24, align 8, !tbaa !14
  %329 = load i64, ptr %23, align 8, !tbaa !14
  %330 = mul i64 %328, %329
  %331 = call noundef i64 @_ZNKSt6vectorImSaImEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  %332 = icmp eq i64 %330, %331
  br i1 %332, label %334, label %333

333:                                              ; preds = %327
  call void @abort() #10
  unreachable

334:                                              ; preds = %327
  %335 = load i64, ptr %24, align 8, !tbaa !14
  %336 = load i64, ptr %23, align 8, !tbaa !14
  %337 = mul i64 %335, %336
  %338 = call noundef i64 @_ZNKSt6vectorImSaImEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  %339 = icmp eq i64 %337, %338
  br i1 %339, label %341, label %340

340:                                              ; preds = %334
  call void @abort() #10
  unreachable

341:                                              ; preds = %334
  %342 = load i64, ptr %23, align 8, !tbaa !14
  %343 = icmp eq i64 %342, 1
  br i1 %343, label %344, label %348

344:                                              ; preds = %341
  %345 = load i8, ptr %10, align 1, !tbaa !12, !range !23, !noundef !24
  %346 = trunc i8 %345 to i1
  br i1 %346, label %347, label %348

347:                                              ; preds = %344
  store i32 1, ptr %15, align 4
  br label %443

348:                                              ; preds = %344, %341
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %349 = load i8, ptr %10, align 1, !tbaa !12, !range !23, !noundef !24
  %350 = trunc i8 %349 to i1
  %351 = zext i1 %350 to i64
  %352 = select i1 %350, i64 1, i64 0
  store i64 %352, ptr %36, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %353 = load i64, ptr %23, align 8, !tbaa !14
  store i64 %353, ptr %37, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %354 = call ptr @localeconv() #8
  store ptr %354, ptr %38, align 8, !tbaa !5
  %355 = load ptr, ptr %8, align 8, !tbaa !5
  %356 = load i64, ptr %37, align 8, !tbaa !14
  %357 = load i64, ptr %36, align 8, !tbaa !14
  %358 = sub i64 %356, %357
  %359 = load i64, ptr %24, align 8, !tbaa !14
  invoke void @_ZN6alglib17ae_matrix_wrapper9setlengthEll(ptr noundef nonnull align 8 dereferenceable(97) %355, i64 noundef %358, i64 noundef %359)
          to label %360 unwind label %367

360:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %361 = load i64, ptr %36, align 8, !tbaa !14
  store i64 %361, ptr %39, align 8, !tbaa !14
  br label %362

362:                                              ; preds = %439, %360
  %363 = load i64, ptr %39, align 8, !tbaa !14
  %364 = load i64, ptr %37, align 8, !tbaa !14
  %365 = icmp ult i64 %363, %364
  br i1 %365, label %371, label %366

366:                                              ; preds = %362
  store i32 18, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %442

367:                                              ; preds = %348
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %12, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %448

371:                                              ; preds = %362
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  store i64 0, ptr %40, align 8, !tbaa !14
  br label %372

372:                                              ; preds = %435, %371
  %373 = load i64, ptr %40, align 8, !tbaa !14
  %374 = load i64, ptr %24, align 8, !tbaa !14
  %375 = icmp ult i64 %373, %374
  br i1 %375, label %377, label %376

376:                                              ; preds = %372
  store i32 21, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  br label %438

377:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %378 = load ptr, ptr %19, align 8, !tbaa !5
  %379 = load i64, ptr %39, align 8, !tbaa !14
  %380 = load i64, ptr %24, align 8, !tbaa !14
  %381 = mul i64 %379, %380
  %382 = load i64, ptr %40, align 8, !tbaa !14
  %383 = add i64 %381, %382
  %384 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %26, i64 noundef %383) #8
  %385 = load i64, ptr %384, align 8, !tbaa !14
  %386 = getelementptr inbounds i8, ptr %378, i64 %385
  store ptr %386, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %387 = load i64, ptr %39, align 8, !tbaa !14
  %388 = load i64, ptr %24, align 8, !tbaa !14
  %389 = mul i64 %387, %388
  %390 = load i64, ptr %40, align 8, !tbaa !14
  %391 = add i64 %389, %390
  %392 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %391) #8
  %393 = load i64, ptr %392, align 8, !tbaa !14
  store i64 %393, ptr %42, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  store i64 0, ptr %43, align 8, !tbaa !14
  br label %394

394:                                              ; preds = %422, %377
  %395 = load i64, ptr %43, align 8, !tbaa !14
  %396 = load i64, ptr %42, align 8, !tbaa !14
  %397 = icmp ult i64 %395, %396
  br i1 %397, label %399, label %398

398:                                              ; preds = %394
  store i32 24, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %425

399:                                              ; preds = %394
  %400 = load ptr, ptr %41, align 8, !tbaa !5
  %401 = load i64, ptr %43, align 8, !tbaa !14
  %402 = getelementptr inbounds i8, ptr %400, i64 %401
  %403 = load i8, ptr %402, align 1, !tbaa !9
  %404 = sext i8 %403 to i32
  %405 = icmp eq i32 %404, 46
  br i1 %405, label %413, label %406

406:                                              ; preds = %399
  %407 = load ptr, ptr %41, align 8, !tbaa !5
  %408 = load i64, ptr %43, align 8, !tbaa !14
  %409 = getelementptr inbounds i8, ptr %407, i64 %408
  %410 = load i8, ptr %409, align 1, !tbaa !9
  %411 = sext i8 %410 to i32
  %412 = icmp eq i32 %411, 44
  br i1 %412, label %413, label %421

413:                                              ; preds = %406, %399
  %414 = load ptr, ptr %38, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.lconv, ptr %414, i32 0, i32 0
  %416 = load ptr, ptr %415, align 8, !tbaa !25
  %417 = load i8, ptr %416, align 1, !tbaa !9
  %418 = load ptr, ptr %41, align 8, !tbaa !5
  %419 = load i64, ptr %43, align 8, !tbaa !14
  %420 = getelementptr inbounds i8, ptr %418, i64 %419
  store i8 %417, ptr %420, align 1, !tbaa !9
  br label %421

421:                                              ; preds = %413, %406
  br label %422

422:                                              ; preds = %421
  %423 = load i64, ptr %43, align 8, !tbaa !14
  %424 = add i64 %423, 1
  store i64 %424, ptr %43, align 8, !tbaa !14
  br label %394, !llvm.loop !27

425:                                              ; preds = %398
  %426 = load ptr, ptr %41, align 8, !tbaa !5
  %427 = call double @atof(ptr noundef %426) #11
  %428 = load ptr, ptr %8, align 8, !tbaa !5
  %429 = load i64, ptr %39, align 8, !tbaa !14
  %430 = load i64, ptr %36, align 8, !tbaa !14
  %431 = sub i64 %429, %430
  %432 = call noundef ptr @_ZN6alglib13real_2d_arrayixEl(ptr noundef nonnull align 8 dereferenceable(97) %428, i64 noundef %431)
  %433 = load i64, ptr %40, align 8, !tbaa !14
  %434 = getelementptr inbounds double, ptr %432, i64 %433
  store double %427, ptr %434, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %435

435:                                              ; preds = %425
  %436 = load i64, ptr %40, align 8, !tbaa !14
  %437 = add i64 %436, 1
  store i64 %437, ptr %40, align 8, !tbaa !14
  br label %372, !llvm.loop !30

438:                                              ; preds = %376
  br label %439

439:                                              ; preds = %438
  %440 = load i64, ptr %39, align 8, !tbaa !14
  %441 = add i64 %440, 1
  store i64 %441, ptr %39, align 8, !tbaa !14
  br label %362, !llvm.loop !31

442:                                              ; preds = %366
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  store i32 0, ptr %15, align 4
  br label %443

443:                                              ; preds = %442, %347
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %444

444:                                              ; preds = %443, %170
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %445

445:                                              ; preds = %444, %75
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  %446 = load i32, ptr %15, align 4
  switch i32 %446, label %458 [
    i32 0, label %447
    i32 1, label %447
  ]

447:                                              ; preds = %445, %445
  ret void

448:                                              ; preds = %367, %318
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #8
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %449

449:                                              ; preds = %448, %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %450

450:                                              ; preds = %449, %94
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %451

451:                                              ; preds = %450, %90
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %452

452:                                              ; preds = %451, %56
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  br label %453

453:                                              ; preds = %452
  %454 = load ptr, ptr %12, align 8
  %455 = load i32, ptr %13, align 4
  %456 = insertvalue { ptr, i32 } poison, ptr %454, 0
  %457 = insertvalue { ptr, i32 } %456, i32 %455, 1
  resume { ptr, i32 } %457

458:                                              ; preds = %445, %237, %165
  unreachable
}

declare i32 @fseek(ptr noundef, i64 noundef, i32 noundef) #2

declare i64 @ftell(ptr noundef) #2

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

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

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

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

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

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

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

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

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

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

declare void @_ZN6alglib8ap_errorC1EPKc(ptr, ptr)

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"bool", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !17}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!26, !6, i64 0}
!26 = !{!"_ZTS5lconv", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !7, i64 80, !7, i64 81, !7, i64 82, !7, i64 83, !7, i64 84, !7, i64 85, !7, i64 86, !7, i64 87, !7, i64 88, !7, i64 89, !7, i64 90, !7, i64 91, !7, i64 92, !7, i64 93}
!27 = distinct !{!27, !17}
!28 = !{!29, !29, i64 0}
!29 = !{!"double", !7, i64 0}
!30 = distinct !{!30, !17}
!31 = distinct !{!31, !17}


; 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.22" = type { %"struct.std::_Vector_base.23" }
%"struct.std::_Vector_base.23" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl" = type { %"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<char, std::allocator<char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@_ZTIN6alglib8ap_errorE = external dso_local constant { ptr, ptr }, align 8
@.str.119 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [62 x i8], align 1

; Function Attrs: noreturn nounwind
declare void @abort() local_unnamed_addr #0

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

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6alglib17ae_matrix_wrapper9setlengthEll(ptr noundef nonnull align 8 dereferenceable(97), i64 noundef, i64 noundef) local_unnamed_addr #4 align 2

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

; Function Attrs: nounwind
declare ptr @localeconv() local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare double @atof(ptr nocapture noundef nonnull) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6alglib8read_csvEPKcciRNS_13real_2d_arrayE(ptr nocapture noundef readonly %0, i8 noundef signext %1, i32 noundef %2, ptr noundef nonnull align 8 dereferenceable(97) %3) local_unnamed_addr #4 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.std::vector.22", align 8
  %6 = alloca i8, align 1
  %7 = alloca %"class.std::vector.24", align 8
  %8 = alloca %"class.std::vector.24", align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = and i32 %2, 1
  %.not.not = icmp eq i32 %11, 0
  tail call void @_ZN6alglib17ae_matrix_wrapper9setlengthEll(ptr noundef nonnull align 8 dereferenceable(97) %3, i64 noundef 0, i64 noundef 0)
  %12 = tail call noalias ptr @fopen(ptr noundef %0, ptr noundef nonnull @.str.119)
  %13 = icmp eq ptr %12, null
  br i1 %13, label %14, label %19

14:                                               ; preds = %4
  %15 = tail call ptr @__cxa_allocate_exception(i64 32) #9
  invoke void @_ZN6alglib8ap_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull @.str.120)
          to label %16 unwind label %17

16:                                               ; preds = %14
  tail call void @__cxa_throw(ptr %15, ptr nonnull @_ZTIN6alglib8ap_errorE, ptr nonnull @_ZN6alglib8ap_errorD2Ev) #10
  unreachable

17:                                               ; preds = %14
  %18 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %15) #9
  br label %288

19:                                               ; preds = %4
  %20 = tail call i32 @fseek(ptr noundef nonnull %12, i64 noundef 0, i32 noundef 2)
  %21 = icmp eq i32 %20, 0
  br i1 %21, label %23, label %22

22:                                               ; preds = %19
  tail call void @abort() #11
  unreachable

23:                                               ; preds = %19
  %24 = tail call i64 @ftell(ptr noundef nonnull %12)
  %25 = icmp sgt i64 %24, -1
  br i1 %25, label %27, label %26

26:                                               ; preds = %23
  tail call void @abort() #11
  unreachable

27:                                               ; preds = %23
  %28 = icmp eq i64 %24, 0
  br i1 %28, label %29, label %31

29:                                               ; preds = %27
  %30 = tail call i32 @fclose(ptr noundef nonnull %12)
  br label %285

31:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  call void @_ZNSt6vectorIcSaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  %32 = add nuw i64 %24, 2
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #9
  store i8 0, ptr %6, align 1, !tbaa !5
  invoke void @_ZNSt6vectorIcSaIcEE6resizeEmRKc(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef %32, ptr noundef nonnull align 1 dereferenceable(1) %6)
          to label %33 unwind label %38

33:                                               ; preds = %31
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #9
  %34 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcSaIcEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %5, i64 noundef 0) #9
  %35 = call i32 @fseek(ptr noundef nonnull %12, i64 noundef 0, i32 noundef 0)
  %36 = icmp eq i32 %35, 0
  br i1 %36, label %40, label %37

37:                                               ; preds = %33
  call void @abort() #11
  unreachable

38:                                               ; preds = %31
  %39 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #9
  br label %287

40:                                               ; preds = %33
  %41 = call i64 @fread(ptr noundef nonnull %34, i64 noundef 1, i64 noundef %24, ptr noundef nonnull %12)
  %42 = icmp eq i64 %41, %24
  br i1 %42, label %iter.check, label %43

43:                                               ; preds = %40
  call void @abort() #11
  unreachable

iter.check:                                       ; preds = %40
  %44 = call i32 @fclose(ptr noundef nonnull %12)
  %min.iters.check = icmp ult i64 %24, 8
  br i1 %min.iters.check, label %vec.epilog.scalar.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check264 = icmp ult i64 %24, 32
  br i1 %min.iters.check264, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %24, 9223372036854775776
  br label %vector.body

vector.body:                                      ; preds = %pred.store.continue327, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %pred.store.continue327 ]
  %45 = or disjoint i64 %index, 16
  %46 = getelementptr inbounds i8, ptr %34, i64 %index
  %47 = getelementptr inbounds i8, ptr %46, i64 16
  %wide.load = load <16 x i8>, ptr %46, align 1, !tbaa !5
  %wide.load265 = load <16 x i8>, ptr %47, align 1, !tbaa !5
  %48 = icmp eq <16 x i8> %wide.load, zeroinitializer
  %49 = icmp eq <16 x i8> %wide.load265, zeroinitializer
  %50 = extractelement <16 x i1> %48, i64 0
  br i1 %50, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body
  %51 = getelementptr inbounds i8, ptr %34, i64 %index
  store i8 32, ptr %51, align 1, !tbaa !5
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body
  %52 = extractelement <16 x i1> %48, i64 1
  br i1 %52, label %pred.store.if266, label %pred.store.continue267

pred.store.if266:                                 ; preds = %pred.store.continue
  %53 = or disjoint i64 %index, 1
  %54 = getelementptr inbounds i8, ptr %34, i64 %53
  store i8 32, ptr %54, align 1, !tbaa !5
  br label %pred.store.continue267

pred.store.continue267:                           ; preds = %pred.store.if266, %pred.store.continue
  %55 = extractelement <16 x i1> %48, i64 2
  br i1 %55, label %pred.store.if268, label %pred.store.continue269

pred.store.if268:                                 ; preds = %pred.store.continue267
  %56 = or disjoint i64 %index, 2
  %57 = getelementptr inbounds i8, ptr %34, i64 %56
  store i8 32, ptr %57, align 1, !tbaa !5
  br label %pred.store.continue269

pred.store.continue269:                           ; preds = %pred.store.if268, %pred.store.continue267
  %58 = extractelement <16 x i1> %48, i64 3
  br i1 %58, label %pred.store.if270, label %pred.store.continue271

pred.store.if270:                                 ; preds = %pred.store.continue269
  %59 = or disjoint i64 %index, 3
  %60 = getelementptr inbounds i8, ptr %34, i64 %59
  store i8 32, ptr %60, align 1, !tbaa !5
  br label %pred.store.continue271

pred.store.continue271:                           ; preds = %pred.store.if270, %pred.store.continue269
  %61 = extractelement <16 x i1> %48, i64 4
  br i1 %61, label %pred.store.if272, label %pred.store.continue273

pred.store.if272:                                 ; preds = %pred.store.continue271
  %62 = or disjoint i64 %index, 4
  %63 = getelementptr inbounds i8, ptr %34, i64 %62
  store i8 32, ptr %63, align 1, !tbaa !5
  br label %pred.store.continue273

pred.store.continue273:                           ; preds = %pred.store.if272, %pred.store.continue271
  %64 = extractelement <16 x i1> %48, i64 5
  br i1 %64, label %pred.store.if274, label %pred.store.continue275

pred.store.if274:                                 ; preds = %pred.store.continue273
  %65 = or disjoint i64 %index, 5
  %66 = getelementptr inbounds i8, ptr %34, i64 %65
  store i8 32, ptr %66, align 1, !tbaa !5
  br label %pred.store.continue275

pred.store.continue275:                           ; preds = %pred.store.if274, %pred.store.continue273
  %67 = extractelement <16 x i1> %48, i64 6
  br i1 %67, label %pred.store.if276, label %pred.store.continue277

pred.store.if276:                                 ; preds = %pred.store.continue275
  %68 = or disjoint i64 %index, 6
  %69 = getelementptr inbounds i8, ptr %34, i64 %68
  store i8 32, ptr %69, align 1, !tbaa !5
  br label %pred.store.continue277

pred.store.continue277:                           ; preds = %pred.store.if276, %pred.store.continue275
  %70 = extractelement <16 x i1> %48, i64 7
  br i1 %70, label %pred.store.if278, label %pred.store.continue279

pred.store.if278:                                 ; preds = %pred.store.continue277
  %71 = or disjoint i64 %index, 7
  %72 = getelementptr inbounds i8, ptr %34, i64 %71
  store i8 32, ptr %72, align 1, !tbaa !5
  br label %pred.store.continue279

pred.store.continue279:                           ; preds = %pred.store.if278, %pred.store.continue277
  %73 = extractelement <16 x i1> %48, i64 8
  br i1 %73, label %pred.store.if280, label %pred.store.continue281

pred.store.if280:                                 ; preds = %pred.store.continue279
  %74 = or disjoint i64 %index, 8
  %75 = getelementptr inbounds i8, ptr %34, i64 %74
  store i8 32, ptr %75, align 1, !tbaa !5
  br label %pred.store.continue281

pred.store.continue281:                           ; preds = %pred.store.if280, %pred.store.continue279
  %76 = extractelement <16 x i1> %48, i64 9
  br i1 %76, label %pred.store.if282, label %pred.store.continue283

pred.store.if282:                                 ; preds = %pred.store.continue281
  %77 = or disjoint i64 %index, 9
  %78 = getelementptr inbounds i8, ptr %34, i64 %77
  store i8 32, ptr %78, align 1, !tbaa !5
  br label %pred.store.continue283

pred.store.continue283:                           ; preds = %pred.store.if282, %pred.store.continue281
  %79 = extractelement <16 x i1> %48, i64 10
  br i1 %79, label %pred.store.if284, label %pred.store.continue285

pred.store.if284:                                 ; preds = %pred.store.continue283
  %80 = or disjoint i64 %index, 10
  %81 = getelementptr inbounds i8, ptr %34, i64 %80
  store i8 32, ptr %81, align 1, !tbaa !5
  br label %pred.store.continue285

pred.store.continue285:                           ; preds = %pred.store.if284, %pred.store.continue283
  %82 = extractelement <16 x i1> %48, i64 11
  br i1 %82, label %pred.store.if286, label %pred.store.continue287

pred.store.if286:                                 ; preds = %pred.store.continue285
  %83 = or disjoint i64 %index, 11
  %84 = getelementptr inbounds i8, ptr %34, i64 %83
  store i8 32, ptr %84, align 1, !tbaa !5
  br label %pred.store.continue287

pred.store.continue287:                           ; preds = %pred.store.if286, %pred.store.continue285
  %85 = extractelement <16 x i1> %48, i64 12
  br i1 %85, label %pred.store.if288, label %pred.store.continue289

pred.store.if288:                                 ; preds = %pred.store.continue287
  %86 = or disjoint i64 %index, 12
  %87 = getelementptr inbounds i8, ptr %34, i64 %86
  store i8 32, ptr %87, align 1, !tbaa !5
  br label %pred.store.continue289

pred.store.continue289:                           ; preds = %pred.store.if288, %pred.store.continue287
  %88 = extractelement <16 x i1> %48, i64 13
  br i1 %88, label %pred.store.if290, label %pred.store.continue291

pred.store.if290:                                 ; preds = %pred.store.continue289
  %89 = or disjoint i64 %index, 13
  %90 = getelementptr inbounds i8, ptr %34, i64 %89
  store i8 32, ptr %90, align 1, !tbaa !5
  br label %pred.store.continue291

pred.store.continue291:                           ; preds = %pred.store.if290, %pred.store.continue289
  %91 = extractelement <16 x i1> %48, i64 14
  br i1 %91, label %pred.store.if292, label %pred.store.continue293

pred.store.if292:                                 ; preds = %pred.store.continue291
  %92 = or disjoint i64 %index, 14
  %93 = getelementptr inbounds i8, ptr %34, i64 %92
  store i8 32, ptr %93, align 1, !tbaa !5
  br label %pred.store.continue293

pred.store.continue293:                           ; preds = %pred.store.if292, %pred.store.continue291
  %94 = extractelement <16 x i1> %48, i64 15
  br i1 %94, label %pred.store.if294, label %pred.store.continue295

pred.store.if294:                                 ; preds = %pred.store.continue293
  %95 = or disjoint i64 %index, 15
  %96 = getelementptr inbounds i8, ptr %34, i64 %95
  store i8 32, ptr %96, align 1, !tbaa !5
  br label %pred.store.continue295

pred.store.continue295:                           ; preds = %pred.store.if294, %pred.store.continue293
  %97 = extractelement <16 x i1> %49, i64 0
  br i1 %97, label %pred.store.if296, label %pred.store.continue297

pred.store.if296:                                 ; preds = %pred.store.continue295
  %98 = getelementptr inbounds i8, ptr %34, i64 %45
  store i8 32, ptr %98, align 1, !tbaa !5
  br label %pred.store.continue297

pred.store.continue297:                           ; preds = %pred.store.if296, %pred.store.continue295
  %99 = extractelement <16 x i1> %49, i64 1
  br i1 %99, label %pred.store.if298, label %pred.store.continue299

pred.store.if298:                                 ; preds = %pred.store.continue297
  %100 = or disjoint i64 %index, 17
  %101 = getelementptr inbounds i8, ptr %34, i64 %100
  store i8 32, ptr %101, align 1, !tbaa !5
  br label %pred.store.continue299

pred.store.continue299:                           ; preds = %pred.store.if298, %pred.store.continue297
  %102 = extractelement <16 x i1> %49, i64 2
  br i1 %102, label %pred.store.if300, label %pred.store.continue301

pred.store.if300:                                 ; preds = %pred.store.continue299
  %103 = or disjoint i64 %index, 18
  %104 = getelementptr inbounds i8, ptr %34, i64 %103
  store i8 32, ptr %104, align 1, !tbaa !5
  br label %pred.store.continue301

pred.store.continue301:                           ; preds = %pred.store.if300, %pred.store.continue299
  %105 = extractelement <16 x i1> %49, i64 3
  br i1 %105, label %pred.store.if302, label %pred.store.continue303

pred.store.if302:                                 ; preds = %pred.store.continue301
  %106 = or disjoint i64 %index, 19
  %107 = getelementptr inbounds i8, ptr %34, i64 %106
  store i8 32, ptr %107, align 1, !tbaa !5
  br label %pred.store.continue303

pred.store.continue303:                           ; preds = %pred.store.if302, %pred.store.continue301
  %108 = extractelement <16 x i1> %49, i64 4
  br i1 %108, label %pred.store.if304, label %pred.store.continue305

pred.store.if304:                                 ; preds = %pred.store.continue303
  %109 = or disjoint i64 %index, 20
  %110 = getelementptr inbounds i8, ptr %34, i64 %109
  store i8 32, ptr %110, align 1, !tbaa !5
  br label %pred.store.continue305

pred.store.continue305:                           ; preds = %pred.store.if304, %pred.store.continue303
  %111 = extractelement <16 x i1> %49, i64 5
  br i1 %111, label %pred.store.if306, label %pred.store.continue307

pred.store.if306:                                 ; preds = %pred.store.continue305
  %112 = or disjoint i64 %index, 21
  %113 = getelementptr inbounds i8, ptr %34, i64 %112
  store i8 32, ptr %113, align 1, !tbaa !5
  br label %pred.store.continue307

pred.store.continue307:                           ; preds = %pred.store.if306, %pred.store.continue305
  %114 = extractelement <16 x i1> %49, i64 6
  br i1 %114, label %pred.store.if308, label %pred.store.continue309

pred.store.if308:                                 ; preds = %pred.store.continue307
  %115 = or disjoint i64 %index, 22
  %116 = getelementptr inbounds i8, ptr %34, i64 %115
  store i8 32, ptr %116, align 1, !tbaa !5
  br label %pred.store.continue309

pred.store.continue309:                           ; preds = %pred.store.if308, %pred.store.continue307
  %117 = extractelement <16 x i1> %49, i64 7
  br i1 %117, label %pred.store.if310, label %pred.store.continue311

pred.store.if310:                                 ; preds = %pred.store.continue309
  %118 = or disjoint i64 %index, 23
  %119 = getelementptr inbounds i8, ptr %34, i64 %118
  store i8 32, ptr %119, align 1, !tbaa !5
  br label %pred.store.continue311

pred.store.continue311:                           ; preds = %pred.store.if310, %pred.store.continue309
  %120 = extractelement <16 x i1> %49, i64 8
  br i1 %120, label %pred.store.if312, label %pred.store.continue313

pred.store.if312:                                 ; preds = %pred.store.continue311
  %121 = or disjoint i64 %index, 24
  %122 = getelementptr inbounds i8, ptr %34, i64 %121
  store i8 32, ptr %122, align 1, !tbaa !5
  br label %pred.store.continue313

pred.store.continue313:                           ; preds = %pred.store.if312, %pred.store.continue311
  %123 = extractelement <16 x i1> %49, i64 9
  br i1 %123, label %pred.store.if314, label %pred.store.continue315

pred.store.if314:                                 ; preds = %pred.store.continue313
  %124 = or disjoint i64 %index, 25
  %125 = getelementptr inbounds i8, ptr %34, i64 %124
  store i8 32, ptr %125, align 1, !tbaa !5
  br label %pred.store.continue315

pred.store.continue315:                           ; preds = %pred.store.if314, %pred.store.continue313
  %126 = extractelement <16 x i1> %49, i64 10
  br i1 %126, label %pred.store.if316, label %pred.store.continue317

pred.store.if316:                                 ; preds = %pred.store.continue315
  %127 = or disjoint i64 %index, 26
  %128 = getelementptr inbounds i8, ptr %34, i64 %127
  store i8 32, ptr %128, align 1, !tbaa !5
  br label %pred.store.continue317

pred.store.continue317:                           ; preds = %pred.store.if316, %pred.store.continue315
  %129 = extractelement <16 x i1> %49, i64 11
  br i1 %129, label %pred.store.if318, label %pred.store.continue319

pred.store.if318:                                 ; preds = %pred.store.continue317
  %130 = or disjoint i64 %index, 27
  %131 = getelementptr inbounds i8, ptr %34, i64 %130
  store i8 32, ptr %131, align 1, !tbaa !5
  br label %pred.store.continue319

pred.store.continue319:                           ; preds = %pred.store.if318, %pred.store.continue317
  %132 = extractelement <16 x i1> %49, i64 12
  br i1 %132, label %pred.store.if320, label %pred.store.continue321

pred.store.if320:                                 ; preds = %pred.store.continue319
  %133 = or disjoint i64 %index, 28
  %134 = getelementptr inbounds i8, ptr %34, i64 %133
  store i8 32, ptr %134, align 1, !tbaa !5
  br label %pred.store.continue321

pred.store.continue321:                           ; preds = %pred.store.if320, %pred.store.continue319
  %135 = extractelement <16 x i1> %49, i64 13
  br i1 %135, label %pred.store.if322, label %pred.store.continue323

pred.store.if322:                                 ; preds = %pred.store.continue321
  %136 = or disjoint i64 %index, 29
  %137 = getelementptr inbounds i8, ptr %34, i64 %136
  store i8 32, ptr %137, align 1, !tbaa !5
  br label %pred.store.continue323

pred.store.continue323:                           ; preds = %pred.store.if322, %pred.store.continue321
  %138 = extractelement <16 x i1> %49, i64 14
  br i1 %138, label %pred.store.if324, label %pred.store.continue325

pred.store.if324:                                 ; preds = %pred.store.continue323
  %139 = or disjoint i64 %index, 30
  %140 = getelementptr inbounds i8, ptr %34, i64 %139
  store i8 32, ptr %140, align 1, !tbaa !5
  br label %pred.store.continue325

pred.store.continue325:                           ; preds = %pred.store.if324, %pred.store.continue323
  %141 = extractelement <16 x i1> %49, i64 15
  br i1 %141, label %pred.store.if326, label %pred.store.continue327

pred.store.if326:                                 ; preds = %pred.store.continue325
  %142 = or disjoint i64 %index, 31
  %143 = getelementptr inbounds i8, ptr %34, i64 %142
  store i8 32, ptr %143, align 1, !tbaa !5
  br label %pred.store.continue327

pred.store.continue327:                           ; preds = %pred.store.if326, %pred.store.continue325
  %index.next = add nuw i64 %index, 32
  %144 = icmp eq i64 %index.next, %n.vec
  br i1 %144, label %middle.block, label %vector.body, !llvm.loop !8

middle.block:                                     ; preds = %pred.store.continue327
  %cmp.n = icmp eq i64 %24, %n.vec
  br i1 %cmp.n, label %.preheader195, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %n.vec.remaining = and i64 %24, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %vec.epilog.scalar.ph.preheader, label %vec.epilog.ph

vec.epilog.scalar.ph.preheader:                   ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %.0161205.ph = phi i64 [ 0, %iter.check ], [ %n.vec, %vec.epilog.iter.check ], [ %n.vec329, %vec.epilog.middle.block ]
  br label %vec.epilog.scalar.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec329 = and i64 %24, 9223372036854775800
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %pred.store.continue347, %vec.epilog.ph
  %index330 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next348, %pred.store.continue347 ]
  %145 = getelementptr inbounds i8, ptr %34, i64 %index330
  %wide.load331 = load <8 x i8>, ptr %145, align 1, !tbaa !5
  %146 = icmp eq <8 x i8> %wide.load331, zeroinitializer
  %147 = extractelement <8 x i1> %146, i64 0
  br i1 %147, label %pred.store.if332, label %pred.store.continue333

pred.store.if332:                                 ; preds = %vec.epilog.vector.body
  %148 = getelementptr inbounds i8, ptr %34, i64 %index330
  store i8 32, ptr %148, align 1, !tbaa !5
  br label %pred.store.continue333

pred.store.continue333:                           ; preds = %pred.store.if332, %vec.epilog.vector.body
  %149 = extractelement <8 x i1> %146, i64 1
  br i1 %149, label %pred.store.if334, label %pred.store.continue335

pred.store.if334:                                 ; preds = %pred.store.continue333
  %150 = or disjoint i64 %index330, 1
  %151 = getelementptr inbounds i8, ptr %34, i64 %150
  store i8 32, ptr %151, align 1, !tbaa !5
  br label %pred.store.continue335

pred.store.continue335:                           ; preds = %pred.store.if334, %pred.store.continue333
  %152 = extractelement <8 x i1> %146, i64 2
  br i1 %152, label %pred.store.if336, label %pred.store.continue337

pred.store.if336:                                 ; preds = %pred.store.continue335
  %153 = or disjoint i64 %index330, 2
  %154 = getelementptr inbounds i8, ptr %34, i64 %153
  store i8 32, ptr %154, align 1, !tbaa !5
  br label %pred.store.continue337

pred.store.continue337:                           ; preds = %pred.store.if336, %pred.store.continue335
  %155 = extractelement <8 x i1> %146, i64 3
  br i1 %155, label %pred.store.if338, label %pred.store.continue339

pred.store.if338:                                 ; preds = %pred.store.continue337
  %156 = or disjoint i64 %index330, 3
  %157 = getelementptr inbounds i8, ptr %34, i64 %156
  store i8 32, ptr %157, align 1, !tbaa !5
  br label %pred.store.continue339

pred.store.continue339:                           ; preds = %pred.store.if338, %pred.store.continue337
  %158 = extractelement <8 x i1> %146, i64 4
  br i1 %158, label %pred.store.if340, label %pred.store.continue341

pred.store.if340:                                 ; preds = %pred.store.continue339
  %159 = or disjoint i64 %index330, 4
  %160 = getelementptr inbounds i8, ptr %34, i64 %159
  store i8 32, ptr %160, align 1, !tbaa !5
  br label %pred.store.continue341

pred.store.continue341:                           ; preds = %pred.store.if340, %pred.store.continue339
  %161 = extractelement <8 x i1> %146, i64 5
  br i1 %161, label %pred.store.if342, label %pred.store.continue343

pred.store.if342:                                 ; preds = %pred.store.continue341
  %162 = or disjoint i64 %index330, 5
  %163 = getelementptr inbounds i8, ptr %34, i64 %162
  store i8 32, ptr %163, align 1, !tbaa !5
  br label %pred.store.continue343

pred.store.continue343:                           ; preds = %pred.store.if342, %pred.store.continue341
  %164 = extractelement <8 x i1> %146, i64 6
  br i1 %164, label %pred.store.if344, label %pred.store.continue345

pred.store.if344:                                 ; preds = %pred.store.continue343
  %165 = or disjoint i64 %index330, 6
  %166 = getelementptr inbounds i8, ptr %34, i64 %165
  store i8 32, ptr %166, align 1, !tbaa !5
  br label %pred.store.continue345

pred.store.continue345:                           ; preds = %pred.store.if344, %pred.store.continue343
  %167 = extractelement <8 x i1> %146, i64 7
  br i1 %167, label %pred.store.if346, label %pred.store.continue347

pred.store.if346:                                 ; preds = %pred.store.continue345
  %168 = or disjoint i64 %index330, 7
  %169 = getelementptr inbounds i8, ptr %34, i64 %168
  store i8 32, ptr %169, align 1, !tbaa !5
  br label %pred.store.continue347

pred.store.continue347:                           ; preds = %pred.store.if346, %pred.store.continue345
  %index.next348 = add nuw i64 %index330, 8
  %170 = icmp eq i64 %index.next348, %n.vec329
  br i1 %170, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !12

vec.epilog.middle.block:                          ; preds = %pred.store.continue347
  %cmp.n349 = icmp eq i64 %24, %n.vec329
  br i1 %cmp.n349, label %.preheader195, label %vec.epilog.scalar.ph.preheader

.preheader195:                                    ; preds = %175, %vec.epilog.middle.block, %middle.block
  %invariant.gep = getelementptr i8, ptr %34, i64 -1
  br label %177

vec.epilog.scalar.ph:                             ; preds = %vec.epilog.scalar.ph.preheader, %175
  %.0161205 = phi i64 [ %176, %175 ], [ %.0161205.ph, %vec.epilog.scalar.ph.preheader ]
  %171 = getelementptr inbounds i8, ptr %34, i64 %.0161205
  %172 = load i8, ptr %171, align 1, !tbaa !5
  %173 = icmp eq i8 %172, 0
  br i1 %173, label %174, label %175

174:                                              ; preds = %vec.epilog.scalar.ph
  store i8 32, ptr %171, align 1, !tbaa !5
  br label %175

175:                                              ; preds = %vec.epilog.scalar.ph, %174
  %176 = add nuw nsw i64 %.0161205, 1
  %exitcond.not = icmp eq i64 %176, %24
  br i1 %exitcond.not, label %.preheader195, label %vec.epilog.scalar.ph, !llvm.loop !13

177:                                              ; preds = %.preheader195, %179
  %.0145206 = phi i64 [ %24, %.preheader195 ], [ %180, %179 ]
  %gep = getelementptr i8, ptr %invariant.gep, i64 %.0145206
  %178 = load i8, ptr %gep, align 1, !tbaa !5
  switch i8 %178, label %.thread188 [
    i8 32, label %179
    i8 13, label %179
    i8 10, label %179
    i8 9, label %179
  ]

179:                                              ; preds = %177, %177, %177, %177
  %180 = add nsw i64 %.0145206, -1
  %.not167 = icmp eq i64 %180, 0
  br i1 %.not167, label %.thread186, label %177

.thread188:                                       ; preds = %177
  %181 = getelementptr inbounds i8, ptr %34, i64 %.0145206
  store i8 10, ptr %181, align 1, !tbaa !5
  %182 = getelementptr i8, ptr %181, i64 1
  store i8 0, ptr %182, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #9
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #9
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  %183 = load i8, ptr %34, align 1, !tbaa !5
  %.not168215 = icmp eq i8 %183, 0
  br i1 %.not168215, label %._crit_edge220.thread, label %.preheader194.preheader

.preheader194.preheader:                          ; preds = %.thread188
  %broadcast.splatinsert = insertelement <2 x i8> poison, i8 %1, i64 0
  %broadcast.splat = shufflevector <2 x i8> %broadcast.splatinsert, <2 x i8> poison, <2 x i32> zeroinitializer
  br label %.preheader194

.preheader194:                                    ; preds = %.preheader194.preheader, %._crit_edge213
  %184 = phi ptr [ %214, %._crit_edge213 ], [ %34, %.preheader194.preheader ]
  %.0155219 = phi i64 [ %213, %._crit_edge213 ], [ 0, %.preheader194.preheader ]
  %.0159217 = phi i64 [ %.0152.lcssa250254, %._crit_edge213 ], [ 0, %.preheader194.preheader ]
  %.0160216 = phi i64 [ %212, %._crit_edge213 ], [ 0, %.preheader194.preheader ]
  br label %185

._crit_edge220:                                   ; preds = %._crit_edge213
  %.not169 = icmp eq i64 %212, 0
  br i1 %.not169, label %._crit_edge220.thread, label %231

185:                                              ; preds = %185, %.preheader194
  %indvars.iv = phi i64 [ %indvars.iv.next, %185 ], [ 1, %.preheader194 ]
  %.0154 = phi i64 [ %189, %185 ], [ 0, %.preheader194 ]
  %186 = add i64 %.0154, %.0155219
  %187 = getelementptr inbounds i8, ptr %34, i64 %186
  %188 = load i8, ptr %187, align 1, !tbaa !5
  %.not = icmp eq i8 %188, 10
  %189 = add i64 %.0154, 1
  %indvars.iv.next = add i64 %indvars.iv, 1
  br i1 %.not, label %.preheader193, label %185, !llvm.loop !14

.preheader193:                                    ; preds = %185
  %.not229 = icmp eq i64 %.0154, 0
  br i1 %.not229, label %._crit_edge.thread, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.preheader193
  %min.iters.check351 = icmp ult i64 %.0154, 4
  br i1 %min.iters.check351, label %.lr.ph.preheader363, label %vector.ph352

.lr.ph.preheader363:                              ; preds = %middle.block350, %.lr.ph.preheader
  %.0151208.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec354, %middle.block350 ]
  %.0152207.ph = phi i64 [ 1, %.lr.ph.preheader ], [ %199, %middle.block350 ]
  br label %.lr.ph

vector.ph352:                                     ; preds = %.lr.ph.preheader
  %n.vec354 = and i64 %.0154, -4
  br label %vector.body356

vector.body356:                                   ; preds = %vector.body356, %vector.ph352
  %index357 = phi i64 [ 0, %vector.ph352 ], [ %index.next361, %vector.body356 ]
  %vec.phi = phi <2 x i64> [ <i64 1, i64 0>, %vector.ph352 ], [ %196, %vector.body356 ]
  %vec.phi358 = phi <2 x i64> [ zeroinitializer, %vector.ph352 ], [ %197, %vector.body356 ]
  %190 = getelementptr i8, ptr %184, i64 %index357
  %191 = getelementptr i8, ptr %190, i64 2
  %wide.load359 = load <2 x i8>, ptr %190, align 1, !tbaa !5
  %wide.load360 = load <2 x i8>, ptr %191, align 1, !tbaa !5
  %192 = icmp eq <2 x i8> %wide.load359, %broadcast.splat
  %193 = icmp eq <2 x i8> %wide.load360, %broadcast.splat
  %194 = zext <2 x i1> %192 to <2 x i64>
  %195 = zext <2 x i1> %193 to <2 x i64>
  %196 = add <2 x i64> %vec.phi, %194
  %197 = add <2 x i64> %vec.phi358, %195
  %index.next361 = add nuw i64 %index357, 4
  %198 = icmp eq i64 %index.next361, %n.vec354
  br i1 %198, label %middle.block350, label %vector.body356, !llvm.loop !15

middle.block350:                                  ; preds = %vector.body356
  %bin.rdx = add <2 x i64> %197, %196
  %199 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n362 = icmp eq i64 %.0154, %n.vec354
  br i1 %cmp.n362, label %._crit_edge, label %.lr.ph.preheader363

._crit_edge:                                      ; preds = %.lr.ph, %middle.block350
  %spec.select.lcssa = phi i64 [ %199, %middle.block350 ], [ %spec.select, %.lr.ph ]
  %.not171 = icmp eq i64 %.0159217, 0
  %.not172 = icmp eq i64 %.0159217, %spec.select.lcssa
  %or.cond = select i1 %.not171, i1 true, i1 %.not172
  br i1 %or.cond, label %.preheader192, label %205

._crit_edge.thread:                               ; preds = %.preheader193
  %switch = icmp ult i64 %.0159217, 2
  br i1 %switch, label %.lr.ph212.preheader, label %205

.preheader192:                                    ; preds = %._crit_edge
  %.not230 = icmp eq i64 %189, 0
  br i1 %.not230, label %._crit_edge213, label %.lr.ph212.preheader

.lr.ph212.preheader:                              ; preds = %._crit_edge.thread, %.preheader192
  %.0152.lcssa250253 = phi i64 [ %spec.select.lcssa, %.preheader192 ], [ 1, %._crit_edge.thread ]
  br label %.lr.ph212

.lr.ph:                                           ; preds = %.lr.ph.preheader363, %.lr.ph
  %.0151208 = phi i64 [ %204, %.lr.ph ], [ %.0151208.ph, %.lr.ph.preheader363 ]
  %.0152207 = phi i64 [ %spec.select, %.lr.ph ], [ %.0152207.ph, %.lr.ph.preheader363 ]
  %200 = getelementptr i8, ptr %184, i64 %.0151208
  %201 = load i8, ptr %200, align 1, !tbaa !5
  %202 = icmp eq i8 %201, %1
  %203 = zext i1 %202 to i64
  %spec.select = add i64 %.0152207, %203
  %204 = add nuw i64 %.0151208, 1
  %exitcond238.not = icmp eq i64 %204, %.0154
  br i1 %exitcond238.not, label %._crit_edge, label %.lr.ph, !llvm.loop !16

205:                                              ; preds = %._crit_edge.thread, %._crit_edge
  %206 = call ptr @__cxa_allocate_exception(i64 32) #9
  invoke void @_ZN6alglib8ap_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(32) %206, ptr noundef nonnull @.str.121)
          to label %207 unwind label %208

207:                                              ; preds = %205
  invoke void @__cxa_throw(ptr %206, ptr nonnull @_ZTIN6alglib8ap_errorE, ptr nonnull @_ZN6alglib8ap_errorD2Ev) #10
          to label %289 unwind label %210

208:                                              ; preds = %205
  %209 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %206) #9
  br label %286

210:                                              ; preds = %207
  %211 = landingpad { ptr, i32 }
          cleanup
  br label %286

._crit_edge213:                                   ; preds = %230, %.preheader192
  %.0152.lcssa250254 = phi i64 [ %spec.select.lcssa, %.preheader192 ], [ %.0152.lcssa250253, %230 ]
  %212 = add i64 %.0160216, 1
  %213 = add i64 %186, 1
  %214 = getelementptr inbounds i8, ptr %34, i64 %213
  %215 = load i8, ptr %214, align 1, !tbaa !5
  %.not168 = icmp eq i8 %215, 0
  br i1 %.not168, label %._crit_edge220, label %.preheader194, !llvm.loop !17

.lr.ph212:                                        ; preds = %.lr.ph212.preheader, %230
  %.0148211 = phi i64 [ %.pre-phi, %230 ], [ 0, %.lr.ph212.preheader ]
  %.0149210 = phi i64 [ %.1150, %230 ], [ 0, %.lr.ph212.preheader ]
  %216 = getelementptr i8, ptr %184, i64 %.0148211
  %217 = load i8, ptr %216, align 1, !tbaa !5
  %218 = icmp eq i8 %217, %1
  %219 = icmp eq i8 %217, 10
  %or.cond180 = or i1 %218, %219
  br i1 %or.cond180, label %220, label %.lr.ph212._crit_edge

.lr.ph212._crit_edge:                             ; preds = %.lr.ph212
  %.pre = add nuw i64 %.0148211, 1
  br label %230

220:                                              ; preds = %.lr.ph212
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #9
  %221 = add i64 %.0149210, %.0155219
  store i64 %221, ptr %9, align 8, !tbaa !18
  invoke void @_ZNSt6vectorImSaImEE9push_backEOm(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %9)
          to label %222 unwind label %226

222:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #9
  %223 = sub i64 %.0148211, %.0149210
  store i64 %223, ptr %10, align 8, !tbaa !18
  invoke void @_ZNSt6vectorImSaImEE9push_backEOm(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %224 unwind label %228

224:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  %225 = add nuw i64 %.0148211, 1
  br label %230

226:                                              ; preds = %220
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  br label %286

228:                                              ; preds = %222
  %229 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  br label %286

230:                                              ; preds = %.lr.ph212._crit_edge, %224
  %.pre-phi = phi i64 [ %.pre, %.lr.ph212._crit_edge ], [ %225, %224 ]
  %.1150 = phi i64 [ %.0149210, %.lr.ph212._crit_edge ], [ %225, %224 ]
  %exitcond239.not = icmp eq i64 %.pre-phi, %indvars.iv
  br i1 %exitcond239.not, label %._crit_edge213, label %.lr.ph212, !llvm.loop !20

._crit_edge220.thread:                            ; preds = %.thread188, %._crit_edge220
  call void @abort() #11
  unreachable

231:                                              ; preds = %._crit_edge220
  %.not170 = icmp eq i64 %.0152.lcssa250254, 0
  br i1 %.not170, label %232, label %233

232:                                              ; preds = %231
  call void @abort() #11
  unreachable

233:                                              ; preds = %231
  %234 = mul i64 %.0152.lcssa250254, %212
  %235 = call noundef i64 @_ZNKSt6vectorImSaImEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  %236 = icmp eq i64 %234, %235
  br i1 %236, label %238, label %237

237:                                              ; preds = %233
  call void @abort() #11
  unreachable

238:                                              ; preds = %233
  %239 = call noundef i64 @_ZNKSt6vectorImSaImEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  %240 = icmp eq i64 %234, %239
  br i1 %240, label %242, label %241

241:                                              ; preds = %238
  call void @abort() #11
  unreachable

242:                                              ; preds = %238
  %243 = icmp ne i64 %.0160216, 0
  %brmerge = or i1 %.not.not, %243
  br i1 %brmerge, label %244, label %.loopexit

244:                                              ; preds = %242
  %245 = zext nneg i32 %11 to i64
  %246 = call ptr @localeconv() #9
  %247 = sub nuw i64 %212, %245
  invoke void @_ZN6alglib17ae_matrix_wrapper9setlengthEll(ptr noundef nonnull align 8 dereferenceable(97) %3, i64 noundef %247, i64 noundef %.0152.lcssa250254)
          to label %.preheader191 unwind label %251

.preheader191:                                    ; preds = %244
  %248 = icmp ugt i64 %212, %245
  br i1 %248, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %.preheader191, %253
  %.0138228 = phi i64 [ %254, %253 ], [ %245, %.preheader191 ]
  %249 = mul i64 %.0138228, %.0152.lcssa250254
  %250 = sub nuw i64 %.0138228, %245
  br label %255

251:                                              ; preds = %244
  %252 = landingpad { ptr, i32 }
          cleanup
  br label %286

253:                                              ; preds = %._crit_edge226
  %254 = add i64 %.0138228, 1
  %exitcond242.not = icmp eq i64 %.0138228, %.0160216
  br i1 %exitcond242.not, label %.loopexit, label %.preheader, !llvm.loop !21

255:                                              ; preds = %.preheader, %._crit_edge226
  %.0137227 = phi i64 [ 0, %.preheader ], [ %271, %._crit_edge226 ]
  %256 = add i64 %.0137227, %249
  %257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %7, i64 noundef %256) #9
  %258 = load i64, ptr %257, align 8, !tbaa !18
  %259 = getelementptr inbounds i8, ptr %34, i64 %258
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %256) #9
  %261 = load i64, ptr %260, align 8, !tbaa !18
  %.not231 = icmp eq i64 %261, 0
  br i1 %.not231, label %._crit_edge226, label %.lr.ph225.preheader

.lr.ph225.preheader:                              ; preds = %255
  %xtraiter = and i64 %261, 1
  %262 = icmp eq i64 %261, 1
  br i1 %262, label %._crit_edge226.loopexit.unr-lcssa, label %.lr.ph225.preheader.new

.lr.ph225.preheader.new:                          ; preds = %.lr.ph225.preheader
  %unroll_iter = and i64 %261, -2
  br label %.lr.ph225

._crit_edge226.loopexit.unr-lcssa:                ; preds = %283, %.lr.ph225.preheader
  %.0223.unr = phi i64 [ 0, %.lr.ph225.preheader ], [ %284, %283 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge226, label %.lr.ph225.epil

.lr.ph225.epil:                                   ; preds = %._crit_edge226.loopexit.unr-lcssa
  %263 = getelementptr inbounds i8, ptr %259, i64 %.0223.unr
  %264 = load i8, ptr %263, align 1, !tbaa !5
  switch i8 %264, label %._crit_edge226 [
    i8 46, label %265
    i8 44, label %265
  ]

265:                                              ; preds = %.lr.ph225.epil, %.lr.ph225.epil
  %266 = load ptr, ptr %246, align 8, !tbaa !22
  %267 = load i8, ptr %266, align 1, !tbaa !5
  store i8 %267, ptr %263, align 1, !tbaa !5
  br label %._crit_edge226

._crit_edge226:                                   ; preds = %._crit_edge226.loopexit.unr-lcssa, %265, %.lr.ph225.epil, %255
  %268 = call double @atof(ptr noundef %259) #12
  %269 = call noundef ptr @_ZN6alglib13real_2d_arrayixEl(ptr noundef nonnull align 8 dereferenceable(97) %3, i64 noundef %250)
  %270 = getelementptr inbounds double, ptr %269, i64 %.0137227
  store double %268, ptr %270, align 8, !tbaa !25
  %271 = add nuw i64 %.0137227, 1
  %exitcond241.not = icmp eq i64 %271, %.0152.lcssa250254
  br i1 %exitcond241.not, label %253, label %255, !llvm.loop !27

.lr.ph225:                                        ; preds = %283, %.lr.ph225.preheader.new
  %.0223 = phi i64 [ 0, %.lr.ph225.preheader.new ], [ %284, %283 ]
  %niter = phi i64 [ 0, %.lr.ph225.preheader.new ], [ %niter.next.1, %283 ]
  %272 = getelementptr inbounds i8, ptr %259, i64 %.0223
  %273 = load i8, ptr %272, align 1, !tbaa !5
  switch i8 %273, label %.lr.ph225.1 [
    i8 46, label %274
    i8 44, label %274
  ]

274:                                              ; preds = %.lr.ph225, %.lr.ph225
  %275 = load ptr, ptr %246, align 8, !tbaa !22
  %276 = load i8, ptr %275, align 1, !tbaa !5
  store i8 %276, ptr %272, align 1, !tbaa !5
  br label %.lr.ph225.1

.lr.ph225.1:                                      ; preds = %.lr.ph225, %274
  %277 = or disjoint i64 %.0223, 1
  %278 = getelementptr inbounds i8, ptr %259, i64 %277
  %279 = load i8, ptr %278, align 1, !tbaa !5
  switch i8 %279, label %283 [
    i8 46, label %280
    i8 44, label %280
  ]

280:                                              ; preds = %.lr.ph225.1, %.lr.ph225.1
  %281 = load ptr, ptr %246, align 8, !tbaa !22
  %282 = load i8, ptr %281, align 1, !tbaa !5
  store i8 %282, ptr %278, align 1, !tbaa !5
  br label %283

283:                                              ; preds = %280, %.lr.ph225.1
  %284 = add nuw i64 %.0223, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge226.loopexit.unr-lcssa, label %.lr.ph225, !llvm.loop !28

.loopexit:                                        ; preds = %253, %.preheader191, %242
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #9
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  br label %.thread186

.thread186:                                       ; preds = %179, %.loopexit
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %285

285:                                              ; preds = %.thread186, %29
  ret void

286:                                              ; preds = %208, %210, %228, %226, %251
  %.pn174.pn = phi { ptr, i32 } [ %252, %251 ], [ %211, %210 ], [ %209, %208 ], [ %229, %228 ], [ %227, %226 ]
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #9
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #9
  br label %287

287:                                              ; preds = %286, %38
  %.pn174.pn.pn = phi { ptr, i32 } [ %.pn174.pn, %286 ], [ %39, %38 ]
  call void @_ZNSt6vectorIcSaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  br label %288

288:                                              ; preds = %287, %17
  %.pn178 = phi { ptr, i32 } [ %18, %17 ], [ %.pn174.pn.pn, %287 ]
  resume { ptr, i32 } %.pn178

289:                                              ; preds = %207
  unreachable
}

; Function Attrs: nofree nounwind
declare noundef i32 @fseek(ptr nocapture noundef, i64 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i64 @ftell(ptr nocapture noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #2

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

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

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

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

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

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

declare void @_ZN6alglib8ap_errorC1EPKc(ptr, ptr) local_unnamed_addr

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = distinct !{!8, !9, !10, !11}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !9, !10, !11}
!13 = distinct !{!13, !9, !11, !10}
!14 = distinct !{!14, !9}
!15 = distinct !{!15, !9, !10, !11}
!16 = distinct !{!16, !9, !11, !10}
!17 = distinct !{!17, !9}
!18 = !{!19, !19, i64 0}
!19 = !{!"long", !6, i64 0}
!20 = distinct !{!20, !9}
!21 = distinct !{!21, !9}
!22 = !{!23, !24, i64 0}
!23 = !{!"_ZTS5lconv", !24, i64 0, !24, i64 8, !24, i64 16, !24, i64 24, !24, i64 32, !24, i64 40, !24, i64 48, !24, i64 56, !24, i64 64, !24, i64 72, !6, i64 80, !6, i64 81, !6, i64 82, !6, i64 83, !6, i64 84, !6, i64 85, !6, i64 86, !6, i64 87, !6, i64 88, !6, i64 89, !6, i64 90, !6, i64 91, !6, i64 92, !6, i64 93}
!24 = !{!"any pointer", !6, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"double", !6, i64 0}
!27 = distinct !{!27, !9}
!28 = distinct !{!28, !9}


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