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

; 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.__gnu_cxx::__normal_iterator" = type { ptr }
%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.Wall = type <{ double, double, double, double, double, double, double, double, double, double, double, double, i32, [4 x i8] }>
%class.ChainElement = type { double, double, double, double, double, double, double, double, i8, ptr, ptr }

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

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

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

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

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

; 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)) #5 align 2

; 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: mustprogress uwtable
define dso_local void @_ZN10Simulation13getWallForcesE5ChainSt6vectorIP4WallSaIS3_EE(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, ptr noundef %3) #5 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i1, align 1
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %class.Vector, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca ptr, align 8
  %19 = alloca double, align 8
  %20 = alloca %class.Vector, align 8
  %21 = alloca %class.Vector, align 8
  %22 = alloca double, align 8
  %23 = alloca %class.Vector, align 8
  %24 = alloca %class.Vector, align 8
  %25 = alloca double, 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 double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca %class.Vector, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca %class.Vector, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca %class.Vector, align 8
  %42 = alloca double, align 8
  %43 = alloca %class.Vector, align 8
  %44 = alloca double, align 8
  %45 = alloca %class.Vector, align 8
  %46 = alloca %class.Vector, align 8
  %47 = alloca double, align 8
  %48 = alloca %class.Vector, align 8
  %49 = alloca %class.Vector, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca %class.Vector, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca %class.Vector, align 8
  %58 = alloca double, align 8
  %59 = alloca double, align 8
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %60 = load ptr, ptr %6, align 8
  store i1 false, ptr %9, align 1
  call void @_ZNSt6vectorI6VectorSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %61

61:                                               ; preds = %758, %4
  %62 = load i32, ptr %10, align 4, !tbaa !9
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %65 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %64) #6
  %66 = icmp ult i64 %63, %65
  br i1 %66, label %68, label %67

67:                                               ; preds = %61
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %762

68:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 16, ptr %12) #6
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %12, double noundef 0.000000e+00, double noundef 0.000000e+00)
          to label %69 unwind label %79

69:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  store ptr %3, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %70 = load ptr, ptr %15, align 8, !tbaa !5
  %71 = call ptr @_ZNSt6vectorIP4WallSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70) #6
  %72 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %16, i32 0, i32 0
  store ptr %71, ptr %72, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %73 = load ptr, ptr %15, align 8, !tbaa !5
  %74 = call ptr @_ZNSt6vectorIP4WallSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %73) #6
  %75 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %17, i32 0, i32 0
  store ptr %74, ptr %75, align 8
  br label %76

76:                                               ; preds = %753, %69
  %77 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP4WallSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #6
  br i1 %77, label %83, label %78

78:                                               ; preds = %76
  store i32 5, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %756

79:                                               ; preds = %756, %68
  %80 = landingpad { ptr, i32 }
          cleanup
  %81 = extractvalue { ptr, i32 } %80, 0
  store ptr %81, ptr %13, align 8
  %82 = extractvalue { ptr, i32 } %80, 1
  store i32 %82, ptr %14, align 4
  br label %761

83:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP4WallSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #6
  store ptr %84, ptr %18, align 8, !tbaa !5
  %85 = load ptr, ptr %18, align 8, !tbaa !5
  %86 = load ptr, ptr %85, align 8, !tbaa !5
  %87 = getelementptr inbounds %class.Wall, ptr %86, i32 0, i32 12
  %88 = load i32, ptr %87, align 8, !tbaa !11
  %89 = icmp eq i32 %88, 0
  br i1 %89, label %90, label %454

90:                                               ; preds = %83
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %91 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %92 = load i32, ptr %10, 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 0
  %97 = load double, ptr %96, align 8, !tbaa !15
  %98 = load ptr, ptr %18, align 8, !tbaa !5
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  %100 = getelementptr inbounds %class.Wall, ptr %99, i32 0, i32 0
  %101 = load double, ptr %100, align 8, !tbaa !18
  %102 = fsub double %97, %101
  %103 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %104 = load i32, ptr %10, align 4, !tbaa !9
  %105 = sext i32 %104 to i64
  %106 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %103, i64 noundef %105) #6
  %107 = load ptr, ptr %106, align 8, !tbaa !5
  %108 = getelementptr inbounds %class.ChainElement, ptr %107, i32 0, i32 1
  %109 = load double, ptr %108, align 8, !tbaa !19
  %110 = load ptr, ptr %18, align 8, !tbaa !5
  %111 = load ptr, ptr %110, align 8, !tbaa !5
  %112 = getelementptr inbounds %class.Wall, ptr %111, i32 0, i32 1
  %113 = load double, ptr %112, align 8, !tbaa !20
  %114 = fsub double %109, %113
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %20, double noundef %102, double noundef %114)
          to label %115 unwind label %403

115:                                              ; preds = %90
  %116 = load ptr, ptr %18, align 8, !tbaa !5
  %117 = load ptr, ptr %116, align 8, !tbaa !5
  %118 = getelementptr inbounds %class.Wall, ptr %117, i32 0, i32 4
  %119 = load double, ptr %118, align 8, !tbaa !21
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = load ptr, ptr %120, align 8, !tbaa !5
  %122 = getelementptr inbounds %class.Wall, ptr %121, i32 0, i32 5
  %123 = load double, ptr %122, align 8, !tbaa !22
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %21, double noundef %119, double noundef %123)
          to label %124 unwind label %403

124:                                              ; preds = %115
  %125 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 0
  %126 = load double, ptr %125, align 8
  %127 = getelementptr inbounds { double, double }, ptr %20, i32 0, i32 1
  %128 = load double, ptr %127, align 8
  %129 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %130 = load double, ptr %129, align 8
  %131 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %132 = load double, ptr %131, align 8
  %133 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %60, double %126, double %128, double %130, double %132)
          to label %134 unwind label %403

134:                                              ; preds = %124
  store double %133, ptr %19, align 8, !tbaa !23
  %135 = load double, ptr %19, align 8, !tbaa !23
  %136 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %137 = load i32, ptr %10, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %136, i64 noundef %138) #6
  %140 = load ptr, ptr %139, align 8, !tbaa !5
  %141 = getelementptr inbounds %class.ChainElement, ptr %140, i32 0, i32 6
  %142 = load double, ptr %141, align 8, !tbaa !24
  %143 = fcmp olt double %135, %142
  br i1 %143, label %144, label %452

144:                                              ; preds = %134
  %145 = load double, ptr %19, align 8, !tbaa !23
  %146 = load ptr, ptr %18, align 8, !tbaa !5
  %147 = load ptr, ptr %146, align 8, !tbaa !5
  %148 = getelementptr inbounds %class.Wall, ptr %147, i32 0, i32 3
  %149 = load double, ptr %148, align 8, !tbaa !25
  %150 = fneg double %149
  %151 = fcmp ogt double %145, %150
  br i1 %151, label %152, label %452

152:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %153 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %154 = load i32, ptr %10, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %153, i64 noundef %155) #6
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  %158 = getelementptr inbounds %class.ChainElement, ptr %157, i32 0, i32 0
  %159 = load double, ptr %158, align 8, !tbaa !15
  %160 = load ptr, ptr %18, align 8, !tbaa !5
  %161 = load ptr, ptr %160, align 8, !tbaa !5
  %162 = getelementptr inbounds %class.Wall, ptr %161, i32 0, i32 0
  %163 = load double, ptr %162, align 8, !tbaa !18
  %164 = fsub double %159, %163
  %165 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %166 = load i32, ptr %10, align 4, !tbaa !9
  %167 = sext i32 %166 to i64
  %168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %165, i64 noundef %167) #6
  %169 = load ptr, ptr %168, align 8, !tbaa !5
  %170 = getelementptr inbounds %class.ChainElement, ptr %169, i32 0, i32 1
  %171 = load double, ptr %170, align 8, !tbaa !19
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = load ptr, ptr %172, align 8, !tbaa !5
  %174 = getelementptr inbounds %class.Wall, ptr %173, i32 0, i32 1
  %175 = load double, ptr %174, align 8, !tbaa !20
  %176 = fsub double %171, %175
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %23, double noundef %164, double noundef %176)
          to label %177 unwind label %407

177:                                              ; preds = %152
  %178 = load ptr, ptr %18, align 8, !tbaa !5
  %179 = load ptr, ptr %178, align 8, !tbaa !5
  %180 = getelementptr inbounds %class.Wall, ptr %179, i32 0, i32 6
  %181 = load double, ptr %180, align 8, !tbaa !26
  %182 = load ptr, ptr %18, align 8, !tbaa !5
  %183 = load ptr, ptr %182, align 8, !tbaa !5
  %184 = getelementptr inbounds %class.Wall, ptr %183, i32 0, i32 7
  %185 = load double, ptr %184, align 8, !tbaa !27
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %24, double noundef %181, double noundef %185)
          to label %186 unwind label %407

186:                                              ; preds = %177
  %187 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %188 = load double, ptr %187, align 8
  %189 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %190 = load double, ptr %189, align 8
  %191 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 0
  %192 = load double, ptr %191, align 8
  %193 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 1
  %194 = load double, ptr %193, align 8
  %195 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %60, double %188, double %190, double %192, double %194)
          to label %196 unwind label %407

