; LLVM IR from jianboqi/CSF :: src/Cloth.ll (ZN5Cloth13movableFilterEv)

; 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" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl" }
%"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl" = type { %"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::queue" = type { %"class.std::deque" }
%"class.std::deque" = type { %"class.std::_Deque_base" }
%"class.std::_Deque_base" = type { %"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl" }
%"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl" = type { %"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl_data" }
%"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator", %"struct.std::_Deque_iterator" }
%"struct.std::_Deque_iterator" = type { ptr, ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl" }
%"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl" = type { %"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl_data" }
%"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.XY = type { i32, i32 }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Cloth = type { i32, i32, double, %"class.std::vector", double, double, %class.Vec3, double, double, %"class.std::vector.0", i32, i32 }
%class.Vec3 = type { [3 x double] }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.Particle = type { i8, double, %class.Vec3, %class.Vec3, double, %class.Vec3, %class.Vec3, i8, i32, i32, i32, i32, %"class.std::vector.5", %"class.std::vector.10", i64, double, double }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<Particle *, std::allocator<Particle *>>::_Vector_impl" }
%"struct.std::_Vector_base<Particle *, std::allocator<Particle *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Particle *, std::allocator<Particle *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Particle *, std::allocator<Particle *>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, i32 noundef) #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216)) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5Cloth13movableFilterEv(ptr noundef nonnull align 8 dereferenceable(128) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.std::vector", align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::queue", align 8
  %11 = alloca %"class.std::vector.15", align 8
  %12 = alloca %"class.std::vector.20", align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %struct.XY, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::vector.10", align 8
  %20 = alloca ptr, align 8
  %21 = alloca %struct.XY, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca %struct.XY, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca %struct.XY, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca %struct.XY, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca %"class.std::vector.10", align 8
  %37 = alloca %"class.std::vector.15", align 8
  %38 = alloca %"class.std::vector.10", align 8
  %39 = alloca %"class.std::vector.15", align 8
  %40 = alloca %"class.std::vector.20", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %41 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr %3) #4
  call void @_ZNSt6vectorI8ParticleSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %42

42:                                               ; preds = %444, %1
  %43 = load i32, ptr %4, align 4, !tbaa !9
  %44 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 10
  %45 = load i32, ptr %44, align 8, !tbaa !11
  %46 = icmp slt i32 %43, %45
  br i1 %46, label %48, label %47

47:                                               ; preds = %42
  store i32 2, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  br label %447

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

49:                                               ; preds = %439, %48
  %50 = load i32, ptr %6, align 4, !tbaa !9
  %51 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 11
  %52 = load i32, ptr %51, align 4, !tbaa !23
  %53 = icmp slt i32 %50, %52
  br i1 %53, label %55, label %54

54:                                               ; preds = %49
  store i32 5, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %443

55:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  %56 = load i32, ptr %4, align 4, !tbaa !9
  %57 = load i32, ptr %6, align 4, !tbaa !9
  %58 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %41, i32 noundef %56, i32 noundef %57)
          to label %59 unwind label %145

59:                                               ; preds = %55
  store ptr %58, ptr %7, align 8, !tbaa !5
  %60 = load ptr, ptr %7, align 8, !tbaa !5
  %61 = invoke noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %60)
          to label %62 unwind label %145

62:                                               ; preds = %59
  br i1 %61, label %63, label %438

63:                                               ; preds = %62
  %64 = load ptr, ptr %7, align 8, !tbaa !5
  %65 = getelementptr inbounds %class.Particle, ptr %64, i32 0, i32 7
  %66 = load i8, ptr %65, align 8, !tbaa !24, !range !36, !noundef !37
  %67 = trunc i8 %66 to i1
  br i1 %67, label %438, label %68

68:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 80, ptr %10) #4
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(80) %10)
          to label %69 unwind label %149

69:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #4
  call void @_ZNSt6vectorI2XYSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #4
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 1, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %70 = load i32, ptr %6, align 4, !tbaa !9
  %71 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 10
  %72 = load i32, ptr %71, align 8, !tbaa !11
  %73 = mul nsw i32 %70, %72
  %74 = load i32, ptr %4, align 4, !tbaa !9
  %75 = add nsw i32 %73, %74
  store i32 %75, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %76 = load i32, ptr %4, align 4, !tbaa !9
  %77 = load i32, ptr %6, align 4, !tbaa !9
  invoke void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %15, i32 noundef %76, i32 noundef %77)
          to label %78 unwind label %153

78:                                               ; preds = %69
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(8) %15)
          to label %79 unwind label %153

79:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  %80 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 3
  %81 = load i32, ptr %14, align 4, !tbaa !9
  %82 = sext i32 %81 to i64
  %83 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %80, i64 noundef %82) #4
  %84 = getelementptr inbounds %class.Particle, ptr %83, i32 0, i32 7
  store i8 1, ptr %84, align 8, !tbaa !24
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushERKi(ptr noundef nonnull align 8 dereferenceable(80) %10, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %85 unwind label %157

85:                                               ; preds = %79
  br label %86

86:                                               ; preds = %390, %85
  %87 = invoke noundef zeroext i1 @_ZNKSt5queueIiSt5dequeIiSaIiEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(80) %10)
          to label %88 unwind label %157

88:                                               ; preds = %86
  %89 = xor i1 %87, true
  br i1 %89, label %90, label %397

90:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %91 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 3
  %92 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5queueIiSt5dequeIiSaIiEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(80) %10)
          to label %93 unwind label %161

93:                                               ; preds = %90
  %94 = load i32, ptr %92, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %91, i64 noundef %95) #4
  store ptr %96, ptr %16, align 8, !tbaa !5
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE3popEv(ptr noundef nonnull align 8 dereferenceable(80) %10)
          to label %97 unwind label %161

97:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %98 = load ptr, ptr %16, align 8, !tbaa !5
  %99 = getelementptr inbounds %class.Particle, ptr %98, i32 0, i32 9
  %100 = load i32, ptr %99, align 8, !tbaa !38
  store i32 %100, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %101 = load ptr, ptr %16, align 8, !tbaa !5
  %102 = getelementptr inbounds %class.Particle, ptr %101, i32 0, i32 10
  %103 = load i32, ptr %102, align 4, !tbaa !39
  store i32 %103, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #4
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #4
  %104 = load i32, ptr %17, align 4, !tbaa !9
  %105 = icmp sgt i32 %104, 0
  br i1 %105, label %106, label %188

106:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %107 = load i32, ptr %17, align 4, !tbaa !9
  %108 = sub nsw i32 %107, 1
  %109 = load i32, ptr %18, align 4, !tbaa !9
  %110 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %41, i32 noundef %108, i32 noundef %109)
          to label %111 unwind label %165

111:                                              ; preds = %106
  store ptr %110, ptr %20, align 8, !tbaa !5
  %112 = load ptr, ptr %20, align 8, !tbaa !5
  %113 = invoke noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %112)
          to label %114 unwind label %165

114:                                              ; preds = %111
  br i1 %113, label %115, label %186

115:                                              ; preds = %114
  %116 = load ptr, ptr %20, align 8, !tbaa !5
  %117 = getelementptr inbounds %class.Particle, ptr %116, i32 0, i32 7
  %118 = load i8, ptr %117, align 8, !tbaa !24, !range !36, !noundef !37
  %119 = trunc i8 %118 to i1
  br i1 %119, label %181, label %120

120:                                              ; preds = %115
  %121 = load i32, ptr %13, align 4, !tbaa !9
  %122 = add nsw i32 %121, 1
  store i32 %122, ptr %13, align 4, !tbaa !9
  %123 = load ptr, ptr %20, align 8, !tbaa !5
  %124 = getelementptr inbounds %class.Particle, ptr %123, i32 0, i32 7
  store i8 1, ptr %124, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %125 = load i32, ptr %17, align 4, !tbaa !9
  %126 = sub nsw i32 %125, 1
  %127 = load i32, ptr %18, align 4, !tbaa !9
  invoke void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %21, i32 noundef %126, i32 noundef %127)
          to label %128 unwind label %169

128:                                              ; preds = %120
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(8) %21)
          to label %129 unwind label %169

129:                                              ; preds = %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %130 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 10
  %131 = load i32, ptr %130, align 8, !tbaa !11
  %132 = load i32, ptr %18, align 4, !tbaa !9
  %133 = mul nsw i32 %131, %132
  %134 = load i32, ptr %17, align 4, !tbaa !9
  %135 = add nsw i32 %133, %134
  %136 = sub nsw i32 %135, 1
  store i32 %136, ptr %22, align 4, !tbaa !9
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %10, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %137 unwind label %173

137:                                              ; preds = %129
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %138 = load i32, ptr %13, align 4, !tbaa !9
  %139 = sub nsw i32 %138, 1
  store i32 %139, ptr %23, align 4, !tbaa !9
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %140 unwind label %177

140:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  %141 = load i32, ptr %13, align 4, !tbaa !9
  %142 = sub nsw i32 %141, 1
  %143 = load ptr, ptr %20, align 8, !tbaa !5
  %144 = getelementptr inbounds %class.Particle, ptr %143, i32 0, i32 11
  store i32 %142, ptr %144, align 8, !tbaa !40
  br label %185

145:                                              ; preds = %59, %55
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %8, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %9, align 4
  br label %442

149:                                              ; preds = %68
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %8, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %9, align 4
  br label %437

153:                                              ; preds = %78, %69
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %8, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  br label %436

157:                                              ; preds = %86, %79
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %8, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %9, align 4
  br label %436

161:                                              ; preds = %93, %90
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %8, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %9, align 4
  br label %396

165:                                              ; preds = %181, %111, %106
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %8, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %9, align 4
  br label %187

169:                                              ; preds = %128, %120
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %8, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  br label %187

173:                                              ; preds = %129
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %8, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  br label %187

177:                                              ; preds = %137
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %8, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %187

181:                                              ; preds = %115
  %182 = load ptr, ptr %20, align 8, !tbaa !5
  %183 = getelementptr inbounds %class.Particle, ptr %182, i32 0, i32 11
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %183)
          to label %184 unwind label %165

184:                                              ; preds = %181
  br label %185

185:                                              ; preds = %184, %140
  br label %186

186:                                              ; preds = %185, %114
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  br label %188

187:                                              ; preds = %177, %173, %169, %165
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  br label %395

188:                                              ; preds = %186, %97
  %189 = load i32, ptr %17, align 4, !tbaa !9
  %190 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 10
  %191 = load i32, ptr %190, align 8, !tbaa !11
  %192 = sub nsw i32 %191, 1
  %193 = icmp slt i32 %189, %192
  br i1 %193, label %194, label %256

194:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %195 = load i32, ptr %17, align 4, !tbaa !9
  %196 = add nsw i32 %195, 1
  %197 = load i32, ptr %18, align 4, !tbaa !9
  %198 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %41, i32 noundef %196, i32 noundef %197)
          to label %199 unwind label %233

199:                                              ; preds = %194
  store ptr %198, ptr %24, align 8, !tbaa !5
  %200 = load ptr, ptr %24, align 8, !tbaa !5
  %201 = invoke noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %200)
          to label %202 unwind label %233

202:                                              ; preds = %199
  br i1 %201, label %203, label %254

203:                                              ; preds = %202
  %204 = load ptr, ptr %24, align 8, !tbaa !5
  %205 = getelementptr inbounds %class.Particle, ptr %204, i32 0, i32 7
  %206 = load i8, ptr %205, align 8, !tbaa !24, !range !36, !noundef !37
  %207 = trunc i8 %206 to i1
  br i1 %207, label %249, label %208

208:                                              ; preds = %203
  %209 = load i32, ptr %13, align 4, !tbaa !9
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %13, align 4, !tbaa !9
  %211 = load ptr, ptr %24, align 8, !tbaa !5
  %212 = getelementptr inbounds %class.Particle, ptr %211, i32 0, i32 7
  store i8 1, ptr %212, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %213 = load i32, ptr %17, align 4, !tbaa !9
  %214 = add nsw i32 %213, 1
  %215 = load i32, ptr %18, align 4, !tbaa !9
  invoke void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %25, i32 noundef %214, i32 noundef %215)
          to label %216 unwind label %237

216:                                              ; preds = %208
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(8) %25)
          to label %217 unwind label %237

