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

; 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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.13 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.13 = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }
%"class.alglib_impl::rcommv2_request" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@_ZTIN6alglib8ap_errorE = external dso_local constant { ptr, ptr }, align 8
@.str.127 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [82 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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 #2 align 2

declare void @__cxa_throw(ptr, ptr, ptr)

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl25process_v2request_5phase1ERNS_15rcommv2_requestE(ptr noundef nonnull align 8 dereferenceable(96) %0) #3 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i64, align 8
  %4 = alloca i32, align 4
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i8, align 1
  %15 = alloca double, align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator", align 1
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i1, align 1
  %23 = alloca i64, align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::allocator", align 1
  %28 = alloca i1, align 1
  %29 = alloca i64, align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator", align 1
  %34 = alloca i1, align 1
  %35 = alloca i64, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  store i64 0, ptr %3, align 8, !tbaa !9
  br label %36

36:                                               ; preds = %350, %1
  %37 = load i64, ptr %3, align 8, !tbaa !9
  %38 = load ptr, ptr %2, align 8, !tbaa !5
  %39 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %38, i32 0, i32 4
  %40 = load ptr, ptr %39, align 8, !tbaa !11
  %41 = load i64, ptr %40, align 8, !tbaa !9
  %42 = icmp slt i64 %37, %41
  br i1 %42, label %44, label %43

43:                                               ; preds = %36
  store i32 2, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %353

44:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  store i64 0, ptr %5, align 8, !tbaa !9
  br label %45

45:                                               ; preds = %346, %44
  %46 = load i64, ptr %5, align 8, !tbaa !9
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %47, i32 0, i32 6
  %49 = load ptr, ptr %48, align 8, !tbaa !13
  %50 = load i64, ptr %49, align 8, !tbaa !9
  %51 = icmp slt i64 %46, %50
  br i1 %51, label %53, label %52

52:                                               ; preds = %45
  store i32 5, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  br label %349

53:                                               ; preds = %45
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %54 = load ptr, ptr %2, align 8, !tbaa !5
  %55 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %54, i32 0, i32 6
  %56 = load ptr, ptr %55, align 8, !tbaa !13
  %57 = load i64, ptr %56, align 8, !tbaa !9
  store i64 %57, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %58 = load ptr, ptr %2, align 8, !tbaa !5
  %59 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %58, i32 0, i32 5
  %60 = load ptr, ptr %59, align 8, !tbaa !14
  %61 = load i64, ptr %60, align 8, !tbaa !9
  store i64 %61, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %62, i32 0, i32 8
  %64 = load ptr, ptr %63, align 8, !tbaa !15
  %65 = load i64, ptr %64, align 8, !tbaa !9
  store i64 %65, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %66 = load ptr, ptr %2, align 8, !tbaa !5
  %67 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %66, i32 0, i32 2
  %68 = load ptr, ptr %67, align 8, !tbaa !16
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  %70 = load i64, ptr %3, align 8, !tbaa !9
  %71 = load i64, ptr %6, align 8, !tbaa !9
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %72, i32 0, i32 7
  %74 = load ptr, ptr %73, align 8, !tbaa !17
  %75 = load i64, ptr %74, align 8, !tbaa !9
  %76 = add nsw i64 %71, %75
  %77 = load i64, ptr %6, align 8, !tbaa !9
  %78 = load ptr, ptr %2, align 8, !tbaa !5
  %79 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %78, i32 0, i32 8
  %80 = load ptr, ptr %79, align 8, !tbaa !15
  %81 = load i64, ptr %80, align 8, !tbaa !9
  %82 = mul nsw i64 %77, %81
  %83 = mul nsw i64 %82, 3
  %84 = add nsw i64 %76, %83
  %85 = mul nsw i64 %70, %84
  %86 = getelementptr inbounds double, ptr %69, i64 %85
  store ptr %86, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  %88 = load i64, ptr %6, align 8, !tbaa !9
  %89 = getelementptr inbounds double, ptr %87, i64 %88
  %90 = load ptr, ptr %2, align 8, !tbaa !5
  %91 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %90, i32 0, i32 7
  %92 = load ptr, ptr %91, align 8, !tbaa !17
  %93 = load i64, ptr %92, align 8, !tbaa !9
  %94 = getelementptr inbounds double, ptr %89, i64 %93
  %95 = load i64, ptr %5, align 8, !tbaa !9
  %96 = load i64, ptr %8, align 8, !tbaa !9
  %97 = mul nsw i64 %95, %96
  %98 = mul nsw i64 %97, 3
  %99 = getelementptr inbounds double, ptr %94, i64 %98
  store ptr %99, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %100 = load ptr, ptr %2, align 8, !tbaa !5
  %101 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %100, i32 0, i32 9
  %102 = load ptr, ptr %101, align 8, !tbaa !18
  %103 = load ptr, ptr %102, align 8, !tbaa !5
  %104 = load i64, ptr %3, align 8, !tbaa !9
  %105 = load i64, ptr %7, align 8, !tbaa !9
  %106 = mul nsw i64 %104, %105
  %107 = getelementptr inbounds double, ptr %103, i64 %106
  store ptr %107, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %108 = load ptr, ptr %2, align 8, !tbaa !5
  %109 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %108, i32 0, i32 10
  %110 = load ptr, ptr %109, align 8, !tbaa !19
  %111 = load ptr, ptr %110, align 8, !tbaa !5
  %112 = load i64, ptr %3, align 8, !tbaa !9
  %113 = load i64, ptr %6, align 8, !tbaa !9
  %114 = mul nsw i64 %112, %113
  %115 = load i64, ptr %7, align 8, !tbaa !9
  %116 = mul nsw i64 %114, %115
  %117 = getelementptr inbounds double, ptr %111, i64 %116
  store ptr %117, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %118

118:                                              ; preds = %341, %53
  %119 = load i64, ptr %13, align 8, !tbaa !9
  %120 = load i64, ptr %8, align 8, !tbaa !9
  %121 = icmp slt i64 %119, %120
  br i1 %121, label %123, label %122

122:                                              ; preds = %118
  store i32 8, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %345

123:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #5
  store i8 0, ptr %14, align 1, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %124 = load ptr, ptr %10, align 8, !tbaa !5
  %125 = load i64, ptr %13, align 8, !tbaa !9
  %126 = mul nsw i64 %125, 3
  %127 = add nsw i64 %126, 2
  %128 = getelementptr inbounds double, ptr %124, i64 %127
  %129 = load double, ptr %128, align 8, !tbaa !22
  store double %129, ptr %15, align 8, !tbaa !22
  %130 = load double, ptr %15, align 8, !tbaa !22
  %131 = fcmp oeq double %130, 0.000000e+00
  br i1 %131, label %132, label %133

132:                                              ; preds = %123
  store i32 10, ptr %4, align 4
  br label %338

133:                                              ; preds = %123
  %134 = load ptr, ptr %10, align 8, !tbaa !5
  %135 = load i64, ptr %13, align 8, !tbaa !9
  %136 = mul nsw i64 %135, 3
  %137 = add nsw i64 %136, 0
  %138 = getelementptr inbounds double, ptr %134, i64 %137
  %139 = load double, ptr %138, align 8, !tbaa !22
  %140 = load ptr, ptr %9, align 8, !tbaa !5
  %141 = load i64, ptr %5, align 8, !tbaa !9
  %142 = getelementptr inbounds double, ptr %140, i64 %141
  %143 = load double, ptr %142, align 8, !tbaa !22
  %144 = fcmp oeq double %139, %143
  br i1 %144, label %145, label %205

145:                                              ; preds = %133
  %146 = load i64, ptr %13, align 8, !tbaa !9
  %147 = load i64, ptr %8, align 8, !tbaa !9
  %148 = sub nsw i64 %147, 1
  %149 = icmp eq i64 %146, %148
  br i1 %149, label %181, label %150

150:                                              ; preds = %145
  store i1 true, ptr %22, align 1
  %151 = call ptr @__cxa_allocate_exception(i64 32) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef @.str.127, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %152 unwind label %159

152:                                              ; preds = %150
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %153, i32 0, i32 0
  %155 = load ptr, ptr %154, align 8, !tbaa !24
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef %155)
          to label %156 unwind label %163

