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

; 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.Vec3 = type { [3 x double] }
%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 }
%"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.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::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 }

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5ClothC2ERK4Vec3iiddddid(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef %2, i32 noundef %3, double noundef %4, double noundef %5, double noundef %6, double noundef %7, i32 noundef %8, double noundef %9) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca i32, align 4
  %20 = alloca double, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %class.Vec3, align 8
  %28 = alloca %class.Particle, align 8
  %29 = alloca %class.Vec3, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store i32 %2, ptr %13, align 4, !tbaa !9
  store i32 %3, ptr %14, align 4, !tbaa !9
  store double %4, ptr %15, align 8, !tbaa !11
  store double %5, ptr %16, align 8, !tbaa !11
  store double %6, ptr %17, align 8, !tbaa !11
  store double %7, ptr %18, align 8, !tbaa !11
  store i32 %8, ptr %19, align 4, !tbaa !9
  store double %9, ptr %20, align 8, !tbaa !11
  %34 = load ptr, ptr %11, align 8
  %35 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 0
  %36 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %36, ptr %35, align 8, !tbaa !13
  %37 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 2
  %38 = load double, ptr %20, align 8, !tbaa !11
  store double %38, ptr %37, align 8, !tbaa !24
  %39 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 3
  call void @_ZNSt6vectorI8ParticleSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #6
  %40 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 4
  %41 = load double, ptr %17, align 8, !tbaa !11
  store double %41, ptr %40, align 8, !tbaa !25
  %42 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 5
  %43 = load double, ptr %18, align 8, !tbaa !11
  store double %43, ptr %42, align 8, !tbaa !26
  %44 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 6
  %45 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %44, ptr align 8 %45, i64 24, i1 false), !tbaa.struct !27
  %46 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 7
  %47 = load double, ptr %15, align 8, !tbaa !11
  store double %47, ptr %46, align 8, !tbaa !29
  %48 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 8
  %49 = load double, ptr %16, align 8, !tbaa !11
  store double %49, ptr %48, align 8, !tbaa !30
  %50 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 9
  call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #6
  %51 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %52 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %52, ptr %51, align 8, !tbaa !31
  %53 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %54 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %54, ptr %53, align 4, !tbaa !32
  %55 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 3
  %56 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %57 = load i32, ptr %56, align 8, !tbaa !31
  %58 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %59 = load i32, ptr %58, align 4, !tbaa !32
  %60 = mul nsw i32 %57, %59
  %61 = sext i32 %60 to i64
  invoke void @_ZNSt6vectorI8ParticleSaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %55, i64 noundef %61)
          to label %62 unwind label %72

62:                                               ; preds = %10
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %63 = load double, ptr %20, align 8, !tbaa !11
  %64 = load double, ptr %20, align 8, !tbaa !11
  %65 = fmul double %63, %64
  store double %65, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %66

66:                                               ; preds = %154, %62
  %67 = load i32, ptr %24, align 4, !tbaa !9
  %68 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %69 = load i32, ptr %68, align 8, !tbaa !31
  %70 = icmp slt i32 %67, %69
  br i1 %70, label %76, label %71

71:                                               ; preds = %66
  store i32 2, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %157

72:                                               ; preds = %10
  %73 = landingpad { ptr, i32 }
          cleanup
  %74 = extractvalue { ptr, i32 } %73, 0
  store ptr %74, ptr %21, align 8
  %75 = extractvalue { ptr, i32 } %73, 1
  store i32 %75, ptr %22, align 4
  br label %375

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

77:                                               ; preds = %141, %76
  %78 = load i32, ptr %26, align 4, !tbaa !9
  %79 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %80 = load i32, ptr %79, align 4, !tbaa !32
  %81 = icmp slt i32 %78, %80
  br i1 %81, label %83, label %82

82:                                               ; preds = %77
  store i32 5, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %153

83:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 24, ptr %27) #6
  %84 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 6
  %85 = getelementptr inbounds %class.Vec3, ptr %84, i32 0, i32 0
  %86 = getelementptr inbounds [3 x double], ptr %85, i64 0, i64 0
  %87 = load double, ptr %86, align 8, !tbaa !11
  %88 = load i32, ptr %24, align 4, !tbaa !9
  %89 = sitofp i32 %88 to double
  %90 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 7
  %91 = load double, ptr %90, align 8, !tbaa !29
  %92 = call double @llvm.fmuladd.f64(double %89, double %91, double %87)
  %93 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 6
  %94 = getelementptr inbounds %class.Vec3, ptr %93, i32 0, i32 0
  %95 = getelementptr inbounds [3 x double], ptr %94, i64 0, i64 1
  %96 = load double, ptr %95, align 8, !tbaa !11
  %97 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 6
  %98 = getelementptr inbounds %class.Vec3, ptr %97, i32 0, i32 0
  %99 = getelementptr inbounds [3 x double], ptr %98, i64 0, i64 2
  %100 = load double, ptr %99, align 8, !tbaa !11
  %101 = load i32, ptr %26, align 4, !tbaa !9
  %102 = sitofp i32 %101 to double
  %103 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 8
  %104 = load double, ptr %103, align 8, !tbaa !30
  %105 = call double @llvm.fmuladd.f64(double %102, double %104, double %100)
  invoke void @_ZN4Vec3C2Eddd(ptr noundef nonnull align 8 dereferenceable(24) %27, double noundef %92, double noundef %96, double noundef %105)
          to label %106 unwind label %144

106:                                              ; preds = %83
  call void @llvm.lifetime.start.p0(i64 216, ptr %28) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %29, ptr align 8 %27, i64 24, i1 false), !tbaa.struct !27
  %107 = load double, ptr %23, align 8, !tbaa !11
  invoke void @_ZN8ParticleC2E4Vec3d(ptr noundef nonnull align 8 dereferenceable(216) %28, ptr noundef byval(%class.Vec3) align 8 %29, double noundef %107)
          to label %108 unwind label %148