217:                                              ; preds = %216
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %218 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 10
  %219 = load i32, ptr %218, align 8, !tbaa !11
  %220 = load i32, ptr %18, align 4, !tbaa !9
  %221 = mul nsw i32 %219, %220
  %222 = load i32, ptr %17, align 4, !tbaa !9
  %223 = add nsw i32 %221, %222
  %224 = add nsw i32 %223, 1
  store i32 %224, ptr %26, align 4, !tbaa !9
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %10, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %225 unwind label %241

225:                                              ; preds = %217
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %226 = load i32, ptr %13, align 4, !tbaa !9
  %227 = sub nsw i32 %226, 1
  store i32 %227, ptr %27, align 4, !tbaa !9
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %228 unwind label %245

228:                                              ; preds = %225
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  %229 = load i32, ptr %13, align 4, !tbaa !9
  %230 = sub nsw i32 %229, 1
  %231 = load ptr, ptr %24, align 8, !tbaa !5
  %232 = getelementptr inbounds %class.Particle, ptr %231, i32 0, i32 11
  store i32 %230, ptr %232, align 8, !tbaa !40
  br label %253

233:                                              ; preds = %249, %199, %194
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %8, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %9, align 4
  br label %255

237:                                              ; preds = %216, %208
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %8, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  br label %255

241:                                              ; preds = %217
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %8, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %255

245:                                              ; preds = %225
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %8, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %255

249:                                              ; preds = %203
  %250 = load ptr, ptr %24, align 8, !tbaa !5
  %251 = getelementptr inbounds %class.Particle, ptr %250, i32 0, i32 11
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %251)
          to label %252 unwind label %233

252:                                              ; preds = %249
  br label %253

253:                                              ; preds = %252, %228
  br label %254

254:                                              ; preds = %253, %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  br label %256

255:                                              ; preds = %245, %241, %237, %233
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  br label %395

256:                                              ; preds = %254, %188
  %257 = load i32, ptr %18, align 4, !tbaa !9
  %258 = icmp sgt i32 %257, 0
  br i1 %258, label %259, label %321

259:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %260 = load i32, ptr %17, align 4, !tbaa !9
  %261 = load i32, ptr %18, align 4, !tbaa !9
  %262 = sub nsw i32 %261, 1
  %263 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %41, i32 noundef %260, i32 noundef %262)
          to label %264 unwind label %298

264:                                              ; preds = %259
  store ptr %263, ptr %28, align 8, !tbaa !5
  %265 = load ptr, ptr %28, align 8, !tbaa !5
  %266 = invoke noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %265)
          to label %267 unwind label %298

267:                                              ; preds = %264
  br i1 %266, label %268, label %319

268:                                              ; preds = %267
  %269 = load ptr, ptr %28, align 8, !tbaa !5
  %270 = getelementptr inbounds %class.Particle, ptr %269, i32 0, i32 7
  %271 = load i8, ptr %270, align 8, !tbaa !24, !range !36, !noundef !37
  %272 = trunc i8 %271 to i1
  br i1 %272, label %314, label %273

273:                                              ; preds = %268
  %274 = load i32, ptr %13, align 4, !tbaa !9
  %275 = add nsw i32 %274, 1
  store i32 %275, ptr %13, align 4, !tbaa !9
  %276 = load ptr, ptr %28, align 8, !tbaa !5
  %277 = getelementptr inbounds %class.Particle, ptr %276, i32 0, i32 7
  store i8 1, ptr %277, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  %278 = load i32, ptr %17, align 4, !tbaa !9
  %279 = load i32, ptr %18, align 4, !tbaa !9
  %280 = sub nsw i32 %279, 1
  invoke void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %29, i32 noundef %278, i32 noundef %280)
          to label %281 unwind label %302

281:                                              ; preds = %273
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(8) %29)
          to label %282 unwind label %302

282:                                              ; preds = %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %283 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 10
  %284 = load i32, ptr %283, align 8, !tbaa !11
  %285 = load i32, ptr %18, align 4, !tbaa !9
  %286 = sub nsw i32 %285, 1
  %287 = mul nsw i32 %284, %286
  %288 = load i32, ptr %17, align 4, !tbaa !9
  %289 = add nsw i32 %287, %288
  store i32 %289, ptr %30, align 4, !tbaa !9
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %10, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %290 unwind label %306

290:                                              ; preds = %282
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %291 = load i32, ptr %13, align 4, !tbaa !9
  %292 = sub nsw i32 %291, 1
  store i32 %292, ptr %31, align 4, !tbaa !9
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %31)
          to label %293 unwind label %310

293:                                              ; preds = %290
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  %294 = load i32, ptr %13, align 4, !tbaa !9
  %295 = sub nsw i32 %294, 1
  %296 = load ptr, ptr %28, align 8, !tbaa !5
  %297 = getelementptr inbounds %class.Particle, ptr %296, i32 0, i32 11
  store i32 %295, ptr %297, align 8, !tbaa !40
  br label %318

298:                                              ; preds = %314, %264, %259
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %8, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %9, align 4
  br label %320

302:                                              ; preds = %281, %273
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %8, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  br label %320

306:                                              ; preds = %282
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %8, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %320

310:                                              ; preds = %290
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %8, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %320

314:                                              ; preds = %268
  %315 = load ptr, ptr %28, align 8, !tbaa !5
  %316 = getelementptr inbounds %class.Particle, ptr %315, i32 0, i32 11
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %316)
          to label %317 unwind label %298

317:                                              ; preds = %314
  br label %318

318:                                              ; preds = %317, %293
  br label %319

319:                                              ; preds = %318, %267
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  br label %321

320:                                              ; preds = %310, %306, %302, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  br label %395

321:                                              ; preds = %319, %256
  %322 = load i32, ptr %18, align 4, !tbaa !9
  %323 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 11
  %324 = load i32, ptr %323, align 4, !tbaa !23
  %325 = sub nsw i32 %324, 1
  %326 = icmp slt i32 %322, %325
  br i1 %326, label %327, label %389

327:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  %328 = load i32, ptr %17, align 4, !tbaa !9
  %329 = load i32, ptr %18, align 4, !tbaa !9
  %330 = add nsw i32 %329, 1
  %331 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %41, i32 noundef %328, i32 noundef %330)
          to label %332 unwind label %366

332:                                              ; preds = %327
  store ptr %331, ptr %32, align 8, !tbaa !5
  %333 = load ptr, ptr %32, align 8, !tbaa !5
  %334 = invoke noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %333)
          to label %335 unwind label %366

