; LLVM IR from RichtersFinger/ChainSimulation :: Simulation.ll (ZN10Simulation17getInternalForcesE5Chain)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl" }
%"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Vector = type { double, double }
%class.Chain = type { double, double, double, double, double, %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ChainElement *, std::allocator<ChainElement *>>::_Vector_impl" }
%"struct.std::_Vector_base<ChainElement *, std::allocator<ChainElement *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ChainElement *, std::allocator<ChainElement *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ChainElement *, std::allocator<ChainElement *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.ChainElement = type { double, double, double, double, double, double, double, double, i8, ptr, ptr }
%class.ChainLink = type { ptr, ptr, double }

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

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

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

; 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 dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104), double, double, double, double) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10Simulation17getInternalForcesE5Chain(ptr dead_on_unwind noalias writable sret(%"class.std::vector.5") align 8 %0, ptr noundef nonnull align 8 dereferenceable(104) %1, ptr noundef %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i1, align 1
  %8 = alloca i32, align 4
  %9 = alloca %class.Vector, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %class.Vector, align 8
  %13 = alloca %class.Vector, align 8
  %14 = alloca %class.Vector, align 8
  %15 = alloca double, align 8
  %16 = alloca %class.Vector, align 8
  %17 = alloca %class.Vector, align 8
  %18 = alloca %class.Vector, align 8
  %19 = alloca %class.Vector, align 8
  %20 = alloca double, align 8
  %21 = alloca %class.Vector, align 8
  %22 = alloca %class.Vector, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca %class.Vector, align 8
  %26 = alloca %class.Vector, align 8
  %27 = alloca %class.Vector, align 8
  %28 = alloca double, align 8
  %29 = alloca %class.Vector, align 8
  %30 = alloca %class.Vector, align 8
  %31 = alloca %class.Vector, align 8
  %32 = alloca %class.Vector, align 8
  %33 = alloca double, align 8
  %34 = alloca %class.Vector, align 8
  %35 = alloca %class.Vector, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca i32, align 4
  %39 = alloca %class.Vector, align 8
  %40 = alloca %class.Vector, align 8
  %41 = alloca %class.Vector, align 8
  %42 = alloca %class.Vector, align 8
  %43 = alloca %class.Vector, align 8
  %44 = alloca %class.Vector, align 8
  %45 = alloca %class.Vector, align 8
  %46 = alloca double, align 8
  %47 = alloca %class.Vector, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %55 = load ptr, ptr %5, align 8
  store i1 false, ptr %7, align 1
  call void @_ZNSt6vectorI6VectorSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %56

56:                                               ; preds = %520, %3
  %57 = load i32, ptr %8, align 4, !tbaa !9
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %60 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #6
  %61 = icmp ult i64 %58, %60
  br i1 %61, label %63, label %62

62:                                               ; preds = %56
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %524

63:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #6
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %9, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %64 unwind label %269

64:                                               ; preds = %63
  %65 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %66 = load i32, ptr %8, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %67) #6
  %69 = load ptr, ptr %68, align 8, !tbaa !5
  %70 = getelementptr inbounds %class.ChainElement, ptr %69, i32 0, i32 9
  %71 = load ptr, ptr %70, align 8, !tbaa !11
  %72 = getelementptr inbounds %class.ChainLink, ptr %71, i32 0, i32 0
  %73 = load ptr, ptr %72, align 8, !tbaa !15
  %74 = icmp ne ptr %73, null
  br i1 %74, label %75, label %293

75:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #6
  %76 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %77 = load i32, ptr %8, align 4, !tbaa !9
  %78 = sext i32 %77 to i64
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %76, i64 noundef %78) #6
  %80 = load ptr, ptr %79, align 8, !tbaa !5
  %81 = getelementptr inbounds %class.ChainElement, ptr %80, i32 0, i32 0
  %82 = load double, ptr %81, align 8, !tbaa !17
  %83 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %84 = load i32, ptr %8, align 4, !tbaa !9
  %85 = sext i32 %84 to i64
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %83, i64 noundef %85) #6
  %87 = load ptr, ptr %86, align 8, !tbaa !5
  %88 = getelementptr inbounds %class.ChainElement, ptr %87, i32 0, i32 1
  %89 = load double, ptr %88, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %13, double noundef %82, double noundef %89)
          to label %90 unwind label %273

90:                                               ; preds = %75
  %91 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %92 = load i32, ptr %8, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %91, i64 noundef %93) #6
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  %96 = getelementptr inbounds %class.ChainElement, ptr %95, i32 0, i32 9
  %97 = load ptr, ptr %96, align 8, !tbaa !11
  %98 = getelementptr inbounds %class.ChainLink, ptr %97, i32 0, i32 0
  %99 = load ptr, ptr %98, align 8, !tbaa !15
  %100 = getelementptr inbounds %class.ChainElement, ptr %99, i32 0, i32 0
  %101 = load double, ptr %100, align 8, !tbaa !17
  %102 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %103 = load i32, ptr %8, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %102, i64 noundef %104) #6
  %106 = load ptr, ptr %105, align 8, !tbaa !5
  %107 = getelementptr inbounds %class.ChainElement, ptr %106, i32 0, i32 9
  %108 = load ptr, ptr %107, align 8, !tbaa !11
  %109 = getelementptr inbounds %class.ChainLink, ptr %108, i32 0, i32 0
  %110 = load ptr, ptr %109, align 8, !tbaa !15
  %111 = getelementptr inbounds %class.ChainElement, ptr %110, i32 0, i32 1
  %112 = load double, ptr %111, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %14, double noundef %101, double noundef %112)
          to label %113 unwind label %273

113:                                              ; preds = %90
  %114 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %115 = load double, ptr %114, align 8
  %116 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %117 = load double, ptr %116, align 8
  %118 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %119 = load double, ptr %118, align 8
  %120 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %121 = load double, ptr %120, align 8
  %122 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %115, double %117, double %119, double %121)
          to label %123 unwind label %273

123:                                              ; preds = %113
  %124 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %125 = extractvalue { double, double } %122, 0
  store double %125, ptr %124, align 8
  %126 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %127 = extractvalue { double, double } %122, 1
  store double %127, ptr %126, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %16, ptr align 8 %12, i64 16, i1 false), !tbaa.struct !19
  %128 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  %129 = load double, ptr %128, align 8
  %130 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  %131 = load double, ptr %130, align 8
  %132 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %55, double %129, double %131)
          to label %133 unwind label %277

133:                                              ; preds = %123
  store double %132, ptr %15, align 8, !tbaa !20
  %134 = load double, ptr %15, align 8, !tbaa !20
  %135 = fcmp une double %134, 0.000000e+00
  br i1 %135, label %136, label %290

136:                                              ; preds = %133
  %137 = load double, ptr %15, align 8, !tbaa !20
  %138 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 0
  %139 = load double, ptr %138, align 8, !tbaa !21
  %140 = fdiv double %139, %137
  store double %140, ptr %138, align 8, !tbaa !21
  %141 = load double, ptr %15, align 8, !tbaa !20
  %142 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 1
  %143 = load double, ptr %142, align 8, !tbaa !23
  %144 = fdiv double %143, %141
  store double %144, ptr %142, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #6
  %145 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %146 = load i32, ptr %8, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %145, i64 noundef %147) #6
  %149 = load ptr, ptr %148, align 8, !tbaa !5
  %150 = getelementptr inbounds %class.ChainElement, ptr %149, i32 0, i32 2
  %151 = load double, ptr %150, align 8, !tbaa !24
  %152 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %153 = load i32, ptr %8, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %152, i64 noundef %154) #6
  %156 = load ptr, ptr %155, align 8, !tbaa !5
  %157 = getelementptr inbounds %class.ChainElement, ptr %156, i32 0, i32 3
  %158 = load double, ptr %157, align 8, !tbaa !25
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %18, double noundef %151, double noundef %158)
          to label %159 unwind label %281

159:                                              ; preds = %136
  %160 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %161 = load i32, ptr %8, align 4, !tbaa !9
  %162 = sext i32 %161 to i64
  %163 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %160, i64 noundef %162) #6
  %164 = load ptr, ptr %163, align 8, !tbaa !5
  %165 = getelementptr inbounds %class.ChainElement, ptr %164, i32 0, i32 9
  %166 = load ptr, ptr %165, align 8, !tbaa !11
  %167 = getelementptr inbounds %class.ChainLink, ptr %166, i32 0, i32 0
  %168 = load ptr, ptr %167, align 8, !tbaa !15
  %169 = getelementptr inbounds %class.ChainElement, ptr %168, i32 0, i32 2
  %170 = load double, ptr %169, align 8, !tbaa !24
  %171 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %172 = load i32, ptr %8, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %171, i64 noundef %173) #6
  %175 = load ptr, ptr %174, align 8, !tbaa !5
  %176 = getelementptr inbounds %class.ChainElement, ptr %175, i32 0, i32 9
  %177 = load ptr, ptr %176, align 8, !tbaa !11
  %178 = getelementptr inbounds %class.ChainLink, ptr %177, i32 0, i32 0
  %179 = load ptr, ptr %178, align 8, !tbaa !15
  %180 = getelementptr inbounds %class.ChainElement, ptr %179, i32 0, i32 3
  %181 = load double, ptr %180, align 8, !tbaa !25
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %19, double noundef %170, double noundef %181)
          to label %182 unwind label %281