108:                                              ; preds = %106
  %109 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 3
  %110 = load i32, ptr %26, align 4, !tbaa !9
  %111 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %112 = load i32, ptr %111, align 8, !tbaa !31
  %113 = mul nsw i32 %110, %112
  %114 = load i32, ptr %24, align 4, !tbaa !9
  %115 = add nsw i32 %113, %114
  %116 = sext i32 %115 to i64
  %117 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %109, i64 noundef %116) #6
  %118 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZN8ParticleaSEOS_(ptr noundef nonnull align 8 dereferenceable(216) %117, ptr noundef nonnull align 8 dereferenceable(216) %28) #6
  call void @_ZN8ParticleD2Ev(ptr noundef nonnull align 8 dereferenceable(216) %28) #6
  call void @llvm.lifetime.end.p0(i64 216, ptr %28) #6
  %119 = load i32, ptr %24, align 4, !tbaa !9
  %120 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 3
  %121 = load i32, ptr %26, align 4, !tbaa !9
  %122 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %123 = load i32, ptr %122, align 8, !tbaa !31
  %124 = mul nsw i32 %121, %123
  %125 = load i32, ptr %24, align 4, !tbaa !9
  %126 = add nsw i32 %124, %125
  %127 = sext i32 %126 to i64
  %128 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %120, i64 noundef %127) #6
  %129 = getelementptr inbounds %class.Particle, ptr %128, i32 0, i32 9
  store i32 %119, ptr %129, align 8, !tbaa !33
  %130 = load i32, ptr %26, align 4, !tbaa !9
  %131 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 3
  %132 = load i32, ptr %26, align 4, !tbaa !9
  %133 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %134 = load i32, ptr %133, align 8, !tbaa !31
  %135 = mul nsw i32 %132, %134
  %136 = load i32, ptr %24, align 4, !tbaa !9
  %137 = add nsw i32 %135, %136
  %138 = sext i32 %137 to i64
  %139 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %131, i64 noundef %138) #6
  %140 = getelementptr inbounds %class.Particle, ptr %139, i32 0, i32 10
  store i32 %130, ptr %140, align 4, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #6
  br label %141

141:                                              ; preds = %108
  %142 = load i32, ptr %26, align 4, !tbaa !9
  %143 = add nsw i32 %142, 1
  store i32 %143, ptr %26, align 4, !tbaa !9
  br label %77, !llvm.loop !46

144:                                              ; preds = %83
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %21, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %22, align 4
  br label %152

148:                                              ; preds = %106
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %21, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 216, ptr %28) #6
  br label %152

152:                                              ; preds = %148, %144
  call void @llvm.lifetime.end.p0(i64 24, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %374

153:                                              ; preds = %82
  br label %154

154:                                              ; preds = %153
  %155 = load i32, ptr %24, align 4, !tbaa !9
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %24, align 4, !tbaa !9
  br label %66, !llvm.loop !48

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

158:                                              ; preds = %262, %157
  %159 = load i32, ptr %30, align 4, !tbaa !9
  %160 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %161 = load i32, ptr %160, align 8, !tbaa !31
  %162 = icmp slt i32 %159, %161
  br i1 %162, label %164, label %163

163:                                              ; preds = %158
  store i32 8, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  br label %265

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

165:                                              ; preds = %258, %164
  %166 = load i32, ptr %31, align 4, !tbaa !9
  %167 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %168 = load i32, ptr %167, align 4, !tbaa !32
  %169 = icmp slt i32 %166, %168
  br i1 %169, label %171, label %170

170:                                              ; preds = %165
  store i32 11, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %261

171:                                              ; preds = %165
  %172 = load i32, ptr %30, align 4, !tbaa !9
  %173 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %174 = load i32, ptr %173, align 8, !tbaa !31
  %175 = sub nsw i32 %174, 1
  %176 = icmp slt i32 %172, %175
  br i1 %176, label %177, label %192

177:                                              ; preds = %171
  %178 = load i32, ptr %30, align 4, !tbaa !9
  %179 = load i32, ptr %31, align 4, !tbaa !9
  %180 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %178, i32 noundef %179)
          to label %181 unwind label %188

181:                                              ; preds = %177
  %182 = load i32, ptr %30, align 4, !tbaa !9
  %183 = add nsw i32 %182, 1
  %184 = load i32, ptr %31, align 4, !tbaa !9
  %185 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %183, i32 noundef %184)
          to label %186 unwind label %188

186:                                              ; preds = %181
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %180, ptr noundef %185)
          to label %187 unwind label %188

187:                                              ; preds = %186
  br label %192

188:                                              ; preds = %255, %250, %245, %231, %225, %221, %207, %202, %198, %186, %181, %177
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %21, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  br label %374

192:                                              ; preds = %187, %171
  %193 = load i32, ptr %31, align 4, !tbaa !9
  %194 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %195 = load i32, ptr %194, align 4, !tbaa !32
  %196 = sub nsw i32 %195, 1
  %197 = icmp slt i32 %193, %196
  br i1 %197, label %198, label %209

198:                                              ; preds = %192
  %199 = load i32, ptr %30, align 4, !tbaa !9
  %200 = load i32, ptr %31, align 4, !tbaa !9
  %201 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %199, i32 noundef %200)
          to label %202 unwind label %188

202:                                              ; preds = %198
  %203 = load i32, ptr %30, align 4, !tbaa !9
  %204 = load i32, ptr %31, align 4, !tbaa !9
  %205 = add nsw i32 %204, 1
  %206 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %203, i32 noundef %205)
          to label %207 unwind label %188

207:                                              ; preds = %202
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %201, ptr noundef %206)
          to label %208 unwind label %188