196:                                              ; preds = %186
  store double %195, ptr %22, align 8, !tbaa !23
  %197 = load double, ptr %22, align 8, !tbaa !23
  %198 = fcmp ogt double %197, 0.000000e+00
  br i1 %198, label %199, label %450

199:                                              ; preds = %196
  %200 = load double, ptr %22, align 8, !tbaa !23
  %201 = load ptr, ptr %18, align 8, !tbaa !5
  %202 = load ptr, ptr %201, align 8, !tbaa !5
  %203 = getelementptr inbounds %class.Wall, ptr %202, i32 0, i32 2
  %204 = load double, ptr %203, align 8, !tbaa !28
  %205 = fcmp olt double %200, %204
  br i1 %205, label %206, label %450

206:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %207 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %208 = load i32, ptr %10, align 4, !tbaa !9
  %209 = sext i32 %208 to i64
  %210 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %207, i64 noundef %209) #6
  %211 = load ptr, ptr %210, align 8, !tbaa !5
  %212 = getelementptr inbounds %class.ChainElement, ptr %211, i32 0, i32 2
  %213 = load double, ptr %212, align 8, !tbaa !29
  %214 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %215 = load i32, ptr %10, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %214, i64 noundef %216) #6
  %218 = load ptr, ptr %217, align 8, !tbaa !5
  %219 = getelementptr inbounds %class.ChainElement, ptr %218, i32 0, i32 3
  %220 = load double, ptr %219, align 8, !tbaa !30
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %26, double noundef %213, double noundef %220)
          to label %221 unwind label %411

221:                                              ; preds = %206
  %222 = load ptr, ptr %18, align 8, !tbaa !5
  %223 = load ptr, ptr %222, align 8, !tbaa !5
  %224 = getelementptr inbounds %class.Wall, ptr %223, i32 0, i32 4
  %225 = load double, ptr %224, align 8, !tbaa !21
  %226 = load ptr, ptr %18, align 8, !tbaa !5
  %227 = load ptr, ptr %226, align 8, !tbaa !5
  %228 = getelementptr inbounds %class.Wall, ptr %227, i32 0, i32 5
  %229 = load double, ptr %228, align 8, !tbaa !22
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %27, double noundef %225, double noundef %229)
          to label %230 unwind label %411

230:                                              ; preds = %221
  %231 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 0
  %232 = load double, ptr %231, align 8
  %233 = getelementptr inbounds { double, double }, ptr %26, i32 0, i32 1
  %234 = load double, ptr %233, align 8
  %235 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 0
  %236 = load double, ptr %235, align 8
  %237 = getelementptr inbounds { double, double }, ptr %27, i32 0, i32 1
  %238 = load double, ptr %237, align 8
  %239 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %60, double %232, double %234, double %236, double %238)
          to label %240 unwind label %411

240:                                              ; preds = %230
  store double %239, ptr %25, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %241 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %242 = load i32, ptr %10, align 4, !tbaa !9
  %243 = sext i32 %242 to i64
  %244 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %241, i64 noundef %243) #6
  %245 = load ptr, ptr %244, align 8, !tbaa !5
  %246 = getelementptr inbounds %class.ChainElement, ptr %245, i32 0, i32 2
  %247 = load double, ptr %246, align 8, !tbaa !29
  %248 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %249 = load i32, ptr %10, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %248, i64 noundef %250) #6
  %252 = load ptr, ptr %251, align 8, !tbaa !5
  %253 = getelementptr inbounds %class.ChainElement, ptr %252, i32 0, i32 3
  %254 = load double, ptr %253, align 8, !tbaa !30
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %29, double noundef %247, double noundef %254)
          to label %255 unwind label %415

255:                                              ; preds = %240
  %256 = load ptr, ptr %18, align 8, !tbaa !5
  %257 = load ptr, ptr %256, align 8, !tbaa !5
  %258 = getelementptr inbounds %class.Wall, ptr %257, i32 0, i32 6
  %259 = load double, ptr %258, align 8, !tbaa !26
  %260 = load ptr, ptr %18, align 8, !tbaa !5
  %261 = load ptr, ptr %260, align 8, !tbaa !5
  %262 = getelementptr inbounds %class.Wall, ptr %261, i32 0, i32 7
  %263 = load double, ptr %262, align 8, !tbaa !27
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %30, double noundef %259, double noundef %263)
          to label %264 unwind label %415

264:                                              ; preds = %255
  %265 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %266 = load double, ptr %265, align 8
  %267 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %268 = load double, ptr %267, align 8
  %269 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 0
  %270 = load double, ptr %269, align 8
  %271 = getelementptr inbounds { double, double }, ptr %30, i32 0, i32 1
  %272 = load double, ptr %271, align 8
  %273 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %60, double %266, double %268, double %270, double %272)
          to label %274 unwind label %415

274:                                              ; preds = %264
  store double %273, ptr %28, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %275 = load ptr, ptr %18, align 8, !tbaa !5
  %276 = load ptr, ptr %275, align 8, !tbaa !5
  %277 = getelementptr inbounds %class.Wall, ptr %276, i32 0, i32 8
  %278 = load double, ptr %277, align 8, !tbaa !31
  %279 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %280 = load i32, ptr %10, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %279, i64 noundef %281) #6
  %283 = load ptr, ptr %282, align 8, !tbaa !5
  %284 = getelementptr inbounds %class.ChainElement, ptr %283, i32 0, i32 6
  %285 = load double, ptr %284, align 8, !tbaa !24
  %286 = load double, ptr %19, align 8, !tbaa !23
  %287 = fsub double %285, %286
  %288 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %289 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %288) #6
  %290 = uitofp i64 %289 to double
  %291 = fdiv double %290, 3.000000e+03
  %292 = load ptr, ptr %18, align 8, !tbaa !5
  %293 = load ptr, ptr %292, align 8, !tbaa !5
  %294 = getelementptr inbounds %class.Wall, ptr %293, i32 0, i32 9
  %295 = load double, ptr %294, align 8, !tbaa !32
  %296 = fmul double %291, %295
  %297 = load double, ptr %25, align 8, !tbaa !23
  %298 = fmul double %296, %297
  %299 = fneg double %298
  %300 = call double @llvm.fmuladd.f64(double %278, double %287, double %299)
  %301 = load ptr, ptr %18, align 8, !tbaa !5
  %302 = load ptr, ptr %301, align 8, !tbaa !5
  %303 = getelementptr inbounds %class.Wall, ptr %302, i32 0, i32 4
  %304 = load double, ptr %303, align 8, !tbaa !21
  %305 = fmul double %300, %304
  store double %305, ptr %31, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %306 = load ptr, ptr %18, align 8, !tbaa !5
  %307 = load ptr, ptr %306, align 8, !tbaa !5
  %308 = getelementptr inbounds %class.Wall, ptr %307, i32 0, i32 8
  %309 = load double, ptr %308, align 8, !tbaa !31
  %310 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %311 = load i32, ptr %10, align 4, !tbaa !9
  %312 = sext i32 %311 to i64
  %313 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %310, i64 noundef %312) #6
  %314 = load ptr, ptr %313, align 8, !tbaa !5
  %315 = getelementptr inbounds %class.ChainElement, ptr %314, i32 0, i32 6
  %316 = load double, ptr %315, align 8, !tbaa !24
  %317 = load double, ptr %19, align 8, !tbaa !23
  %318 = fsub double %316, %317
  %319 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %320 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %319) #6
  %321 = uitofp i64 %320 to double
  %322 = fdiv double %321, 3.000000e+03
  %323 = load ptr, ptr %18, align 8, !tbaa !5
  %324 = load ptr, ptr %323, align 8, !tbaa !5
  %325 = getelementptr inbounds %class.Wall, ptr %324, i32 0, i32 9
  %326 = load double, ptr %325, align 8, !tbaa !32
  %327 = fmul double %322, %326
  %328 = load double, ptr %25, align 8, !tbaa !23
  %329 = fmul double %327, %328
  %330 = fneg double %329
  %331 = call double @llvm.fmuladd.f64(double %309, double %318, double %330)
  %332 = load ptr, ptr %18, align 8, !tbaa !5
  %333 = load ptr, ptr %332, align 8, !tbaa !5
  %334 = getelementptr inbounds %class.Wall, ptr %333, i32 0, i32 5
  %335 = load double, ptr %334, align 8, !tbaa !22
  %336 = fmul double %331, %335
  store double %336, ptr %32, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %337 = load double, ptr %31, align 8, !tbaa !23
  %338 = load double, ptr %32, align 8, !tbaa !23
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %34, double noundef %337, double noundef %338)
          to label %339 unwind label %419

339:                                              ; preds = %274
  %340 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %341 = load double, ptr %340, align 8
  %342 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %343 = load double, ptr %342, align 8
  %344 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %60, double %341, double %343)
          to label %345 unwind label %419