182:                                              ; preds = %159
  %183 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  %184 = load double, ptr %183, align 8
  %185 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  %186 = load double, ptr %185, align 8
  %187 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 0
  %188 = load double, ptr %187, align 8
  %189 = getelementptr inbounds { double, double }, ptr %19, i32 0, i32 1
  %190 = load double, ptr %189, align 8
  %191 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %184, double %186, double %188, double %190)
          to label %192 unwind label %281

192:                                              ; preds = %182
  %193 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %194 = extractvalue { double, double } %191, 0
  store double %194, ptr %193, align 8
  %195 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %196 = extractvalue { double, double } %191, 1
  store double %196, ptr %195, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %21, ptr align 8 %17, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %22, ptr align 8 %12, i64 16, i1 false), !tbaa.struct !19
  %197 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %198 = load double, ptr %197, align 8
  %199 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %200 = load double, ptr %199, align 8
  %201 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %202 = load double, ptr %201, align 8
  %203 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %204 = load double, ptr %203, align 8
  %205 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %198, double %200, double %202, double %204)
          to label %206 unwind label %285

206:                                              ; preds = %192
  store double %205, ptr %20, align 8, !tbaa !20
  %207 = load double, ptr %20, align 8, !tbaa !20
  %208 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 0
  %209 = load double, ptr %208, align 8, !tbaa !21
  %210 = fmul double %207, %209
  %211 = getelementptr inbounds %class.Vector, ptr %17, i32 0, i32 0
  store double %210, ptr %211, align 8, !tbaa !21
  %212 = load double, ptr %20, align 8, !tbaa !20
  %213 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 1
  %214 = load double, ptr %213, align 8, !tbaa !23
  %215 = fmul double %212, %214
  %216 = getelementptr inbounds %class.Vector, ptr %17, i32 0, i32 1
  store double %215, ptr %216, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %217 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 3
  %218 = load double, ptr %217, align 8, !tbaa !26
  %219 = load double, ptr %15, align 8, !tbaa !20
  %220 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %221 = load i32, ptr %8, align 4, !tbaa !9
  %222 = sext i32 %221 to i64
  %223 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %220, i64 noundef %222) #6
  %224 = load ptr, ptr %223, align 8, !tbaa !5
  %225 = getelementptr inbounds %class.ChainElement, ptr %224, i32 0, i32 9
  %226 = load ptr, ptr %225, align 8, !tbaa !11
  %227 = getelementptr inbounds %class.ChainLink, ptr %226, i32 0, i32 2
  %228 = load double, ptr %227, align 8, !tbaa !32
  %229 = fsub double %219, %228
  %230 = fmul double %218, %229
  %231 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 0
  %232 = load double, ptr %231, align 8, !tbaa !21
  %233 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 4
  %234 = load double, ptr %233, align 8, !tbaa !33
  %235 = getelementptr inbounds %class.Vector, ptr %17, i32 0, i32 0
  %236 = load double, ptr %235, align 8, !tbaa !21
  %237 = fmul double %234, %236
  %238 = call double @llvm.fmuladd.f64(double %230, double %232, double %237)
  store double %238, ptr %23, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %239 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 3
  %240 = load double, ptr %239, align 8, !tbaa !26
  %241 = load double, ptr %15, align 8, !tbaa !20
  %242 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %243 = load i32, ptr %8, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %242, i64 noundef %244) #6
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  %247 = getelementptr inbounds %class.ChainElement, ptr %246, i32 0, i32 9
  %248 = load ptr, ptr %247, align 8, !tbaa !11
  %249 = getelementptr inbounds %class.ChainLink, ptr %248, i32 0, i32 2
  %250 = load double, ptr %249, align 8, !tbaa !32
  %251 = fsub double %241, %250
  %252 = fmul double %240, %251
  %253 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 1
  %254 = load double, ptr %253, align 8, !tbaa !23
  %255 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 4
  %256 = load double, ptr %255, align 8, !tbaa !33
  %257 = getelementptr inbounds %class.Vector, ptr %17, i32 0, i32 1
  %258 = load double, ptr %257, align 8, !tbaa !23
  %259 = fmul double %256, %258
  %260 = call double @llvm.fmuladd.f64(double %252, double %254, double %259)
  store double %260, ptr %24, align 8, !tbaa !20
  %261 = load double, ptr %23, align 8, !tbaa !20
  %262 = getelementptr inbounds %class.Vector, ptr %9, i32 0, i32 0
  %263 = load double, ptr %262, align 8, !tbaa !21
  %264 = fadd double %263, %261
  store double %264, ptr %262, align 8, !tbaa !21
  %265 = load double, ptr %24, align 8, !tbaa !20
  %266 = getelementptr inbounds %class.Vector, ptr %9, i32 0, i32 1
  %267 = load double, ptr %266, align 8, !tbaa !23
  %268 = fadd double %267, %265
  store double %268, ptr %266, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  br label %290

269:                                              ; preds = %518, %63
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %10, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %11, align 4
  br label %523

273:                                              ; preds = %113, %90, %75
  %274 = landingpad { ptr, i32 }
          cleanup
  %275 = extractvalue { ptr, i32 } %274, 0
  store ptr %275, ptr %10, align 8
  %276 = extractvalue { ptr, i32 } %274, 1
  store i32 %276, ptr %11, align 4
  br label %292

277:                                              ; preds = %123
  %278 = landingpad { ptr, i32 }
          cleanup
  %279 = extractvalue { ptr, i32 } %278, 0
  store ptr %279, ptr %10, align 8
  %280 = extractvalue { ptr, i32 } %278, 1
  store i32 %280, ptr %11, align 4
  br label %291

281:                                              ; preds = %182, %159, %136
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %10, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %11, align 4
  br label %289

285:                                              ; preds = %192
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %10, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  br label %289

289:                                              ; preds = %285, %281
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #6
  br label %291

290:                                              ; preds = %206, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  br label %293

291:                                              ; preds = %289, %277
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %292

292:                                              ; preds = %291, %273
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  br label %523

293:                                              ; preds = %290, %64
  %294 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %295 = load i32, ptr %8, align 4, !tbaa !9
  %296 = sext i32 %295 to i64
  %297 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %294, i64 noundef %296) #6
  %298 = load ptr, ptr %297, align 8, !tbaa !5
  %299 = getelementptr inbounds %class.ChainElement, ptr %298, i32 0, i32 10
  %300 = load ptr, ptr %299, align 8, !tbaa !34
  %301 = getelementptr inbounds %class.ChainLink, ptr %300, i32 0, i32 1
  %302 = load ptr, ptr %301, align 8, !tbaa !35
  %303 = icmp ne ptr %302, null
  br i1 %303, label %304, label %518

304:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #6
  %305 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %306 = load i32, ptr %8, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %305, i64 noundef %307) #6
  %309 = load ptr, ptr %308, align 8, !tbaa !5
  %310 = getelementptr inbounds %class.ChainElement, ptr %309, i32 0, i32 0
  %311 = load double, ptr %310, align 8, !tbaa !17
  %312 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %313 = load i32, ptr %8, align 4, !tbaa !9
  %314 = sext i32 %313 to i64
  %315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %312, i64 noundef %314) #6
  %316 = load ptr, ptr %315, align 8, !tbaa !5
  %317 = getelementptr inbounds %class.ChainElement, ptr %316, i32 0, i32 1
  %318 = load double, ptr %317, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %26, double noundef %311, double noundef %318)
          to label %319 unwind label %498

319:                                              ; preds = %304
  %320 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %321 = load i32, ptr %8, align 4, !tbaa !9
  %322 = sext i32 %321 to i64
  %323 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %320, i64 noundef %322) #6
  %324 = load ptr, ptr %323, align 8, !tbaa !5
  %325 = getelementptr inbounds %class.ChainElement, ptr %324, i32 0, i32 10
  %326 = load ptr, ptr %325, align 8, !tbaa !34
  %327 = getelementptr inbounds %class.ChainLink, ptr %326, i32 0, i32 1
  %328 = load ptr, ptr %327, align 8, !tbaa !35
  %329 = getelementptr inbounds %class.ChainElement, ptr %328, i32 0, i32 0
  %330 = load double, ptr %329, align 8, !tbaa !17
  %331 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %332 = load i32, ptr %8, align 4, !tbaa !9
  %333 = sext i32 %332 to i64
  %334 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %331, i64 noundef %333) #6
  %335 = load ptr, ptr %334, align 8, !tbaa !5
  %336 = getelementptr inbounds %class.ChainElement, ptr %335, i32 0, i32 10
  %337 = load ptr, ptr %336, align 8, !tbaa !34
  %338 = getelementptr inbounds %class.ChainLink, ptr %337, i32 0, i32 1
  %339 = load ptr, ptr %338, align 8, !tbaa !35
  %340 = getelementptr inbounds %class.ChainElement, ptr %339, i32 0, i32 1
  %341 = load double, ptr %340, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %27, double noundef %330, double noundef %341)
          to label %342 unwind label %498

342:                                              ; preds = %319
  %343 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %344 = load double, ptr %343, align 8
  %345 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %346 = load double, ptr %345, align 8
  %347 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %348 = load double, ptr %347, align 8
  %349 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %350 = load double, ptr %349, align 8
  %351 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %344, double %346, double %348, double %350)
          to label %352 unwind label %498