335:                                              ; preds = %332
  br i1 %334, label %336, label %387

336:                                              ; preds = %335
  %337 = load ptr, ptr %32, align 8, !tbaa !5
  %338 = getelementptr inbounds %class.Particle, ptr %337, i32 0, i32 7
  %339 = load i8, ptr %338, align 8, !tbaa !24, !range !36, !noundef !37
  %340 = trunc i8 %339 to i1
  br i1 %340, label %382, label %341

341:                                              ; preds = %336
  %342 = load i32, ptr %13, align 4, !tbaa !9
  %343 = add nsw i32 %342, 1
  store i32 %343, ptr %13, align 4, !tbaa !9
  %344 = load ptr, ptr %32, align 8, !tbaa !5
  %345 = getelementptr inbounds %class.Particle, ptr %344, i32 0, i32 7
  store i8 1, ptr %345, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %346 = load i32, ptr %17, align 4, !tbaa !9
  %347 = load i32, ptr %18, align 4, !tbaa !9
  %348 = add nsw i32 %347, 1
  invoke void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %33, i32 noundef %346, i32 noundef %348)
          to label %349 unwind label %370

349:                                              ; preds = %341
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 4 dereferenceable(8) %33)
          to label %350 unwind label %370

350:                                              ; preds = %349
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %351 = getelementptr inbounds %class.Cloth, ptr %41, i32 0, i32 10
  %352 = load i32, ptr %351, align 8, !tbaa !11
  %353 = load i32, ptr %18, align 4, !tbaa !9
  %354 = add nsw i32 %353, 1
  %355 = mul nsw i32 %352, %354
  %356 = load i32, ptr %17, align 4, !tbaa !9
  %357 = add nsw i32 %355, %356
  store i32 %357, ptr %34, align 4, !tbaa !9
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %10, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %358 unwind label %374

358:                                              ; preds = %350
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %359 = load i32, ptr %13, align 4, !tbaa !9
  %360 = sub nsw i32 %359, 1
  store i32 %360, ptr %35, align 4, !tbaa !9
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %361 unwind label %378

361:                                              ; preds = %358
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  %362 = load i32, ptr %13, align 4, !tbaa !9
  %363 = sub nsw i32 %362, 1
  %364 = load ptr, ptr %32, align 8, !tbaa !5
  %365 = getelementptr inbounds %class.Particle, ptr %364, i32 0, i32 11
  store i32 %363, ptr %365, align 8, !tbaa !40
  br label %386

366:                                              ; preds = %382, %332, %327
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %8, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %9, align 4
  br label %388

370:                                              ; preds = %349, %341
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %8, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  br label %388

374:                                              ; preds = %350
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %8, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %388

378:                                              ; preds = %358
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %8, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %388

382:                                              ; preds = %336
  %383 = load ptr, ptr %32, align 8, !tbaa !5
  %384 = getelementptr inbounds %class.Particle, ptr %383, i32 0, i32 11
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 4 dereferenceable(4) %384)
          to label %385 unwind label %366

385:                                              ; preds = %382
  br label %386

386:                                              ; preds = %385, %361
  br label %387

387:                                              ; preds = %386, %335
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  br label %389

388:                                              ; preds = %378, %374, %370, %366
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  br label %395

389:                                              ; preds = %387, %321
  invoke void @_ZNSt6vectorIS_IiSaIiEESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %390 unwind label %391

390:                                              ; preds = %389
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  br label %86, !llvm.loop !41

391:                                              ; preds = %389
  %392 = landingpad { ptr, i32 }
          cleanup
  %393 = extractvalue { ptr, i32 } %392, 0
  store ptr %393, ptr %8, align 8
  %394 = extractvalue { ptr, i32 } %392, 1
  store i32 %394, ptr %9, align 4
  br label %395

395:                                              ; preds = %391, %388, %320, %255, %187
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %396

396:                                              ; preds = %395, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  br label %436

397:                                              ; preds = %88
  %398 = load i32, ptr %13, align 4, !tbaa !9
  %399 = icmp sgt i32 %398, 50
  br i1 %399, label %400, label %435

400:                                              ; preds = %397
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #4
  invoke void @_ZNSt6vectorI2XYSaIS0_EEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %401 unwind label %407

401:                                              ; preds = %400
  invoke void @_ZN5Cloth18findUnmovablePointESt6vectorI2XYSaIS1_EE(ptr dead_on_unwind writable sret(%"class.std::vector.10") align 8 %36, ptr noundef nonnull align 8 dereferenceable(128) %41, ptr noundef %37)
          to label %402 unwind label %411

402:                                              ; preds = %401
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #4
  invoke void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %38, ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %403 unwind label %415

403:                                              ; preds = %402
  invoke void @_ZNSt6vectorI2XYSaIS0_EEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %39, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %404 unwind label %419

404:                                              ; preds = %403
  invoke void @_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 8 dereferenceable(24) %12)
          to label %405 unwind label %423

405:                                              ; preds = %404
  invoke void @_ZN5Cloth21handle_slop_connectedESt6vectorIiSaIiEES0_I2XYSaIS3_EES0_IS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(128) %41, ptr noundef %38, ptr noundef %39, ptr noundef %40)
          to label %406 unwind label %427

406:                                              ; preds = %405
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #4
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #4
  br label %435

407:                                              ; preds = %400
  %408 = landingpad { ptr, i32 }
          cleanup
  %409 = extractvalue { ptr, i32 } %408, 0
  store ptr %409, ptr %8, align 8
  %410 = extractvalue { ptr, i32 } %408, 1
  store i32 %410, ptr %9, align 4
  br label %434

411:                                              ; preds = %401
  %412 = landingpad { ptr, i32 }
          cleanup
  %413 = extractvalue { ptr, i32 } %412, 0
  store ptr %413, ptr %8, align 8
  %414 = extractvalue { ptr, i32 } %412, 1
  store i32 %414, ptr %9, align 4
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #4
  br label %434

415:                                              ; preds = %402
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %8, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %9, align 4
  br label %433

419:                                              ; preds = %403
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %8, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %9, align 4
  br label %432

423:                                              ; preds = %404
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %8, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %9, align 4
  br label %431

427:                                              ; preds = %405
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %8, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %9, align 4
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #4
  br label %431