345:                                              ; preds = %339
  store double %344, ptr %33, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %346 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %347 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %346) #6
  %348 = uitofp i64 %347 to double
  %349 = fneg double %348
  %350 = fdiv double %349, 3.000000e+03
  %351 = load ptr, ptr %18, align 8, !tbaa !5
  %352 = load ptr, ptr %351, align 8, !tbaa !5
  %353 = getelementptr inbounds %class.Wall, ptr %352, i32 0, i32 10
  %354 = load double, ptr %353, align 8, !tbaa !33
  %355 = fmul double %350, %354
  %356 = load double, ptr %28, align 8, !tbaa !23
  %357 = fmul double %355, %356
  %358 = load ptr, ptr %18, align 8, !tbaa !5
  %359 = load ptr, ptr %358, align 8, !tbaa !5
  %360 = getelementptr inbounds %class.Wall, ptr %359, i32 0, i32 6
  %361 = load double, ptr %360, align 8, !tbaa !26
  %362 = fmul double %357, %361
  store double %362, ptr %35, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %363 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %364 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %363) #6
  %365 = uitofp i64 %364 to double
  %366 = fneg double %365
  %367 = fdiv double %366, 3.000000e+03
  %368 = load ptr, ptr %18, align 8, !tbaa !5
  %369 = load ptr, ptr %368, align 8, !tbaa !5
  %370 = getelementptr inbounds %class.Wall, ptr %369, i32 0, i32 10
  %371 = load double, ptr %370, align 8, !tbaa !33
  %372 = fmul double %367, %371
  %373 = load double, ptr %28, align 8, !tbaa !23
  %374 = fmul double %372, %373
  %375 = load ptr, ptr %18, align 8, !tbaa !5
  %376 = load ptr, ptr %375, align 8, !tbaa !5
  %377 = getelementptr inbounds %class.Wall, ptr %376, i32 0, i32 7
  %378 = load double, ptr %377, align 8, !tbaa !27
  %379 = fmul double %374, %378
  store double %379, ptr %36, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %380 = load double, ptr %35, align 8, !tbaa !23
  %381 = load double, ptr %36, align 8, !tbaa !23
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %38, double noundef %380, double noundef %381)
          to label %382 unwind label %423

382:                                              ; preds = %345
  %383 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 0
  %384 = load double, ptr %383, align 8
  %385 = getelementptr inbounds { double, double }, ptr %38, i32 0, i32 1
  %386 = load double, ptr %385, align 8
  %387 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %60, double %384, double %386)
          to label %388 unwind label %423

388:                                              ; preds = %382
  store double %387, ptr %37, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %389 = load double, ptr %37, align 8, !tbaa !23
  %390 = fcmp ogt double %389, 0.000000e+00
  br i1 %390, label %391, label %431

391:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %392 = load ptr, ptr %18, align 8, !tbaa !5
  %393 = load ptr, ptr %392, align 8, !tbaa !5
  %394 = getelementptr inbounds %class.Wall, ptr %393, i32 0, i32 11
  %395 = load double, ptr %394, align 8, !tbaa !34
  %396 = load double, ptr %33, align 8, !tbaa !23
  %397 = fmul double %395, %396
  store double %397, ptr %40, align 8, !tbaa !23
  %398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %399 unwind label %427

399:                                              ; preds = %391
  %400 = load double, ptr %398, align 8, !tbaa !23
  %401 = load double, ptr %37, align 8, !tbaa !23
  %402 = fdiv double %400, %401
  store double %402, ptr %39, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  br label %431

403:                                              ; preds = %124, %115, %90
  %404 = landingpad { ptr, i32 }
          cleanup
  %405 = extractvalue { ptr, i32 } %404, 0
  store ptr %405, ptr %13, align 8
  %406 = extractvalue { ptr, i32 } %404, 1
  store i32 %406, ptr %14, align 4
  br label %453

407:                                              ; preds = %186, %177, %152
  %408 = landingpad { ptr, i32 }
          cleanup
  %409 = extractvalue { ptr, i32 } %408, 0
  store ptr %409, ptr %13, align 8
  %410 = extractvalue { ptr, i32 } %408, 1
  store i32 %410, ptr %14, align 4
  br label %451

411:                                              ; preds = %230, %221, %206
  %412 = landingpad { ptr, i32 }
          cleanup
  %413 = extractvalue { ptr, i32 } %412, 0
  store ptr %413, ptr %13, align 8
  %414 = extractvalue { ptr, i32 } %412, 1
  store i32 %414, ptr %14, align 4
  br label %449

415:                                              ; preds = %264, %255, %240
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %13, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %14, align 4
  br label %448

419:                                              ; preds = %339, %274
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %13, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %14, align 4
  br label %447

423:                                              ; preds = %382, %345
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %13, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %14, align 4
  br label %446

427:                                              ; preds = %391
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %13, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %446

431:                                              ; preds = %399, %388
  %432 = load double, ptr %31, align 8, !tbaa !23
  %433 = load double, ptr %39, align 8, !tbaa !23
  %434 = load double, ptr %35, align 8, !tbaa !23
  %435 = call double @llvm.fmuladd.f64(double %433, double %434, double %432)
  %436 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 0
  %437 = load double, ptr %436, align 8, !tbaa !35
  %438 = fadd double %437, %435
  store double %438, ptr %436, align 8, !tbaa !35
  %439 = load double, ptr %32, align 8, !tbaa !23
  %440 = load double, ptr %39, align 8, !tbaa !23
  %441 = load double, ptr %36, align 8, !tbaa !23
  %442 = call double @llvm.fmuladd.f64(double %440, double %441, double %439)
  %443 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 1
  %444 = load double, ptr %443, align 8, !tbaa !37
  %445 = fadd double %444, %442
  store double %445, ptr %443, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  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 %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  br label %450

446:                                              ; preds = %427, %423
  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 %35) #6
  br label %447

447:                                              ; preds = %446, %419
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  br label %448

448:                                              ; preds = %447, %415
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %449

449:                                              ; preds = %448, %411
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  br label %451

450:                                              ; preds = %431, %199, %196
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %452

451:                                              ; preds = %449, %407
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %453

452:                                              ; preds = %450, %144, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %454

453:                                              ; preds = %451, %403
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %755

454:                                              ; preds = %452, %83
  %455 = load ptr, ptr %18, align 8, !tbaa !5
  %456 = load ptr, ptr %455, align 8, !tbaa !5
  %457 = getelementptr inbounds %class.Wall, ptr %456, i32 0, i32 12
  %458 = load i32, ptr %457, align 8, !tbaa !11
  %459 = icmp eq i32 %458, 1
  br i1 %459, label %460, label %752

460:                                              ; preds = %454
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #6
  %461 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %462 = load i32, ptr %10, align 4, !tbaa !9
  %463 = sext i32 %462 to i64
  %464 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %461, i64 noundef %463) #6
  %465 = load ptr, ptr %464, align 8, !tbaa !5
  %466 = getelementptr inbounds %class.ChainElement, ptr %465, i32 0, i32 0
  %467 = load double, ptr %466, align 8, !tbaa !15
  %468 = load ptr, ptr %18, align 8, !tbaa !5
  %469 = load ptr, ptr %468, align 8, !tbaa !5
  %470 = getelementptr inbounds %class.Wall, ptr %469, i32 0, i32 0
  %471 = load double, ptr %470, align 8, !tbaa !18
  %472 = fsub double %467, %471
  %473 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %474 = load i32, ptr %10, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %473, i64 noundef %475) #6
  %477 = load ptr, ptr %476, align 8, !tbaa !5
  %478 = getelementptr inbounds %class.ChainElement, ptr %477, i32 0, i32 1
  %479 = load double, ptr %478, align 8, !tbaa !19
  %480 = load ptr, ptr %18, align 8, !tbaa !5
  %481 = load ptr, ptr %480, align 8, !tbaa !5
  %482 = getelementptr inbounds %class.Wall, ptr %481, i32 0, i32 1
  %483 = load double, ptr %482, align 8, !tbaa !20
  %484 = fsub double %479, %483
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %41, double noundef %472, double noundef %484)
          to label %485 unwind label %702

485:                                              ; preds = %460
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %43, ptr align 8 %41, i64 16, i1 false), !tbaa.struct !38
  %486 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 0
  %487 = load double, ptr %486, align 8
  %488 = getelementptr inbounds { double, double }, ptr %43, i32 0, i32 1
  %489 = load double, ptr %488, align 8
  %490 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %60, double %487, double %489)
          to label %491 unwind label %706

491:                                              ; preds = %485
  store double %490, ptr %42, align 8, !tbaa !23
  %492 = load double, ptr %42, align 8, !tbaa !23
  %493 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %494 = load i32, ptr %10, align 4, !tbaa !9
  %495 = sext i32 %494 to i64
  %496 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %493, i64 noundef %495) #6
  %497 = load ptr, ptr %496, align 8, !tbaa !5
  %498 = getelementptr inbounds %class.ChainElement, ptr %497, i32 0, i32 6
  %499 = load double, ptr %498, align 8, !tbaa !24
  %500 = load ptr, ptr %18, align 8, !tbaa !5
  %501 = load ptr, ptr %500, align 8, !tbaa !5
  %502 = getelementptr inbounds %class.Wall, ptr %501, i32 0, i32 2
  %503 = load double, ptr %502, align 8, !tbaa !28
  %504 = fadd double %499, %503
  %505 = fcmp olt double %492, %504
  br i1 %505, label %506, label %749