208:                                              ; preds = %207
  br label %209

209:                                              ; preds = %208, %192
  %210 = load i32, ptr %30, align 4, !tbaa !9
  %211 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %212 = load i32, ptr %211, align 8, !tbaa !31
  %213 = sub nsw i32 %212, 1
  %214 = icmp slt i32 %210, %213
  br i1 %214, label %215, label %233

215:                                              ; preds = %209
  %216 = load i32, ptr %31, align 4, !tbaa !9
  %217 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %218 = load i32, ptr %217, align 4, !tbaa !32
  %219 = sub nsw i32 %218, 1
  %220 = icmp slt i32 %216, %219
  br i1 %220, label %221, label %233

221:                                              ; preds = %215
  %222 = load i32, ptr %30, align 4, !tbaa !9
  %223 = load i32, ptr %31, align 4, !tbaa !9
  %224 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %222, i32 noundef %223)
          to label %225 unwind label %188

225:                                              ; preds = %221
  %226 = load i32, ptr %30, align 4, !tbaa !9
  %227 = add nsw i32 %226, 1
  %228 = load i32, ptr %31, align 4, !tbaa !9
  %229 = add nsw i32 %228, 1
  %230 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %227, i32 noundef %229)
          to label %231 unwind label %188

231:                                              ; preds = %225
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %224, ptr noundef %230)
          to label %232 unwind label %188

232:                                              ; preds = %231
  br label %233

233:                                              ; preds = %232, %215, %209
  %234 = load i32, ptr %30, align 4, !tbaa !9
  %235 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %236 = load i32, ptr %235, align 8, !tbaa !31
  %237 = sub nsw i32 %236, 1
  %238 = icmp slt i32 %234, %237
  br i1 %238, label %239, label %257

239:                                              ; preds = %233
  %240 = load i32, ptr %31, align 4, !tbaa !9
  %241 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %242 = load i32, ptr %241, align 4, !tbaa !32
  %243 = sub nsw i32 %242, 1
  %244 = icmp slt i32 %240, %243
  br i1 %244, label %245, label %257

245:                                              ; preds = %239
  %246 = load i32, ptr %30, align 4, !tbaa !9
  %247 = add nsw i32 %246, 1
  %248 = load i32, ptr %31, align 4, !tbaa !9
  %249 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %247, i32 noundef %248)
          to label %250 unwind label %188

250:                                              ; preds = %245
  %251 = load i32, ptr %30, align 4, !tbaa !9
  %252 = load i32, ptr %31, align 4, !tbaa !9
  %253 = add nsw i32 %252, 1
  %254 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %251, i32 noundef %253)
          to label %255 unwind label %188

255:                                              ; preds = %250
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %249, ptr noundef %254)
          to label %256 unwind label %188

256:                                              ; preds = %255
  br label %257

257:                                              ; preds = %256, %239, %233
  br label %258

258:                                              ; preds = %257
  %259 = load i32, ptr %31, align 4, !tbaa !9
  %260 = add nsw i32 %259, 1
  store i32 %260, ptr %31, align 4, !tbaa !9
  br label %165, !llvm.loop !49

261:                                              ; preds = %170
  br label %262

262:                                              ; preds = %261
  %263 = load i32, ptr %30, align 4, !tbaa !9
  %264 = add nsw i32 %263, 1
  store i32 %264, ptr %30, align 4, !tbaa !9
  br label %158, !llvm.loop !50

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

266:                                              ; preds = %370, %265
  %267 = load i32, ptr %32, align 4, !tbaa !9
  %268 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %269 = load i32, ptr %268, align 8, !tbaa !31
  %270 = icmp slt i32 %267, %269
  br i1 %270, label %272, label %271

271:                                              ; preds = %266
  store i32 14, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %373

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

273:                                              ; preds = %366, %272
  %274 = load i32, ptr %33, align 4, !tbaa !9
  %275 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %276 = load i32, ptr %275, align 4, !tbaa !32
  %277 = icmp slt i32 %274, %276
  br i1 %277, label %279, label %278

278:                                              ; preds = %273
  store i32 17, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  br label %369

279:                                              ; preds = %273
  %280 = load i32, ptr %32, align 4, !tbaa !9
  %281 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %282 = load i32, ptr %281, align 8, !tbaa !31
  %283 = sub nsw i32 %282, 2
  %284 = icmp slt i32 %280, %283
  br i1 %284, label %285, label %300

285:                                              ; preds = %279
  %286 = load i32, ptr %32, align 4, !tbaa !9
  %287 = load i32, ptr %33, align 4, !tbaa !9
  %288 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %286, i32 noundef %287)
          to label %289 unwind label %296

289:                                              ; preds = %285
  %290 = load i32, ptr %32, align 4, !tbaa !9
  %291 = add nsw i32 %290, 2
  %292 = load i32, ptr %33, align 4, !tbaa !9
  %293 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %291, i32 noundef %292)
          to label %294 unwind label %296

294:                                              ; preds = %289
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %288, ptr noundef %293)
          to label %295 unwind label %296

295:                                              ; preds = %294
  br label %300

296:                                              ; preds = %363, %358, %353, %339, %333, %329, %315, %310, %306, %294, %289, %285
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %21, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %374

300:                                              ; preds = %295, %279
  %301 = load i32, ptr %33, align 4, !tbaa !9
  %302 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %303 = load i32, ptr %302, align 4, !tbaa !32
  %304 = sub nsw i32 %303, 2
  %305 = icmp slt i32 %301, %304
  br i1 %305, label %306, label %317

306:                                              ; preds = %300
  %307 = load i32, ptr %32, align 4, !tbaa !9
  %308 = load i32, ptr %33, align 4, !tbaa !9
  %309 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %307, i32 noundef %308)
          to label %310 unwind label %296