431:                                              ; preds = %427, %423
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #4
  br label %432

432:                                              ; preds = %431, %419
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #4
  br label %433

433:                                              ; preds = %432, %415
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #4
  br label %434

434:                                              ; preds = %433, %411, %407
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #4
  br label %436

435:                                              ; preds = %406, %397
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #4
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #4
  call void @_ZNSt5queueIiSt5dequeIiSaIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(80) %10) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %10) #4
  br label %438

436:                                              ; preds = %434, %396, %157, %153
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #4
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #4
  call void @_ZNSt5queueIiSt5dequeIiSaIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(80) %10) #4
  br label %437

437:                                              ; preds = %436, %149
  call void @llvm.lifetime.end.p0(i64 80, ptr %10) #4
  br label %442

438:                                              ; preds = %435, %63, %62
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  br label %439

439:                                              ; preds = %438
  %440 = load i32, ptr %6, align 4, !tbaa !9
  %441 = add nsw i32 %440, 1
  store i32 %441, ptr %6, align 4, !tbaa !9
  br label %49, !llvm.loop !43

442:                                              ; preds = %437, %145
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  call void @_ZNSt6vectorI8ParticleSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #4
  br label %448

443:                                              ; preds = %54
  br label %444

444:                                              ; preds = %443
  %445 = load i32, ptr %4, align 4, !tbaa !9
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %4, align 4, !tbaa !9
  br label %42, !llvm.loop !44

447:                                              ; preds = %47
  call void @_ZNSt6vectorI8ParticleSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %3) #4
  ret void

448:                                              ; preds = %442
  %449 = load ptr, ptr %8, align 8
  %450 = load i32, ptr %9, align 4
  %451 = insertvalue { ptr, i32 } poison, ptr %449, 0
  %452 = insertvalue { ptr, i32 } %451, i32 %450, 1
  resume { ptr, i32 } %452
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, i32 noundef) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt5queueIiSt5dequeIiSaIiEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(80)) #0 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Cloth18findUnmovablePointESt6vectorI2XYSaIS1_EE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.10") align 8, ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) #2 align 2

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

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

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

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

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

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

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { 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, !10, i64 120}
!12 = !{!"_ZTS5Cloth", !10, i64 0, !10, i64 4, !13, i64 8, !14, i64 16, !13, i64 40, !13, i64 48, !18, i64 56, !13, i64 80, !13, i64 88, !19, i64 96, !10, i64 120, !10, i64 124}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTSSt6vectorI8ParticleSaIS0_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseI8ParticleSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseI8ParticleSaIS0_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI8ParticleSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!"_ZTS4Vec3", !7, i64 0}
!19 = !{!"_ZTSSt6vectorIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!12, !10, i64 124}
!24 = !{!25, !26, i64 120}
!25 = !{!"_ZTS8Particle", !26, i64 0, !13, i64 8, !18, i64 16, !18, i64 40, !13, i64 64, !18, i64 72, !18, i64 96, !26, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !27, i64 144, !31, i64 168, !35, i64 192, !13, i64 200, !13, i64 208}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTSSt6vectorIP8ParticleSaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIP8ParticleSaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTSSt6vectorIiSaIiEE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"long", !7, i64 0}
!36 = !{i8 0, i8 2}
!37 = !{}
!38 = !{!25, !10, i64 128}
!39 = !{!25, !10, i64 132}
!40 = !{!25, !10, i64 136}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = distinct !{!43, !42}
!44 = distinct !{!44, !42}


; 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" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl" }
%"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl" = type { %"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Particle, std::allocator<Particle>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::queue" = type { %"class.std::deque" }
%"class.std::deque" = type { %"class.std::_Deque_base" }
%"class.std::_Deque_base" = type { %"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl" }
%"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl" = type { %"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl_data" }
%"struct.std::_Deque_base<int, std::allocator<int>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator", %"struct.std::_Deque_iterator" }
%"struct.std::_Deque_iterator" = type { ptr, ptr, ptr, ptr }
%"class.std::vector.15" = type { %"struct.std::_Vector_base.16" }
%"struct.std::_Vector_base.16" = type { %"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl" }
%"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl" = type { %"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl_data" }
%"struct.std::_Vector_base<XY, std::allocator<XY>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<int>, std::allocator<std::vector<int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.XY = type { i32, i32 }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128), i32 noundef, i32 noundef) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5Cloth13movableFilterEv(ptr noundef nonnull align 8 dereferenceable(128) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::vector", align 8
  %3 = alloca %"class.std::queue", align 8
  %4 = alloca %"class.std::vector.15", align 8
  %5 = alloca %"class.std::vector.20", align 8
  %6 = alloca i32, align 4
  %7 = alloca %struct.XY, align 4
  %8 = alloca %"class.std::vector.10", align 8
  %9 = alloca %struct.XY, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %struct.XY, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %struct.XY, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca %struct.XY, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca %"class.std::vector.10", align 8
  %22 = alloca %"class.std::vector.15", align 8
  %23 = alloca %"class.std::vector.10", align 8
  %24 = alloca %"class.std::vector.15", align 8
  %25 = alloca %"class.std::vector.20", align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %2) #4
  call void @_ZNSt6vectorI8ParticleSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  %26 = getelementptr inbounds i8, ptr %0, i64 120
  %27 = load i32, ptr %26, align 8, !tbaa !5
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.preheader119.lr.ph, label %._crit_edge142

.preheader119.lr.ph:                              ; preds = %1
  %29 = getelementptr inbounds i8, ptr %0, i64 124
  %30 = getelementptr inbounds i8, ptr %0, i64 16
  %31 = load i32, ptr %29, align 4, !tbaa !21
  %32 = icmp sgt i32 %31, 0
  br i1 %32, label %.preheader119, label %._crit_edge142

.preheader119:                                    ; preds = %.preheader119.lr.ph, %._crit_edge140
  %33 = phi i32 [ %36, %._crit_edge140 ], [ %27, %.preheader119.lr.ph ]
  %34 = phi i32 [ %37, %._crit_edge140 ], [ %31, %.preheader119.lr.ph ]
  %.0141 = phi i32 [ %38, %._crit_edge140 ], [ 0, %.preheader119.lr.ph ]
  %35 = icmp sgt i32 %34, 0
  br i1 %35, label %.lr.ph139, label %._crit_edge140