506:                                              ; preds = %491
  %507 = load double, ptr %42, align 8, !tbaa !23
  %508 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 0
  %509 = load double, ptr %508, align 8, !tbaa !35
  %510 = fdiv double %509, %507
  store double %510, ptr %508, align 8, !tbaa !35
  %511 = load double, ptr %42, align 8, !tbaa !23
  %512 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 1
  %513 = load double, ptr %512, align 8, !tbaa !37
  %514 = fdiv double %513, %511
  store double %514, ptr %512, align 8, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %515 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %516 = load i32, ptr %10, align 4, !tbaa !9
  %517 = sext i32 %516 to i64
  %518 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %515, i64 noundef %517) #6
  %519 = load ptr, ptr %518, align 8, !tbaa !5
  %520 = getelementptr inbounds %class.ChainElement, ptr %519, i32 0, i32 2
  %521 = load double, ptr %520, align 8, !tbaa !29
  %522 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %523 = load i32, ptr %10, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %522, i64 noundef %524) #6
  %526 = load ptr, ptr %525, align 8, !tbaa !5
  %527 = getelementptr inbounds %class.ChainElement, ptr %526, i32 0, i32 3
  %528 = load double, ptr %527, align 8, !tbaa !30
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %45, double noundef %521, double noundef %528)
          to label %529 unwind label %710

529:                                              ; preds = %506
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %46, ptr align 8 %41, i64 16, i1 false), !tbaa.struct !38
  %530 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 0
  %531 = load double, ptr %530, align 8
  %532 = getelementptr inbounds { double, double }, ptr %45, i32 0, i32 1
  %533 = load double, ptr %532, align 8
  %534 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 0
  %535 = load double, ptr %534, align 8
  %536 = getelementptr inbounds { double, double }, ptr %46, i32 0, i32 1
  %537 = load double, ptr %536, align 8
  %538 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %60, double %531, double %533, double %535, double %537)
          to label %539 unwind label %710

539:                                              ; preds = %529
  store double %538, ptr %44, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %540 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %541 = load i32, ptr %10, align 4, !tbaa !9
  %542 = sext i32 %541 to i64
  %543 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %540, i64 noundef %542) #6
  %544 = load ptr, ptr %543, align 8, !tbaa !5
  %545 = getelementptr inbounds %class.ChainElement, ptr %544, i32 0, i32 2
  %546 = load double, ptr %545, align 8, !tbaa !29
  %547 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %548 = load i32, ptr %10, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %547, i64 noundef %549) #6
  %551 = load ptr, ptr %550, align 8, !tbaa !5
  %552 = getelementptr inbounds %class.ChainElement, ptr %551, i32 0, i32 3
  %553 = load double, ptr %552, align 8, !tbaa !30
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %48, double noundef %546, double noundef %553)
          to label %554 unwind label %714

554:                                              ; preds = %539
  %555 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 1
  %556 = load double, ptr %555, align 8, !tbaa !37
  %557 = fneg double %556
  %558 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 0
  %559 = load double, ptr %558, align 8, !tbaa !35
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %49, double noundef %557, double noundef %559)
          to label %560 unwind label %714

560:                                              ; preds = %554
  %561 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 0
  %562 = load double, ptr %561, align 8
  %563 = getelementptr inbounds { double, double }, ptr %48, i32 0, i32 1
  %564 = load double, ptr %563, align 8
  %565 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %566 = load double, ptr %565, align 8
  %567 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %568 = load double, ptr %567, align 8
  %569 = invoke noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %60, double %562, double %564, double %566, double %568)
          to label %570 unwind label %714

570:                                              ; preds = %560
  store double %569, ptr %47, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %571 = load ptr, ptr %18, align 8, !tbaa !5
  %572 = load ptr, ptr %571, align 8, !tbaa !5
  %573 = getelementptr inbounds %class.Wall, ptr %572, i32 0, i32 8
  %574 = load double, ptr %573, align 8, !tbaa !31
  %575 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %576 = load i32, ptr %10, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %575, i64 noundef %577) #6
  %579 = load ptr, ptr %578, align 8, !tbaa !5
  %580 = getelementptr inbounds %class.ChainElement, ptr %579, i32 0, i32 6
  %581 = load double, ptr %580, align 8, !tbaa !24
  %582 = load ptr, ptr %18, align 8, !tbaa !5
  %583 = load ptr, ptr %582, align 8, !tbaa !5
  %584 = getelementptr inbounds %class.Wall, ptr %583, i32 0, i32 2
  %585 = load double, ptr %584, align 8, !tbaa !28
  %586 = fadd double %581, %585
  %587 = load double, ptr %42, align 8, !tbaa !23
  %588 = fsub double %586, %587
  %589 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %590 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %589) #6
  %591 = uitofp i64 %590 to double
  %592 = fdiv double %591, 3.000000e+03
  %593 = load ptr, ptr %18, align 8, !tbaa !5
  %594 = load ptr, ptr %593, align 8, !tbaa !5
  %595 = getelementptr inbounds %class.Wall, ptr %594, i32 0, i32 9
  %596 = load double, ptr %595, align 8, !tbaa !32
  %597 = fmul double %592, %596
  %598 = load double, ptr %44, align 8, !tbaa !23
  %599 = fmul double %597, %598
  %600 = fneg double %599
  %601 = call double @llvm.fmuladd.f64(double %574, double %588, double %600)
  %602 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 0
  %603 = load double, ptr %602, align 8, !tbaa !35
  %604 = fmul double %601, %603
  store double %604, ptr %50, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  %605 = load ptr, ptr %18, align 8, !tbaa !5
  %606 = load ptr, ptr %605, align 8, !tbaa !5
  %607 = getelementptr inbounds %class.Wall, ptr %606, i32 0, i32 8
  %608 = load double, ptr %607, align 8, !tbaa !31
  %609 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %610 = load i32, ptr %10, align 4, !tbaa !9
  %611 = sext i32 %610 to i64
  %612 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %609, i64 noundef %611) #6
  %613 = load ptr, ptr %612, align 8, !tbaa !5
  %614 = getelementptr inbounds %class.ChainElement, ptr %613, i32 0, i32 6
  %615 = load double, ptr %614, align 8, !tbaa !24
  %616 = load ptr, ptr %18, align 8, !tbaa !5
  %617 = load ptr, ptr %616, align 8, !tbaa !5
  %618 = getelementptr inbounds %class.Wall, ptr %617, i32 0, i32 2
  %619 = load double, ptr %618, align 8, !tbaa !28
  %620 = fadd double %615, %619
  %621 = load double, ptr %42, align 8, !tbaa !23
  %622 = fsub double %620, %621
  %623 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %624 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %623) #6
  %625 = uitofp i64 %624 to double
  %626 = fdiv double %625, 3.000000e+03
  %627 = load ptr, ptr %18, align 8, !tbaa !5
  %628 = load ptr, ptr %627, align 8, !tbaa !5
  %629 = getelementptr inbounds %class.Wall, ptr %628, i32 0, i32 9
  %630 = load double, ptr %629, align 8, !tbaa !32
  %631 = fmul double %626, %630
  %632 = load double, ptr %44, align 8, !tbaa !23
  %633 = fmul double %631, %632
  %634 = fneg double %633
  %635 = call double @llvm.fmuladd.f64(double %608, double %622, double %634)
  %636 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 1
  %637 = load double, ptr %636, align 8, !tbaa !37
  %638 = fmul double %635, %637
  store double %638, ptr %51, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  %639 = load double, ptr %50, align 8, !tbaa !23
  %640 = load double, ptr %51, align 8, !tbaa !23
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %53, double noundef %639, double noundef %640)
          to label %641 unwind label %718

641:                                              ; preds = %570
  %642 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 0
  %643 = load double, ptr %642, align 8
  %644 = getelementptr inbounds { double, double }, ptr %53, i32 0, i32 1
  %645 = load double, ptr %644, align 8
  %646 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %60, double %643, double %645)
          to label %647 unwind label %718