310:                                              ; preds = %306
  %311 = load i32, ptr %32, align 4, !tbaa !9
  %312 = load i32, ptr %33, align 4, !tbaa !9
  %313 = add nsw i32 %312, 2
  %314 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %311, i32 noundef %313)
          to label %315 unwind label %296

315:                                              ; preds = %310
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %309, ptr noundef %314)
          to label %316 unwind label %296

316:                                              ; preds = %315
  br label %317

317:                                              ; preds = %316, %300
  %318 = load i32, ptr %32, align 4, !tbaa !9
  %319 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %320 = load i32, ptr %319, align 8, !tbaa !31
  %321 = sub nsw i32 %320, 2
  %322 = icmp slt i32 %318, %321
  br i1 %322, label %323, label %341

323:                                              ; preds = %317
  %324 = load i32, ptr %33, align 4, !tbaa !9
  %325 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %326 = load i32, ptr %325, align 4, !tbaa !32
  %327 = sub nsw i32 %326, 2
  %328 = icmp slt i32 %324, %327
  br i1 %328, label %329, label %341

329:                                              ; preds = %323
  %330 = load i32, ptr %32, align 4, !tbaa !9
  %331 = load i32, ptr %33, align 4, !tbaa !9
  %332 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %330, i32 noundef %331)
          to label %333 unwind label %296

333:                                              ; preds = %329
  %334 = load i32, ptr %32, align 4, !tbaa !9
  %335 = add nsw i32 %334, 2
  %336 = load i32, ptr %33, align 4, !tbaa !9
  %337 = add nsw i32 %336, 2
  %338 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %335, i32 noundef %337)
          to label %339 unwind label %296

339:                                              ; preds = %333
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %332, ptr noundef %338)
          to label %340 unwind label %296

340:                                              ; preds = %339
  br label %341

341:                                              ; preds = %340, %323, %317
  %342 = load i32, ptr %32, align 4, !tbaa !9
  %343 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 10
  %344 = load i32, ptr %343, align 8, !tbaa !31
  %345 = sub nsw i32 %344, 2
  %346 = icmp slt i32 %342, %345
  br i1 %346, label %347, label %365

347:                                              ; preds = %341
  %348 = load i32, ptr %33, align 4, !tbaa !9
  %349 = getelementptr inbounds %class.Cloth, ptr %34, i32 0, i32 11
  %350 = load i32, ptr %349, align 4, !tbaa !32
  %351 = sub nsw i32 %350, 2
  %352 = icmp slt i32 %348, %351
  br i1 %352, label %353, label %365

353:                                              ; preds = %347
  %354 = load i32, ptr %32, align 4, !tbaa !9
  %355 = add nsw i32 %354, 2
  %356 = load i32, ptr %33, align 4, !tbaa !9
  %357 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %355, i32 noundef %356)
          to label %358 unwind label %296

358:                                              ; preds = %353
  %359 = load i32, ptr %32, align 4, !tbaa !9
  %360 = load i32, ptr %33, align 4, !tbaa !9
  %361 = add nsw i32 %360, 2
  %362 = invoke noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %34, i32 noundef %359, i32 noundef %361)
          to label %363 unwind label %296

363:                                              ; preds = %358
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %34, ptr noundef %357, ptr noundef %362)
          to label %364 unwind label %296

364:                                              ; preds = %363
  br label %365

365:                                              ; preds = %364, %347, %341
  br label %366

366:                                              ; preds = %365
  %367 = load i32, ptr %33, align 4, !tbaa !9
  %368 = add nsw i32 %367, 1
  store i32 %368, ptr %33, align 4, !tbaa !9
  br label %273, !llvm.loop !51

369:                                              ; preds = %278
  br label %370

370:                                              ; preds = %369
  %371 = load i32, ptr %32, align 4, !tbaa !9
  %372 = add nsw i32 %371, 1
  store i32 %372, ptr %32, align 4, !tbaa !9
  br label %266, !llvm.loop !52

373:                                              ; preds = %271
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  ret void

374:                                              ; preds = %296, %188, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %375

375:                                              ; preds = %374, %72
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #6
  call void @_ZNSt6vectorI8ParticleSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #6
  br label %376