._crit_edge142:                                   ; preds = %._crit_edge140, %.preheader119.lr.ph, %1
  call void @_ZNSt6vectorI8ParticleSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #4
  ret void

._crit_edge140.loopexit:                          ; preds = %222
  %.pre = load i32, ptr %26, align 8, !tbaa !5
  br label %._crit_edge140

._crit_edge140:                                   ; preds = %._crit_edge140.loopexit, %.preheader119
  %36 = phi i32 [ %.pre, %._crit_edge140.loopexit ], [ %33, %.preheader119 ]
  %37 = phi i32 [ %224, %._crit_edge140.loopexit ], [ %34, %.preheader119 ]
  %38 = add nuw nsw i32 %.0141, 1
  %39 = icmp slt i32 %38, %36
  br i1 %39, label %.preheader119, label %._crit_edge142, !llvm.loop !22

.lr.ph139:                                        ; preds = %.preheader119, %222
  %.077138 = phi i32 [ %223, %222 ], [ 0, %.preheader119 ]
  %40 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.0141, i32 noundef %.077138)
  %41 = call noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %40)
  br i1 %41, label %42, label %222

42:                                               ; preds = %.lr.ph139
  %43 = getelementptr inbounds i8, ptr %40, i64 120
  %44 = load i8, ptr %43, align 8, !tbaa !25, !range !37, !noundef !38
  %45 = trunc nuw i8 %44 to i1
  br i1 %45, label %222, label %46

46:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %3) #4
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(80) %3)
          to label %47 unwind label %83

47:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #4
  call void @_ZNSt6vectorI2XYSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #4
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #4
  %48 = load i32, ptr %26, align 8, !tbaa !5
  %49 = mul nsw i32 %48, %.077138
  %50 = add nsw i32 %49, %.0141
  store i32 %50, ptr %6, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  call void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %7, i32 noundef %.0141, i32 noundef %.077138)
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(8) %7)
          to label %51 unwind label %85

51:                                               ; preds = %47
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  %52 = load i32, ptr %6, align 4, !tbaa !39
  %53 = sext i32 %52 to i64
  %54 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %30, i64 noundef %53) #4
  %55 = getelementptr inbounds i8, ptr %54, i64 120
  store i8 1, ptr %55, align 8, !tbaa !25
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushERKi(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %.preheader unwind label %87

.preheader:                                       ; preds = %51
  %56 = call noundef zeroext i1 @_ZNKSt5queueIiSt5dequeIiSaIiEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(80) %3)
  br i1 %56, label %._crit_edge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %191
  %.090137 = phi i32 [ %.898, %191 ], [ 1, %.preheader ]
  %57 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt5queueIiSt5dequeIiSaIiEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(80) %3)
  %58 = load i32, ptr %57, align 4, !tbaa !39
  %59 = sext i32 %58 to i64
  %60 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %30, i64 noundef %59) #4
  call void @_ZNSt5queueIiSt5dequeIiSaIiEEE3popEv(ptr noundef nonnull align 8 dereferenceable(80) %3)
  %61 = getelementptr inbounds i8, ptr %60, i64 128
  %62 = load i32, ptr %61, align 8, !tbaa !40
  %63 = getelementptr inbounds i8, ptr %60, i64 132
  %64 = load i32, ptr %63, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #4
  call void @_ZNSt6vectorIiSaIiEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  %65 = icmp sgt i32 %62, 0
  br i1 %65, label %66, label %99

66:                                               ; preds = %.lr.ph
  %67 = add nsw i32 %62, -1
  %68 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %67, i32 noundef %64)
  %69 = call noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %68)
  br i1 %69, label %70, label %99

70:                                               ; preds = %66
  %71 = getelementptr inbounds i8, ptr %68, i64 120
  %72 = load i8, ptr %71, align 8, !tbaa !25, !range !37, !noundef !38
  %73 = trunc nuw i8 %72 to i1
  br i1 %73, label %97, label %74

74:                                               ; preds = %70
  %75 = add nsw i32 %.090137, 1
  store i8 1, ptr %71, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  call void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %9, i32 noundef %67, i32 noundef %64)
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(8) %9)
          to label %76 unwind label %91

76:                                               ; preds = %74
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  %77 = load i32, ptr %26, align 8, !tbaa !5
  %78 = mul nsw i32 %77, %64
  %79 = add i32 %67, %78
  store i32 %79, ptr %10, align 4, !tbaa !39
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 4 dereferenceable(4) %10)
          to label %80 unwind label %93

80:                                               ; preds = %76
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #4
  store i32 %.090137, ptr %11, align 4, !tbaa !39
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %11)
          to label %81 unwind label %95

81:                                               ; preds = %80
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  %82 = getelementptr inbounds i8, ptr %68, i64 136
  store i32 %.090137, ptr %82, align 8, !tbaa !42
  br label %99

83:                                               ; preds = %46
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %221

85:                                               ; preds = %47
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  br label %220

87:                                               ; preds = %51
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %220

89:                                               ; preds = %97
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %195

91:                                               ; preds = %74
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  br label %195

93:                                               ; preds = %76
  %94 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  br label %195

95:                                               ; preds = %80
  %96 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  br label %195

97:                                               ; preds = %70
  %98 = getelementptr inbounds i8, ptr %68, i64 136
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %98)
          to label %99 unwind label %89

99:                                               ; preds = %66, %97, %81, %.lr.ph
  %.292 = phi i32 [ %.090137, %.lr.ph ], [ %.090137, %97 ], [ %75, %81 ], [ %.090137, %66 ]
  %100 = load i32, ptr %26, align 8, !tbaa !5
  %101 = add nsw i32 %100, -1
  %102 = icmp slt i32 %62, %101
  br i1 %102, label %103, label %130

103:                                              ; preds = %99
  %104 = add nsw i32 %62, 1
  %105 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %104, i32 noundef %64)
  %106 = call noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %105)
  br i1 %106, label %107, label %130

107:                                              ; preds = %103
  %108 = getelementptr inbounds i8, ptr %105, i64 120
  %109 = load i8, ptr %108, align 8, !tbaa !25, !range !37, !noundef !38
  %110 = trunc nuw i8 %109 to i1
  br i1 %110, label %128, label %111

111:                                              ; preds = %107
  %112 = add nsw i32 %.292, 1
  store i8 1, ptr %108, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #4
  call void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %12, i32 noundef %104, i32 noundef %64)
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(8) %12)
          to label %113 unwind label %122

113:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #4
  %114 = load i32, ptr %26, align 8, !tbaa !5
  %115 = mul nsw i32 %114, %64
  %116 = add i32 %104, %115
  store i32 %116, ptr %13, align 4, !tbaa !39
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %117 unwind label %124

117:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #4
  store i32 %.292, ptr %14, align 4, !tbaa !39
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %118 unwind label %126

118:                                              ; preds = %117
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #4
  %119 = getelementptr inbounds i8, ptr %105, i64 136
  store i32 %.292, ptr %119, align 8, !tbaa !42
  br label %130

120:                                              ; preds = %128
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %195

122:                                              ; preds = %111
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  br label %195

124:                                              ; preds = %113
  %125 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #4
  br label %195

126:                                              ; preds = %117
  %127 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #4
  br label %195

128:                                              ; preds = %107
  %129 = getelementptr inbounds i8, ptr %105, i64 136
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %129)
          to label %130 unwind label %120

130:                                              ; preds = %103, %128, %118, %99
  %.494 = phi i32 [ %.292, %99 ], [ %.292, %128 ], [ %112, %118 ], [ %.292, %103 ]
  %131 = icmp sgt i32 %64, 0
  br i1 %131, label %132, label %159

132:                                              ; preds = %130
  %133 = add nsw i32 %64, -1
  %134 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %62, i32 noundef %133)
  %135 = call noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %134)
  br i1 %135, label %136, label %159

136:                                              ; preds = %132
  %137 = getelementptr inbounds i8, ptr %134, i64 120
  %138 = load i8, ptr %137, align 8, !tbaa !25, !range !37, !noundef !38
  %139 = trunc nuw i8 %138 to i1
  br i1 %139, label %157, label %140

140:                                              ; preds = %136
  %141 = add nsw i32 %.494, 1
  store i8 1, ptr %137, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  call void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %15, i32 noundef %62, i32 noundef %133)
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(8) %15)
          to label %142 unwind label %151

142:                                              ; preds = %140
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #4
  %143 = load i32, ptr %26, align 8, !tbaa !5
  %144 = mul nsw i32 %143, %133
  %145 = add nsw i32 %144, %62
  store i32 %145, ptr %16, align 4, !tbaa !39
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %146 unwind label %153

146:                                              ; preds = %142
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #4
  store i32 %.494, ptr %17, align 4, !tbaa !39
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %147 unwind label %155

147:                                              ; preds = %146
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #4
  %148 = getelementptr inbounds i8, ptr %134, i64 136
  store i32 %.494, ptr %148, align 8, !tbaa !42
  br label %159

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

151:                                              ; preds = %140
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  br label %195

153:                                              ; preds = %142
  %154 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #4
  br label %195

155:                                              ; preds = %146
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #4
  br label %195

157:                                              ; preds = %136
  %158 = getelementptr inbounds i8, ptr %134, i64 136
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %158)
          to label %159 unwind label %149

159:                                              ; preds = %132, %157, %147, %130
  %.696 = phi i32 [ %.494, %130 ], [ %.494, %157 ], [ %141, %147 ], [ %.494, %132 ]
  %160 = load i32, ptr %29, align 4, !tbaa !21
  %161 = add nsw i32 %160, -1
  %162 = icmp slt i32 %64, %161
  br i1 %162, label %163, label %190

163:                                              ; preds = %159
  %164 = add nsw i32 %64, 1
  %165 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %62, i32 noundef %164)
  %166 = call noundef zeroext i1 @_ZN8Particle9isMovableEv(ptr noundef nonnull align 8 dereferenceable(216) %165)
  br i1 %166, label %167, label %190

167:                                              ; preds = %163
  %168 = getelementptr inbounds i8, ptr %165, i64 120
  %169 = load i8, ptr %168, align 8, !tbaa !25, !range !37, !noundef !38
  %170 = trunc nuw i8 %169 to i1
  br i1 %170, label %188, label %171

171:                                              ; preds = %167
  %172 = add nsw i32 %.696, 1
  store i8 1, ptr %168, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  call void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8) %18, i32 noundef %62, i32 noundef %164)
  invoke void @_ZNSt6vectorI2XYSaIS0_EE9push_backEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 4 dereferenceable(8) %18)
          to label %173 unwind label %182

173:                                              ; preds = %171
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #4
  %174 = load i32, ptr %26, align 8, !tbaa !5
  %175 = mul nsw i32 %174, %164
  %176 = add nsw i32 %175, %62
  store i32 %176, ptr %19, align 4, !tbaa !39
  invoke void @_ZNSt5queueIiSt5dequeIiSaIiEEE4pushEOi(ptr noundef nonnull align 8 dereferenceable(80) %3, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %177 unwind label %184

177:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #4
  store i32 %.696, ptr %20, align 4, !tbaa !39
  invoke void @_ZNSt6vectorIiSaIiEE9push_backEOi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %178 unwind label %186

178:                                              ; preds = %177
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #4
  %179 = getelementptr inbounds i8, ptr %165, i64 136
  store i32 %.696, ptr %179, align 8, !tbaa !42
  br label %190

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

182:                                              ; preds = %171
  %183 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  br label %195

184:                                              ; preds = %173
  %185 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #4
  br label %195

186:                                              ; preds = %177
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #4
  br label %195

188:                                              ; preds = %167
  %189 = getelementptr inbounds i8, ptr %165, i64 136
  invoke void @_ZNSt6vectorIiSaIiEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 4 dereferenceable(4) %189)
          to label %190 unwind label %180

190:                                              ; preds = %163, %188, %178, %159
  %.898 = phi i32 [ %.696, %159 ], [ %.696, %188 ], [ %172, %178 ], [ %.696, %163 ]
  invoke void @_ZNSt6vectorIS_IiSaIiEESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %191 unwind label %193

191:                                              ; preds = %190
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #4
  %192 = call noundef zeroext i1 @_ZNKSt5queueIiSt5dequeIiSaIiEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(80) %3)
  br i1 %192, label %._crit_edge, label %.lr.ph, !llvm.loop !43

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