647:                                              ; preds = %641
  store double %646, ptr %52, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %648 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %649 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %648) #6
  %650 = uitofp i64 %649 to double
  %651 = fneg double %650
  %652 = fdiv double %651, 3.000000e+03
  %653 = load ptr, ptr %18, align 8, !tbaa !5
  %654 = load ptr, ptr %653, align 8, !tbaa !5
  %655 = getelementptr inbounds %class.Wall, ptr %654, i32 0, i32 10
  %656 = load double, ptr %655, align 8, !tbaa !33
  %657 = fmul double %652, %656
  %658 = load double, ptr %47, align 8, !tbaa !23
  %659 = fmul double %657, %658
  %660 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 1
  %661 = load double, ptr %660, align 8, !tbaa !37
  %662 = fmul double -1.000000e+00, %661
  %663 = fmul double %659, %662
  store double %663, ptr %54, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #6
  %664 = getelementptr inbounds %class.Chain, ptr %2, i32 0, i32 5
  %665 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %664) #6
  %666 = uitofp i64 %665 to double
  %667 = fneg double %666
  %668 = fdiv double %667, 3.000000e+03
  %669 = load ptr, ptr %18, align 8, !tbaa !5
  %670 = load ptr, ptr %669, align 8, !tbaa !5
  %671 = getelementptr inbounds %class.Wall, ptr %670, i32 0, i32 10
  %672 = load double, ptr %671, align 8, !tbaa !33
  %673 = fmul double %668, %672
  %674 = load double, ptr %47, align 8, !tbaa !23
  %675 = fmul double %673, %674
  %676 = getelementptr inbounds %class.Vector, ptr %41, i32 0, i32 0
  %677 = load double, ptr %676, align 8, !tbaa !35
  %678 = fmul double %675, %677
  store double %678, ptr %55, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %679 = load double, ptr %54, align 8, !tbaa !23
  %680 = load double, ptr %55, align 8, !tbaa !23
  invoke void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %57, double noundef %679, double noundef %680)
          to label %681 unwind label %722

681:                                              ; preds = %647
  %682 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %683 = load double, ptr %682, align 8
  %684 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %685 = load double, ptr %684, align 8
  %686 = invoke noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %60, double %683, double %685)
          to label %687 unwind label %722

687:                                              ; preds = %681
  store double %686, ptr %56, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #6
  %688 = load double, ptr %56, align 8, !tbaa !23
  %689 = fcmp ogt double %688, 0.000000e+00
  br i1 %689, label %690, label %730

690:                                              ; preds = %687
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #6
  %691 = load ptr, ptr %18, align 8, !tbaa !5
  %692 = load ptr, ptr %691, align 8, !tbaa !5
  %693 = getelementptr inbounds %class.Wall, ptr %692, i32 0, i32 11
  %694 = load double, ptr %693, align 8, !tbaa !34
  %695 = load double, ptr %52, align 8, !tbaa !23
  %696 = fmul double %694, %695
  store double %696, ptr %59, align 8, !tbaa !23
  %697 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %698 unwind label %726

698:                                              ; preds = %690
  %699 = load double, ptr %697, align 8, !tbaa !23
  %700 = load double, ptr %56, align 8, !tbaa !23
  %701 = fdiv double %699, %700
  store double %701, ptr %58, align 8, !tbaa !23
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  br label %730

702:                                              ; preds = %460
  %703 = landingpad { ptr, i32 }
          cleanup
  %704 = extractvalue { ptr, i32 } %703, 0
  store ptr %704, ptr %13, align 8
  %705 = extractvalue { ptr, i32 } %703, 1
  store i32 %705, ptr %14, align 4
  br label %751

706:                                              ; preds = %485
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %13, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %14, align 4
  br label %750

710:                                              ; preds = %529, %506
  %711 = landingpad { ptr, i32 }
          cleanup
  %712 = extractvalue { ptr, i32 } %711, 0
  store ptr %712, ptr %13, align 8
  %713 = extractvalue { ptr, i32 } %711, 1
  store i32 %713, ptr %14, align 4
  br label %748

714:                                              ; preds = %560, %554, %539
  %715 = landingpad { ptr, i32 }
          cleanup
  %716 = extractvalue { ptr, i32 } %715, 0
  store ptr %716, ptr %13, align 8
  %717 = extractvalue { ptr, i32 } %715, 1
  store i32 %717, ptr %14, align 4
  br label %747

718:                                              ; preds = %641, %570
  %719 = landingpad { ptr, i32 }
          cleanup
  %720 = extractvalue { ptr, i32 } %719, 0
  store ptr %720, ptr %13, align 8
  %721 = extractvalue { ptr, i32 } %719, 1
  store i32 %721, ptr %14, align 4
  br label %746

722:                                              ; preds = %681, %647
  %723 = landingpad { ptr, i32 }
          cleanup
  %724 = extractvalue { ptr, i32 } %723, 0
  store ptr %724, ptr %13, align 8
  %725 = extractvalue { ptr, i32 } %723, 1
  store i32 %725, ptr %14, align 4
  br label %745

726:                                              ; preds = %690
  %727 = landingpad { ptr, i32 }
          cleanup
  %728 = extractvalue { ptr, i32 } %727, 0
  store ptr %728, ptr %13, align 8
  %729 = extractvalue { ptr, i32 } %727, 1
  store i32 %729, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  br label %745

730:                                              ; preds = %698, %687
  %731 = load double, ptr %50, align 8, !tbaa !23
  %732 = load double, ptr %58, align 8, !tbaa !23
  %733 = load double, ptr %54, align 8, !tbaa !23
  %734 = call double @llvm.fmuladd.f64(double %732, double %733, double %731)
  %735 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 0
  %736 = load double, ptr %735, align 8, !tbaa !35
  %737 = fadd double %736, %734
  store double %737, ptr %735, align 8, !tbaa !35
  %738 = load double, ptr %51, align 8, !tbaa !23
  %739 = load double, ptr %58, align 8, !tbaa !23
  %740 = load double, ptr %55, align 8, !tbaa !23
  %741 = call double @llvm.fmuladd.f64(double %739, double %740, double %738)
  %742 = getelementptr inbounds %class.Vector, ptr %12, i32 0, i32 1
  %743 = load double, ptr %742, align 8, !tbaa !37
  %744 = fadd double %743, %741
  store double %744, ptr %742, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  br label %749

745:                                              ; preds = %726, %722
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  br label %746

746:                                              ; preds = %745, %718
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  br label %747

747:                                              ; preds = %746, %714
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br label %748

748:                                              ; preds = %747, %710
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  br label %750

749:                                              ; preds = %730, %491
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  br label %752

750:                                              ; preds = %748, %706
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %751

751:                                              ; preds = %750, %702
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #6
  br label %755

752:                                              ; preds = %749, %454
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %753

753:                                              ; preds = %752
  %754 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP4WallSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #6
  br label %76

755:                                              ; preds = %751, %453
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  br label %761

756:                                              ; preds = %78
  invoke void @_ZNSt6vectorI6VectorSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %757 unwind label %79

757:                                              ; preds = %756
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  br label %758

758:                                              ; preds = %757
  %759 = load i32, ptr %10, align 4, !tbaa !9
  %760 = add nsw i32 %759, 1
  store i32 %760, ptr %10, align 4, !tbaa !9
  br label %61, !llvm.loop !39

761:                                              ; preds = %755, %79
  call void @llvm.lifetime.end.p0(i64 16, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @_ZNSt6vectorI6VectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  br label %766

762:                                              ; preds = %67
  store i1 true, ptr %9, align 1
  store i32 1, ptr %11, align 4
  %763 = load i1, ptr %9, align 1
  br i1 %763, label %765, label %764

764:                                              ; preds = %762
  call void @_ZNSt6vectorI6VectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  br label %765

765:                                              ; preds = %764, %762
  ret void

766:                                              ; preds = %761
  %767 = load ptr, ptr %13, align 8
  %768 = load i32, ptr %14, align 4
  %769 = insertvalue { ptr, i32 } poison, ptr %767, 0
  %770 = insertvalue { ptr, i32 } %769, i32 %768, 1
  resume { ptr, i32 } %770
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #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, !14, i64 96}
!12 = !{!"_ZTS4Wall", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !14, i64 96}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTS8WallType", !7, i64 0}
!15 = !{!16, !13, i64 0}
!16 = !{!"_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, !17, i64 64, !6, i64 72, !6, i64 80}
!17 = !{!"bool", !7, i64 0}
!18 = !{!12, !13, i64 0}
!19 = !{!16, !13, i64 8}
!20 = !{!12, !13, i64 8}
!21 = !{!12, !13, i64 32}
!22 = !{!12, !13, i64 40}
!23 = !{!13, !13, i64 0}
!24 = !{!16, !13, i64 48}
!25 = !{!12, !13, i64 24}
!26 = !{!12, !13, i64 48}
!27 = !{!12, !13, i64 56}
!28 = !{!12, !13, i64 16}
!29 = !{!16, !13, i64 16}
!30 = !{!16, !13, i64 24}
!31 = !{!12, !13, i64 64}
!32 = !{!12, !13, i64 72}
!33 = !{!12, !13, i64 80}
!34 = !{!12, !13, i64 88}
!35 = !{!36, !13, i64 0}
!36 = !{!"_ZTS6Vector", !13, i64 0, !13, i64 8}
!37 = !{!36, !13, i64 8}
!38 = !{i64 0, i64 8, !23, i64 8, i64 8, !23}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}


; 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 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }

; 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 ptr @_ZNSt6vectorIP4WallSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

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

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

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

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

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