352:                                              ; preds = %342
  %353 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %354 = extractvalue { double, double } %351, 0
  store double %354, ptr %353, align 8
  %355 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %356 = extractvalue { double, double } %351, 1
  store double %356, ptr %355, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %29, ptr align 8 %25, i64 16, i1 false), !tbaa.struct !19
  %357 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %358 = load double, ptr %357, align 8
  %359 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %360 = load double, ptr %359, align 8
  %361 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %55, double %358, double %360)
          to label %362 unwind label %502

362:                                              ; preds = %352
  store double %361, ptr %28, align 8, !tbaa !20
  %363 = load double, ptr %28, align 8, !tbaa !20
  %364 = fcmp une double %363, 0.000000e+00
  br i1 %364, label %365, label %515

365:                                              ; preds = %362
  %366 = load double, ptr %28, align 8, !tbaa !20
  %367 = getelementptr inbounds %class.Vector, ptr %25, i32 0, i32 0
  %368 = load double, ptr %367, align 8, !tbaa !21
  %369 = fdiv double %368, %366
  store double %369, ptr %367, align 8, !tbaa !21
  %370 = load double, ptr %28, align 8, !tbaa !20
  %371 = getelementptr inbounds %class.Vector, ptr %25, i32 0, i32 1
  %372 = load double, ptr %371, align 8, !tbaa !23
  %373 = fdiv double %372, %370
  store double %373, ptr %371, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #6
  %374 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %375 = load i32, ptr %8, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %374, i64 noundef %376) #6
  %378 = load ptr, ptr %377, align 8, !tbaa !5
  %379 = getelementptr inbounds %class.ChainElement, ptr %378, i32 0, i32 2
  %380 = load double, ptr %379, align 8, !tbaa !24
  %381 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %382 = load i32, ptr %8, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %381, i64 noundef %383) #6
  %385 = load ptr, ptr %384, align 8, !tbaa !5
  %386 = getelementptr inbounds %class.ChainElement, ptr %385, i32 0, i32 3
  %387 = load double, ptr %386, align 8, !tbaa !25
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %31, double noundef %380, double noundef %387)
          to label %388 unwind label %506

388:                                              ; preds = %365
  %389 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %390 = load i32, ptr %8, align 4, !tbaa !9
  %391 = sext i32 %390 to i64
  %392 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %389, i64 noundef %391) #6
  %393 = load ptr, ptr %392, align 8, !tbaa !5
  %394 = getelementptr inbounds %class.ChainElement, ptr %393, i32 0, i32 10
  %395 = load ptr, ptr %394, align 8, !tbaa !34
  %396 = getelementptr inbounds %class.ChainLink, ptr %395, i32 0, i32 1
  %397 = load ptr, ptr %396, align 8, !tbaa !35
  %398 = getelementptr inbounds %class.ChainElement, ptr %397, i32 0, i32 2
  %399 = load double, ptr %398, align 8, !tbaa !24
  %400 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %401 = load i32, ptr %8, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %400, i64 noundef %402) #6
  %404 = load ptr, ptr %403, align 8, !tbaa !5
  %405 = getelementptr inbounds %class.ChainElement, ptr %404, i32 0, i32 10
  %406 = load ptr, ptr %405, align 8, !tbaa !34
  %407 = getelementptr inbounds %class.ChainLink, ptr %406, i32 0, i32 1
  %408 = load ptr, ptr %407, align 8, !tbaa !35
  %409 = getelementptr inbounds %class.ChainElement, ptr %408, i32 0, i32 3
  %410 = load double, ptr %409, align 8, !tbaa !25
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %32, double noundef %399, double noundef %410)
          to label %411 unwind label %506

411:                                              ; preds = %388
  %412 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 0
  %413 = load double, ptr %412, align 8
  %414 = getelementptr inbounds { double, double }, ptr %31, i32 0, i32 1
  %415 = load double, ptr %414, align 8
  %416 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %417 = load double, ptr %416, align 8
  %418 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %419 = load double, ptr %418, align 8
  %420 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %413, double %415, double %417, double %419)
          to label %421 unwind label %506

421:                                              ; preds = %411
  %422 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %423 = extractvalue { double, double } %420, 0
  store double %423, ptr %422, align 8
  %424 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %425 = extractvalue { double, double } %420, 1
  store double %425, ptr %424, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %30, i64 16, i1 false), !tbaa.struct !19
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %35, ptr align 8 %25, i64 16, i1 false), !tbaa.struct !19
  %426 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %427 = load double, ptr %426, align 8
  %428 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %429 = load double, ptr %428, align 8
  %430 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %431 = load double, ptr %430, align 8
  %432 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %433 = load double, ptr %432, align 8
  %434 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %427, double %429, double %431, double %433)
          to label %435 unwind label %510

435:                                              ; preds = %421
  store double %434, ptr %33, align 8, !tbaa !20
  %436 = load double, ptr %33, align 8, !tbaa !20
  %437 = getelementptr inbounds %class.Vector, ptr %25, i32 0, i32 0
  %438 = load double, ptr %437, align 8, !tbaa !21
  %439 = fmul double %436, %438
  %440 = getelementptr inbounds %class.Vector, ptr %30, i32 0, i32 0
  store double %439, ptr %440, align 8, !tbaa !21
  %441 = load double, ptr %33, align 8, !tbaa !20
  %442 = getelementptr inbounds %class.Vector, ptr %25, i32 0, i32 1
  %443 = load double, ptr %442, align 8, !tbaa !23
  %444 = fmul double %441, %443
  %445 = getelementptr inbounds %class.Vector, ptr %30, i32 0, i32 1
  store double %444, ptr %445, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %446 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 3
  %447 = load double, ptr %446, align 8, !tbaa !26
  %448 = load double, ptr %28, align 8, !tbaa !20
  %449 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %450 = load i32, ptr %8, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %449, i64 noundef %451) #6
  %453 = load ptr, ptr %452, align 8, !tbaa !5
  %454 = getelementptr inbounds %class.ChainElement, ptr %453, i32 0, i32 10
  %455 = load ptr, ptr %454, align 8, !tbaa !34
  %456 = getelementptr inbounds %class.ChainLink, ptr %455, i32 0, i32 2
  %457 = load double, ptr %456, align 8, !tbaa !32
  %458 = fsub double %448, %457
  %459 = fmul double %447, %458
  %460 = getelementptr inbounds %class.Vector, ptr %25, i32 0, i32 0
  %461 = load double, ptr %460, align 8, !tbaa !21
  %462 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 4
  %463 = load double, ptr %462, align 8, !tbaa !33
  %464 = getelementptr inbounds %class.Vector, ptr %30, i32 0, i32 0
  %465 = load double, ptr %464, align 8, !tbaa !21
  %466 = fmul double %463, %465
  %467 = call double @llvm.fmuladd.f64(double %459, double %461, double %466)
  store double %467, ptr %36, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %468 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 3
  %469 = load double, ptr %468, align 8, !tbaa !26
  %470 = load double, ptr %28, align 8, !tbaa !20
  %471 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %472 = load i32, ptr %8, align 4, !tbaa !9
  %473 = sext i32 %472 to i64
  %474 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %471, i64 noundef %473) #6
  %475 = load ptr, ptr %474, align 8, !tbaa !5
  %476 = getelementptr inbounds %class.ChainElement, ptr %475, i32 0, i32 10
  %477 = load ptr, ptr %476, align 8, !tbaa !34
  %478 = getelementptr inbounds %class.ChainLink, ptr %477, i32 0, i32 2
  %479 = load double, ptr %478, align 8, !tbaa !32
  %480 = fsub double %470, %479
  %481 = fmul double %469, %480
  %482 = getelementptr inbounds %class.Vector, ptr %25, i32 0, i32 1
  %483 = load double, ptr %482, align 8, !tbaa !23
  %484 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 4
  %485 = load double, ptr %484, align 8, !tbaa !33
  %486 = getelementptr inbounds %class.Vector, ptr %30, i32 0, i32 1
  %487 = load double, ptr %486, align 8, !tbaa !23
  %488 = fmul double %485, %487
  %489 = call double @llvm.fmuladd.f64(double %481, double %483, double %488)
  store double %489, ptr %37, align 8, !tbaa !20
  %490 = load double, ptr %36, align 8, !tbaa !20
  %491 = getelementptr inbounds %class.Vector, ptr %9, i32 0, i32 0
  %492 = load double, ptr %491, align 8, !tbaa !21
  %493 = fadd double %492, %490
  store double %493, ptr %491, align 8, !tbaa !21
  %494 = load double, ptr %37, align 8, !tbaa !20
  %495 = getelementptr inbounds %class.Vector, ptr %9, i32 0, i32 1
  %496 = load double, ptr %495, align 8, !tbaa !23
  %497 = fadd double %496, %494
  store double %497, ptr %495, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #6
  br label %515

498:                                              ; preds = %342, %319, %304
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %10, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %11, align 4
  br label %517

502:                                              ; preds = %352
  %503 = landingpad { ptr, i32 }
          cleanup
  %504 = extractvalue { ptr, i32 } %503, 0
  store ptr %504, ptr %10, align 8
  %505 = extractvalue { ptr, i32 } %503, 1
  store i32 %505, ptr %11, align 4
  br label %516