156:                                              ; preds = %152
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef @.str.133)
          to label %157 unwind label %167

157:                                              ; preds = %156
  invoke void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %158 unwind label %171

158:                                              ; preds = %157
  store i1 false, ptr %22, align 1
  invoke void @__cxa_throw(ptr %151, ptr @_ZTIN6alglib8ap_errorE, ptr @_ZN6alglib8ap_errorD2Ev) #6
          to label %359 unwind label %171

159:                                              ; preds = %150
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %20, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %21, align 4
  br label %177

163:                                              ; preds = %152
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %20, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %21, align 4
  br label %176

167:                                              ; preds = %156
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %20, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %21, align 4
  br label %175

171:                                              ; preds = %158, %157
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  store ptr %173, ptr %20, align 8
  %174 = extractvalue { ptr, i32 } %172, 1
  store i32 %174, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #5
  br label %175

175:                                              ; preds = %171, %167
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #5
  br label %176

176:                                              ; preds = %175, %163
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #5
  br label %177

177:                                              ; preds = %176, %159
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #5
  %178 = load i1, ptr %22, align 1
  br i1 %178, label %179, label %180

179:                                              ; preds = %177
  call void @__cxa_free_exception(ptr %151) #5
  br label %180

180:                                              ; preds = %179, %177
  br label %344

181:                                              ; preds = %145
  store i8 1, ptr %14, align 1, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %182

182:                                              ; preds = %201, %181
  %183 = load i64, ptr %23, align 8, !tbaa !9
  %184 = load i64, ptr %7, align 8, !tbaa !9
  %185 = icmp slt i64 %183, %184
  br i1 %185, label %187, label %186

186:                                              ; preds = %182
  store i32 11, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %204

187:                                              ; preds = %182
  %188 = load ptr, ptr %11, align 8, !tbaa !5
  %189 = load i64, ptr %23, align 8, !tbaa !9
  %190 = getelementptr inbounds double, ptr %188, i64 %189
  %191 = load double, ptr %190, align 8, !tbaa !22
  %192 = load ptr, ptr %12, align 8, !tbaa !5
  %193 = load i64, ptr %23, align 8, !tbaa !9
  %194 = load i64, ptr %6, align 8, !tbaa !9
  %195 = mul nsw i64 %193, %194
  %196 = load i64, ptr %5, align 8, !tbaa !9
  %197 = add nsw i64 %195, %196
  %198 = getelementptr inbounds double, ptr %192, i64 %197
  %199 = load double, ptr %198, align 8, !tbaa !22
  %200 = fadd double %199, %191
  store double %200, ptr %198, align 8, !tbaa !22
  br label %201

201:                                              ; preds = %187
  %202 = load i64, ptr %23, align 8, !tbaa !9
  %203 = add nsw i64 %202, 1
  store i64 %203, ptr %23, align 8, !tbaa !9
  br label %182, !llvm.loop !25

204:                                              ; preds = %186
  br label %205

205:                                              ; preds = %204, %133
  %206 = load ptr, ptr %10, align 8, !tbaa !5
  %207 = load i64, ptr %13, align 8, !tbaa !9
  %208 = mul nsw i64 %207, 3
  %209 = add nsw i64 %208, 1
  %210 = getelementptr inbounds double, ptr %206, i64 %209
  %211 = load double, ptr %210, align 8, !tbaa !22
  %212 = load ptr, ptr %9, align 8, !tbaa !5
  %213 = load i64, ptr %5, align 8, !tbaa !9
  %214 = getelementptr inbounds double, ptr %212, i64 %213
  %215 = load double, ptr %214, align 8, !tbaa !22
  %216 = fcmp oeq double %211, %215
  br i1 %216, label %217, label %277

217:                                              ; preds = %205
  %218 = load i64, ptr %13, align 8, !tbaa !9
  %219 = load i64, ptr %8, align 8, !tbaa !9
  %220 = sub nsw i64 %219, 1
  %221 = icmp eq i64 %218, %220
  br i1 %221, label %253, label %222

222:                                              ; preds = %217
  store i1 true, ptr %28, align 1
  %223 = call ptr @__cxa_allocate_exception(i64 32) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.127, ptr noundef nonnull align 1 dereferenceable(1) %27)
          to label %224 unwind label %231

224:                                              ; preds = %222
  %225 = load ptr, ptr %2, align 8, !tbaa !5
  %226 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %225, i32 0, i32 0
  %227 = load ptr, ptr %226, align 8, !tbaa !24
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef %227)
          to label %228 unwind label %235

228:                                              ; preds = %224
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.133)
          to label %229 unwind label %239

229:                                              ; preds = %228
  invoke void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %223, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %230 unwind label %243

230:                                              ; preds = %229
  store i1 false, ptr %28, align 1
  invoke void @__cxa_throw(ptr %223, ptr @_ZTIN6alglib8ap_errorE, ptr @_ZN6alglib8ap_errorD2Ev) #6
          to label %359 unwind label %243

231:                                              ; preds = %222
  %232 = landingpad { ptr, i32 }
          cleanup
  %233 = extractvalue { ptr, i32 } %232, 0
  store ptr %233, ptr %20, align 8
  %234 = extractvalue { ptr, i32 } %232, 1
  store i32 %234, ptr %21, align 4
  br label %249

235:                                              ; preds = %224
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %20, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %21, align 4
  br label %248

239:                                              ; preds = %228
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %20, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %21, align 4
  br label %247

243:                                              ; preds = %230, %229
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %20, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #5
  br label %247

247:                                              ; preds = %243, %239
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #5
  br label %248

248:                                              ; preds = %247, %235
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #5
  br label %249

249:                                              ; preds = %248, %231
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %27) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #5
  %250 = load i1, ptr %28, align 1
  br i1 %250, label %251, label %252

251:                                              ; preds = %249
  call void @__cxa_free_exception(ptr %223) #5
  br label %252

252:                                              ; preds = %251, %249
  br label %344

253:                                              ; preds = %217
  store i8 1, ptr %14, align 1, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  store i64 0, ptr %29, align 8, !tbaa !9
  br label %254