; 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: mustprogress uwtable
define dso_local void @_ZN10Simulation13getWallForcesE5ChainSt6vectorIP4WallSaIS3_EE(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, ptr noundef %3) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %class.Vector, align 16
  %6 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator", 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 double, align 8
  %18 = alloca %class.Vector, align 8
  %19 = alloca double, align 8
  %20 = alloca %class.Vector, align 16
  %21 = alloca %class.Vector, align 8
  %22 = alloca %class.Vector, align 8
  %23 = alloca %class.Vector, align 8
  %24 = alloca %class.Vector, align 8
  %25 = alloca double, align 8
  %26 = alloca %class.Vector, align 8
  %27 = alloca double, align 8
  tail call void @_ZNSt6vectorI6VectorSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  %28 = getelementptr inbounds i8, ptr %2, i64 40
  %29 = tail call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %.not = icmp eq i64 %29, 0
  br i1 %.not, label %._crit_edge127, label %.lr.ph126

.lr.ph126:                                        ; preds = %4
  %30 = getelementptr inbounds i8, ptr %8, i64 8
  %31 = getelementptr inbounds i8, ptr %9, i64 8
  %32 = getelementptr inbounds i8, ptr %10, i64 8
  %33 = getelementptr inbounds i8, ptr %11, i64 8
  %34 = getelementptr inbounds i8, ptr %12, i64 8
  %35 = getelementptr inbounds i8, ptr %13, i64 8
  %36 = getelementptr inbounds i8, ptr %14, i64 8
  %37 = getelementptr inbounds i8, ptr %15, i64 8
  %38 = getelementptr inbounds i8, ptr %16, i64 8
  %39 = getelementptr inbounds i8, ptr %18, i64 8
  %.sroa.216.0..sroa_idx = getelementptr inbounds i8, ptr %20, i64 8
  %40 = getelementptr inbounds i8, ptr %21, i64 8
  %41 = getelementptr inbounds i8, ptr %22, i64 8
  %42 = getelementptr inbounds i8, ptr %23, i64 8
  %43 = getelementptr inbounds i8, ptr %24, i64 8
  %44 = getelementptr inbounds i8, ptr %26, i64 8
  br label %45

45:                                               ; preds = %.lr.ph126, %421
  %indvars.iv = phi i64 [ 0, %.lr.ph126 ], [ %indvars.iv.next, %421 ]
  %.0124 = phi double [ undef, %.lr.ph126 ], [ %.1.lcssa, %421 ]
  %.0110122 = phi double [ undef, %.lr.ph126 ], [ %.1111.lcssa, %421 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #5
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %5, double noundef 0.000000e+00, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  %46 = call ptr @_ZNSt6vectorIP4WallSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #5
  store ptr %46, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  %47 = call ptr @_ZNSt6vectorIP4WallSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #5
  store ptr %47, ptr %7, align 8
  %48 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP4WallSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  br i1 %48, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %418, %45
  %.1111.lcssa = phi double [ %.0110122, %45 ], [ %.5, %418 ]
  %.1.lcssa = phi double [ %.0124, %45 ], [ %.4, %418 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  invoke void @_ZNSt6vectorI6VectorSaIS0_EE9push_backERKS0_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(16) %5)
          to label %421 unwind label %49

49:                                               ; preds = %._crit_edge
  %50 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #5
  call void @_ZNSt6vectorI6VectorSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #5
  resume { ptr, i32 } %50

.lr.ph:                                           ; preds = %45, %418
  %.1120 = phi double [ %.4, %418 ], [ %.0124, %45 ]
  %.1111119 = phi double [ %.5, %418 ], [ %.0110122, %45 ]
  %51 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP4WallSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #5
  %52 = load ptr, ptr %51, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %52, i64 96
  %54 = load i32, ptr %53, align 8, !tbaa !9
  %55 = icmp eq i32 %54, 0
  br i1 %55, label %56, label %255

56:                                               ; preds = %.lr.ph
  %57 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %58 = load ptr, ptr %57, align 8, !tbaa !5
  %59 = load double, ptr %58, align 8, !tbaa !13
  %60 = load ptr, ptr %51, align 8, !tbaa !5
  %61 = load double, ptr %60, align 8, !tbaa !16
  %62 = fsub double %59, %61
  %63 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %64 = load ptr, ptr %63, align 8, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %64, i64 8
  %66 = load double, ptr %65, align 8, !tbaa !17
  %67 = load ptr, ptr %51, align 8, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %67, i64 8
  %69 = load double, ptr %68, align 8, !tbaa !18
  %70 = fsub double %66, %69
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %8, double noundef %62, double noundef %70)
  %71 = load ptr, ptr %51, align 8, !tbaa !5
  %72 = getelementptr inbounds i8, ptr %71, i64 32
  %73 = load double, ptr %72, align 8, !tbaa !19
  %74 = getelementptr inbounds i8, ptr %71, i64 40
  %75 = load double, ptr %74, align 8, !tbaa !20
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %9, double noundef %73, double noundef %75)
  %76 = load double, ptr %8, align 8
  %77 = load double, ptr %30, align 8
  %78 = load double, ptr %9, align 8
  %79 = load double, ptr %31, align 8
  %80 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %76, double %77, double %78, double %79)
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %82 = load ptr, ptr %81, align 8, !tbaa !5
  %83 = getelementptr inbounds i8, ptr %82, i64 48
  %84 = load double, ptr %83, align 8, !tbaa !21
  %85 = fcmp olt double %80, %84
  %.pre129 = load ptr, ptr %51, align 8, !tbaa !5
  br i1 %85, label %86, label %255

86:                                               ; preds = %56
  %87 = getelementptr inbounds i8, ptr %.pre129, i64 24
  %88 = load double, ptr %87, align 8, !tbaa !22
  %89 = fneg double %88
  %90 = fcmp ogt double %80, %89
  br i1 %90, label %91, label %255

91:                                               ; preds = %86
  %92 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %93 = load ptr, ptr %92, align 8, !tbaa !5
  %94 = load double, ptr %93, align 8, !tbaa !13
  %95 = load ptr, ptr %51, align 8, !tbaa !5
  %96 = load double, ptr %95, align 8, !tbaa !16
  %97 = fsub double %94, %96
  %98 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  %100 = getelementptr inbounds i8, ptr %99, i64 8
  %101 = load double, ptr %100, align 8, !tbaa !17
  %102 = load ptr, ptr %51, align 8, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %102, i64 8
  %104 = load double, ptr %103, align 8, !tbaa !18
  %105 = fsub double %101, %104
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %10, double noundef %97, double noundef %105)
  %106 = load ptr, ptr %51, align 8, !tbaa !5
  %107 = getelementptr inbounds i8, ptr %106, i64 48
  %108 = load double, ptr %107, align 8, !tbaa !23
  %109 = getelementptr inbounds i8, ptr %106, i64 56
  %110 = load double, ptr %109, align 8, !tbaa !24
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %11, double noundef %108, double noundef %110)
  %111 = load double, ptr %10, align 8
  %112 = load double, ptr %32, align 8
  %113 = load double, ptr %11, align 8
  %114 = load double, ptr %33, align 8
  %115 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %111, double %112, double %113, double %114)
  %116 = fcmp ogt double %115, 0.000000e+00
  %.pre130 = load ptr, ptr %51, align 8, !tbaa !5
  br i1 %116, label %117, label %255

117:                                              ; preds = %91
  %118 = getelementptr inbounds i8, ptr %.pre130, i64 16
  %119 = load double, ptr %118, align 8, !tbaa !25
  %120 = fcmp olt double %115, %119
  br i1 %120, label %121, label %255