506:                                              ; preds = %411, %388, %365
  %507 = landingpad { ptr, i32 }
          cleanup
  %508 = extractvalue { ptr, i32 } %507, 0
  store ptr %508, ptr %10, align 8
  %509 = extractvalue { ptr, i32 } %507, 1
  store i32 %509, ptr %11, align 4
  br label %514

510:                                              ; preds = %421
  %511 = landingpad { ptr, i32 }
          cleanup
  %512 = extractvalue { ptr, i32 } %511, 0
  store ptr %512, ptr %10, align 8
  %513 = extractvalue { ptr, i32 } %511, 1
  store i32 %513, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %514

514:                                              ; preds = %510, %506
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #6
  br label %516

515:                                              ; preds = %435, %362
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #6
  br label %518

516:                                              ; preds = %514, %502
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %517

517:                                              ; preds = %516, %498
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #6
  br label %523

518:                                              ; preds = %515, %293
  invoke void @_ZNSt6vectorI6VectorSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %519 unwind label %269

519:                                              ; preds = %518
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  br label %520

520:                                              ; preds = %519
  %521 = load i32, ptr %8, align 4, !tbaa !9
  %522 = add nsw i32 %521, 1
  store i32 %522, ptr %8, align 4, !tbaa !9
  br label %56, !llvm.loop !36

523:                                              ; preds = %517, %292, %269
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %826

524:                                              ; preds = %62
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  store i32 1, ptr %38, align 4, !tbaa !9
  br label %525

525:                                              ; preds = %819, %524
  %526 = load i32, ptr %38, align 4, !tbaa !9
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %529 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %528) #6
  %530 = sub i64 %529, 1
  %531 = icmp ult i64 %527, %530
  br i1 %531, label %533, label %532

532:                                              ; preds = %525
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  br label %822

533:                                              ; preds = %525
  %534 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %535 = load i32, ptr %38, align 4, !tbaa !9
  %536 = sext i32 %535 to i64
  %537 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %534, i64 noundef %536) #6
  %538 = load ptr, ptr %537, align 8, !tbaa !5
  %539 = getelementptr inbounds %class.ChainElement, ptr %538, i32 0, i32 9
  %540 = load ptr, ptr %539, align 8, !tbaa !11
  %541 = getelementptr inbounds %class.ChainLink, ptr %540, i32 0, i32 0
  %542 = load ptr, ptr %541, align 8, !tbaa !15
  %543 = icmp ne ptr %542, null
  br i1 %543, label %544, label %818

544:                                              ; preds = %533
  %545 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %546 = load i32, ptr %38, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %545, i64 noundef %547) #6
  %549 = load ptr, ptr %548, align 8, !tbaa !5
  %550 = getelementptr inbounds %class.ChainElement, ptr %549, i32 0, i32 10
  %551 = load ptr, ptr %550, align 8, !tbaa !34
  %552 = getelementptr inbounds %class.ChainLink, ptr %551, i32 0, i32 1
  %553 = load ptr, ptr %552, align 8, !tbaa !35
  %554 = icmp ne ptr %553, null
  br i1 %554, label %555, label %818

555:                                              ; preds = %544
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #6
  %556 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %557 = load i32, ptr %38, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %556, i64 noundef %558) #6
  %560 = load ptr, ptr %559, align 8, !tbaa !5
  %561 = getelementptr inbounds %class.ChainElement, ptr %560, i32 0, i32 0
  %562 = load double, ptr %561, align 8, !tbaa !17
  %563 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %564 = load i32, ptr %38, align 4, !tbaa !9
  %565 = sext i32 %564 to i64
  %566 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %563, i64 noundef %565) #6
  %567 = load ptr, ptr %566, align 8, !tbaa !5
  %568 = getelementptr inbounds %class.ChainElement, ptr %567, i32 0, i32 1
  %569 = load double, ptr %568, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %40, double noundef %562, double noundef %569)
          to label %570 unwind label %788

570:                                              ; preds = %555
  %571 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %572 = load i32, ptr %38, align 4, !tbaa !9
  %573 = sext i32 %572 to i64
  %574 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %571, i64 noundef %573) #6
  %575 = load ptr, ptr %574, align 8, !tbaa !5
  %576 = getelementptr inbounds %class.ChainElement, ptr %575, i32 0, i32 9
  %577 = load ptr, ptr %576, align 8, !tbaa !11
  %578 = getelementptr inbounds %class.ChainLink, ptr %577, i32 0, i32 0
  %579 = load ptr, ptr %578, align 8, !tbaa !15
  %580 = getelementptr inbounds %class.ChainElement, ptr %579, i32 0, i32 0
  %581 = load double, ptr %580, align 8, !tbaa !17
  %582 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %583 = load i32, ptr %38, align 4, !tbaa !9
  %584 = sext i32 %583 to i64
  %585 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %582, i64 noundef %584) #6
  %586 = load ptr, ptr %585, align 8, !tbaa !5
  %587 = getelementptr inbounds %class.ChainElement, ptr %586, i32 0, i32 9
  %588 = load ptr, ptr %587, align 8, !tbaa !11
  %589 = getelementptr inbounds %class.ChainLink, ptr %588, i32 0, i32 0
  %590 = load ptr, ptr %589, align 8, !tbaa !15
  %591 = getelementptr inbounds %class.ChainElement, ptr %590, i32 0, i32 1
  %592 = load double, ptr %591, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %41, double noundef %581, double noundef %592)
          to label %593 unwind label %788

593:                                              ; preds = %570
  %594 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 0
  %595 = load double, ptr %594, align 8
  %596 = getelementptr inbounds { double, double }, ptr %40, i32 0, i32 1
  %597 = load double, ptr %596, align 8
  %598 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %599 = load double, ptr %598, align 8
  %600 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %601 = load double, ptr %600, align 8
  %602 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %595, double %597, double %599, double %601)
          to label %603 unwind label %788

603:                                              ; preds = %593
  %604 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 0
  %605 = extractvalue { double, double } %602, 0
  store double %605, ptr %604, align 8
  %606 = getelementptr inbounds { double, double }, ptr %39, i32 0, i32 1
  %607 = extractvalue { double, double } %602, 1
  store double %607, ptr %606, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #6
  %608 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %609 = load i32, ptr %38, align 4, !tbaa !9
  %610 = sext i32 %609 to i64
  %611 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %608, i64 noundef %610) #6
  %612 = load ptr, ptr %611, align 8, !tbaa !5
  %613 = getelementptr inbounds %class.ChainElement, ptr %612, i32 0, i32 0
  %614 = load double, ptr %613, align 8, !tbaa !17
  %615 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %616 = load i32, ptr %38, align 4, !tbaa !9
  %617 = sext i32 %616 to i64
  %618 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %615, i64 noundef %617) #6
  %619 = load ptr, ptr %618, align 8, !tbaa !5
  %620 = getelementptr inbounds %class.ChainElement, ptr %619, i32 0, i32 1
  %621 = load double, ptr %620, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %43, double noundef %614, double noundef %621)
          to label %622 unwind label %792

622:                                              ; preds = %603
  %623 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %624 = load i32, ptr %38, align 4, !tbaa !9
  %625 = sext i32 %624 to i64
  %626 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %623, i64 noundef %625) #6
  %627 = load ptr, ptr %626, align 8, !tbaa !5
  %628 = getelementptr inbounds %class.ChainElement, ptr %627, i32 0, i32 10
  %629 = load ptr, ptr %628, align 8, !tbaa !34
  %630 = getelementptr inbounds %class.ChainLink, ptr %629, i32 0, i32 1
  %631 = load ptr, ptr %630, align 8, !tbaa !35
  %632 = getelementptr inbounds %class.ChainElement, ptr %631, i32 0, i32 0
  %633 = load double, ptr %632, align 8, !tbaa !17
  %634 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %635 = load i32, ptr %38, align 4, !tbaa !9
  %636 = sext i32 %635 to i64
  %637 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %634, i64 noundef %636) #6
  %638 = load ptr, ptr %637, align 8, !tbaa !5
  %639 = getelementptr inbounds %class.ChainElement, ptr %638, i32 0, i32 10
  %640 = load ptr, ptr %639, align 8, !tbaa !34
  %641 = getelementptr inbounds %class.ChainLink, ptr %640, i32 0, i32 1
  %642 = load ptr, ptr %641, align 8, !tbaa !35
  %643 = getelementptr inbounds %class.ChainElement, ptr %642, i32 0, i32 1
  %644 = load double, ptr %643, align 8, !tbaa !18
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %44, double noundef %633, double noundef %644)
          to label %645 unwind label %792

645:                                              ; preds = %622
  %646 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %647 = load double, ptr %646, align 8
  %648 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %649 = load double, ptr %648, align 8
  %650 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 0
  %651 = load double, ptr %650, align 8
  %652 = getelementptr inbounds { double, double }, ptr %44, i32 0, i32 1
  %653 = load double, ptr %652, align 8
  %654 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %55, double %647, double %649, double %651, double %653)
          to label %655 unwind label %792