376:                                              ; preds = %375
  %377 = load ptr, ptr %21, align 8
  %378 = load i32, ptr %22, align 4
  %379 = insertvalue { ptr, i32 } poison, ptr %377, 0
  %380 = insertvalue { ptr, i32 } %379, i32 %378, 1
  resume { ptr, i32 } %380
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorI8ParticleSaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #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) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8ParticleC2E4Vec3d(ptr noundef nonnull align 8 dereferenceable(216), ptr noundef byval(%class.Vec3) align 8, double noundef) unnamed_addr #0 align 2

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTS5Cloth", !10, i64 0, !10, i64 4, !12, i64 8, !15, i64 16, !12, i64 40, !12, i64 48, !19, i64 56, !12, i64 80, !12, i64 88, !20, i64 96, !10, i64 120, !10, i64 124}
!15 = !{!"_ZTSSt6vectorI8ParticleSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseI8ParticleSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI8ParticleSaIS0_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI8ParticleSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTS4Vec3", !7, i64 0}
!20 = !{!"_ZTSSt6vectorIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!14, !12, i64 8}
!25 = !{!14, !12, i64 40}
!26 = !{!14, !12, i64 48}
!27 = !{i64 0, i64 24, !28}
!28 = !{!7, !7, i64 0}
!29 = !{!14, !12, i64 80}
!30 = !{!14, !12, i64 88}
!31 = !{!14, !10, i64 120}
!32 = !{!14, !10, i64 124}
!33 = !{!34, !10, i64 128}
!34 = !{!"_ZTS8Particle", !35, i64 0, !12, i64 8, !19, i64 16, !19, i64 40, !12, i64 64, !19, i64 72, !19, i64 96, !35, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !36, i64 144, !40, i64 168, !44, i64 192, !12, i64 200, !12, i64 208}
!35 = !{!"bool", !7, i64 0}
!36 = !{!"_ZTSSt6vectorIP8ParticleSaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSSt12_Vector_baseIP8ParticleSaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE12_Vector_implE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!"_ZTSSt6vectorIiSaIiEE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!44 = !{!"long", !7, i64 0}
!45 = !{!34, !10, i64 132}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = distinct !{!48, !47}
!49 = distinct !{!49, !47}
!50 = distinct !{!50, !47}
!51 = distinct !{!51, !47}
!52 = distinct !{!52, !47}


; 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.Vec3 = type { [3 x double] }
%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 }
%"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 uwtable
define dso_local void @_ZN5ClothC2ERK4Vec3iiddddid(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr nocapture noundef nonnull readonly align 8 dereferenceable(24) %1, i32 noundef %2, i32 noundef %3, double noundef %4, double noundef %5, double noundef %6, double noundef %7, i32 noundef %8, double noundef %9) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca %class.Vec3, align 8
  %12 = alloca %class.Particle, align 8
  store i32 %8, ptr %0, align 8, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %0, i64 8
  store double %9, ptr %13, align 8, !tbaa !21
  %14 = getelementptr inbounds i8, ptr %0, i64 16
  tail call void @_ZNSt6vectorI8ParticleSaIS0_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  %15 = getelementptr inbounds i8, ptr %0, i64 40
  store double %6, ptr %15, align 8, !tbaa !22
  %16 = getelementptr inbounds i8, ptr %0, i64 48
  store double %7, ptr %16, align 8, !tbaa !23
  %17 = getelementptr inbounds i8, ptr %0, i64 56
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(24) %1, i64 24, i1 false), !tbaa.struct !24
  %18 = getelementptr inbounds i8, ptr %0, i64 80
  store double %4, ptr %18, align 8, !tbaa !26
  %19 = getelementptr inbounds i8, ptr %0, i64 88
  store double %5, ptr %19, align 8, !tbaa !27
  %20 = getelementptr inbounds i8, ptr %0, i64 96
  tail call void @_ZNSt6vectorIdSaIdEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  %21 = getelementptr inbounds i8, ptr %0, i64 120
  store i32 %2, ptr %21, align 8, !tbaa !28
  %22 = getelementptr inbounds i8, ptr %0, i64 124
  store i32 %3, ptr %22, align 4, !tbaa !29
  %23 = mul nsw i32 %3, %2
  %24 = sext i32 %23 to i64
  invoke void @_ZNSt6vectorI8ParticleSaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %24)
          to label %25 unwind label %39

25:                                               ; preds = %10
  %26 = fmul double %9, %9
  %27 = load i32, ptr %21, align 8, !tbaa !28
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.preheader93.lr.ph, label %._crit_edge104

.preheader93.lr.ph:                               ; preds = %25
  %29 = getelementptr inbounds i8, ptr %0, i64 64
  %30 = getelementptr inbounds i8, ptr %0, i64 72
  %31 = load i32, ptr %22, align 4, !tbaa !29
  %32 = icmp sgt i32 %31, 0
  br i1 %32, label %.preheader93, label %._crit_edge104

.preheader93:                                     ; preds = %.preheader93.lr.ph, %._crit_edge
  %33 = phi i32 [ %41, %._crit_edge ], [ %27, %.preheader93.lr.ph ]
  %34 = phi i32 [ %42, %._crit_edge ], [ %31, %.preheader93.lr.ph ]
  %.08495 = phi i32 [ %43, %._crit_edge ], [ 0, %.preheader93.lr.ph ]
  %35 = icmp sgt i32 %34, 0
  br i1 %35, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader93
  %36 = uitofp nneg i32 %.08495 to double
  br label %45

.preheader92:                                     ; preds = %._crit_edge
  %37 = icmp sgt i32 %41, 0
  %.pr = load i32, ptr %22, align 4
  %38 = icmp sgt i32 %.pr, 0
  %or.cond164 = select i1 %37, i1 %38, i1 false
  br i1 %or.cond164, label %.preheader91, label %._crit_edge104

39:                                               ; preds = %10
  %40 = landingpad { ptr, i32 }
          cleanup
  br label %172

._crit_edge.loopexit:                             ; preds = %54
  %.pre = load i32, ptr %21, align 8, !tbaa !28
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader93
  %41 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %33, %.preheader93 ]
  %42 = phi i32 [ %74, %._crit_edge.loopexit ], [ %34, %.preheader93 ]
  %43 = add nuw nsw i32 %.08495, 1
  %44 = icmp slt i32 %43, %41
  br i1 %44, label %.preheader93, label %.preheader92, !llvm.loop !30