254:                                              ; preds = %273, %253
  %255 = load i64, ptr %29, align 8, !tbaa !9
  %256 = load i64, ptr %7, align 8, !tbaa !9
  %257 = icmp slt i64 %255, %256
  br i1 %257, label %259, label %258

258:                                              ; preds = %254
  store i32 14, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %276

259:                                              ; preds = %254
  %260 = load ptr, ptr %11, align 8, !tbaa !5
  %261 = load i64, ptr %29, align 8, !tbaa !9
  %262 = getelementptr inbounds double, ptr %260, i64 %261
  %263 = load double, ptr %262, align 8, !tbaa !22
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = load i64, ptr %29, align 8, !tbaa !9
  %266 = load i64, ptr %6, align 8, !tbaa !9
  %267 = mul nsw i64 %265, %266
  %268 = load i64, ptr %5, align 8, !tbaa !9
  %269 = add nsw i64 %267, %268
  %270 = getelementptr inbounds double, ptr %264, i64 %269
  %271 = load double, ptr %270, align 8, !tbaa !22
  %272 = fsub double %271, %263
  store double %272, ptr %270, align 8, !tbaa !22
  br label %273

273:                                              ; preds = %259
  %274 = load i64, ptr %29, align 8, !tbaa !9
  %275 = add nsw i64 %274, 1
  store i64 %275, ptr %29, align 8, !tbaa !9
  br label %254, !llvm.loop !27

276:                                              ; preds = %258
  br label %277

277:                                              ; preds = %276, %205
  %278 = load i8, ptr %14, align 1, !tbaa !20, !range !28, !noundef !29
  %279 = trunc i8 %278 to i1
  br i1 %279, label %281, label %280

280:                                              ; preds = %277
  store i32 10, ptr %4, align 4
  br label %338

281:                                              ; preds = %277
  %282 = load i64, ptr %13, align 8, !tbaa !9
  %283 = load i64, ptr %8, align 8, !tbaa !9
  %284 = sub nsw i64 %283, 1
  %285 = icmp eq i64 %282, %284
  br i1 %285, label %317, label %286

286:                                              ; preds = %281
  store i1 true, ptr %34, align 1
  %287 = call ptr @__cxa_allocate_exception(i64 32) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef @.str.127, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %288 unwind label %295

288:                                              ; preds = %286
  %289 = load ptr, ptr %2, align 8, !tbaa !5
  %290 = getelementptr inbounds %"class.alglib_impl::rcommv2_request", ptr %289, i32 0, i32 0
  %291 = load ptr, ptr %290, align 8, !tbaa !24
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef %291)
          to label %292 unwind label %299

292:                                              ; preds = %288
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef @.str.133)
          to label %293 unwind label %303

293:                                              ; preds = %292
  invoke void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %287, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %294 unwind label %307

294:                                              ; preds = %293
  store i1 false, ptr %34, align 1
  invoke void @__cxa_throw(ptr %287, ptr @_ZTIN6alglib8ap_errorE, ptr @_ZN6alglib8ap_errorD2Ev) #6
          to label %359 unwind label %307

295:                                              ; preds = %286
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %20, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %21, align 4
  br label %313

299:                                              ; preds = %288
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %20, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %21, align 4
  br label %312

303:                                              ; preds = %292
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %20, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %21, align 4
  br label %311

307:                                              ; preds = %294, %293
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %20, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %21, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #5
  br label %311

311:                                              ; preds = %307, %303
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #5
  br label %312

312:                                              ; preds = %311, %299
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #5
  br label %313

313:                                              ; preds = %312, %295
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #5
  %314 = load i1, ptr %34, align 1
  br i1 %314, label %315, label %316

315:                                              ; preds = %313
  call void @__cxa_free_exception(ptr %287) #5
  br label %316

316:                                              ; preds = %315, %313
  br label %344

317:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  store i64 0, ptr %35, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %334, %317
  %319 = load i64, ptr %35, align 8, !tbaa !9
  %320 = load i64, ptr %7, align 8, !tbaa !9
  %321 = icmp slt i64 %319, %320
  br i1 %321, label %323, label %322

322:                                              ; preds = %318
  store i32 17, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  br label %337

323:                                              ; preds = %318
  %324 = load double, ptr %15, align 8, !tbaa !22
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = load i64, ptr %35, align 8, !tbaa !9
  %327 = load i64, ptr %6, align 8, !tbaa !9
  %328 = mul nsw i64 %326, %327
  %329 = load i64, ptr %5, align 8, !tbaa !9
  %330 = add nsw i64 %328, %329
  %331 = getelementptr inbounds double, ptr %325, i64 %330
  %332 = load double, ptr %331, align 8, !tbaa !22
  %333 = fmul double %332, %324
  store double %333, ptr %331, align 8, !tbaa !22
  br label %334

334:                                              ; preds = %323
  %335 = load i64, ptr %35, align 8, !tbaa !9
  %336 = add nsw i64 %335, 1
  store i64 %336, ptr %35, align 8, !tbaa !9
  br label %318, !llvm.loop !30

337:                                              ; preds = %322
  store i32 0, ptr %4, align 4
  br label %338

338:                                              ; preds = %337, %280, %132
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  %339 = load i32, ptr %4, align 4
  switch i32 %339, label %359 [
    i32 0, label %340
    i32 10, label %341
  ]

340:                                              ; preds = %338
  br label %341

341:                                              ; preds = %340, %338
  %342 = load i64, ptr %13, align 8, !tbaa !9
  %343 = add nsw i64 %342, 1
  store i64 %343, ptr %13, align 8, !tbaa !9
  br label %118, !llvm.loop !31

344:                                              ; preds = %316, %252, %180
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %354

345:                                              ; preds = %122
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  br label %346

346:                                              ; preds = %345
  %347 = load i64, ptr %5, align 8, !tbaa !9
  %348 = add nsw i64 %347, 1
  store i64 %348, ptr %5, align 8, !tbaa !9
  br label %45, !llvm.loop !32

349:                                              ; preds = %52
  br label %350

350:                                              ; preds = %349
  %351 = load i64, ptr %3, align 8, !tbaa !9
  %352 = add nsw i64 %351, 1
  store i64 %352, ptr %3, align 8, !tbaa !9
  br label %36, !llvm.loop !33

353:                                              ; preds = %43
  ret void

354:                                              ; preds = %344
  %355 = load ptr, ptr %20, align 8
  %356 = load i32, ptr %21, align 4
  %357 = insertvalue { ptr, i32 } poison, ptr %355, 0
  %358 = insertvalue { ptr, i32 } %357, i32 %356, 1
  resume { ptr, i32 } %358

359:                                              ; preds = %338, %294, %230, %158
  unreachable
}

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

declare void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr, ptr)

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !6, i64 32}
!12 = !{!"_ZTSN11alglib_impl15rcommv2_requestE", !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, !6, i64 80, !6, i64 88}
!13 = !{!12, !6, i64 48}
!14 = !{!12, !6, i64 40}
!15 = !{!12, !6, i64 64}
!16 = !{!12, !6, i64 16}
!17 = !{!12, !6, i64 56}
!18 = !{!12, !6, i64 72}
!19 = !{!12, !6, i64 80}
!20 = !{!21, !21, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"double", !7, i64 0}
!24 = !{!12, !6, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = distinct !{!33, !26}


; 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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.13 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.13 = type { i64, [8 x i8] }
%"class.std::allocator" = type { i8 }

@_ZTIN6alglib8ap_errorE = external dso_local constant { ptr, ptr }, align 8
@.str.127 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.133 = external hidden unnamed_addr constant [82 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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 #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl25process_v2request_5phase1ERNS_15rcommv2_requestE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(96) %0) local_unnamed_addr #3 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::__cxx11::basic_string", align 8
  %3 = alloca %"class.std::__cxx11::basic_string", align 8
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::allocator", align 1
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::allocator", align 1
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator", align 1
  %14 = getelementptr inbounds i8, ptr %0, i64 32
  %15 = load ptr, ptr %14, align 8, !tbaa !5
  %16 = load i64, ptr %15, align 8, !tbaa !10
  %17 = icmp sgt i64 %16, 0
  br i1 %17, label %.preheader142.lr.ph, label %._crit_edge

.preheader142.lr.ph:                              ; preds = %1
  %18 = getelementptr inbounds i8, ptr %0, i64 48
  %19 = load ptr, ptr %18, align 8, !tbaa !12
  %20 = load i64, ptr %19, align 8, !tbaa !10
  %21 = icmp sgt i64 %20, 0
  br i1 %21, label %.preheader142.lr.ph.split.us, label %._crit_edge

.preheader142.lr.ph.split.us:                     ; preds = %.preheader142.lr.ph
  %22 = getelementptr inbounds i8, ptr %0, i64 80
  %23 = load ptr, ptr %22, align 8
  %24 = getelementptr inbounds i8, ptr %0, i64 72
  %25 = load ptr, ptr %24, align 8
  %26 = mul i64 %20, 3
  %27 = getelementptr inbounds i8, ptr %0, i64 56
  %28 = load ptr, ptr %27, align 8
  %29 = getelementptr inbounds i8, ptr %0, i64 16
  %30 = load ptr, ptr %29, align 8
  %31 = getelementptr inbounds i8, ptr %0, i64 64
  %32 = load ptr, ptr %31, align 8
  %33 = getelementptr inbounds i8, ptr %0, i64 40
  %34 = load ptr, ptr %33, align 8
  %35 = load i64, ptr %34, align 8, !tbaa !10
  %36 = load i64, ptr %32, align 8, !tbaa !10
  %37 = load ptr, ptr %30, align 8, !tbaa !13
  %38 = load i64, ptr %28, align 8, !tbaa !10
  %39 = mul i64 %26, %36
  %40 = add i64 %39, %20
  %41 = add i64 %40, %38
  %factor.op.mul.us = mul i64 %36, 24
  %42 = load ptr, ptr %25, align 8, !tbaa !13
  %43 = load ptr, ptr %23, align 8, !tbaa !13
  %factor.op.mul = mul i64 %20, %35
  %44 = icmp sgt i64 %36, 0
  %45 = add nsw i64 %36, -1
  %46 = icmp sgt i64 %35, 0
  br i1 %44, label %.preheader142.us.us.preheader, label %._crit_edge

.preheader142.us.us.preheader:                    ; preds = %.preheader142.lr.ph.split.us
  %47 = shl i64 %35, 3
  %48 = shl i64 %35, 3
  %min.iters.check207 = icmp ugt i64 %35, 3
  %ident.check196.not = icmp eq i64 %20, 1
  %or.cond221 = and i1 %min.iters.check207, %ident.check196.not
  %n.vec210 = and i64 %35, 9223372036854775804
  %cmp.n219 = icmp eq i64 %35, %n.vec210
  %xtraiter = and i64 %35, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %min.iters.check182 = icmp ugt i64 %35, 3
  %ident.check176.not = icmp eq i64 %20, 1
  %or.cond220 = and i1 %min.iters.check182, %ident.check176.not
  %n.vec185 = and i64 %35, 9223372036854775804
  %cmp.n194 = icmp eq i64 %35, %n.vec185
  %xtraiter225 = and i64 %35, 1
  %lcmp.mod226.not = icmp eq i64 %xtraiter225, 0
  %min.iters.check = icmp ugt i64 %35, 3
  %ident.check.not = icmp eq i64 %20, 1
  %or.cond = and i1 %min.iters.check, %ident.check.not
  %n.vec = and i64 %35, 9223372036854775804
  %cmp.n = icmp eq i64 %35, %n.vec
  %xtraiter227 = and i64 %35, 3
  %lcmp.mod228.not = icmp eq i64 %xtraiter227, 0
  br label %.preheader142.us.us

.preheader142.us.us:                              ; preds = %.preheader142.us.us.preheader, %._crit_edge158.split.us.us.us
  %.0106163.us.us = phi i64 [ %170, %._crit_edge158.split.us.us.us ], [ 0, %.preheader142.us.us.preheader ]
  %49 = mul i64 %48, %.0106163.us.us
  %50 = add i64 %48, %49
  %scevgep200 = getelementptr i8, ptr %42, i64 %49
  %scevgep201 = getelementptr i8, ptr %42, i64 %50
  %51 = mul i64 %47, %.0106163.us.us
  %52 = add i64 %47, %51
  %scevgep178 = getelementptr i8, ptr %42, i64 %51
  %scevgep179 = getelementptr i8, ptr %42, i64 %52
  %53 = mul nsw i64 %41, %.0106163.us.us
  %54 = getelementptr inbounds double, ptr %37, i64 %53
  %55 = getelementptr inbounds double, ptr %54, i64 %20
  %56 = getelementptr inbounds double, ptr %55, i64 %38
  %57 = mul nsw i64 %35, %.0106163.us.us
  %58 = getelementptr inbounds double, ptr %42, i64 %57
  %.reass.us = mul i64 %factor.op.mul, %.0106163.us.us
  %59 = getelementptr inbounds double, ptr %43, i64 %.reass.us
  %60 = getelementptr i8, ptr %43, i64 %49
  %61 = getelementptr i8, ptr %43, i64 %50
  %62 = getelementptr i8, ptr %43, i64 %51
  %63 = getelementptr i8, ptr %43, i64 %52
  br label %.lr.ph154.us.us.us

.lr.ph154.us.us.us:                               ; preds = %._crit_edge155.us.us.us, %.preheader142.us.us
  %.0110156.us.us.us = phi i64 [ 0, %.preheader142.us.us ], [ %169, %._crit_edge155.us.us.us ]
  %64 = shl i64 %.0110156.us.us.us, 3
  %scevgep198 = getelementptr i8, ptr %60, i64 %64
  %scevgep199 = getelementptr i8, ptr %61, i64 %64
  %65 = shl i64 %.0110156.us.us.us, 3
  %scevgep = getelementptr i8, ptr %62, i64 %65
  %scevgep177 = getelementptr i8, ptr %63, i64 %65
  %.reass.us.us.us = mul i64 %.0110156.us.us.us, %factor.op.mul.us
  %66 = getelementptr inbounds i8, ptr %56, i64 %.reass.us.us.us
  %67 = getelementptr inbounds double, ptr %54, i64 %.0110156.us.us.us
  %invariant.gep.us.us.us = getelementptr double, ptr %59, i64 %.0110156.us.us.us
  %bound0202 = icmp ult ptr %scevgep198, %scevgep201
  %bound1203 = icmp ult ptr %scevgep200, %scevgep199
  %found.conflict204 = and i1 %bound0202, %bound1203
  %bound0 = icmp ult ptr %scevgep, %scevgep179
  %bound1 = icmp ult ptr %scevgep178, %scevgep177
  %found.conflict = and i1 %bound0, %bound1
  br label %68

68:                                               ; preds = %.thread134.us.us.us, %.lr.ph154.us.us.us
  %.0109152.us.us.us = phi i64 [ 0, %.lr.ph154.us.us.us ], [ %129, %.thread134.us.us.us ]
  %.idx139.us.us.us = mul i64 %.0109152.us.us.us, 24
  %69 = getelementptr inbounds i8, ptr %66, i64 %.idx139.us.us.us
  %70 = getelementptr inbounds i8, ptr %69, i64 16
  %71 = load double, ptr %70, align 8, !tbaa !14
  %72 = fcmp oeq double %71, 0.000000e+00
  br i1 %72, label %.thread134.us.us.us, label %73

73:                                               ; preds = %68
  %74 = load double, ptr %69, align 8, !tbaa !14
  %75 = load double, ptr %67, align 8, !tbaa !14
  %76 = fcmp oeq double %74, %75
  br i1 %76, label %80, label %.thread133.us.us.us

.thread133.us.us.us:                              ; preds = %73
  %77 = getelementptr inbounds i8, ptr %69, i64 8
  %78 = load double, ptr %77, align 8, !tbaa !14
  %79 = fcmp oeq double %78, %75
  br i1 %79, label %86, label %.thread134.us.us.us

80:                                               ; preds = %73
  %81 = icmp eq i64 %.0109152.us.us.us, %45
  br i1 %81, label %.preheader141.us.us.us, label %.split.us

._crit_edge.us.us.us.loopexit:                    ; preds = %.lr.ph.us.us.us.prol.loopexit, %.lr.ph.us.us.us, %middle.block205
  %.pre = load double, ptr %67, align 8, !tbaa !14
  br label %._crit_edge.us.us.us

._crit_edge.us.us.us:                             ; preds = %._crit_edge.us.us.us.loopexit, %.preheader141.us.us.us
  %82 = phi double [ %.pre, %._crit_edge.us.us.us.loopexit ], [ %75, %.preheader141.us.us.us ]
  %83 = getelementptr inbounds i8, ptr %69, i64 8
  %84 = load double, ptr %83, align 8, !tbaa !14
  %85 = fcmp oeq double %84, %82
  br i1 %85, label %86, label %.critedge.us.us.us

86:                                               ; preds = %._crit_edge.us.us.us, %.thread133.us.us.us
  %87 = icmp eq i64 %.0109152.us.us.us, %45
  br i1 %87, label %.preheader140.us.us.us, label %.split160.us

.critedge.us.us.us:                               ; preds = %.lr.ph147.us.us.us.prol.loopexit, %.lr.ph147.us.us.us, %middle.block180, %._crit_edge.us.us.us
  %88 = icmp eq i64 %.0109152.us.us.us, %45
  br i1 %88, label %.preheader.us.us.us, label %.split162.us

.lr.ph151.us.us.us:                               ; preds = %.lr.ph151.us.us.us.prol.loopexit, %.lr.ph151.us.us.us
  %.0150.us.us.us = phi i64 [ %104, %.lr.ph151.us.us.us ], [ %.0150.us.us.us.unr, %.lr.ph151.us.us.us.prol.loopexit ]
  %89 = mul nuw nsw i64 %.0150.us.us.us, %20
  %gep149.us.us.us = getelementptr double, ptr %invariant.gep.us.us.us, i64 %89
  %90 = load double, ptr %gep149.us.us.us, align 8, !tbaa !14
  %91 = fmul double %71, %90
  store double %91, ptr %gep149.us.us.us, align 8, !tbaa !14
  %92 = add nuw nsw i64 %.0150.us.us.us, 1
  %93 = mul nuw nsw i64 %92, %20
  %gep149.us.us.us.1 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %93
  %94 = load double, ptr %gep149.us.us.us.1, align 8, !tbaa !14
  %95 = fmul double %71, %94
  store double %95, ptr %gep149.us.us.us.1, align 8, !tbaa !14
  %96 = add nuw nsw i64 %.0150.us.us.us, 2
  %97 = mul nuw nsw i64 %96, %20
  %gep149.us.us.us.2 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %97
  %98 = load double, ptr %gep149.us.us.us.2, align 8, !tbaa !14
  %99 = fmul double %71, %98
  store double %99, ptr %gep149.us.us.us.2, align 8, !tbaa !14
  %100 = add nuw nsw i64 %.0150.us.us.us, 3
  %101 = mul nuw nsw i64 %100, %20
  %gep149.us.us.us.3 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %101
  %102 = load double, ptr %gep149.us.us.us.3, align 8, !tbaa !14
  %103 = fmul double %71, %102
  store double %103, ptr %gep149.us.us.us.3, align 8, !tbaa !14
  %104 = add nuw nsw i64 %.0150.us.us.us, 4
  %exitcond170.not.3 = icmp eq i64 %104, %35
  br i1 %exitcond170.not.3, label %.thread134.us.us.us, label %.lr.ph151.us.us.us, !llvm.loop !16

.lr.ph147.us.us.us:                               ; preds = %.lr.ph147.us.us.us.prol.loopexit, %.lr.ph147.us.us.us
  %.082146.us.us.us = phi i64 [ %116, %.lr.ph147.us.us.us ], [ %.082146.us.us.us.unr, %.lr.ph147.us.us.us.prol.loopexit ]
  %105 = getelementptr inbounds double, ptr %58, i64 %.082146.us.us.us
  %106 = load double, ptr %105, align 8, !tbaa !14
  %107 = mul nuw nsw i64 %.082146.us.us.us, %20
  %gep145.us.us.us = getelementptr double, ptr %invariant.gep.us.us.us, i64 %107
  %108 = load double, ptr %gep145.us.us.us, align 8, !tbaa !14
  %109 = fsub double %108, %106
  store double %109, ptr %gep145.us.us.us, align 8, !tbaa !14
  %110 = add nuw nsw i64 %.082146.us.us.us, 1
  %111 = getelementptr inbounds double, ptr %58, i64 %110
  %112 = load double, ptr %111, align 8, !tbaa !14
  %113 = mul nuw nsw i64 %110, %20
  %gep145.us.us.us.1 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %113
  %114 = load double, ptr %gep145.us.us.us.1, align 8, !tbaa !14
  %115 = fsub double %114, %112
  store double %115, ptr %gep145.us.us.us.1, align 8, !tbaa !14
  %116 = add nuw nsw i64 %.082146.us.us.us, 2
  %exitcond169.not.1 = icmp eq i64 %116, %35
  br i1 %exitcond169.not.1, label %.critedge.us.us.us, label %.lr.ph147.us.us.us, !llvm.loop !19

.lr.ph.us.us.us:                                  ; preds = %.lr.ph.us.us.us.prol.loopexit, %.lr.ph.us.us.us
  %.087143.us.us.us = phi i64 [ %128, %.lr.ph.us.us.us ], [ %.087143.us.us.us.unr, %.lr.ph.us.us.us.prol.loopexit ]
  %117 = getelementptr inbounds double, ptr %58, i64 %.087143.us.us.us
  %118 = load double, ptr %117, align 8, !tbaa !14
  %119 = mul nuw nsw i64 %.087143.us.us.us, %20
  %gep.us.us.us = getelementptr double, ptr %invariant.gep.us.us.us, i64 %119
  %120 = load double, ptr %gep.us.us.us, align 8, !tbaa !14
  %121 = fadd double %118, %120
  store double %121, ptr %gep.us.us.us, align 8, !tbaa !14
  %122 = add nuw nsw i64 %.087143.us.us.us, 1
  %123 = getelementptr inbounds double, ptr %58, i64 %122
  %124 = load double, ptr %123, align 8, !tbaa !14
  %125 = mul nuw nsw i64 %122, %20
  %gep.us.us.us.1 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %125
  %126 = load double, ptr %gep.us.us.us.1, align 8, !tbaa !14
  %127 = fadd double %124, %126
  store double %127, ptr %gep.us.us.us.1, align 8, !tbaa !14
  %128 = add nuw nsw i64 %.087143.us.us.us, 2
  %exitcond.not.1 = icmp eq i64 %128, %35
  br i1 %exitcond.not.1, label %._crit_edge.us.us.us.loopexit, label %.lr.ph.us.us.us, !llvm.loop !20

.thread134.us.us.us:                              ; preds = %.lr.ph151.us.us.us.prol.loopexit, %.lr.ph151.us.us.us, %middle.block, %.preheader140.us.us.us, %.preheader.us.us.us, %.thread133.us.us.us, %68
  %129 = add nuw nsw i64 %.0109152.us.us.us, 1
  %exitcond171.not = icmp eq i64 %129, %36
  br i1 %exitcond171.not, label %._crit_edge155.us.us.us, label %68, !llvm.loop !21

.preheader.us.us.us:                              ; preds = %.critedge.us.us.us
  br i1 %46, label %.lr.ph151.us.us.us.preheader, label %.thread134.us.us.us

.lr.ph151.us.us.us.preheader:                     ; preds = %.preheader.us.us.us
  br i1 %or.cond, label %vector.ph, label %.lr.ph151.us.us.us.preheader222

.lr.ph151.us.us.us.preheader222:                  ; preds = %middle.block, %.lr.ph151.us.us.us.preheader
  %.0150.us.us.us.ph = phi i64 [ 0, %.lr.ph151.us.us.us.preheader ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod228.not, label %.lr.ph151.us.us.us.prol.loopexit, label %.lr.ph151.us.us.us.prol

.lr.ph151.us.us.us.prol:                          ; preds = %.lr.ph151.us.us.us.preheader222, %.lr.ph151.us.us.us.prol
  %.0150.us.us.us.prol = phi i64 [ %133, %.lr.ph151.us.us.us.prol ], [ %.0150.us.us.us.ph, %.lr.ph151.us.us.us.preheader222 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph151.us.us.us.prol ], [ 0, %.lr.ph151.us.us.us.preheader222 ]
  %130 = mul nuw nsw i64 %.0150.us.us.us.prol, %20
  %gep149.us.us.us.prol = getelementptr double, ptr %invariant.gep.us.us.us, i64 %130
  %131 = load double, ptr %gep149.us.us.us.prol, align 8, !tbaa !14
  %132 = fmul double %71, %131
  store double %132, ptr %gep149.us.us.us.prol, align 8, !tbaa !14
  %133 = add nuw nsw i64 %.0150.us.us.us.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter227
  br i1 %prol.iter.cmp.not, label %.lr.ph151.us.us.us.prol.loopexit, label %.lr.ph151.us.us.us.prol, !llvm.loop !22

.lr.ph151.us.us.us.prol.loopexit:                 ; preds = %.lr.ph151.us.us.us.prol, %.lr.ph151.us.us.us.preheader222
  %.0150.us.us.us.unr = phi i64 [ %.0150.us.us.us.ph, %.lr.ph151.us.us.us.preheader222 ], [ %133, %.lr.ph151.us.us.us.prol ]
  %134 = sub nsw i64 %.0150.us.us.us.ph, %35
  %135 = icmp ugt i64 %134, -4
  br i1 %135, label %.thread134.us.us.us, label %.lr.ph151.us.us.us

vector.ph:                                        ; preds = %.lr.ph151.us.us.us.preheader
  %broadcast.splatinsert = insertelement <2 x double> poison, double %71, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %136 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %index
  %137 = getelementptr i8, ptr %136, i64 16
  %wide.load = load <2 x double>, ptr %136, align 8, !tbaa !14
  %wide.load174 = load <2 x double>, ptr %137, align 8, !tbaa !14
  %138 = fmul <2 x double> %broadcast.splat, %wide.load
  %139 = fmul <2 x double> %broadcast.splat, %wide.load174
  store <2 x double> %138, ptr %136, align 8, !tbaa !14
  store <2 x double> %139, ptr %137, align 8, !tbaa !14
  %index.next = add nuw i64 %index, 4
  %140 = icmp eq i64 %index.next, %n.vec
  br i1 %140, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.thread134.us.us.us, label %.lr.ph151.us.us.us.preheader222

.preheader140.us.us.us:                           ; preds = %86
  br i1 %46, label %.lr.ph147.us.us.us.preheader, label %.thread134.us.us.us

.lr.ph147.us.us.us.preheader:                     ; preds = %.preheader140.us.us.us
  %or.cond220.not = xor i1 %or.cond220, true
  %brmerge = select i1 %or.cond220.not, i1 true, i1 %found.conflict
  br i1 %brmerge, label %.lr.ph147.us.us.us.preheader223, label %vector.body187

.lr.ph147.us.us.us.preheader223:                  ; preds = %.lr.ph147.us.us.us.preheader, %middle.block180
  %.082146.us.us.us.ph = phi i64 [ 0, %.lr.ph147.us.us.us.preheader ], [ %n.vec185, %middle.block180 ]
  %.neg229 = or disjoint i64 %.082146.us.us.us.ph, 1
  br i1 %lcmp.mod226.not, label %.lr.ph147.us.us.us.prol.loopexit, label %.lr.ph147.us.us.us.prol

.lr.ph147.us.us.us.prol:                          ; preds = %.lr.ph147.us.us.us.preheader223
  %141 = getelementptr inbounds double, ptr %58, i64 %.082146.us.us.us.ph
  %142 = load double, ptr %141, align 8, !tbaa !14
  %143 = mul nuw nsw i64 %.082146.us.us.us.ph, %20
  %gep145.us.us.us.prol = getelementptr double, ptr %invariant.gep.us.us.us, i64 %143
  %144 = load double, ptr %gep145.us.us.us.prol, align 8, !tbaa !14
  %145 = fsub double %144, %142
  store double %145, ptr %gep145.us.us.us.prol, align 8, !tbaa !14
  %146 = or disjoint i64 %.082146.us.us.us.ph, 1
  br label %.lr.ph147.us.us.us.prol.loopexit

.lr.ph147.us.us.us.prol.loopexit:                 ; preds = %.lr.ph147.us.us.us.prol, %.lr.ph147.us.us.us.preheader223
  %.082146.us.us.us.unr = phi i64 [ %.082146.us.us.us.ph, %.lr.ph147.us.us.us.preheader223 ], [ %146, %.lr.ph147.us.us.us.prol ]
  %147 = icmp eq i64 %35, %.neg229
  br i1 %147, label %.critedge.us.us.us, label %.lr.ph147.us.us.us

vector.body187:                                   ; preds = %.lr.ph147.us.us.us.preheader, %vector.body187
  %index188 = phi i64 [ %index.next193, %vector.body187 ], [ 0, %.lr.ph147.us.us.us.preheader ]
  %148 = getelementptr inbounds double, ptr %58, i64 %index188
  %149 = getelementptr inbounds i8, ptr %148, i64 16
  %wide.load189 = load <2 x double>, ptr %148, align 8, !tbaa !14, !alias.scope !26
  %wide.load190 = load <2 x double>, ptr %149, align 8, !tbaa !14, !alias.scope !26
  %150 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %index188
  %151 = getelementptr i8, ptr %150, i64 16
  %wide.load191 = load <2 x double>, ptr %150, align 8, !tbaa !14, !alias.scope !29, !noalias !26
  %wide.load192 = load <2 x double>, ptr %151, align 8, !tbaa !14, !alias.scope !29, !noalias !26
  %152 = fsub <2 x double> %wide.load191, %wide.load189
  %153 = fsub <2 x double> %wide.load192, %wide.load190
  store <2 x double> %152, ptr %150, align 8, !tbaa !14, !alias.scope !29, !noalias !26
  store <2 x double> %153, ptr %151, align 8, !tbaa !14, !alias.scope !29, !noalias !26
  %index.next193 = add nuw i64 %index188, 4
  %154 = icmp eq i64 %index.next193, %n.vec185
  br i1 %154, label %middle.block180, label %vector.body187, !llvm.loop !31

middle.block180:                                  ; preds = %vector.body187
  br i1 %cmp.n194, label %.critedge.us.us.us, label %.lr.ph147.us.us.us.preheader223

.preheader141.us.us.us:                           ; preds = %80
  br i1 %46, label %.lr.ph.us.us.us.preheader, label %._crit_edge.us.us.us

.lr.ph.us.us.us.preheader:                        ; preds = %.preheader141.us.us.us
  %or.cond221.not = xor i1 %or.cond221, true
  %brmerge230 = select i1 %or.cond221.not, i1 true, i1 %found.conflict204
  br i1 %brmerge230, label %.lr.ph.us.us.us.preheader224, label %vector.body212

.lr.ph.us.us.us.preheader224:                     ; preds = %.lr.ph.us.us.us.preheader, %middle.block205
  %.087143.us.us.us.ph = phi i64 [ 0, %.lr.ph.us.us.us.preheader ], [ %n.vec210, %middle.block205 ]
  %.neg = or disjoint i64 %.087143.us.us.us.ph, 1
  br i1 %lcmp.mod.not, label %.lr.ph.us.us.us.prol.loopexit, label %.lr.ph.us.us.us.prol

.lr.ph.us.us.us.prol:                             ; preds = %.lr.ph.us.us.us.preheader224
  %155 = getelementptr inbounds double, ptr %58, i64 %.087143.us.us.us.ph
  %156 = load double, ptr %155, align 8, !tbaa !14
  %157 = mul nuw nsw i64 %.087143.us.us.us.ph, %20
  %gep.us.us.us.prol = getelementptr double, ptr %invariant.gep.us.us.us, i64 %157
  %158 = load double, ptr %gep.us.us.us.prol, align 8, !tbaa !14
  %159 = fadd double %156, %158
  store double %159, ptr %gep.us.us.us.prol, align 8, !tbaa !14
  %160 = or disjoint i64 %.087143.us.us.us.ph, 1
  br label %.lr.ph.us.us.us.prol.loopexit

.lr.ph.us.us.us.prol.loopexit:                    ; preds = %.lr.ph.us.us.us.prol, %.lr.ph.us.us.us.preheader224
  %.087143.us.us.us.unr = phi i64 [ %.087143.us.us.us.ph, %.lr.ph.us.us.us.preheader224 ], [ %160, %.lr.ph.us.us.us.prol ]
  %161 = icmp eq i64 %35, %.neg
  br i1 %161, label %._crit_edge.us.us.us.loopexit, label %.lr.ph.us.us.us

vector.body212:                                   ; preds = %.lr.ph.us.us.us.preheader, %vector.body212
  %index213 = phi i64 [ %index.next218, %vector.body212 ], [ 0, %.lr.ph.us.us.us.preheader ]
  %162 = getelementptr inbounds double, ptr %58, i64 %index213
  %163 = getelementptr inbounds i8, ptr %162, i64 16
  %wide.load214 = load <2 x double>, ptr %162, align 8, !tbaa !14, !alias.scope !32
  %wide.load215 = load <2 x double>, ptr %163, align 8, !tbaa !14, !alias.scope !32
  %164 = getelementptr double, ptr %invariant.gep.us.us.us, i64 %index213
  %165 = getelementptr i8, ptr %164, i64 16
  %wide.load216 = load <2 x double>, ptr %164, align 8, !tbaa !14, !alias.scope !35, !noalias !32
  %wide.load217 = load <2 x double>, ptr %165, align 8, !tbaa !14, !alias.scope !35, !noalias !32
  %166 = fadd <2 x double> %wide.load214, %wide.load216
  %167 = fadd <2 x double> %wide.load215, %wide.load217
  store <2 x double> %166, ptr %164, align 8, !tbaa !14, !alias.scope !35, !noalias !32
  store <2 x double> %167, ptr %165, align 8, !tbaa !14, !alias.scope !35, !noalias !32
  %index.next218 = add nuw i64 %index213, 4
  %168 = icmp eq i64 %index.next218, %n.vec210
  br i1 %168, label %middle.block205, label %vector.body212, !llvm.loop !37

middle.block205:                                  ; preds = %vector.body212
  br i1 %cmp.n219, label %._crit_edge.us.us.us.loopexit, label %.lr.ph.us.us.us.preheader224

._crit_edge155.us.us.us:                          ; preds = %.thread134.us.us.us
  %169 = add nuw nsw i64 %.0110156.us.us.us, 1
  %exitcond172.not = icmp eq i64 %169, %20
  br i1 %exitcond172.not, label %._crit_edge158.split.us.us.us, label %.lr.ph154.us.us.us, !llvm.loop !38

._crit_edge158.split.us.us.us:                    ; preds = %._crit_edge155.us.us.us
  %170 = add nuw nsw i64 %.0106163.us.us, 1
  %exitcond173.not = icmp eq i64 %170, %16
  br i1 %exitcond173.not, label %._crit_edge, label %.preheader142.us.us, !llvm.loop !39

._crit_edge:                                      ; preds = %._crit_edge158.split.us.us.us, %.preheader142.lr.ph.split.us, %.preheader142.lr.ph, %1
  ret void

.split.us:                                        ; preds = %80
  %171 = tail call ptr @__cxa_allocate_exception(i64 32) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.127, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %172 unwind label %.thread

172:                                              ; preds = %.split.us
  %173 = load ptr, ptr %0, align 8, !tbaa !40
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %3, ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef %173)
          to label %174 unwind label %178

174:                                              ; preds = %172
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %2, ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull @.str.133)
          to label %175 unwind label %180

175:                                              ; preds = %174
  invoke void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %176 unwind label %182

176:                                              ; preds = %175
  invoke void @__cxa_throw(ptr %171, ptr nonnull @_ZTIN6alglib8ap_errorE, ptr nonnull @_ZN6alglib8ap_errorD2Ev) #6
          to label %217 unwind label %182

.thread:                                          ; preds = %.split.us
  %177 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #5
  br label %.sink.split

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

180:                                              ; preds = %174
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %184

182:                                              ; preds = %176, %175
  %.088 = phi i1 [ false, %176 ], [ true, %175 ]
  %183 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #5
  br label %184

184:                                              ; preds = %182, %180
  %.pn = phi { ptr, i32 } [ %183, %182 ], [ %181, %180 ]
  %.189 = phi i1 [ %.088, %182 ], [ true, %180 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %3) #5
  br label %185

185:                                              ; preds = %178, %184
  %.pn.pn = phi { ptr, i32 } [ %.pn, %184 ], [ %179, %178 ]
  %.290 = phi i1 [ %.189, %184 ], [ true, %178 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #5
  br i1 %.290, label %.sink.split, label %216

.split160.us:                                     ; preds = %86
  %186 = tail call ptr @__cxa_allocate_exception(i64 32) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.127, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %187 unwind label %.thread129

187:                                              ; preds = %.split160.us
  %188 = load ptr, ptr %0, align 8, !tbaa !40
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef %188)
          to label %189 unwind label %193

189:                                              ; preds = %187
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.133)
          to label %190 unwind label %195

190:                                              ; preds = %189
  invoke void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %186, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %191 unwind label %197

191:                                              ; preds = %190
  invoke void @__cxa_throw(ptr %186, ptr nonnull @_ZTIN6alglib8ap_errorE, ptr nonnull @_ZN6alglib8ap_errorD2Ev) #6
          to label %217 unwind label %197

.thread129:                                       ; preds = %.split160.us
  %192 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #5
  br label %.sink.split

193:                                              ; preds = %187
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %200

195:                                              ; preds = %189
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %199

197:                                              ; preds = %191, %190
  %.083 = phi i1 [ false, %191 ], [ true, %190 ]
  %198 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #5
  br label %199

199:                                              ; preds = %197, %195
  %.pn117 = phi { ptr, i32 } [ %198, %197 ], [ %196, %195 ]
  %.184 = phi i1 [ %.083, %197 ], [ true, %195 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #5
  br label %200

200:                                              ; preds = %193, %199
  %.pn117.pn = phi { ptr, i32 } [ %.pn117, %199 ], [ %194, %193 ]
  %.285 = phi i1 [ %.184, %199 ], [ true, %193 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #5
  br i1 %.285, label %.sink.split, label %216

.split162.us:                                     ; preds = %.critedge.us.us.us
  %201 = tail call ptr @__cxa_allocate_exception(i64 32) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.127, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %202 unwind label %.thread135

202:                                              ; preds = %.split162.us
  %203 = load ptr, ptr %0, align 8, !tbaa !40
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef %203)
          to label %204 unwind label %208

204:                                              ; preds = %202
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.133)
          to label %205 unwind label %210

205:                                              ; preds = %204
  invoke void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(32) %201, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %206 unwind label %212

206:                                              ; preds = %205
  invoke void @__cxa_throw(ptr %201, ptr nonnull @_ZTIN6alglib8ap_errorE, ptr nonnull @_ZN6alglib8ap_errorD2Ev) #6
          to label %217 unwind label %212

.thread135:                                       ; preds = %.split162.us
  %207 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  br label %.sink.split

208:                                              ; preds = %202
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %215

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

212:                                              ; preds = %206, %205
  %.081 = phi i1 [ false, %206 ], [ true, %205 ]
  %213 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #5
  br label %214

214:                                              ; preds = %212, %210
  %.pn121 = phi { ptr, i32 } [ %213, %212 ], [ %211, %210 ]
  %.1 = phi i1 [ %.081, %212 ], [ true, %210 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #5
  br label %215

215:                                              ; preds = %208, %214
  %.pn121.pn = phi { ptr, i32 } [ %.pn121, %214 ], [ %209, %208 ]
  %.2 = phi i1 [ %.1, %214 ], [ true, %208 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  br i1 %.2, label %.sink.split, label %216

.sink.split:                                      ; preds = %215, %.thread135, %200, %.thread129, %185, %.thread
  %.sink = phi ptr [ %171, %.thread ], [ %171, %185 ], [ %186, %.thread129 ], [ %186, %200 ], [ %201, %.thread135 ], [ %201, %215 ]
  %.pn121.pn.pn.pn.ph = phi { ptr, i32 } [ %177, %.thread ], [ %.pn.pn, %185 ], [ %192, %.thread129 ], [ %.pn117.pn, %200 ], [ %207, %.thread135 ], [ %.pn121.pn, %215 ]
  call void @__cxa_free_exception(ptr %.sink) #5
  br label %216

216:                                              ; preds = %.sink.split, %215, %200, %185
  %.pn121.pn.pn.pn = phi { ptr, i32 } [ %.pn121.pn, %215 ], [ %.pn117.pn, %200 ], [ %.pn.pn, %185 ], [ %.pn121.pn.pn.pn.ph, %.sink.split ]
  resume { ptr, i32 } %.pn121.pn.pn.pn

217:                                              ; preds = %206, %191, %176
  unreachable
}

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

declare void @_ZN6alglib8ap_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr, ptr) local_unnamed_addr

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 32}
!6 = !{!"_ZTSN11alglib_impl15rcommv2_requestE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!6, !7, i64 48}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"double", !8, i64 0}
!16 = distinct !{!16, !17, !18}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = distinct !{!19, !17, !18}
!20 = distinct !{!20, !17, !18}
!21 = distinct !{!21, !17}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.unroll.disable"}
!24 = distinct !{!24, !17, !18, !25}
!25 = !{!"llvm.loop.unroll.runtime.disable"}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !17, !18, !25}
!32 = !{!33}
!33 = distinct !{!33, !34}
!34 = distinct !{!34, !"LVerDomain"}
!35 = !{!36}
!36 = distinct !{!36, !34}
!37 = distinct !{!37, !17, !18, !25}
!38 = distinct !{!38, !17}
!39 = distinct !{!39, !17}
!40 = !{!6, !7, i64 0}


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