655:                                              ; preds = %645
  %656 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 0
  %657 = extractvalue { double, double } %654, 0
  store double %657, ptr %656, align 8
  %658 = getelementptr inbounds { double, double }, ptr %42, i32 0, i32 1
  %659 = extractvalue { double, double } %654, 1
  store double %659, ptr %658, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #6
  %660 = getelementptr inbounds %class.Vector, ptr %39, i32 0, i32 0
  %661 = load double, ptr %660, align 8, !tbaa !21
  %662 = getelementptr inbounds %class.Vector, ptr %42, i32 0, i32 0
  %663 = load double, ptr %662, align 8, !tbaa !21
  %664 = fadd double %661, %663
  %665 = getelementptr inbounds %class.Vector, ptr %39, i32 0, i32 1
  %666 = load double, ptr %665, align 8, !tbaa !23
  %667 = getelementptr inbounds %class.Vector, ptr %42, i32 0, i32 1
  %668 = load double, ptr %667, align 8, !tbaa !23
  %669 = fadd double %666, %668
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %45, double noundef %664, double noundef %669)
          to label %670 unwind label %796

670:                                              ; preds = %655
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %47, ptr align 8 %45, i64 16, i1 false), !tbaa.struct !19
  %671 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 0
  %672 = load double, ptr %671, align 8
  %673 = getelementptr inbounds { double, double }, ptr %47, i32 0, i32 1
  %674 = load double, ptr %673, align 8
  %675 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %55, double %672, double %674)
          to label %676 unwind label %800

676:                                              ; preds = %670
  store double %675, ptr %46, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %677 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %678 = load i32, ptr %38, align 4, !tbaa !9
  %679 = sext i32 %678 to i64
  %680 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %677, i64 noundef %679) #6
  %681 = load ptr, ptr %680, align 8, !tbaa !5
  %682 = getelementptr inbounds %class.ChainElement, ptr %681, i32 0, i32 9
  %683 = load ptr, ptr %682, align 8, !tbaa !11
  %684 = getelementptr inbounds %class.ChainLink, ptr %683, i32 0, i32 2
  %685 = load double, ptr %684, align 8, !tbaa !32
  %686 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %687 = load i32, ptr %38, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %686, i64 noundef %688) #6
  %690 = load ptr, ptr %689, align 8, !tbaa !5
  %691 = getelementptr inbounds %class.ChainElement, ptr %690, i32 0, i32 10
  %692 = load ptr, ptr %691, align 8, !tbaa !34
  %693 = getelementptr inbounds %class.ChainLink, ptr %692, i32 0, i32 2
  %694 = load double, ptr %693, align 8, !tbaa !32
  %695 = fadd double %685, %694
  %696 = fmul double 5.000000e-01, %695
  store double %696, ptr %48, align 8, !tbaa !20
  %697 = load double, ptr %46, align 8, !tbaa !20
  %698 = load double, ptr %48, align 8, !tbaa !20
  %699 = fmul double 0x3EB0C6F7A0B5ED8D, %698
  %700 = fcmp ogt double %697, %699
  br i1 %700, label %701, label %813

701:                                              ; preds = %676
  %702 = load double, ptr %46, align 8, !tbaa !20
  %703 = getelementptr inbounds %class.Vector, ptr %45, i32 0, i32 0
  %704 = load double, ptr %703, align 8, !tbaa !21
  %705 = fdiv double %704, %702
  store double %705, ptr %703, align 8, !tbaa !21
  %706 = load double, ptr %46, align 8, !tbaa !20
  %707 = getelementptr inbounds %class.Vector, ptr %45, i32 0, i32 1
  %708 = load double, ptr %707, align 8, !tbaa !23
  %709 = fdiv double %708, %706
  store double %709, ptr %707, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  store double 0.000000e+00, ptr %50, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %710 = load double, ptr %46, align 8, !tbaa !20
  %711 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 2
  %712 = load double, ptr %711, align 8, !tbaa !38
  %713 = load double, ptr %48, align 8, !tbaa !20
  %714 = fmul double %712, %713
  %715 = fneg double %714
  %716 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %710, double %715)
  store double %716, ptr %51, align 8, !tbaa !20
  %717 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull align 8 dereferenceable(8) %51)
          to label %718 unwind label %804

718:                                              ; preds = %701
  %719 = load double, ptr %717, align 8, !tbaa !20
  %720 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 0
  %721 = load double, ptr %720, align 8, !tbaa !39
  %722 = fmul double %719, %721
  %723 = getelementptr inbounds %class.Vector, ptr %45, i32 0, i32 0
  %724 = load double, ptr %723, align 8, !tbaa !21
  %725 = fmul double %722, %724
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  store double %725, ptr %49, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  store double 0.000000e+00, ptr %53, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %726 = load double, ptr %46, align 8, !tbaa !20
  %727 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 2
  %728 = load double, ptr %727, align 8, !tbaa !38
  %729 = load double, ptr %48, align 8, !tbaa !20
  %730 = fmul double %728, %729
  %731 = fneg double %730
  %732 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %726, double %731)
  store double %732, ptr %54, align 8, !tbaa !20
  %733 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %53, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %734 unwind label %808

734:                                              ; preds = %718
  %735 = load double, ptr %733, align 8, !tbaa !20
  %736 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 0
  %737 = load double, ptr %736, align 8, !tbaa !39
  %738 = fmul double %735, %737
  %739 = getelementptr inbounds %class.Vector, ptr %45, i32 0, i32 1
  %740 = load double, ptr %739, align 8, !tbaa !23
  %741 = fmul double %738, %740
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  store double %741, ptr %52, align 8, !tbaa !20
  %742 = load double, ptr %49, align 8, !tbaa !20
  %743 = load i32, ptr %38, align 4, !tbaa !9
  %744 = sext i32 %743 to i64
  %745 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %744) #6
  %746 = getelementptr inbounds %class.Vector, ptr %745, i32 0, i32 0
  %747 = load double, ptr %746, align 8, !tbaa !21
  %748 = fadd double %747, %742
  store double %748, ptr %746, align 8, !tbaa !21
  %749 = load double, ptr %52, align 8, !tbaa !20
  %750 = load i32, ptr %38, align 4, !tbaa !9
  %751 = sext i32 %750 to i64
  %752 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %751) #6
  %753 = getelementptr inbounds %class.Vector, ptr %752, i32 0, i32 1
  %754 = load double, ptr %753, align 8, !tbaa !23
  %755 = fadd double %754, %749
  store double %755, ptr %753, align 8, !tbaa !23
  %756 = load double, ptr %49, align 8, !tbaa !20
  %757 = load i32, ptr %38, align 4, !tbaa !9
  %758 = sub nsw i32 %757, 1
  %759 = sext i32 %758 to i64
  %760 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %759) #6
  %761 = getelementptr inbounds %class.Vector, ptr %760, i32 0, i32 0
  %762 = load double, ptr %761, align 8, !tbaa !21
  %763 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %756, double %762)
  store double %763, ptr %761, align 8, !tbaa !21
  %764 = load double, ptr %52, align 8, !tbaa !20
  %765 = load i32, ptr %38, align 4, !tbaa !9
  %766 = sub nsw i32 %765, 1
  %767 = sext i32 %766 to i64
  %768 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %767) #6
  %769 = getelementptr inbounds %class.Vector, ptr %768, i32 0, i32 1
  %770 = load double, ptr %769, align 8, !tbaa !23
  %771 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %764, double %770)
  store double %771, ptr %769, align 8, !tbaa !23
  %772 = load double, ptr %49, align 8, !tbaa !20
  %773 = load i32, ptr %38, align 4, !tbaa !9
  %774 = add nsw i32 %773, 1
  %775 = sext i32 %774 to i64
  %776 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %775) #6
  %777 = getelementptr inbounds %class.Vector, ptr %776, i32 0, i32 0
  %778 = load double, ptr %777, align 8, !tbaa !21
  %779 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %772, double %778)
  store double %779, ptr %777, align 8, !tbaa !21
  %780 = load double, ptr %52, align 8, !tbaa !20
  %781 = load i32, ptr %38, align 4, !tbaa !9
  %782 = add nsw i32 %781, 1
  %783 = sext i32 %782 to i64
  %784 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %783) #6
  %785 = getelementptr inbounds %class.Vector, ptr %784, i32 0, i32 1
  %786 = load double, ptr %785, align 8, !tbaa !23
  %787 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %780, double %786)
  store double %787, ptr %785, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  br label %813

788:                                              ; preds = %593, %570, %555
  %789 = landingpad { ptr, i32 }
          cleanup
  %790 = extractvalue { ptr, i32 } %789, 0
  store ptr %790, ptr %10, align 8
  %791 = extractvalue { ptr, i32 } %789, 1
  store i32 %791, ptr %11, align 4
  br label %817

792:                                              ; preds = %645, %622, %603
  %793 = landingpad { ptr, i32 }
          cleanup
  %794 = extractvalue { ptr, i32 } %793, 0
  store ptr %794, ptr %10, align 8
  %795 = extractvalue { ptr, i32 } %793, 1
  store i32 %795, ptr %11, align 4
  br label %816

796:                                              ; preds = %655
  %797 = landingpad { ptr, i32 }
          cleanup
  %798 = extractvalue { ptr, i32 } %797, 0
  store ptr %798, ptr %10, align 8
  %799 = extractvalue { ptr, i32 } %797, 1
  store i32 %799, ptr %11, align 4
  br label %815

800:                                              ; preds = %670
  %801 = landingpad { ptr, i32 }
          cleanup
  %802 = extractvalue { ptr, i32 } %801, 0
  store ptr %802, ptr %10, align 8
  %803 = extractvalue { ptr, i32 } %801, 1
  store i32 %803, ptr %11, align 4
  br label %814