195:                                              ; preds = %180, %182, %184, %186, %149, %151, %153, %155, %120, %122, %124, %126, %89, %91, %93, %95, %193
  %.pn115 = phi { ptr, i32 } [ %194, %193 ], [ %90, %89 ], [ %96, %95 ], [ %94, %93 ], [ %92, %91 ], [ %121, %120 ], [ %127, %126 ], [ %125, %124 ], [ %123, %122 ], [ %150, %149 ], [ %156, %155 ], [ %154, %153 ], [ %152, %151 ], [ %181, %180 ], [ %187, %186 ], [ %185, %184 ], [ %183, %182 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #4
  br label %220

._crit_edge:                                      ; preds = %191
  %196 = icmp sgt i32 %.898, 50
  br i1 %196, label %197, label %._crit_edge.thread

197:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %21) #4
  invoke void @_ZNSt6vectorI2XYSaIS0_EEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %198 unwind label %204

198:                                              ; preds = %197
  invoke void @_ZN5Cloth18findUnmovablePointESt6vectorI2XYSaIS1_EE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.10") align 8 %21, ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef nonnull %22)
          to label %199 unwind label %206

199:                                              ; preds = %198
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #4
  invoke void @_ZNSt6vectorIiSaIiEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %200 unwind label %208

200:                                              ; preds = %199
  invoke void @_ZNSt6vectorI2XYSaIS0_EEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %201 unwind label %210

201:                                              ; preds = %200
  invoke void @_ZNSt6vectorIS_IiSaIiEESaIS1_EEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %202 unwind label %212

202:                                              ; preds = %201
  invoke void @_ZN5Cloth21handle_slop_connectedESt6vectorIiSaIiEES0_I2XYSaIS3_EES0_IS2_SaIS2_EE(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %25)
          to label %203 unwind label %214

203:                                              ; preds = %202
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #4
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #4
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #4
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #4
  br label %._crit_edge.thread

204:                                              ; preds = %197
  %205 = landingpad { ptr, i32 }
          cleanup
  br label %219

206:                                              ; preds = %198
  %207 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #4
  br label %219

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

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

212:                                              ; preds = %201
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %216

214:                                              ; preds = %202
  %215 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #4
  br label %216

216:                                              ; preds = %214, %212
  %.pn = phi { ptr, i32 } [ %215, %214 ], [ %213, %212 ]
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #4
  br label %217

217:                                              ; preds = %216, %210
  %.pn.pn = phi { ptr, i32 } [ %.pn, %216 ], [ %211, %210 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #4
  br label %218

218:                                              ; preds = %217, %208
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %217 ], [ %209, %208 ]
  call void @_ZNSt6vectorIiSaIiEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #4
  br label %219

219:                                              ; preds = %218, %206, %204
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %218 ], [ %207, %206 ], [ %205, %204 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %21) #4
  br label %220

._crit_edge.thread:                               ; preds = %.preheader, %203, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #4
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #4
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #4
  call void @_ZNSt5queueIiSt5dequeIiSaIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(80) %3) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %3) #4
  br label %222

220:                                              ; preds = %219, %195, %87, %85
  %.pn115.pn = phi { ptr, i32 } [ %.pn115, %195 ], [ %.pn.pn.pn.pn, %219 ], [ %88, %87 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #4
  call void @_ZNSt6vectorIS_IiSaIiEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #4
  call void @_ZNSt6vectorI2XYSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #4
  call void @_ZNSt5queueIiSt5dequeIiSaIiEEED2Ev(ptr noundef nonnull align 8 dereferenceable(80) %3) #4
  br label %221

221:                                              ; preds = %220, %83
  %.pn115.pn.pn = phi { ptr, i32 } [ %.pn115.pn, %220 ], [ %84, %83 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %3) #4
  call void @_ZNSt6vectorI8ParticleSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %2) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %2) #4
  resume { ptr, i32 } %.pn115.pn.pn

222:                                              ; preds = %._crit_edge.thread, %42, %.lr.ph139
  %223 = add nuw nsw i32 %.077138, 1
  %224 = load i32, ptr %29, align 4, !tbaa !21
  %225 = icmp slt i32 %223, %224
  br i1 %225, label %.lr.ph139, label %._crit_edge140.loopexit, !llvm.loop !44
}

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN2XYC2Eii(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef, i32 noundef) unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt5queueIiSt5dequeIiSaIiEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #0 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Cloth18findUnmovablePointESt6vectorI2XYSaIS1_EE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.10") align 8, ptr noundef nonnull align 8 dereferenceable(128), ptr noundef) local_unnamed_addr #2 align 2

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

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

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

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

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

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { 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, !7, i64 120}
!6 = !{!"_ZTS5Cloth", !7, i64 0, !7, i64 4, !10, i64 8, !11, i64 16, !10, i64 40, !10, i64 48, !16, i64 56, !10, i64 80, !10, i64 88, !17, i64 96, !7, i64 120, !7, i64 124}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"_ZTSSt6vectorI8ParticleSaIS0_EE", !12, i64 0}
!12 = !{!"_ZTSSt12_Vector_baseI8ParticleSaIS0_EE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseI8ParticleSaIS0_EE12_Vector_implE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseI8ParticleSaIS0_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!15 = !{!"any pointer", !8, i64 0}
!16 = !{!"_ZTS4Vec3", !8, i64 0}
!17 = !{!"_ZTSSt6vectorIdSaIdEE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!21 = !{!6, !7, i64 124}
!22 = distinct !{!22, !23, !24}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!"llvm.loop.unswitch.partial.disable"}
!25 = !{!26, !27, i64 120}
!26 = !{!"_ZTS8Particle", !27, i64 0, !10, i64 8, !16, i64 16, !16, i64 40, !10, i64 64, !16, i64 72, !16, i64 96, !27, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !28, i64 144, !32, i64 168, !36, i64 192, !10, i64 200, !10, i64 208}
!27 = !{!"bool", !8, i64 0}
!28 = !{!"_ZTSSt6vectorIP8ParticleSaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseIP8ParticleSaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!32 = !{!"_ZTSSt6vectorIiSaIiEE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!36 = !{!"long", !8, i64 0}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!7, !7, i64 0}
!40 = !{!26, !7, i64 128}
!41 = !{!26, !7, i64 132}
!42 = !{!26, !7, i64 136}
!43 = distinct !{!43, !23}
!44 = distinct !{!44, !23}


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