121:                                              ; preds = %117
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %123 = load ptr, ptr %122, align 8, !tbaa !5
  %124 = getelementptr inbounds i8, ptr %123, i64 16
  %125 = load double, ptr %124, align 8, !tbaa !26
  %126 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %127 = load ptr, ptr %126, align 8, !tbaa !5
  %128 = getelementptr inbounds i8, ptr %127, i64 24
  %129 = load double, ptr %128, align 8, !tbaa !27
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %12, double noundef %125, double noundef %129)
  %130 = load ptr, ptr %51, align 8, !tbaa !5
  %131 = getelementptr inbounds i8, ptr %130, i64 32
  %132 = load double, ptr %131, align 8, !tbaa !19
  %133 = getelementptr inbounds i8, ptr %130, i64 40
  %134 = load double, ptr %133, align 8, !tbaa !20
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %13, double noundef %132, double noundef %134)
  %135 = load double, ptr %12, align 8
  %136 = load double, ptr %34, align 8
  %137 = load double, ptr %13, align 8
  %138 = load double, ptr %35, align 8
  %139 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %135, double %136, double %137, double %138)
  %140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %141 = load ptr, ptr %140, align 8, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %141, i64 16
  %143 = load double, ptr %142, align 8, !tbaa !26
  %144 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %145, i64 24
  %147 = load double, ptr %146, align 8, !tbaa !27
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %14, double noundef %143, double noundef %147)
  %148 = load ptr, ptr %51, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 48
  %150 = load double, ptr %149, align 8, !tbaa !23
  %151 = getelementptr inbounds i8, ptr %148, i64 56
  %152 = load double, ptr %151, align 8, !tbaa !24
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %15, double noundef %150, double noundef %152)
  %153 = load double, ptr %14, align 8
  %154 = load double, ptr %36, align 8
  %155 = load double, ptr %15, align 8
  %156 = load double, ptr %37, align 8
  %157 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %153, double %154, double %155, double %156)
  %158 = load ptr, ptr %51, align 8, !tbaa !5
  %159 = getelementptr inbounds i8, ptr %158, i64 64
  %160 = load double, ptr %159, align 8, !tbaa !28
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %162 = load ptr, ptr %161, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %162, i64 48
  %164 = load double, ptr %163, align 8, !tbaa !21
  %165 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %166 = load ptr, ptr %51, align 8, !tbaa !5
  %167 = getelementptr inbounds i8, ptr %166, i64 72
  %168 = load double, ptr %167, align 8, !tbaa !29
  %169 = getelementptr inbounds i8, ptr %166, i64 32
  %170 = load double, ptr %169, align 8, !tbaa !19
  %171 = getelementptr inbounds i8, ptr %166, i64 64
  %172 = load double, ptr %171, align 8, !tbaa !28
  %173 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %174 = load ptr, ptr %173, align 8, !tbaa !5
  %175 = getelementptr inbounds i8, ptr %174, i64 48
  %176 = load double, ptr %175, align 8, !tbaa !21
  %177 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %178 = load ptr, ptr %51, align 8, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %178, i64 72
  %180 = load double, ptr %179, align 8, !tbaa !29
  %181 = getelementptr inbounds i8, ptr %178, i64 40
  %182 = load double, ptr %181, align 8, !tbaa !20
  %183 = insertelement <2 x double> poison, double %164, i64 0
  %184 = insertelement <2 x double> %183, double %176, i64 1
  %185 = insertelement <2 x double> poison, double %80, i64 0
  %186 = shufflevector <2 x double> %185, <2 x double> poison, <2 x i32> zeroinitializer
  %187 = fsub <2 x double> %184, %186
  %188 = insertelement <2 x i64> poison, i64 %165, i64 0
  %189 = insertelement <2 x i64> %188, i64 %177, i64 1
  %190 = uitofp <2 x i64> %189 to <2 x double>
  %191 = fdiv <2 x double> %190, <double -3.000000e+03, double -3.000000e+03>
  %192 = insertelement <2 x double> poison, double %168, i64 0
  %193 = insertelement <2 x double> %192, double %180, i64 1
  %194 = fmul <2 x double> %191, %193
  %195 = insertelement <2 x double> poison, double %139, i64 0
  %196 = shufflevector <2 x double> %195, <2 x double> poison, <2 x i32> zeroinitializer
  %197 = fmul <2 x double> %196, %194
  %198 = insertelement <2 x double> poison, double %160, i64 0
  %199 = insertelement <2 x double> %198, double %172, i64 1
  %200 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %199, <2 x double> %187, <2 x double> %197)
  %201 = insertelement <2 x double> poison, double %170, i64 0
  %202 = insertelement <2 x double> %201, double %182, i64 1
  %203 = fmul <2 x double> %202, %200
  %204 = extractelement <2 x double> %203, i64 0
  %205 = extractelement <2 x double> %203, i64 1
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %16, double noundef %204, double noundef %205)
  %206 = load double, ptr %16, align 8
  %207 = load double, ptr %38, align 8
  %208 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %206, double %207)
  %209 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %210 = load ptr, ptr %51, align 8, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %210, i64 80
  %212 = load double, ptr %211, align 8, !tbaa !30
  %213 = getelementptr inbounds i8, ptr %210, i64 48
  %214 = load double, ptr %213, align 8, !tbaa !23
  %215 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %216 = insertelement <2 x i64> poison, i64 %209, i64 0
  %217 = insertelement <2 x i64> %216, i64 %215, i64 1
  %218 = uitofp <2 x i64> %217 to <2 x double>
  %219 = fdiv <2 x double> %218, <double -3.000000e+03, double -3.000000e+03>
  %220 = load ptr, ptr %51, align 8, !tbaa !5
  %221 = getelementptr inbounds i8, ptr %220, i64 80
  %222 = load double, ptr %221, align 8, !tbaa !30
  %223 = insertelement <2 x double> poison, double %212, i64 0
  %224 = insertelement <2 x double> %223, double %222, i64 1
  %225 = fmul <2 x double> %219, %224
  %226 = insertelement <2 x double> poison, double %157, i64 0
  %227 = shufflevector <2 x double> %226, <2 x double> poison, <2 x i32> zeroinitializer
  %228 = fmul <2 x double> %227, %225
  %229 = getelementptr inbounds i8, ptr %220, i64 56
  %230 = load double, ptr %229, align 8, !tbaa !24
  %231 = insertelement <2 x double> poison, double %214, i64 0
  %232 = insertelement <2 x double> %231, double %230, i64 1
  %233 = fmul <2 x double> %232, %228
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #5
  %234 = extractelement <2 x double> %233, i64 0
  %235 = extractelement <2 x double> %233, i64 1
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %18, double noundef %234, double noundef %235)
  %236 = load double, ptr %18, align 8
  %237 = load double, ptr %39, align 8
  %238 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %236, double %237)
  store double %238, ptr %17, align 8, !tbaa !31
  %239 = fcmp ogt double %238, 0.000000e+00
  br i1 %239, label %240, label %249

240:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  %241 = load ptr, ptr %51, align 8, !tbaa !5
  %242 = getelementptr inbounds i8, ptr %241, i64 88
  %243 = load double, ptr %242, align 8, !tbaa !32
  %244 = fmul double %208, %243
  store double %244, ptr %19, align 8, !tbaa !31
  %245 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %17)
  %246 = load double, ptr %245, align 8, !tbaa !31
  %247 = load double, ptr %17, align 8, !tbaa !31
  %248 = fdiv double %246, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  br label %249

249:                                              ; preds = %240, %121
  %.2112 = phi double [ %248, %240 ], [ %.1111119, %121 ]
  %250 = insertelement <2 x double> poison, double %.2112, i64 0
  %251 = shufflevector <2 x double> %250, <2 x double> poison, <2 x i32> zeroinitializer
  %252 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %251, <2 x double> %233, <2 x double> %203)
  %253 = load <2 x double>, ptr %5, align 16, !tbaa !31
  %254 = fadd <2 x double> %253, %252
  store <2 x double> %254, ptr %5, align 16, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  %.pre = load ptr, ptr %51, align 8, !tbaa !5
  br label %255

255:                                              ; preds = %56, %86, %249, %117, %91, %.lr.ph
  %256 = phi ptr [ %52, %.lr.ph ], [ %.pre129, %86 ], [ %.pre129, %56 ], [ %.pre, %249 ], [ %.pre130, %117 ], [ %.pre130, %91 ]
  %.5 = phi double [ %.1111119, %.lr.ph ], [ %.1111119, %86 ], [ %.1111119, %56 ], [ %.2112, %249 ], [ %.1111119, %117 ], [ %.1111119, %91 ]
  %257 = getelementptr inbounds i8, ptr %256, i64 96
  %258 = load i32, ptr %257, align 8, !tbaa !9
  %259 = icmp eq i32 %258, 1
  br i1 %259, label %260, label %418

260:                                              ; preds = %255
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #5
  %261 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %262 = load ptr, ptr %261, align 8, !tbaa !5
  %263 = load double, ptr %262, align 8, !tbaa !13
  %264 = load ptr, ptr %51, align 8, !tbaa !5
  %265 = load double, ptr %264, align 8, !tbaa !16
  %266 = fsub double %263, %265
  %267 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %268 = load ptr, ptr %267, align 8, !tbaa !5
  %269 = getelementptr inbounds i8, ptr %268, i64 8
  %270 = load double, ptr %269, align 8, !tbaa !17
  %271 = load ptr, ptr %51, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i64 8
  %273 = load double, ptr %272, align 8, !tbaa !18
  %274 = fsub double %270, %273
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %20, double noundef %266, double noundef %274)
  %.sroa.015.0.copyload = load double, ptr %20, align 16, !tbaa !31
  %.sroa.216.0.copyload = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !31
  %275 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %.sroa.015.0.copyload, double %.sroa.216.0.copyload)
  %276 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %277 = load ptr, ptr %276, align 8, !tbaa !5
  %278 = getelementptr inbounds i8, ptr %277, i64 48
  %279 = load double, ptr %278, align 8, !tbaa !21
  %280 = load ptr, ptr %51, align 8, !tbaa !5
  %281 = getelementptr inbounds i8, ptr %280, i64 16
  %282 = load double, ptr %281, align 8, !tbaa !25
  %283 = fadd double %279, %282
  %284 = fcmp olt double %275, %283
  br i1 %284, label %285, label %417