804:                                              ; preds = %701
  %805 = landingpad { ptr, i32 }
          cleanup
  %806 = extractvalue { ptr, i32 } %805, 0
  store ptr %806, ptr %10, align 8
  %807 = extractvalue { ptr, i32 } %805, 1
  store i32 %807, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  br label %812

808:                                              ; preds = %718
  %809 = landingpad { ptr, i32 }
          cleanup
  %810 = extractvalue { ptr, i32 } %809, 0
  store ptr %810, ptr %10, align 8
  %811 = extractvalue { ptr, i32 } %809, 1
  store i32 %811, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  br label %812

812:                                              ; preds = %808, %804
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  br label %814

813:                                              ; preds = %734, %676
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #6
  br label %818

814:                                              ; preds = %812, %800
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %815

815:                                              ; preds = %814, %796
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #6
  br label %816

816:                                              ; preds = %815, %792
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #6
  br label %817

817:                                              ; preds = %816, %788
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  br label %826

818:                                              ; preds = %813, %544, %533
  br label %819

819:                                              ; preds = %818
  %820 = load i32, ptr %38, align 4, !tbaa !9
  %821 = add nsw i32 %820, 1
  store i32 %821, ptr %38, align 4, !tbaa !9
  br label %525, !llvm.loop !40

822:                                              ; preds = %532
  store i1 true, ptr %7, align 1
  %823 = load i1, ptr %7, align 1
  br i1 %823, label %825, label %824

824:                                              ; preds = %822
  call void @_ZNSt6vectorI6VectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  br label %825

825:                                              ; preds = %824, %822
  ret void

826:                                              ; preds = %817, %523
  call void @_ZNSt6vectorI6VectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  br label %827

827:                                              ; preds = %826
  %828 = load ptr, ptr %10, align 8
  %829 = load i32, ptr %11, align 4
  %830 = insertvalue { ptr, i32 } poison, ptr %828, 0
  %831 = insertvalue { ptr, i32 } %830, i32 %829, 1
  resume { ptr, i32 } %831
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104), double, double) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104), double, double, double, double) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl" }
%"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl" = type { %"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Vector, std::allocator<Vector>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Vector = type { double, double }

; 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 nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

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

; 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 dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104), double, double, double, double) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10Simulation17getInternalForcesE5Chain(ptr dead_on_unwind noalias nonnull writable sret(%"class.std::vector.5") align 8 %0, ptr noundef nonnull align 8 dereferenceable(104) %1, ptr noundef %2) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %class.Vector, align 16
  %5 = alloca %class.Vector, align 8
  %6 = alloca %class.Vector, align 8
  %7 = alloca %class.Vector, align 8
  %8 = alloca %class.Vector, align 8
  %9 = alloca %class.Vector, align 8
  %10 = alloca %class.Vector, align 8
  %11 = alloca %class.Vector, align 8
  %12 = alloca %class.Vector, align 8
  %13 = alloca %class.Vector, align 8
  %14 = alloca %class.Vector, align 8
  %15 = alloca %class.Vector, align 8
  %16 = alloca %class.Vector, align 8
  %17 = alloca %class.Vector, align 16
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  tail call void @_ZNSt6vectorI6VectorSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  %22 = getelementptr inbounds i8, ptr %2, i64 40
  %23 = tail call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #6
  %.not140 = icmp eq i64 %23, 0
  br i1 %.not140, label %.preheader, label %.lr.ph

.lr.ph:                                           ; preds = %3
  %24 = getelementptr inbounds i8, ptr %5, i64 8
  %25 = getelementptr inbounds i8, ptr %6, i64 8
  %26 = getelementptr inbounds i8, ptr %7, i64 8
  %27 = getelementptr inbounds i8, ptr %8, i64 8
  %28 = getelementptr inbounds i8, ptr %2, i64 24
  %29 = getelementptr inbounds i8, ptr %2, i64 32
  %30 = getelementptr inbounds i8, ptr %9, i64 8
  %31 = getelementptr inbounds i8, ptr %10, i64 8
  %32 = getelementptr inbounds i8, ptr %11, i64 8
  %33 = getelementptr inbounds i8, ptr %12, i64 8
  br label %42

.preheader:                                       ; preds = %272, %3
  %34 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #6
  %35 = add i64 %34, -3
  %36 = icmp ult i64 %35, -2
  br i1 %36, label %.lr.ph139, label %._crit_edge

.lr.ph139:                                        ; preds = %.preheader
  %37 = getelementptr inbounds i8, ptr %13, i64 8
  %38 = getelementptr inbounds i8, ptr %14, i64 8
  %39 = getelementptr inbounds i8, ptr %15, i64 8
  %40 = getelementptr inbounds i8, ptr %16, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %17, i64 8
  %41 = getelementptr inbounds i8, ptr %2, i64 16
  br label %276

42:                                               ; preds = %.lr.ph, %272
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %272 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #6
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %4, double noundef 0.000000e+00, double noundef 0.000000e+00)
  %43 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %44 = load ptr, ptr %43, align 8, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %44, i64 72
  %46 = load ptr, ptr %45, align 8, !tbaa !9
  %47 = load ptr, ptr %46, align 8, !tbaa !13
  %.not122 = icmp eq ptr %47, null
  br i1 %.not122, label %155, label %48

48:                                               ; preds = %42
  %49 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %50 = load ptr, ptr %49, align 8, !tbaa !5
  %51 = load double, ptr %50, align 8, !tbaa !15
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %53 = load ptr, ptr %52, align 8, !tbaa !5
  %54 = getelementptr inbounds i8, ptr %53, i64 8
  %55 = load double, ptr %54, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %5, double noundef %51, double noundef %55)
  %56 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %57 = load ptr, ptr %56, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i64 72
  %59 = load ptr, ptr %58, align 8, !tbaa !9
  %60 = load ptr, ptr %59, align 8, !tbaa !13
  %61 = load double, ptr %60, align 8, !tbaa !15
  %62 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %63 = load ptr, ptr %62, align 8, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %63, i64 72
  %65 = load ptr, ptr %64, align 8, !tbaa !9
  %66 = load ptr, ptr %65, align 8, !tbaa !13
  %67 = getelementptr inbounds i8, ptr %66, i64 8
  %68 = load double, ptr %67, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %6, double noundef %61, double noundef %68)
  %69 = load double, ptr %5, align 8
  %70 = load double, ptr %24, align 8
  %71 = load double, ptr %6, align 8
  %72 = load double, ptr %25, align 8
  %73 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %69, double %70, double %71, double %72)
          to label %74 unwind label %151

74:                                               ; preds = %48
  %75 = extractvalue { double, double } %73, 0
  %76 = extractvalue { double, double } %73, 1
  %77 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %75, double %76)
  %78 = fcmp une double %77, 0.000000e+00
  br i1 %78, label %79, label %155

79:                                               ; preds = %74
  %80 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = getelementptr inbounds i8, ptr %81, i64 16
  %83 = load double, ptr %82, align 8, !tbaa !17
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %85 = load ptr, ptr %84, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 24
  %87 = load double, ptr %86, align 8, !tbaa !18
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %7, double noundef %83, double noundef %87)
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %89 = load ptr, ptr %88, align 8, !tbaa !5
  %90 = getelementptr inbounds i8, ptr %89, i64 72
  %91 = load ptr, ptr %90, align 8, !tbaa !9
  %92 = load ptr, ptr %91, align 8, !tbaa !13
  %93 = getelementptr inbounds i8, ptr %92, i64 16
  %94 = load double, ptr %93, align 8, !tbaa !17
  %95 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %96 = load ptr, ptr %95, align 8, !tbaa !5
  %97 = getelementptr inbounds i8, ptr %96, i64 72
  %98 = load ptr, ptr %97, align 8, !tbaa !9
  %99 = load ptr, ptr %98, align 8, !tbaa !13
  %100 = getelementptr inbounds i8, ptr %99, i64 24
  %101 = load double, ptr %100, align 8, !tbaa !18
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %8, double noundef %94, double noundef %101)
  %102 = load double, ptr %7, align 8
  %103 = load double, ptr %26, align 8
  %104 = load double, ptr %8, align 8
  %105 = load double, ptr %27, align 8
  %106 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %102, double %103, double %104, double %105)
          to label %107 unwind label %153