45:                                               ; preds = %.lr.ph, %54
  %.08394 = phi i32 [ 0, %.lr.ph ], [ %73, %54 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #6
  %46 = load double, ptr %17, align 8, !tbaa !33
  %47 = load double, ptr %18, align 8, !tbaa !26
  %48 = call double @llvm.fmuladd.f64(double %36, double %47, double %46)
  %49 = load double, ptr %29, align 8, !tbaa !33
  %50 = load double, ptr %30, align 8, !tbaa !33
  %51 = uitofp nneg i32 %.08394 to double
  %52 = load double, ptr %19, align 8, !tbaa !27
  %53 = call double @llvm.fmuladd.f64(double %51, double %52, double %50)
  call void @_ZN4Vec3C2Eddd(ptr noundef nonnull align 8 dereferenceable(24) %11, double noundef %48, double noundef %49, double noundef %53)
  call void @llvm.lifetime.start.p0(i64 216, ptr nonnull %12) #6
  invoke void @_ZN8ParticleC2E4Vec3d(ptr noundef nonnull align 8 dereferenceable(216) %12, ptr noundef nonnull byval(%class.Vec3) align 8 %11, double noundef %26)
          to label %54 unwind label %76

54:                                               ; preds = %45
  %55 = load i32, ptr %21, align 8, !tbaa !28
  %56 = mul nsw i32 %55, %.08394
  %57 = add nsw i32 %56, %.08495
  %58 = sext i32 %57 to i64
  %59 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %58) #6
  %60 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZN8ParticleaSEOS_(ptr noundef nonnull align 8 dereferenceable(216) %59, ptr noundef nonnull align 8 dereferenceable(216) %12) #6
  call void @_ZN8ParticleD2Ev(ptr noundef nonnull align 8 dereferenceable(216) %12) #6
  call void @llvm.lifetime.end.p0(i64 216, ptr nonnull %12) #6
  %61 = load i32, ptr %21, align 8, !tbaa !28
  %62 = mul nsw i32 %61, %.08394
  %63 = add nsw i32 %62, %.08495
  %64 = sext i32 %63 to i64
  %65 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %64) #6
  %66 = getelementptr inbounds i8, ptr %65, i64 128
  store i32 %.08495, ptr %66, align 8, !tbaa !34
  %67 = load i32, ptr %21, align 8, !tbaa !28
  %68 = mul nsw i32 %67, %.08394
  %69 = add nsw i32 %68, %.08495
  %70 = sext i32 %69 to i64
  %71 = call noundef nonnull align 8 dereferenceable(216) ptr @_ZNSt6vectorI8ParticleSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %70) #6
  %72 = getelementptr inbounds i8, ptr %71, i64 132
  store i32 %.08394, ptr %72, align 4, !tbaa !46
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  %73 = add nuw nsw i32 %.08394, 1
  %74 = load i32, ptr %22, align 4, !tbaa !29
  %75 = icmp slt i32 %73, %74
  br i1 %75, label %45, label %._crit_edge.loopexit, !llvm.loop !47

76:                                               ; preds = %45
  %77 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 216, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  br label %172

.preheader91:                                     ; preds = %.preheader92, %._crit_edge98
  %.pre114.pre124129 = phi i32 [ %.pre114.pre124130, %._crit_edge98 ], [ %.pr, %.preheader92 ]
  %78 = phi i32 [ %84, %._crit_edge98 ], [ %41, %.preheader92 ]
  %79 = phi i32 [ %85, %._crit_edge98 ], [ %.pr, %.preheader92 ]
  %.08299 = phi i32 [ %81, %._crit_edge98 ], [ 0, %.preheader92 ]
  %80 = icmp sgt i32 %79, 0
  %81 = add nuw nsw i32 %.08299, 1
  br i1 %80, label %.lr.ph97, label %._crit_edge98

.preheader90:                                     ; preds = %._crit_edge98
  %82 = icmp sgt i32 %84, 0
  %.pr153 = load i32, ptr %22, align 4
  %83 = icmp sgt i32 %.pr153, 0
  %or.cond165 = select i1 %82, i1 %83, i1 false
  br i1 %or.cond165, label %.preheader, label %._crit_edge104

._crit_edge98.loopexit:                           ; preds = %122
  %.pre115 = load i32, ptr %21, align 8, !tbaa !28
  br label %._crit_edge98

._crit_edge98:                                    ; preds = %.preheader91, %._crit_edge98.loopexit
  %.pre114.pre124130 = phi i32 [ %.pre114.pre124133, %._crit_edge98.loopexit ], [ %.pre114.pre124129, %.preheader91 ]
  %84 = phi i32 [ %.pre115, %._crit_edge98.loopexit ], [ %78, %.preheader91 ]
  %85 = phi i32 [ %.pre114.pre124133, %._crit_edge98.loopexit ], [ %79, %.preheader91 ]
  %86 = icmp slt i32 %81, %84
  br i1 %86, label %.preheader91, label %.preheader90, !llvm.loop !48

.lr.ph97:                                         ; preds = %.preheader91, %122
  %.pre114.pre124132 = phi i32 [ %.pre114.pre124133, %122 ], [ %.pre114.pre124129, %.preheader91 ]
  %87 = phi i32 [ %.pre114.pre124133, %122 ], [ %79, %.preheader91 ]
  %.08196 = phi i32 [ %123, %122 ], [ 0, %.preheader91 ]
  %88 = load i32, ptr %21, align 8, !tbaa !28
  %89 = add nsw i32 %88, -1
  %90 = icmp slt i32 %.08299, %89
  br i1 %90, label %91, label %96

91:                                               ; preds = %.lr.ph97
  %92 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.08299, i32 noundef %.08196)
  %93 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %81, i32 noundef %.08196)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %92, ptr noundef %93)
          to label %._crit_edge108 unwind label %94

._crit_edge108:                                   ; preds = %91
  %.pre109 = load i32, ptr %22, align 4, !tbaa !29
  br label %96

94:                                               ; preds = %118, %110, %100, %91
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %172

96:                                               ; preds = %._crit_edge108, %.lr.ph97
  %.pre114.pre124131 = phi i32 [ %.pre109, %._crit_edge108 ], [ %.pre114.pre124132, %.lr.ph97 ]
  %97 = phi i32 [ %.pre109, %._crit_edge108 ], [ %87, %.lr.ph97 ]
  %98 = add nsw i32 %97, -1
  %99 = icmp slt i32 %.08196, %98
  br i1 %99, label %100, label %104

100:                                              ; preds = %96
  %101 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.08299, i32 noundef %.08196)
  %102 = add nuw nsw i32 %.08196, 1
  %103 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.08299, i32 noundef %102)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %101, ptr noundef %103)
          to label %._crit_edge128 unwind label %94