285:                                              ; preds = %260
  %286 = load <2 x double>, ptr %20, align 16, !tbaa !31
  %287 = insertelement <2 x double> poison, double %275, i64 0
  %288 = shufflevector <2 x double> %287, <2 x double> poison, <2 x i32> zeroinitializer
  %289 = fdiv <2 x double> %286, %288
  store <2 x double> %289, ptr %20, align 16, !tbaa !31
  %290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %291 = load ptr, ptr %290, align 8, !tbaa !5
  %292 = getelementptr inbounds i8, ptr %291, i64 16
  %293 = load double, ptr %292, align 8, !tbaa !26
  %294 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %295 = load ptr, ptr %294, align 8, !tbaa !5
  %296 = getelementptr inbounds i8, ptr %295, i64 24
  %297 = load double, ptr %296, align 8, !tbaa !27
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %21, double noundef %293, double noundef %297)
  %.sroa.0.0.copyload = load double, ptr %20, align 16, !tbaa !31
  %.sroa.2.0.copyload = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !31
  %298 = load double, ptr %21, align 8
  %299 = load double, ptr %40, align 8
  %300 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %298, double %299, double %.sroa.0.0.copyload, double %.sroa.2.0.copyload)
  %301 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %302 = load ptr, ptr %301, align 8, !tbaa !5
  %303 = getelementptr inbounds i8, ptr %302, i64 16
  %304 = load double, ptr %303, align 8, !tbaa !26
  %305 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %306 = load ptr, ptr %305, align 8, !tbaa !5
  %307 = getelementptr inbounds i8, ptr %306, i64 24
  %308 = load double, ptr %307, align 8, !tbaa !27
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %22, double noundef %304, double noundef %308)
  %309 = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !33
  %310 = fneg double %309
  %311 = load double, ptr %20, align 16, !tbaa !35
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %23, double noundef %310, double noundef %311)
  %312 = load double, ptr %22, align 8
  %313 = load double, ptr %41, align 8
  %314 = load double, ptr %23, align 8
  %315 = load double, ptr %42, align 8
  %316 = call noundef double @_ZN10Simulation13scalarproductE6VectorS0_(ptr noundef nonnull align 8 dereferenceable(104) %1, double %312, double %313, double %314, double %315)
  %317 = load ptr, ptr %51, align 8, !tbaa !5
  %318 = getelementptr inbounds i8, ptr %317, i64 64
  %319 = load double, ptr %318, align 8, !tbaa !28
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %321 = load ptr, ptr %320, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i64 48
  %323 = load double, ptr %322, align 8, !tbaa !21
  %324 = load ptr, ptr %51, align 8, !tbaa !5
  %325 = getelementptr inbounds i8, ptr %324, i64 16
  %326 = load double, ptr %325, align 8, !tbaa !25
  %327 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %328 = load ptr, ptr %51, align 8, !tbaa !5
  %329 = getelementptr inbounds i8, ptr %328, i64 72
  %330 = load double, ptr %329, align 8, !tbaa !29
  %331 = getelementptr inbounds i8, ptr %328, i64 64
  %332 = load double, ptr %331, align 8, !tbaa !28
  %333 = load <2 x double>, ptr %20, align 16
  %334 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ChainElementSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %28, i64 noundef %indvars.iv) #5
  %335 = load ptr, ptr %334, align 8, !tbaa !5
  %336 = getelementptr inbounds i8, ptr %335, i64 48
  %337 = load double, ptr %336, align 8, !tbaa !21
  %338 = load ptr, ptr %51, align 8, !tbaa !5
  %339 = getelementptr inbounds i8, ptr %338, i64 16
  %340 = load double, ptr %339, align 8, !tbaa !25
  %341 = insertelement <2 x double> poison, double %323, i64 0
  %342 = insertelement <2 x double> %341, double %337, i64 1
  %343 = insertelement <2 x double> poison, double %326, i64 0
  %344 = insertelement <2 x double> %343, double %340, i64 1
  %345 = fadd <2 x double> %342, %344
  %346 = fsub <2 x double> %345, %288
  %347 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %348 = insertelement <2 x i64> poison, i64 %327, i64 0
  %349 = insertelement <2 x i64> %348, i64 %347, i64 1
  %350 = uitofp <2 x i64> %349 to <2 x double>
  %351 = load ptr, ptr %51, align 8, !tbaa !5
  %352 = getelementptr inbounds i8, ptr %351, i64 72
  %353 = load double, ptr %352, align 8, !tbaa !29
  %354 = fdiv <2 x double> %350, <double -3.000000e+03, double -3.000000e+03>
  %355 = insertelement <2 x double> poison, double %330, i64 0
  %356 = insertelement <2 x double> %355, double %353, i64 1
  %357 = fmul <2 x double> %354, %356
  %358 = insertelement <2 x double> poison, double %300, i64 0
  %359 = shufflevector <2 x double> %358, <2 x double> poison, <2 x i32> zeroinitializer
  %360 = fmul <2 x double> %359, %357
  %361 = insertelement <2 x double> poison, double %319, i64 0
  %362 = insertelement <2 x double> %361, double %332, i64 1
  %363 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %362, <2 x double> %346, <2 x double> %360)
  %364 = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !33
  %365 = insertelement <2 x double> %333, double %364, i64 1
  %366 = fmul <2 x double> %365, %363
  %367 = extractelement <2 x double> %366, i64 0
  %368 = extractelement <2 x double> %366, i64 1
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %24, double noundef %367, double noundef %368)
  %369 = load double, ptr %24, align 8
  %370 = load double, ptr %43, align 8
  %371 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %369, double %370)
  %372 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %373 = load ptr, ptr %51, align 8, !tbaa !5
  %374 = getelementptr inbounds i8, ptr %373, i64 80
  %375 = load double, ptr %374, align 8, !tbaa !30
  %376 = load double, ptr %.sroa.216.0..sroa_idx, align 8, !tbaa !33
  %377 = fneg double %376
  %378 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %379 = insertelement <2 x i64> poison, i64 %372, i64 0
  %380 = insertelement <2 x i64> %379, i64 %378, i64 1
  %381 = uitofp <2 x i64> %380 to <2 x double>
  %382 = fdiv <2 x double> %381, <double -3.000000e+03, double -3.000000e+03>
  %383 = load ptr, ptr %51, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %383, i64 80
  %385 = load double, ptr %384, align 8, !tbaa !30
  %386 = insertelement <2 x double> poison, double %375, i64 0
  %387 = insertelement <2 x double> %386, double %385, i64 1
  %388 = fmul <2 x double> %382, %387
  %389 = insertelement <2 x double> poison, double %316, i64 0
  %390 = shufflevector <2 x double> %389, <2 x double> poison, <2 x i32> zeroinitializer
  %391 = fmul <2 x double> %390, %388
  %392 = load double, ptr %20, align 16, !tbaa !35
  %393 = insertelement <2 x double> poison, double %377, i64 0
  %394 = insertelement <2 x double> %393, double %392, i64 1
  %395 = fmul <2 x double> %391, %394
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #5
  %396 = extractelement <2 x double> %395, i64 0
  %397 = extractelement <2 x double> %395, i64 1
  call void @_ZN6VectorC2Edd(ptr noundef nonnull align 8 dereferenceable(16) %26, double noundef %396, double noundef %397)
  %398 = load double, ptr %26, align 8
  %399 = load double, ptr %44, align 8
  %400 = call noundef double @_ZN10Simulation14lengthOfVectorE6Vector(ptr noundef nonnull align 8 dereferenceable(104) %1, double %398, double %399)
  store double %400, ptr %25, align 8, !tbaa !31
  %401 = fcmp ogt double %400, 0.000000e+00
  br i1 %401, label %402, label %411

402:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #5
  %403 = load ptr, ptr %51, align 8, !tbaa !5
  %404 = getelementptr inbounds i8, ptr %403, i64 88
  %405 = load double, ptr %404, align 8, !tbaa !32
  %406 = fmul double %371, %405
  store double %406, ptr %27, align 8, !tbaa !31
  %407 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %408 = load double, ptr %407, align 8, !tbaa !31
  %409 = load double, ptr %25, align 8, !tbaa !31
  %410 = fdiv double %408, %409
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #5
  br label %411

411:                                              ; preds = %402, %285
  %.2 = phi double [ %410, %402 ], [ %.1120, %285 ]
  %412 = insertelement <2 x double> poison, double %.2, i64 0
  %413 = shufflevector <2 x double> %412, <2 x double> poison, <2 x i32> zeroinitializer
  %414 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %413, <2 x double> %395, <2 x double> %366)
  %415 = load <2 x double>, ptr %5, align 16, !tbaa !31
  %416 = fadd <2 x double> %415, %414
  store <2 x double> %416, ptr %5, align 16, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #5
  br label %417

417:                                              ; preds = %411, %260
  %.3 = phi double [ %.2, %411 ], [ %.1120, %260 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #5
  br label %418

418:                                              ; preds = %417, %255
  %.4 = phi double [ %.3, %417 ], [ %.1120, %255 ]
  %419 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP4WallSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #5
  %420 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP4WallSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  br i1 %420, label %.lr.ph, label %._crit_edge

421:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %422 = call noundef i64 @_ZNKSt6vectorIP12ChainElementSaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %28) #5
  %423 = icmp ugt i64 %422, %indvars.iv.next
  br i1 %423, label %45, label %._crit_edge127, !llvm.loop !36

._crit_edge127:                                   ; preds = %421, %4
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #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>) #4

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

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

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


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