107:                                              ; preds = %79
  %108 = insertelement <2 x double> poison, double %75, i64 0
  %109 = insertelement <2 x double> %108, double %76, i64 1
  %110 = insertelement <2 x double> poison, double %77, i64 0
  %111 = shufflevector <2 x double> %110, <2 x double> poison, <2 x i32> zeroinitializer
  %112 = fdiv <2 x double> %109, %111
  %113 = extractvalue { double, double } %106, 0
  %114 = extractvalue { double, double } %106, 1
  %115 = extractelement <2 x double> %112, i64 0
  %116 = extractelement <2 x double> %112, i64 1
  %117 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %113, double %114, double %115, double %116)
  %118 = load double, ptr %28, align 8, !tbaa !19
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %120 = load ptr, ptr %119, align 8, !tbaa !5
  %121 = getelementptr inbounds i8, ptr %120, i64 72
  %122 = load ptr, ptr %121, align 8, !tbaa !9
  %123 = getelementptr inbounds i8, ptr %122, i64 16
  %124 = load double, ptr %123, align 8, !tbaa !25
  %125 = load double, ptr %29, align 8, !tbaa !26
  %126 = load double, ptr %28, align 8, !tbaa !19
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %128 = load ptr, ptr %127, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i64 72
  %130 = load ptr, ptr %129, align 8, !tbaa !9
  %131 = getelementptr inbounds i8, ptr %130, i64 16
  %132 = load double, ptr %131, align 8, !tbaa !25
  %133 = load double, ptr %29, align 8, !tbaa !26
  %134 = insertelement <2 x double> poison, double %117, i64 0
  %135 = shufflevector <2 x double> %134, <2 x double> poison, <2 x i32> zeroinitializer
  %136 = fmul <2 x double> %112, %135
  %137 = insertelement <2 x double> poison, double %124, i64 0
  %138 = insertelement <2 x double> %137, double %132, i64 1
  %139 = fsub <2 x double> %111, %138
  %140 = insertelement <2 x double> poison, double %118, i64 0
  %141 = insertelement <2 x double> %140, double %126, i64 1
  %142 = fmul <2 x double> %141, %139
  %143 = insertelement <2 x double> poison, double %125, i64 0
  %144 = insertelement <2 x double> %143, double %133, i64 1
  %145 = fmul <2 x double> %136, %144
  %146 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %142, <2 x double> %112, <2 x double> %145)
  %147 = load <2 x double>, ptr %4, align 16, !tbaa !27
  %148 = fadd <2 x double> %146, %147
  store <2 x double> %148, ptr %4, align 16, !tbaa !27
  br label %155

149:                                              ; preds = %271
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %275

151:                                              ; preds = %48
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %275

153:                                              ; preds = %79
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %275

155:                                              ; preds = %74, %107, %42
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  %158 = getelementptr inbounds i8, ptr %157, i64 80
  %159 = load ptr, ptr %158, align 8, !tbaa !28
  %160 = getelementptr inbounds i8, ptr %159, i64 8
  %161 = load ptr, ptr %160, align 8, !tbaa !29
  %.not125 = icmp eq ptr %161, null
  br i1 %.not125, label %271, label %162

162:                                              ; preds = %155
  %163 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %164 = load ptr, ptr %163, align 8, !tbaa !5
  %165 = load double, ptr %164, align 8, !tbaa !15
  %166 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %167 = load ptr, ptr %166, align 8, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %167, i64 8
  %169 = load double, ptr %168, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %9, double noundef %165, double noundef %169)
  %170 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %171 = load ptr, ptr %170, align 8, !tbaa !5
  %172 = getelementptr inbounds i8, ptr %171, i64 80
  %173 = load ptr, ptr %172, align 8, !tbaa !28
  %174 = getelementptr inbounds i8, ptr %173, i64 8
  %175 = load ptr, ptr %174, align 8, !tbaa !29
  %176 = load double, ptr %175, align 8, !tbaa !15
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %178 = load ptr, ptr %177, align 8, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %178, i64 80
  %180 = load ptr, ptr %179, align 8, !tbaa !28
  %181 = getelementptr inbounds i8, ptr %180, i64 8
  %182 = load ptr, ptr %181, align 8, !tbaa !29
  %183 = getelementptr inbounds i8, ptr %182, i64 8
  %184 = load double, ptr %183, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %10, double noundef %176, double noundef %184)
  %185 = load double, ptr %9, align 8
  %186 = load double, ptr %30, align 8
  %187 = load double, ptr %10, align 8
  %188 = load double, ptr %31, align 8
  %189 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %185, double %186, double %187, double %188)
          to label %190 unwind label %267

190:                                              ; preds = %162
  %191 = extractvalue { double, double } %189, 0
  %192 = extractvalue { double, double } %189, 1
  %193 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %191, double %192)
  %194 = fcmp une double %193, 0.000000e+00
  br i1 %194, label %195, label %271

195:                                              ; preds = %190
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %197 = load ptr, ptr %196, align 8, !tbaa !5
  %198 = getelementptr inbounds i8, ptr %197, i64 16
  %199 = load double, ptr %198, align 8, !tbaa !17
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %201 = load ptr, ptr %200, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i64 24
  %203 = load double, ptr %202, align 8, !tbaa !18
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %11, double noundef %199, double noundef %203)
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %205 = load ptr, ptr %204, align 8, !tbaa !5
  %206 = getelementptr inbounds i8, ptr %205, i64 80
  %207 = load ptr, ptr %206, align 8, !tbaa !28
  %208 = getelementptr inbounds i8, ptr %207, i64 8
  %209 = load ptr, ptr %208, align 8, !tbaa !29
  %210 = getelementptr inbounds i8, ptr %209, i64 16
  %211 = load double, ptr %210, align 8, !tbaa !17
  %212 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %213 = load ptr, ptr %212, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %213, i64 80
  %215 = load ptr, ptr %214, align 8, !tbaa !28
  %216 = getelementptr inbounds i8, ptr %215, i64 8
  %217 = load ptr, ptr %216, align 8, !tbaa !29
  %218 = getelementptr inbounds i8, ptr %217, i64 24
  %219 = load double, ptr %218, align 8, !tbaa !18
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %12, double noundef %211, double noundef %219)
  %220 = load double, ptr %11, align 8
  %221 = load double, ptr %32, align 8
  %222 = load double, ptr %12, align 8
  %223 = load double, ptr %33, align 8
  %224 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %220, double %221, double %222, double %223)
          to label %225 unwind label %269

225:                                              ; preds = %195
  %226 = insertelement <2 x double> poison, double %191, i64 0
  %227 = insertelement <2 x double> %226, double %192, i64 1
  %228 = insertelement <2 x double> poison, double %193, i64 0
  %229 = shufflevector <2 x double> %228, <2 x double> poison, <2 x i32> zeroinitializer
  %230 = fdiv <2 x double> %227, %229
  %231 = extractvalue { double, double } %224, 0
  %232 = extractvalue { double, double } %224, 1
  %233 = extractelement <2 x double> %230, i64 0
  %234 = extractelement <2 x double> %230, i64 1
  %235 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %231, double %232, double %233, double %234)
  %236 = load double, ptr %28, align 8, !tbaa !19
  %237 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %238 = load ptr, ptr %237, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %238, i64 80
  %240 = load ptr, ptr %239, align 8, !tbaa !28
  %241 = getelementptr inbounds i8, ptr %240, i64 16
  %242 = load double, ptr %241, align 8, !tbaa !25
  %243 = load double, ptr %29, align 8, !tbaa !26
  %244 = load double, ptr %28, align 8, !tbaa !19
  %245 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv) #6
  %246 = load ptr, ptr %245, align 8, !tbaa !5
  %247 = getelementptr inbounds i8, ptr %246, i64 80
  %248 = load ptr, ptr %247, align 8, !tbaa !28
  %249 = getelementptr inbounds i8, ptr %248, i64 16
  %250 = load double, ptr %249, align 8, !tbaa !25
  %251 = load double, ptr %29, align 8, !tbaa !26
  %252 = insertelement <2 x double> poison, double %235, i64 0
  %253 = shufflevector <2 x double> %252, <2 x double> poison, <2 x i32> zeroinitializer
  %254 = fmul <2 x double> %230, %253
  %255 = insertelement <2 x double> poison, double %242, i64 0
  %256 = insertelement <2 x double> %255, double %250, i64 1
  %257 = fsub <2 x double> %229, %256
  %258 = insertelement <2 x double> poison, double %236, i64 0
  %259 = insertelement <2 x double> %258, double %244, i64 1
  %260 = fmul <2 x double> %259, %257
  %261 = insertelement <2 x double> poison, double %243, i64 0
  %262 = insertelement <2 x double> %261, double %251, i64 1
  %263 = fmul <2 x double> %254, %262
  %264 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %260, <2 x double> %230, <2 x double> %263)
  %265 = load <2 x double>, ptr %4, align 16, !tbaa !27
  %266 = fadd <2 x double> %264, %265
  store <2 x double> %266, ptr %4, align 16, !tbaa !27
  br label %271

267:                                              ; preds = %162
  %268 = landingpad { ptr, i32 }
          cleanup
  br label %275

269:                                              ; preds = %195
  %270 = landingpad { ptr, i32 }
          cleanup
  br label %275

271:                                              ; preds = %190, %225, %155
  invoke void @_ZNSt6vectorI6VectorSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(16) %4)
          to label %272 unwind label %149

272:                                              ; preds = %271
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %273 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #6
  %274 = icmp ugt i64 %273, %indvars.iv.next
  br i1 %274, label %42, label %.preheader, !llvm.loop !30