._crit_edge128:                                   ; preds = %100
  %.pre114.pre124.pre = load i32, ptr %22, align 4, !tbaa !29
  br label %104

104:                                              ; preds = %._crit_edge128, %96
  %.pre114.pre124 = phi i32 [ %.pre114.pre124.pre, %._crit_edge128 ], [ %.pre114.pre124131, %96 ]
  %105 = load i32, ptr %21, align 8, !tbaa !28
  %106 = add nsw i32 %105, -1
  %107 = icmp slt i32 %.08299, %106
  %108 = add nsw i32 %.pre114.pre124, -1
  %109 = icmp slt i32 %.08196, %108
  %or.cond = select i1 %107, i1 %109, i1 false
  br i1 %or.cond, label %110, label %114

110:                                              ; preds = %104
  %111 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.08299, i32 noundef %.08196)
  %112 = add nuw nsw i32 %.08196, 1
  %113 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %81, i32 noundef %112)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %111, ptr noundef %113)
          to label %._crit_edge110 unwind label %94

._crit_edge110:                                   ; preds = %110
  %.pre111 = load i32, ptr %21, align 8, !tbaa !28
  %.pre114.pre = load i32, ptr %22, align 4, !tbaa !29
  %.pre144 = add nsw i32 %.pre111, -1
  br label %114

114:                                              ; preds = %._crit_edge110, %104
  %.pre-phi = phi i32 [ %.pre144, %._crit_edge110 ], [ %106, %104 ]
  %.pre114.pre124134 = phi i32 [ %.pre114.pre, %._crit_edge110 ], [ %.pre114.pre124, %104 ]
  %115 = icmp slt i32 %.08299, %.pre-phi
  %116 = add nsw i32 %.pre114.pre124134, -1
  %117 = icmp slt i32 %.08196, %116
  %or.cond159 = select i1 %115, i1 %117, i1 false
  br i1 %or.cond159, label %118, label %122

118:                                              ; preds = %114
  %119 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %81, i32 noundef %.08196)
  %120 = add nuw nsw i32 %.08196, 1
  %121 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.08299, i32 noundef %120)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %119, ptr noundef %121)
          to label %._crit_edge112 unwind label %94

._crit_edge112:                                   ; preds = %118
  %.pre113 = load i32, ptr %22, align 4, !tbaa !29
  br label %122

122:                                              ; preds = %._crit_edge112, %114
  %.pre114.pre124133 = phi i32 [ %.pre113, %._crit_edge112 ], [ %.pre114.pre124134, %114 ]
  %123 = add nuw nsw i32 %.08196, 1
  %124 = icmp slt i32 %123, %.pre114.pre124133
  br i1 %124, label %.lr.ph97, label %._crit_edge98.loopexit, !llvm.loop !49

.preheader:                                       ; preds = %.preheader90, %._crit_edge102
  %.pre122.pre126137 = phi i32 [ %.pre122.pre126138, %._crit_edge102 ], [ %.pr153, %.preheader90 ]
  %125 = phi i32 [ %129, %._crit_edge102 ], [ %84, %.preheader90 ]
  %126 = phi i32 [ %130, %._crit_edge102 ], [ %.pr153, %.preheader90 ]
  %.080103 = phi i32 [ %131, %._crit_edge102 ], [ 0, %.preheader90 ]
  %127 = icmp sgt i32 %126, 0
  br i1 %127, label %.lr.ph101, label %._crit_edge102

.lr.ph101:                                        ; preds = %.preheader
  %128 = add nuw nsw i32 %.080103, 2
  br label %133

._crit_edge104:                                   ; preds = %._crit_edge102, %.preheader93.lr.ph, %25, %.preheader92, %.preheader90
  ret void

._crit_edge102.loopexit:                          ; preds = %169
  %.pre123 = load i32, ptr %21, align 8, !tbaa !28
  br label %._crit_edge102

._crit_edge102:                                   ; preds = %._crit_edge102.loopexit, %.preheader
  %.pre122.pre126138 = phi i32 [ %.pre122.pre126141, %._crit_edge102.loopexit ], [ %.pre122.pre126137, %.preheader ]
  %129 = phi i32 [ %.pre123, %._crit_edge102.loopexit ], [ %125, %.preheader ]
  %130 = phi i32 [ %.pre122.pre126141, %._crit_edge102.loopexit ], [ %126, %.preheader ]
  %131 = add nuw nsw i32 %.080103, 1
  %132 = icmp slt i32 %131, %129
  br i1 %132, label %.preheader, label %._crit_edge104, !llvm.loop !50

133:                                              ; preds = %.lr.ph101, %169
  %.pre122.pre126140 = phi i32 [ %.pre122.pre126137, %.lr.ph101 ], [ %.pre122.pre126141, %169 ]
  %134 = phi i32 [ %126, %.lr.ph101 ], [ %.pre122.pre126141, %169 ]
  %.0100 = phi i32 [ 0, %.lr.ph101 ], [ %170, %169 ]
  %135 = load i32, ptr %21, align 8, !tbaa !28
  %136 = add nsw i32 %135, -2
  %137 = icmp slt i32 %.080103, %136
  br i1 %137, label %138, label %143

138:                                              ; preds = %133
  %139 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.080103, i32 noundef %.0100)
  %140 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %128, i32 noundef %.0100)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %139, ptr noundef %140)
          to label %._crit_edge116 unwind label %141

._crit_edge116:                                   ; preds = %138
  %.pre117 = load i32, ptr %22, align 4, !tbaa !29
  br label %143

141:                                              ; preds = %165, %157, %147, %138
  %142 = landingpad { ptr, i32 }
          cleanup
  br label %172

143:                                              ; preds = %._crit_edge116, %133
  %.pre122.pre126139 = phi i32 [ %.pre117, %._crit_edge116 ], [ %.pre122.pre126140, %133 ]
  %144 = phi i32 [ %.pre117, %._crit_edge116 ], [ %134, %133 ]
  %145 = add nsw i32 %144, -2
  %146 = icmp slt i32 %.0100, %145
  br i1 %146, label %147, label %151

147:                                              ; preds = %143
  %148 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.080103, i32 noundef %.0100)
  %149 = add nuw nsw i32 %.0100, 2
  %150 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.080103, i32 noundef %149)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %148, ptr noundef %150)
          to label %._crit_edge136 unwind label %141

._crit_edge136:                                   ; preds = %147
  %.pre122.pre126.pre = load i32, ptr %22, align 4, !tbaa !29
  br label %151

151:                                              ; preds = %._crit_edge136, %143
  %.pre122.pre126 = phi i32 [ %.pre122.pre126.pre, %._crit_edge136 ], [ %.pre122.pre126139, %143 ]
  %152 = load i32, ptr %21, align 8, !tbaa !28
  %153 = add nsw i32 %152, -2
  %154 = icmp slt i32 %.080103, %153
  %155 = add nsw i32 %.pre122.pre126, -2
  %156 = icmp slt i32 %.0100, %155
  %or.cond161 = select i1 %154, i1 %156, i1 false
  br i1 %or.cond161, label %157, label %161

157:                                              ; preds = %151
  %158 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.080103, i32 noundef %.0100)
  %159 = add nuw nsw i32 %.0100, 2
  %160 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %128, i32 noundef %159)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %158, ptr noundef %160)
          to label %._crit_edge118 unwind label %141

._crit_edge118:                                   ; preds = %157
  %.pre119 = load i32, ptr %21, align 8, !tbaa !28
  %.pre122.pre = load i32, ptr %22, align 4, !tbaa !29
  %.pre145 = add nsw i32 %.pre119, -2
  br label %161

161:                                              ; preds = %._crit_edge118, %151
  %.pre-phi146 = phi i32 [ %.pre145, %._crit_edge118 ], [ %153, %151 ]
  %.pre122.pre126142 = phi i32 [ %.pre122.pre, %._crit_edge118 ], [ %.pre122.pre126, %151 ]
  %162 = icmp slt i32 %.080103, %.pre-phi146
  %163 = add nsw i32 %.pre122.pre126142, -2
  %164 = icmp slt i32 %.0100, %163
  %or.cond163 = select i1 %162, i1 %164, i1 false
  br i1 %or.cond163, label %165, label %169

165:                                              ; preds = %161
  %166 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %128, i32 noundef %.0100)
  %167 = add nuw nsw i32 %.0100, 2
  %168 = call noundef ptr @_ZN5Cloth11getParticleEii(ptr noundef nonnull align 8 dereferenceable(128) %0, i32 noundef %.080103, i32 noundef %167)
  invoke void @_ZN5Cloth14makeConstraintEP8ParticleS1_(ptr noundef nonnull align 8 dereferenceable(128) %0, ptr noundef %166, ptr noundef %168)
          to label %._crit_edge120 unwind label %141

._crit_edge120:                                   ; preds = %165
  %.pre121 = load i32, ptr %22, align 4, !tbaa !29
  br label %169

169:                                              ; preds = %._crit_edge120, %161
  %.pre122.pre126141 = phi i32 [ %.pre121, %._crit_edge120 ], [ %.pre122.pre126142, %161 ]
  %170 = add nuw nsw i32 %.0100, 1
  %171 = icmp slt i32 %170, %.pre122.pre126141
  br i1 %171, label %133, label %._crit_edge102.loopexit, !llvm.loop !51

172:                                              ; preds = %76, %94, %141, %39
  %.pn.pn = phi { ptr, i32 } [ %40, %39 ], [ %77, %76 ], [ %95, %94 ], [ %142, %141 ]
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #6
  call void @_ZNSt6vectorI8ParticleSaIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #6
  resume { ptr, i32 } %.pn.pn
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorI8ParticleSaIS0_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_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) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8ParticleC2E4Vec3d(ptr noundef nonnull align 8 dereferenceable(216), ptr noundef byval(%class.Vec3) align 8, double noundef) unnamed_addr #0 align 2

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!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, !10, i64 8}
!22 = !{!6, !10, i64 40}
!23 = !{!6, !10, i64 48}
!24 = !{i64 0, i64 24, !25}
!25 = !{!8, !8, i64 0}
!26 = !{!6, !10, i64 80}
!27 = !{!6, !10, i64 88}
!28 = !{!6, !7, i64 120}
!29 = !{!6, !7, i64 124}
!30 = distinct !{!30, !31, !32}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!"llvm.loop.unswitch.partial.disable"}
!33 = !{!10, !10, i64 0}
!34 = !{!35, !7, i64 128}
!35 = !{!"_ZTS8Particle", !36, i64 0, !10, i64 8, !16, i64 16, !16, i64 40, !10, i64 64, !16, i64 72, !16, i64 96, !36, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !37, i64 144, !41, i64 168, !45, i64 192, !10, i64 200, !10, i64 208}
!36 = !{!"bool", !8, i64 0}
!37 = !{!"_ZTSSt6vectorIP8ParticleSaIS1_EE", !38, i64 0}
!38 = !{!"_ZTSSt12_Vector_baseIP8ParticleSaIS1_EE", !39, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE12_Vector_implE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIP8ParticleSaIS1_EE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!41 = !{!"_ZTSSt6vectorIiSaIiEE", !42, i64 0}
!42 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !15, i64 0, !15, i64 8, !15, i64 16}
!45 = !{!"long", !8, i64 0}
!46 = !{!35, !7, i64 132}
!47 = distinct !{!47, !31}
!48 = distinct !{!48, !31, !32}
!49 = distinct !{!49, !31}
!50 = distinct !{!50, !31, !32}
!51 = distinct !{!51, !31}


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