275:                                              ; preds = %267, %269, %151, %153, %149
  %.pn128 = phi { ptr, i32 } [ %150, %149 ], [ %154, %153 ], [ %152, %151 ], [ %270, %269 ], [ %268, %267 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  br label %424

276:                                              ; preds = %.lr.ph139, %420
  %indvars.iv142 = phi i64 [ 1, %.lr.ph139 ], [ %indvars.iv.next143, %420 ]
  %277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %278 = load ptr, ptr %277, align 8, !tbaa !5
  %279 = getelementptr inbounds i8, ptr %278, i64 72
  %280 = load ptr, ptr %279, align 8, !tbaa !9
  %281 = load ptr, ptr %280, align 8, !tbaa !13
  %.not = icmp eq ptr %281, null
  br i1 %.not, label %420, label %282

282:                                              ; preds = %276
  %283 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %284 = load ptr, ptr %283, align 8, !tbaa !5
  %285 = getelementptr inbounds i8, ptr %284, i64 80
  %286 = load ptr, ptr %285, align 8, !tbaa !28
  %287 = getelementptr inbounds i8, ptr %286, i64 8
  %288 = load ptr, ptr %287, align 8, !tbaa !29
  %.not120 = icmp eq ptr %288, null
  br i1 %.not120, label %420, label %289

289:                                              ; preds = %282
  %290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %291 = load ptr, ptr %290, align 8, !tbaa !5
  %292 = load double, ptr %291, align 8, !tbaa !15
  %293 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %294 = load ptr, ptr %293, align 8, !tbaa !5
  %295 = getelementptr inbounds i8, ptr %294, i64 8
  %296 = load double, ptr %295, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %13, double noundef %292, double noundef %296)
  %297 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %298 = load ptr, ptr %297, align 8, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %298, i64 72
  %300 = load ptr, ptr %299, align 8, !tbaa !9
  %301 = load ptr, ptr %300, align 8, !tbaa !13
  %302 = load double, ptr %301, align 8, !tbaa !15
  %303 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %304 = load ptr, ptr %303, align 8, !tbaa !5
  %305 = getelementptr inbounds i8, ptr %304, i64 72
  %306 = load ptr, ptr %305, align 8, !tbaa !9
  %307 = load ptr, ptr %306, align 8, !tbaa !13
  %308 = getelementptr inbounds i8, ptr %307, i64 8
  %309 = load double, ptr %308, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %14, double noundef %302, double noundef %309)
  %310 = load double, ptr %13, align 8
  %311 = load double, ptr %37, align 8
  %312 = load double, ptr %14, align 8
  %313 = load double, ptr %38, align 8
  %314 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %310, double %311, double %312, double %313)
          to label %315 unwind label %415

315:                                              ; preds = %289
  %316 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = load double, ptr %317, align 8, !tbaa !15
  %319 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %320 = load ptr, ptr %319, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %320, i64 8
  %322 = load double, ptr %321, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %15, double noundef %318, double noundef %322)
  %323 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %324 = load ptr, ptr %323, align 8, !tbaa !5
  %325 = getelementptr inbounds i8, ptr %324, i64 80
  %326 = load ptr, ptr %325, align 8, !tbaa !28
  %327 = getelementptr inbounds i8, ptr %326, i64 8
  %328 = load ptr, ptr %327, align 8, !tbaa !29
  %329 = load double, ptr %328, align 8, !tbaa !15
  %330 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %331 = load ptr, ptr %330, align 8, !tbaa !5
  %332 = getelementptr inbounds i8, ptr %331, i64 80
  %333 = load ptr, ptr %332, align 8, !tbaa !28
  %334 = getelementptr inbounds i8, ptr %333, i64 8
  %335 = load ptr, ptr %334, align 8, !tbaa !29
  %336 = getelementptr inbounds i8, ptr %335, i64 8
  %337 = load double, ptr %336, align 8, !tbaa !16
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %16, double noundef %329, double noundef %337)
  %338 = load double, ptr %15, align 8
  %339 = load double, ptr %39, align 8
  %340 = load double, ptr %16, align 8
  %341 = load double, ptr %40, align 8
  %342 = invoke { double, double } @_ZN10Simulation14relativeVectorE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %338, double %339, double %340, double %341)
          to label %343 unwind label %417

343:                                              ; preds = %315
  %344 = extractvalue { double, double } %314, 1
  %345 = extractvalue { double, double } %314, 0
  %346 = extractvalue { double, double } %342, 0
  %347 = extractvalue { double, double } %342, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #6
  %348 = fadd double %345, %346
  %349 = fadd double %344, %347
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %17, double noundef %348, double noundef %349)
  %.sroa.0.0.copyload = load double, ptr %17, align 16, !tbaa !27
  %.sroa.2.0.copyload = load double, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !27
  %350 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
  %351 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %352 = load ptr, ptr %351, align 8, !tbaa !5
  %353 = getelementptr inbounds i8, ptr %352, i64 72
  %354 = load ptr, ptr %353, align 8, !tbaa !9
  %355 = getelementptr inbounds i8, ptr %354, i64 16
  %356 = load double, ptr %355, align 8, !tbaa !25
  %357 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %indvars.iv142) #6
  %358 = load ptr, ptr %357, align 8, !tbaa !5
  %359 = getelementptr inbounds i8, ptr %358, i64 80
  %360 = load ptr, ptr %359, align 8, !tbaa !28
  %361 = getelementptr inbounds i8, ptr %360, i64 16
  %362 = load double, ptr %361, align 8, !tbaa !25
  %363 = fadd double %356, %362
  %364 = fmul double %363, 5.000000e-01
  %365 = fmul double %364, 0x3EB0C6F7A0B5ED8D
  %366 = fcmp ogt double %350, %365
  br i1 %366, label %367, label %419

367:                                              ; preds = %343
  %368 = load <2 x double>, ptr %17, align 16, !tbaa !27
  %369 = insertelement <2 x double> poison, double %350, i64 0
  %370 = shufflevector <2 x double> %369, <2 x double> poison, <2 x i32> zeroinitializer
  %371 = fdiv <2 x double> %368, %370
  store <2 x double> %371, ptr %17, align 16, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  store double 0.000000e+00, ptr %18, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #6
  %372 = load double, ptr %41, align 8, !tbaa !32
  %373 = fneg double %372
  %374 = fmul double %364, %373
  %375 = call double @llvm.fmuladd.f64(double %350, double 5.000000e-01, double %374)
  store double %375, ptr %19, align 8, !tbaa !27
  %376 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19)
  %377 = load double, ptr %376, align 8, !tbaa !27
  %378 = load double, ptr %2, align 8, !tbaa !33
  %379 = fmul double %377, %378
  %380 = load double, ptr %17, align 16, !tbaa !34
  %381 = fmul double %379, %380
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #6
  store double 0.000000e+00, ptr %20, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  %382 = load double, ptr %41, align 8, !tbaa !32
  %383 = fneg double %382
  %384 = fmul double %364, %383
  %385 = call double @llvm.fmuladd.f64(double %350, double 5.000000e-01, double %384)
  store double %385, ptr %21, align 8, !tbaa !27
  %386 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21)
  %387 = load double, ptr %386, align 8, !tbaa !27
  %388 = load double, ptr %2, align 8, !tbaa !33
  %389 = fmul double %387, %388
  %390 = load double, ptr %.sroa.2.0..sroa_idx, align 8, !tbaa !36
  %391 = fmul double %389, %390
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  %392 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %indvars.iv142) #6
  %393 = load double, ptr %392, align 8, !tbaa !34
  %394 = fadd double %381, %393
  store double %394, ptr %392, align 8, !tbaa !34
  %395 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %indvars.iv142) #6
  %396 = getelementptr inbounds i8, ptr %395, i64 8
  %397 = load double, ptr %396, align 8, !tbaa !36
  %398 = fadd double %391, %397
  store double %398, ptr %396, align 8, !tbaa !36
  %399 = add nsw i64 %indvars.iv142, -1
  %400 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %399) #6
  %401 = load double, ptr %400, align 8, !tbaa !34
  %402 = call double @llvm.fmuladd.f64(double %381, double -5.000000e-01, double %401)
  store double %402, ptr %400, align 8, !tbaa !34
  %403 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %399) #6
  %404 = getelementptr inbounds i8, ptr %403, i64 8
  %405 = load double, ptr %404, align 8, !tbaa !36
  %406 = call double @llvm.fmuladd.f64(double %391, double -5.000000e-01, double %405)
  store double %406, ptr %404, align 8, !tbaa !36
  %407 = add nuw nsw i64 %indvars.iv142, 1
  %408 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %407) #6
  %409 = load double, ptr %408, align 8, !tbaa !34
  %410 = call double @llvm.fmuladd.f64(double %381, double -5.000000e-01, double %409)
  store double %410, ptr %408, align 8, !tbaa !34
  %411 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSt6vectorI6VectorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef %407) #6
  %412 = getelementptr inbounds i8, ptr %411, i64 8
  %413 = load double, ptr %412, align 8, !tbaa !36
  %414 = call double @llvm.fmuladd.f64(double %391, double -5.000000e-01, double %413)
  store double %414, ptr %412, align 8, !tbaa !36
  br label %419

415:                                              ; preds = %289
  %416 = landingpad { ptr, i32 }
          cleanup
  br label %424

417:                                              ; preds = %315
  %418 = landingpad { ptr, i32 }
          cleanup
  br label %424

419:                                              ; preds = %367, %343
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  br label %420

420:                                              ; preds = %276, %282, %419
  %indvars.iv.next143 = add nuw nsw i64 %indvars.iv142, 1
  %421 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #6
  %422 = add i64 %421, -1
  %423 = icmp ugt i64 %422, %indvars.iv.next143
  br i1 %423, label %276, label %._crit_edge, !llvm.loop !37

._crit_edge:                                      ; preds = %420, %.preheader
  ret void

424:                                              ; preds = %415, %417, %275
  %.pn128.pn = phi { ptr, i32 } [ %.pn128, %275 ], [ %418, %417 ], [ %416, %415 ]
  call void @_ZNSt6vectorI6VectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  resume { ptr, i32 } %.pn128.pn
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16), double noundef, double noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104), double, double) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104), double, double, double, double) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #5

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

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

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass