; LLVM IR from ClementineAccount/Albuquerque :: lib/bullet/include/Bullet3Dynamics/ConstraintSolver (b3PgsJacobiSolver)

; 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.b3ProfileZone = type { i8 }
%struct.b3SolverBody = type <{ %class.b3Transform, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %union.anon.8, [3 x i32], [12 x i8] }>
%class.b3Transform = type { %class.b3Matrix3x3, %class.b3Vector3 }
%class.b3Matrix3x3 = type { [3 x %class.b3Vector3] }
%class.b3Vector3 = type { %union.anon }
%union.anon = type { [4 x float] }
%union.anon.8 = type { ptr }
%"struct.b3TypedConstraint::b3ConstraintInfo2" = type { float, float, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, i32, float }
%class.b3PgsJacobiSolver = type { ptr, %class.b3AlignedObjectArray, %class.b3AlignedObjectArray.0, %class.b3AlignedObjectArray.0, %class.b3AlignedObjectArray.0, %class.b3AlignedObjectArray.0, %class.b3AlignedObjectArray.2, %class.b3AlignedObjectArray.2, %class.b3AlignedObjectArray.2, %class.b3AlignedObjectArray.4, %class.b3AlignedObjectArray.2, %class.b3AlignedObjectArray.2, %class.b3AlignedObjectArray.6, %class.b3AlignedObjectArray.6, i8, i32, i32, i64 }
%class.b3AlignedObjectArray = type <{ [4 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%class.b3AlignedObjectArray.0 = type <{ [4 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%class.b3AlignedObjectArray.4 = type <{ [4 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%class.b3AlignedObjectArray.2 = type <{ [4 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%class.b3AlignedObjectArray.6 = type <{ [4 x i8], i32, i32, [4 x i8], ptr, i8, [7 x i8] }>
%struct.b3Contact4 = type { %struct.b3Contact4Data }
%struct.b3Contact4Data = type { [4 x %class.b3Vector3], %class.b3Vector3, i16, i16, i32, i32, i32, i32, i32, i32, i32 }
%struct.b3RigidBodyData = type { %class.b3Vector3, %class.b3Quaternion, %class.b3Vector3, %class.b3Vector3, i32, float, float, float }
%class.b3Quaternion = type { %class.b3QuadWord }
%class.b3QuadWord = type { %union.anon.10 }
%union.anon.10 = type { [4 x float] }
%struct.b3JointFeedback = type { %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3 }
%"struct.b3TypedConstraint::b3ConstraintInfo1" = type { i32, i32 }
%struct.b3ContactSolverInfoData = type { float, float, float, float, float, i32, float, float, float, float, float, i32, float, float, float, float, i32, i32, i32, float, float }
%struct.b3SolverConstraint = type { %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, float, float, i32, i32, float, float, float, float, float, float, float, %union.anon.9, i32, i32, i32, i32, [8 x i8] }
%union.anon.9 = type { ptr }
%struct.b3InertiaData = type { %class.b3Matrix3x3, %class.b3Matrix3x3 }

@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #2

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody30internalGetDeltaLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody31internalGetDeltaAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetPushVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetTurnVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_Z13b3MakeVector3fff(float noundef, float noundef, float noundef) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48), ptr noundef nonnull align 16 dereferenceable(16)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN17b3PgsJacobiSolver19getOrInitSolverBodyEiP15b3RigidBodyDataP13b3InertiaData(ptr noundef nonnull align 8 dereferenceable(448), i32 noundef, ptr noundef, ptr noundef) #3 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN12b3SolverBodyC2Ev(ptr noundef nonnull align 16 dereferenceable(228)) unnamed_addr #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver14convertContactEP15b3RigidBodyDataP13b3InertiaDataP10b3Contact4RK19b3ContactSolverInfo(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef, ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(84)) #9 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK10b3Contact48getBodyAEv(ptr noundef nonnull align 16 dereferenceable(112)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK10b3Contact48getBodyBEv(ptr noundef nonnull align 16 dereferenceable(112)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25)) #6 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN17b3PgsJacobiSolver28solveGroupCacheFriendlySetupEP15b3RigidBodyDataP13b3InertiaDataiP10b3Contact4iPP17b3TypedConstraintiRK19b3ContactSolverInfo(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5, ptr noundef %6, i32 noundef %7, ptr noundef nonnull align 4 dereferenceable(84) %8) unnamed_addr #9 align 2 personality ptr @__gxx_personality_v0 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca %class.b3ProfileZone, align 1
  %20 = alloca %struct.b3SolverBody, align 16
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca %class.b3Vector3, align 16
  %28 = alloca %class.b3Vector3, align 16
  %29 = alloca %class.b3Vector3, align 16
  %30 = alloca %class.b3Vector3, align 16
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  %57 = alloca float, align 4
  %58 = alloca float, align 4
  %59 = alloca float, align 4
  %60 = alloca float, align 4
  %61 = alloca float, align 4
  %62 = alloca float, align 4
  %63 = alloca float, align 4
  %64 = alloca float, align 4
  %65 = alloca float, align 4
  %66 = alloca float, align 4
  %67 = alloca float, align 4
  %68 = alloca float, align 4
  %69 = alloca float, align 4
  %70 = alloca float, align 4
  %71 = alloca float, align 4
  %72 = alloca float, align 4
  %73 = alloca float, align 4
  %74 = alloca float, align 4
  %75 = alloca float, align 4
  %76 = alloca float, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca %"struct.b3TypedConstraint::b3ConstraintInfo2", align 8
  %80 = alloca ptr, align 8
  %81 = alloca ptr, align 8
  %82 = alloca ptr, align 8
  %83 = alloca %class.b3Vector3, align 16
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca %class.b3Vector3, align 16
  %87 = alloca %class.b3Vector3, align 16
  %88 = alloca %class.b3Vector3, align 16
  %89 = alloca %class.b3Vector3, align 16
  %90 = alloca %class.b3Vector3, align 16
  %91 = alloca float, align 4
  %92 = alloca float, align 4
  %93 = alloca float, align 4
  %94 = alloca float, align 4
  %95 = alloca float, align 4
  %96 = alloca float, align 4
  %97 = alloca float, align 4
  %98 = alloca float, align 4
  %99 = alloca float, align 4
  %100 = alloca float, align 4
  %101 = alloca i32, align 4
  %102 = alloca ptr, align 8
  %103 = alloca i32, align 4
  %104 = alloca i32, align 4
  %105 = alloca i32, align 4
  %106 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store i32 %3, ptr %13, align 4, !tbaa !9
  store ptr %4, ptr %14, align 8, !tbaa !5
  store i32 %5, ptr %15, align 4, !tbaa !9
  store ptr %6, ptr %16, align 8, !tbaa !5
  store i32 %7, ptr %17, align 4, !tbaa !9
  store ptr %8, ptr %18, align 8, !tbaa !5
  %107 = load ptr, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #10
  call void @_ZN13b3ProfileZoneC2EPKc(ptr noundef nonnull align 1 dereferenceable(1) %19, ptr noundef @.str.1)
  %108 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 15
  store i32 0, ptr %108, align 4, !tbaa !11
  %109 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 240, ptr %20) #10
  call void @llvm.memset.p0.i64(ptr align 16 %20, i8 0, i64 240, i1 false)
  invoke void @_ZN12b3SolverBodyC2Ev(ptr noundef nonnull align 16 dereferenceable(228) %20)
          to label %110 unwind label %153

110:                                              ; preds = %9
  invoke void @_ZN20b3AlignedObjectArrayI12b3SolverBodyE6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %109, i32 noundef 0, ptr noundef nonnull align 16 dereferenceable(228) %20)
          to label %111 unwind label %153

111:                                              ; preds = %110
  call void @llvm.lifetime.end.p0(i64 240, ptr %20) #10
  %112 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  store i32 0, ptr %23, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %112, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %113 unwind label %157

113:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  %114 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %115 = load i32, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  store i32 0, ptr %24, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %114, i32 noundef %115, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %116 unwind label %161

116:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  %117 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 0, ptr %25, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %117, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %118 unwind label %165

118:                                              ; preds = %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  %119 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 11
  %120 = load i32, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  store i32 0, ptr %26, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %119, i32 noundef %120, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %121 unwind label %169

121:                                              ; preds = %118
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  %122 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #10
  call void @llvm.memset.p0.i64(ptr align 16 %27, i8 0, i64 16, i1 false)
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %122, i32 noundef 0, ptr noundef nonnull align 16 dereferenceable(16) %27)
          to label %123 unwind label %173

123:                                              ; preds = %121
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #10
  %124 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 12
  %125 = load i32, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #10
  %126 = invoke { <2 x float>, <2 x float> } @_Z13b3MakeVector3fff(float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %127 unwind label %177

127:                                              ; preds = %123
  %128 = getelementptr inbounds %class.b3Vector3, ptr %28, i32 0, i32 0
  %129 = getelementptr inbounds %union.anon, ptr %128, i32 0, i32 0
  %130 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %129, i32 0, i32 0
  %131 = extractvalue { <2 x float>, <2 x float> } %126, 0
  store <2 x float> %131, ptr %130, align 16
  %132 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %129, i32 0, i32 1
  %133 = extractvalue { <2 x float>, <2 x float> } %126, 1
  store <2 x float> %133, ptr %132, align 8
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %124, i32 noundef %125, ptr noundef nonnull align 16 dereferenceable(16) %28)
          to label %134 unwind label %177

134:                                              ; preds = %127
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  %135 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 13
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #10
  call void @llvm.memset.p0.i64(ptr align 16 %29, i8 0, i64 16, i1 false)
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %135, i32 noundef 0, ptr noundef nonnull align 16 dereferenceable(16) %29)
          to label %136 unwind label %181

136:                                              ; preds = %134
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  %137 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 13
  %138 = load i32, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #10
  %139 = invoke { <2 x float>, <2 x float> } @_Z13b3MakeVector3fff(float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
          to label %140 unwind label %185

140:                                              ; preds = %136
  %141 = getelementptr inbounds %class.b3Vector3, ptr %30, i32 0, i32 0
  %142 = getelementptr inbounds %union.anon, ptr %141, i32 0, i32 0
  %143 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %142, i32 0, i32 0
  %144 = extractvalue { <2 x float>, <2 x float> } %139, 0
  store <2 x float> %144, ptr %143, align 16
  %145 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %142, i32 0, i32 1
  %146 = extractvalue { <2 x float>, <2 x float> } %139, 1
  store <2 x float> %146, ptr %145, align 8
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %137, i32 noundef %138, ptr noundef nonnull align 16 dereferenceable(16) %30)
          to label %147 unwind label %185

147:                                              ; preds = %140
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %226, %147
  %149 = load i32, ptr %31, align 4, !tbaa !9
  %150 = load i32, ptr %17, align 4, !tbaa !9
  %151 = icmp slt i32 %149, %150
  br i1 %151, label %189, label %152

152:                                              ; preds = %148
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %230

153:                                              ; preds = %110, %9
  %154 = landingpad { ptr, i32 }
          cleanup
  %155 = extractvalue { ptr, i32 } %154, 0
  store ptr %155, ptr %21, align 8
  %156 = extractvalue { ptr, i32 } %154, 1
  store i32 %156, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 240, ptr %20) #10
  br label %1173

157:                                              ; preds = %111
  %158 = landingpad { ptr, i32 }
          cleanup
  %159 = extractvalue { ptr, i32 } %158, 0
  store ptr %159, ptr %21, align 8
  %160 = extractvalue { ptr, i32 } %158, 1
  store i32 %160, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %1173

161:                                              ; preds = %113
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %21, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  br label %1173

165:                                              ; preds = %116
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %21, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %1173

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

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

177:                                              ; preds = %127, %123
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %21, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  br label %1173

181:                                              ; preds = %134
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %21, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  br label %1173

185:                                              ; preds = %140, %136
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %21, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #10
  br label %1173

189:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %190 = load ptr, ptr %16, align 8, !tbaa !5
  %191 = load i32, ptr %31, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds ptr, ptr %190, i64 %192
  %194 = load ptr, ptr %193, align 8, !tbaa !5
  %195 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
          to label %196 unwind label %216

196:                                              ; preds = %189
  store i32 %195, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  %197 = load ptr, ptr %16, align 8, !tbaa !5
  %198 = load i32, ptr %31, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds ptr, ptr %197, i64 %199
  %201 = load ptr, ptr %200, align 8, !tbaa !5
  %202 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %201)
          to label %203 unwind label %220

203:                                              ; preds = %196
  store i32 %202, ptr %33, align 4, !tbaa !9
  %204 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 14
  %205 = load i8, ptr %204, align 8, !tbaa !25, !range !26, !noundef !27
  %206 = trunc i8 %205 to i1
  br i1 %206, label %207, label %224

207:                                              ; preds = %203
  %208 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %209 = load i32, ptr %32, align 4, !tbaa !9
  %210 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %208, i32 noundef %209)
          to label %211 unwind label %220

211:                                              ; preds = %207
  store i32 -1, ptr %210, align 4, !tbaa !9
  %212 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %213 = load i32, ptr %33, align 4, !tbaa !9
  %214 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %212, i32 noundef %213)
          to label %215 unwind label %220

215:                                              ; preds = %211
  store i32 -1, ptr %214, align 4, !tbaa !9
  br label %225

216:                                              ; preds = %189
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %21, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %22, align 4
  br label %229

220:                                              ; preds = %211, %207, %196
  %221 = landingpad { ptr, i32 }
          cleanup
  %222 = extractvalue { ptr, i32 } %221, 0
  store ptr %222, ptr %21, align 8
  %223 = extractvalue { ptr, i32 } %221, 1
  store i32 %223, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  br label %229

224:                                              ; preds = %203
  br label %225

225:                                              ; preds = %224, %215
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %31, align 4, !tbaa !9
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %31, align 4, !tbaa !9
  br label %148, !llvm.loop !28

229:                                              ; preds = %220, %216
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  br label %1173

230:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #10
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %231

231:                                              ; preds = %311, %230
  %232 = load i32, ptr %34, align 4, !tbaa !9
  %233 = load i32, ptr %15, align 4, !tbaa !9
  %234 = icmp slt i32 %232, %233
  br i1 %234, label %236, label %235

235:                                              ; preds = %231
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %315

236:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  %237 = load ptr, ptr %14, align 8, !tbaa !5
  %238 = load i32, ptr %34, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds %struct.b3Contact4, ptr %237, i64 %239
  %241 = invoke noundef i32 @_ZNK10b3Contact48getBodyAEv(ptr noundef nonnull align 16 dereferenceable(112) %240)
          to label %242 unwind label %261

242:                                              ; preds = %236
  store i32 %241, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  %243 = load ptr, ptr %14, align 8, !tbaa !5
  %244 = load i32, ptr %34, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds %struct.b3Contact4, ptr %243, i64 %245
  %247 = invoke noundef i32 @_ZNK10b3Contact48getBodyBEv(ptr noundef nonnull align 16 dereferenceable(112) %246)
          to label %248 unwind label %265

248:                                              ; preds = %242
  store i32 %247, ptr %36, align 4, !tbaa !9
  %249 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 14
  %250 = load i8, ptr %249, align 8, !tbaa !25, !range !26, !noundef !27
  %251 = trunc i8 %250 to i1
  br i1 %251, label %252, label %269

252:                                              ; preds = %248
  %253 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %254 = load i32, ptr %35, align 4, !tbaa !9
  %255 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %253, i32 noundef %254)
          to label %256 unwind label %265

256:                                              ; preds = %252
  store i32 -1, ptr %255, align 4, !tbaa !9
  %257 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %258 = load i32, ptr %36, align 4, !tbaa !9
  %259 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %257, i32 noundef %258)
          to label %260 unwind label %265

260:                                              ; preds = %256
  store i32 -1, ptr %259, align 4, !tbaa !9
  br label %310

261:                                              ; preds = %236
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %21, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %22, align 4
  br label %314

265:                                              ; preds = %304, %297, %284, %277, %256, %252, %242
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %21, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  br label %314

269:                                              ; preds = %248
  %270 = load ptr, ptr %11, align 8, !tbaa !5
  %271 = load i32, ptr %35, align 4, !tbaa !9
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds %struct.b3RigidBodyData, ptr %270, i64 %272
  %274 = getelementptr inbounds %struct.b3RigidBodyData, ptr %273, i32 0, i32 5
  %275 = load float, ptr %274, align 4, !tbaa !30
  %276 = fcmp une float %275, 0.000000e+00
  br i1 %276, label %277, label %284

277:                                              ; preds = %269
  %278 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %279 = load i32, ptr %35, align 4, !tbaa !9
  %280 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %278, i32 noundef %279)
          to label %281 unwind label %265

281:                                              ; preds = %277
  %282 = load i32, ptr %280, align 4, !tbaa !9
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %280, align 4, !tbaa !9
  br label %289

284:                                              ; preds = %269
  %285 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %286 = load i32, ptr %35, align 4, !tbaa !9
  %287 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %285, i32 noundef %286)
          to label %288 unwind label %265

288:                                              ; preds = %284
  store i32 -1, ptr %287, align 4, !tbaa !9
  br label %289

289:                                              ; preds = %288, %281
  %290 = load ptr, ptr %11, align 8, !tbaa !5
  %291 = load i32, ptr %36, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds %struct.b3RigidBodyData, ptr %290, i64 %292
  %294 = getelementptr inbounds %struct.b3RigidBodyData, ptr %293, i32 0, i32 5
  %295 = load float, ptr %294, align 4, !tbaa !30
  %296 = fcmp une float %295, 0.000000e+00
  br i1 %296, label %297, label %304

297:                                              ; preds = %289
  %298 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %299 = load i32, ptr %36, align 4, !tbaa !9
  %300 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %298, i32 noundef %299)
          to label %301 unwind label %265

301:                                              ; preds = %297
  %302 = load i32, ptr %300, align 4, !tbaa !9
  %303 = add nsw i32 %302, 1
  store i32 %303, ptr %300, align 4, !tbaa !9
  br label %309

304:                                              ; preds = %289
  %305 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 10
  %306 = load i32, ptr %36, align 4, !tbaa !9
  %307 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %305, i32 noundef %306)
          to label %308 unwind label %265

308:                                              ; preds = %304
  store i32 -1, ptr %307, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %308, %301
  br label %310

310:                                              ; preds = %309, %260
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  br label %311

311:                                              ; preds = %310
  %312 = load i32, ptr %34, align 4, !tbaa !9
  %313 = add nsw i32 %312, 1
  store i32 %313, ptr %34, align 4, !tbaa !9
  br label %231, !llvm.loop !36

314:                                              ; preds = %265, %261
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #10
  br label %1173

315:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %316

316:                                              ; preds = %328, %315
  %317 = load i32, ptr %37, align 4, !tbaa !9
  %318 = load i32, ptr %17, align 4, !tbaa !9
  %319 = icmp slt i32 %317, %318
  br i1 %319, label %320, label %335

320:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %321 = load ptr, ptr %16, align 8, !tbaa !5
  %322 = load i32, ptr %37, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds ptr, ptr %321, i64 %323
  %325 = load ptr, ptr %324, align 8, !tbaa !5
  store ptr %325, ptr %38, align 8, !tbaa !5
  %326 = load ptr, ptr %38, align 8, !tbaa !5
  invoke void @_ZN17b3TypedConstraint25internalSetAppliedImpulseEf(ptr noundef nonnull align 16 dereferenceable(64) %326, float noundef 0.000000e+00)
          to label %327 unwind label %331

327:                                              ; preds = %320
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  br label %328

328:                                              ; preds = %327
  %329 = load i32, ptr %37, align 4, !tbaa !9
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %37, align 4, !tbaa !9
  br label %316, !llvm.loop !37

331:                                              ; preds = %320
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %21, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  br label %1173

335:                                              ; preds = %316
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  store i32 0, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #10
  %336 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 9
  %337 = load i32, ptr %17, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %336, i32 noundef %337)
          to label %338 unwind label %370

338:                                              ; preds = %335
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %339

339:                                              ; preds = %422, %338
  %340 = load i32, ptr %40, align 4, !tbaa !9
  %341 = load i32, ptr %17, align 4, !tbaa !9
  %342 = icmp slt i32 %340, %341
  br i1 %342, label %343, label %426

343:                                              ; preds = %339
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  %344 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 9
  %345 = load i32, ptr %40, align 4, !tbaa !9
  %346 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EEixEi(ptr noundef nonnull align 8 dereferenceable(25) %344, i32 noundef %345)
          to label %347 unwind label %374

347:                                              ; preds = %343
  store ptr %346, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %348 = load ptr, ptr %16, align 8, !tbaa !5
  %349 = load i32, ptr %40, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds ptr, ptr %348, i64 %350
  %352 = load ptr, ptr %351, align 8, !tbaa !5
  %353 = invoke noundef ptr @_ZN17b3TypedConstraint16getJointFeedbackEv(ptr noundef nonnull align 16 dereferenceable(64) %352)
          to label %354 unwind label %378

354:                                              ; preds = %347
  store ptr %353, ptr %42, align 8, !tbaa !5
  %355 = load ptr, ptr %42, align 8, !tbaa !5
  %356 = icmp ne ptr %355, null
  br i1 %356, label %357, label %382

357:                                              ; preds = %354
  %358 = load ptr, ptr %42, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.b3JointFeedback, ptr %358, i32 0, i32 0
  invoke void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %359)
          to label %360 unwind label %378

360:                                              ; preds = %357
  %361 = load ptr, ptr %42, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.b3JointFeedback, ptr %361, i32 0, i32 1
  invoke void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %362)
          to label %363 unwind label %378

363:                                              ; preds = %360
  %364 = load ptr, ptr %42, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.b3JointFeedback, ptr %364, i32 0, i32 2
  invoke void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %365)
          to label %366 unwind label %378

366:                                              ; preds = %363
  %367 = load ptr, ptr %42, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.b3JointFeedback, ptr %367, i32 0, i32 3
  invoke void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %368)
          to label %369 unwind label %378

369:                                              ; preds = %366
  br label %382

370:                                              ; preds = %426, %335
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %21, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %22, align 4
  br label %1076

374:                                              ; preds = %343
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %21, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %22, align 4
  br label %425

378:                                              ; preds = %399, %391, %382, %366, %363, %360, %357, %347
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %21, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %425

382:                                              ; preds = %369, %354
  %383 = load ptr, ptr %16, align 8, !tbaa !5
  %384 = load i32, ptr %40, align 4, !tbaa !9
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds ptr, ptr %383, i64 %385
  %387 = load ptr, ptr %386, align 8, !tbaa !5
  %388 = invoke noundef zeroext i1 @_ZNK17b3TypedConstraint9isEnabledEv(ptr noundef nonnull align 16 dereferenceable(64) %387)
          to label %389 unwind label %378

389:                                              ; preds = %382
  br i1 %388, label %390, label %391

390:                                              ; preds = %389
  br label %391

391:                                              ; preds = %390, %389
  %392 = load ptr, ptr %16, align 8, !tbaa !5
  %393 = load i32, ptr %40, align 4, !tbaa !9
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds ptr, ptr %392, i64 %394
  %396 = load ptr, ptr %395, align 8, !tbaa !5
  %397 = invoke noundef zeroext i1 @_ZNK17b3TypedConstraint9isEnabledEv(ptr noundef nonnull align 16 dereferenceable(64) %396)
          to label %398 unwind label %378

398:                                              ; preds = %391
  br i1 %397, label %399, label %411

399:                                              ; preds = %398
  %400 = load ptr, ptr %16, align 8, !tbaa !5
  %401 = load i32, ptr %40, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds ptr, ptr %400, i64 %402
  %404 = load ptr, ptr %403, align 8, !tbaa !5
  %405 = load ptr, ptr %41, align 8, !tbaa !5
  %406 = load ptr, ptr %11, align 8, !tbaa !5
  %407 = load ptr, ptr %404, align 16, !tbaa !38
  %408 = getelementptr inbounds ptr, ptr %407, i64 3
  %409 = load ptr, ptr %408, align 8
  invoke void %409(ptr noundef nonnull align 16 dereferenceable(64) %404, ptr noundef %405, ptr noundef %406)
          to label %410 unwind label %378

410:                                              ; preds = %399
  br label %416

411:                                              ; preds = %398
  %412 = load ptr, ptr %41, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo1", ptr %412, i32 0, i32 0
  store i32 0, ptr %413, align 4, !tbaa !40
  %414 = load ptr, ptr %41, align 8, !tbaa !5
  %415 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo1", ptr %414, i32 0, i32 1
  store i32 0, ptr %415, align 4, !tbaa !42
  br label %416

416:                                              ; preds = %411, %410
  %417 = load ptr, ptr %41, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo1", ptr %417, i32 0, i32 0
  %419 = load i32, ptr %418, align 4, !tbaa !40
  %420 = load i32, ptr %39, align 4, !tbaa !9
  %421 = add nsw i32 %420, %419
  store i32 %421, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %422

422:                                              ; preds = %416
  %423 = load i32, ptr %40, align 4, !tbaa !9
  %424 = add nsw i32 %423, 1
  store i32 %424, ptr %40, align 4, !tbaa !9
  br label %339, !llvm.loop !43

425:                                              ; preds = %378, %374
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %1076

426:                                              ; preds = %339
  %427 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 3
  %428 = load i32, ptr %39, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayI18b3SolverConstraintE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %427, i32 noundef %428)
          to label %429 unwind label %370

429:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  store i32 0, ptr %43, align 4, !tbaa !9
  store i32 0, ptr %40, align 4, !tbaa !9
  br label %430

430:                                              ; preds = %1054, %429
  %431 = load i32, ptr %40, align 4, !tbaa !9
  %432 = load i32, ptr %17, align 4, !tbaa !9
  %433 = icmp slt i32 %431, %432
  br i1 %433, label %434, label %1058

434:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %435 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 9
  %436 = load i32, ptr %40, align 4, !tbaa !9
  %437 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EEixEi(ptr noundef nonnull align 8 dereferenceable(25) %435, i32 noundef %436)
          to label %438 unwind label %508

438:                                              ; preds = %434
  store ptr %437, ptr %44, align 8, !tbaa !5
  %439 = load ptr, ptr %44, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo1", ptr %439, i32 0, i32 0
  %441 = load i32, ptr %440, align 4, !tbaa !40
  %442 = icmp ne i32 %441, 0
  br i1 %442, label %443, label %1045

443:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %444 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 3
  %445 = load i32, ptr %43, align 4, !tbaa !9
  %446 = invoke noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %444, i32 noundef %445)
          to label %447 unwind label %512

447:                                              ; preds = %443
  store ptr %446, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %448 = load ptr, ptr %16, align 8, !tbaa !5
  %449 = load i32, ptr %40, align 4, !tbaa !9
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds ptr, ptr %448, i64 %450
  %452 = load ptr, ptr %451, align 8, !tbaa !5
  store ptr %452, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  %453 = load ptr, ptr %11, align 8, !tbaa !5
  %454 = load ptr, ptr %46, align 8, !tbaa !5
  %455 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %454)
          to label %456 unwind label %516

456:                                              ; preds = %447
  %457 = sext i32 %455 to i64
  %458 = getelementptr inbounds %struct.b3RigidBodyData, ptr %453, i64 %457
  store ptr %458, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  %459 = load ptr, ptr %11, align 8, !tbaa !5
  %460 = load ptr, ptr %46, align 8, !tbaa !5
  %461 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %460)
          to label %462 unwind label %520

462:                                              ; preds = %456
  %463 = sext i32 %461 to i64
  %464 = getelementptr inbounds %struct.b3RigidBodyData, ptr %459, i64 %463
  store ptr %464, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #10
  %465 = load ptr, ptr %46, align 8, !tbaa !5
  %466 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %465)
          to label %467 unwind label %524

467:                                              ; preds = %462
  %468 = load ptr, ptr %11, align 8, !tbaa !5
  %469 = load ptr, ptr %12, align 8, !tbaa !5
  %470 = invoke noundef i32 @_ZN17b3PgsJacobiSolver19getOrInitSolverBodyEiP15b3RigidBodyDataP13b3InertiaData(ptr noundef nonnull align 8 dereferenceable(448) %107, i32 noundef %466, ptr noundef %468, ptr noundef %469)
          to label %471 unwind label %524

471:                                              ; preds = %467
  store i32 %470, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #10
  %472 = load ptr, ptr %46, align 8, !tbaa !5
  %473 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %472)
          to label %474 unwind label %528

474:                                              ; preds = %471
  %475 = load ptr, ptr %11, align 8, !tbaa !5
  %476 = load ptr, ptr %12, align 8, !tbaa !5
  %477 = invoke noundef i32 @_ZN17b3PgsJacobiSolver19getOrInitSolverBodyEiP15b3RigidBodyDataP13b3InertiaData(ptr noundef nonnull align 8 dereferenceable(448) %107, i32 noundef %473, ptr noundef %475, ptr noundef %476)
          to label %478 unwind label %528

478:                                              ; preds = %474
  store i32 %477, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #10
  %479 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 1
  %480 = load i32, ptr %49, align 4, !tbaa !9
  %481 = invoke noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %479, i32 noundef %480)
          to label %482 unwind label %532

482:                                              ; preds = %478
  store ptr %481, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #10
  %483 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 1
  %484 = load i32, ptr %50, align 4, !tbaa !9
  %485 = invoke noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %483, i32 noundef %484)
          to label %486 unwind label %536

486:                                              ; preds = %482
  store ptr %485, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #10
  %487 = load ptr, ptr %46, align 8, !tbaa !5
  %488 = invoke noundef i32 @_ZNK17b3TypedConstraint30getOverrideNumSolverIterationsEv(ptr noundef nonnull align 16 dereferenceable(64) %487)
          to label %489 unwind label %540

489:                                              ; preds = %486
  %490 = icmp sgt i32 %488, 0
  br i1 %490, label %491, label %495

491:                                              ; preds = %489
  %492 = load ptr, ptr %46, align 8, !tbaa !5
  %493 = invoke noundef i32 @_ZNK17b3TypedConstraint30getOverrideNumSolverIterationsEv(ptr noundef nonnull align 16 dereferenceable(64) %492)
          to label %494 unwind label %540

494:                                              ; preds = %491
  br label %499

495:                                              ; preds = %489
  %496 = load ptr, ptr %18, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %496, i32 0, i32 5
  %498 = load i32, ptr %497, align 4, !tbaa !44
  br label %499

499:                                              ; preds = %495, %494
  %500 = phi i32 [ %493, %494 ], [ %498, %495 ]
  store i32 %500, ptr %53, align 4, !tbaa !9
  %501 = load i32, ptr %53, align 4, !tbaa !9
  %502 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 15
  %503 = load i32, ptr %502, align 4, !tbaa !11
  %504 = icmp sgt i32 %501, %503
  br i1 %504, label %505, label %544

505:                                              ; preds = %499
  %506 = load i32, ptr %53, align 4, !tbaa !9
  %507 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 15
  store i32 %506, ptr %507, align 4, !tbaa !11
  br label %544

508:                                              ; preds = %1045, %434
  %509 = landingpad { ptr, i32 }
          cleanup
  %510 = extractvalue { ptr, i32 } %509, 0
  store ptr %510, ptr %21, align 8
  %511 = extractvalue { ptr, i32 } %509, 1
  store i32 %511, ptr %22, align 4
  br label %1057

512:                                              ; preds = %443
  %513 = landingpad { ptr, i32 }
          cleanup
  %514 = extractvalue { ptr, i32 } %513, 0
  store ptr %514, ptr %21, align 8
  %515 = extractvalue { ptr, i32 } %513, 1
  store i32 %515, ptr %22, align 4
  br label %1044

516:                                              ; preds = %447
  %517 = landingpad { ptr, i32 }
          cleanup
  %518 = extractvalue { ptr, i32 } %517, 0
  store ptr %518, ptr %21, align 8
  %519 = extractvalue { ptr, i32 } %517, 1
  store i32 %519, ptr %22, align 4
  br label %1043

520:                                              ; preds = %456
  %521 = landingpad { ptr, i32 }
          cleanup
  %522 = extractvalue { ptr, i32 } %521, 0
  store ptr %522, ptr %21, align 8
  %523 = extractvalue { ptr, i32 } %521, 1
  store i32 %523, ptr %22, align 4
  br label %1042

524:                                              ; preds = %467, %462
  %525 = landingpad { ptr, i32 }
          cleanup
  %526 = extractvalue { ptr, i32 } %525, 0
  store ptr %526, ptr %21, align 8
  %527 = extractvalue { ptr, i32 } %525, 1
  store i32 %527, ptr %22, align 4
  br label %1041

528:                                              ; preds = %474, %471
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %21, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %22, align 4
  br label %1040

532:                                              ; preds = %478
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %21, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %22, align 4
  br label %1039

536:                                              ; preds = %482
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %21, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %22, align 4
  br label %1038

540:                                              ; preds = %491, %486
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %21, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %22, align 4
  br label %1037

544:                                              ; preds = %505, %499
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #10
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %545

545:                                              ; preds = %594, %544
  %546 = load i32, ptr %54, align 4, !tbaa !9
  %547 = load ptr, ptr %44, align 8, !tbaa !5
  %548 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo1", ptr %547, i32 0, i32 0
  %549 = load i32, ptr %548, align 4, !tbaa !40
  %550 = icmp slt i32 %546, %549
  br i1 %550, label %551, label %597

551:                                              ; preds = %545
  %552 = load ptr, ptr %45, align 8, !tbaa !5
  %553 = load i32, ptr %54, align 4, !tbaa !9
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds %struct.b3SolverConstraint, ptr %552, i64 %554
  call void @llvm.memset.p0.i64(ptr align 16 %555, i8 0, i64 160, i1 false)
  %556 = load ptr, ptr %45, align 8, !tbaa !5
  %557 = load i32, ptr %54, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds %struct.b3SolverConstraint, ptr %556, i64 %558
  %560 = getelementptr inbounds %struct.b3SolverConstraint, ptr %559, i32 0, i32 13
  store float 0xC7EFFFFFE0000000, ptr %560, align 16, !tbaa !46
  %561 = load ptr, ptr %45, align 8, !tbaa !5
  %562 = load i32, ptr %54, align 4, !tbaa !9
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds %struct.b3SolverConstraint, ptr %561, i64 %563
  %565 = getelementptr inbounds %struct.b3SolverConstraint, ptr %564, i32 0, i32 14
  store float 0x47EFFFFFE0000000, ptr %565, align 4, !tbaa !48
  %566 = load ptr, ptr %45, align 8, !tbaa !5
  %567 = load i32, ptr %54, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds %struct.b3SolverConstraint, ptr %566, i64 %568
  %570 = getelementptr inbounds %struct.b3SolverConstraint, ptr %569, i32 0, i32 6
  store float 0.000000e+00, ptr %570, align 4, !tbaa !49
  %571 = load ptr, ptr %45, align 8, !tbaa !5
  %572 = load i32, ptr %54, align 4, !tbaa !9
  %573 = sext i32 %572 to i64
  %574 = getelementptr inbounds %struct.b3SolverConstraint, ptr %571, i64 %573
  %575 = getelementptr inbounds %struct.b3SolverConstraint, ptr %574, i32 0, i32 5
  store float 0.000000e+00, ptr %575, align 16, !tbaa !50
  %576 = load i32, ptr %49, align 4, !tbaa !9
  %577 = load ptr, ptr %45, align 8, !tbaa !5
  %578 = load i32, ptr %54, align 4, !tbaa !9
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds %struct.b3SolverConstraint, ptr %577, i64 %579
  %581 = getelementptr inbounds %struct.b3SolverConstraint, ptr %580, i32 0, i32 19
  store i32 %576, ptr %581, align 16, !tbaa !51
  %582 = load i32, ptr %50, align 4, !tbaa !9
  %583 = load ptr, ptr %45, align 8, !tbaa !5
  %584 = load i32, ptr %54, align 4, !tbaa !9
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds %struct.b3SolverConstraint, ptr %583, i64 %585
  %587 = getelementptr inbounds %struct.b3SolverConstraint, ptr %586, i32 0, i32 20
  store i32 %582, ptr %587, align 4, !tbaa !52
  %588 = load i32, ptr %53, align 4, !tbaa !9
  %589 = load ptr, ptr %45, align 8, !tbaa !5
  %590 = load i32, ptr %54, align 4, !tbaa !9
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds %struct.b3SolverConstraint, ptr %589, i64 %591
  %593 = getelementptr inbounds %struct.b3SolverConstraint, ptr %592, i32 0, i32 17
  store i32 %588, ptr %593, align 8, !tbaa !53
  br label %594

594:                                              ; preds = %551
  %595 = load i32, ptr %54, align 4, !tbaa !9
  %596 = add nsw i32 %595, 1
  store i32 %596, ptr %54, align 4, !tbaa !9
  br label %545, !llvm.loop !54

597:                                              ; preds = %545
  %598 = load ptr, ptr %51, align 8, !tbaa !5
  %599 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody30internalGetDeltaLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %598)
          to label %600 unwind label %723

600:                                              ; preds = %597
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #10
  store float 0.000000e+00, ptr %55, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #10
  store float 0.000000e+00, ptr %56, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  store float 0.000000e+00, ptr %57, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %599, ptr noundef nonnull align 4 dereferenceable(4) %55, ptr noundef nonnull align 4 dereferenceable(4) %56, ptr noundef nonnull align 4 dereferenceable(4) %57)
          to label %601 unwind label %727

601:                                              ; preds = %600
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  %602 = load ptr, ptr %51, align 8, !tbaa !5
  %603 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody31internalGetDeltaAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %602)
          to label %604 unwind label %723

604:                                              ; preds = %601
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #10
  store float 0.000000e+00, ptr %58, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #10
  store float 0.000000e+00, ptr %59, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #10
  store float 0.000000e+00, ptr %60, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %603, ptr noundef nonnull align 4 dereferenceable(4) %58, ptr noundef nonnull align 4 dereferenceable(4) %59, ptr noundef nonnull align 4 dereferenceable(4) %60)
          to label %605 unwind label %731

605:                                              ; preds = %604
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #10
  %606 = load ptr, ptr %51, align 8, !tbaa !5
  %607 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetPushVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %606)
          to label %608 unwind label %723

608:                                              ; preds = %605
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #10
  store float 0.000000e+00, ptr %61, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #10
  store float 0.000000e+00, ptr %62, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #10
  store float 0.000000e+00, ptr %63, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %607, ptr noundef nonnull align 4 dereferenceable(4) %61, ptr noundef nonnull align 4 dereferenceable(4) %62, ptr noundef nonnull align 4 dereferenceable(4) %63)
          to label %609 unwind label %735

609:                                              ; preds = %608
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #10
  %610 = load ptr, ptr %51, align 8, !tbaa !5
  %611 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetTurnVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %610)
          to label %612 unwind label %723

612:                                              ; preds = %609
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #10
  store float 0.000000e+00, ptr %64, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #10
  store float 0.000000e+00, ptr %65, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #10
  store float 0.000000e+00, ptr %66, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %611, ptr noundef nonnull align 4 dereferenceable(4) %64, ptr noundef nonnull align 4 dereferenceable(4) %65, ptr noundef nonnull align 4 dereferenceable(4) %66)
          to label %613 unwind label %739

613:                                              ; preds = %612
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #10
  %614 = load ptr, ptr %52, align 8, !tbaa !5
  %615 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody30internalGetDeltaLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %614)
          to label %616 unwind label %723

616:                                              ; preds = %613
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #10
  store float 0.000000e+00, ptr %67, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #10
  store float 0.000000e+00, ptr %68, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #10
  store float 0.000000e+00, ptr %69, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %615, ptr noundef nonnull align 4 dereferenceable(4) %67, ptr noundef nonnull align 4 dereferenceable(4) %68, ptr noundef nonnull align 4 dereferenceable(4) %69)
          to label %617 unwind label %743

617:                                              ; preds = %616
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #10
  %618 = load ptr, ptr %52, align 8, !tbaa !5
  %619 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody31internalGetDeltaAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %618)
          to label %620 unwind label %723

620:                                              ; preds = %617
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #10
  store float 0.000000e+00, ptr %70, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #10
  store float 0.000000e+00, ptr %71, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #10
  store float 0.000000e+00, ptr %72, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %619, ptr noundef nonnull align 4 dereferenceable(4) %70, ptr noundef nonnull align 4 dereferenceable(4) %71, ptr noundef nonnull align 4 dereferenceable(4) %72)
          to label %621 unwind label %747

621:                                              ; preds = %620
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #10
  %622 = load ptr, ptr %52, align 8, !tbaa !5
  %623 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetPushVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %622)
          to label %624 unwind label %723

624:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #10
  store float 0.000000e+00, ptr %73, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #10
  store float 0.000000e+00, ptr %74, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #10
  store float 0.000000e+00, ptr %75, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %623, ptr noundef nonnull align 4 dereferenceable(4) %73, ptr noundef nonnull align 4 dereferenceable(4) %74, ptr noundef nonnull align 4 dereferenceable(4) %75)
          to label %625 unwind label %751

625:                                              ; preds = %624
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #10
  %626 = load ptr, ptr %52, align 8, !tbaa !5
  %627 = invoke noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetTurnVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %626)
          to label %628 unwind label %723

628:                                              ; preds = %625
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #10
  store float 0.000000e+00, ptr %76, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #10
  store float 0.000000e+00, ptr %77, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #10
  store float 0.000000e+00, ptr %78, align 4, !tbaa !55
  invoke void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %627, ptr noundef nonnull align 4 dereferenceable(4) %76, ptr noundef nonnull align 4 dereferenceable(4) %77, ptr noundef nonnull align 4 dereferenceable(4) %78)
          to label %629 unwind label %755

629:                                              ; preds = %628
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #10
  call void @llvm.lifetime.start.p0(i64 96, ptr %79) #10
  %630 = load ptr, ptr %18, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %630, i32 0, i32 3
  %632 = load float, ptr %631, align 4, !tbaa !56
  %633 = fdiv float 1.000000e+00, %632
  %634 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 0
  store float %633, ptr %634, align 8, !tbaa !57
  %635 = load ptr, ptr %18, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %635, i32 0, i32 8
  %637 = load float, ptr %636, align 4, !tbaa !59
  %638 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 1
  store float %637, ptr %638, align 4, !tbaa !60
  %639 = load ptr, ptr %45, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.b3SolverConstraint, ptr %639, i32 0, i32 1
  %641 = invoke noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %640)
          to label %642 unwind label %759

642:                                              ; preds = %629
  %643 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 2
  store ptr %641, ptr %643, align 8, !tbaa !61
  %644 = load ptr, ptr %45, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.b3SolverConstraint, ptr %644, i32 0, i32 0
  %646 = invoke noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %645)
          to label %647 unwind label %759

647:                                              ; preds = %642
  %648 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 3
  store ptr %646, ptr %648, align 8, !tbaa !62
  %649 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 4
  store ptr null, ptr %649, align 8, !tbaa !63
  %650 = load ptr, ptr %45, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.b3SolverConstraint, ptr %650, i32 0, i32 2
  %652 = invoke noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %651)
          to label %653 unwind label %759

653:                                              ; preds = %647
  %654 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 5
  store ptr %652, ptr %654, align 8, !tbaa !64
  %655 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 6
  store i32 40, ptr %655, align 8, !tbaa !65
  %656 = load ptr, ptr %45, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.b3SolverConstraint, ptr %656, i32 0, i32 11
  %658 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 7
  store ptr %657, ptr %658, align 8, !tbaa !66
  %659 = load ptr, ptr %18, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %659, i32 0, i32 10
  %661 = load float, ptr %660, align 4, !tbaa !67
  %662 = load ptr, ptr %45, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.b3SolverConstraint, ptr %662, i32 0, i32 12
  store float %661, ptr %663, align 4, !tbaa !68
  %664 = load ptr, ptr %18, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %664, i32 0, i32 1
  %666 = load float, ptr %665, align 4, !tbaa !69
  %667 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 13
  store float %666, ptr %667, align 4, !tbaa !70
  %668 = load ptr, ptr %45, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.b3SolverConstraint, ptr %668, i32 0, i32 12
  %670 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 8
  store ptr %669, ptr %670, align 8, !tbaa !71
  %671 = load ptr, ptr %45, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.b3SolverConstraint, ptr %671, i32 0, i32 13
  %673 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 9
  store ptr %672, ptr %673, align 8, !tbaa !72
  %674 = load ptr, ptr %45, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.b3SolverConstraint, ptr %674, i32 0, i32 14
  %676 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 10
  store ptr %675, ptr %676, align 8, !tbaa !73
  %677 = load ptr, ptr %18, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %677, i32 0, i32 5
  %679 = load i32, ptr %678, align 4, !tbaa !44
  %680 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 12
  store i32 %679, ptr %680, align 8, !tbaa !74
  %681 = load ptr, ptr %16, align 8, !tbaa !5
  %682 = load i32, ptr %40, align 4, !tbaa !9
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds ptr, ptr %681, i64 %683
  %685 = load ptr, ptr %684, align 8, !tbaa !5
  %686 = load ptr, ptr %11, align 8, !tbaa !5
  %687 = load ptr, ptr %685, align 16, !tbaa !38
  %688 = getelementptr inbounds ptr, ptr %687, i64 4
  %689 = load ptr, ptr %688, align 8
  invoke void %689(ptr noundef nonnull align 16 dereferenceable(64) %685, ptr noundef %79, ptr noundef %686)
          to label %690 unwind label %759

690:                                              ; preds = %653
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %691

691:                                              ; preds = %974, %690
  %692 = load i32, ptr %54, align 4, !tbaa !9
  %693 = load ptr, ptr %44, align 8, !tbaa !5
  %694 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo1", ptr %693, i32 0, i32 0
  %695 = load i32, ptr %694, align 4, !tbaa !40
  %696 = icmp slt i32 %692, %695
  br i1 %696, label %697, label %1034

697:                                              ; preds = %691
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #10
  %698 = load ptr, ptr %45, align 8, !tbaa !5
  %699 = load i32, ptr %54, align 4, !tbaa !9
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds %struct.b3SolverConstraint, ptr %698, i64 %700
  store ptr %701, ptr %80, align 8, !tbaa !5
  %702 = load ptr, ptr %80, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.b3SolverConstraint, ptr %702, i32 0, i32 14
  %704 = load float, ptr %703, align 4, !tbaa !48
  %705 = load ptr, ptr %16, align 8, !tbaa !5
  %706 = load i32, ptr %40, align 4, !tbaa !9
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds ptr, ptr %705, i64 %707
  %709 = load ptr, ptr %708, align 8, !tbaa !5
  %710 = invoke noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %709)
          to label %711 unwind label %763

711:                                              ; preds = %697
  %712 = fcmp oge float %704, %710
  br i1 %712, label %713, label %767

713:                                              ; preds = %711
  %714 = load ptr, ptr %16, align 8, !tbaa !5
  %715 = load i32, ptr %40, align 4, !tbaa !9
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds ptr, ptr %714, i64 %716
  %718 = load ptr, ptr %717, align 8, !tbaa !5
  %719 = invoke noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %718)
          to label %720 unwind label %763

720:                                              ; preds = %713
  %721 = load ptr, ptr %80, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.b3SolverConstraint, ptr %721, i32 0, i32 14
  store float %719, ptr %722, align 4, !tbaa !48
  br label %767

723:                                              ; preds = %625, %621, %617, %613, %609, %605, %601, %597
  %724 = landingpad { ptr, i32 }
          cleanup
  %725 = extractvalue { ptr, i32 } %724, 0
  store ptr %725, ptr %21, align 8
  %726 = extractvalue { ptr, i32 } %724, 1
  store i32 %726, ptr %22, align 4
  br label %1036

727:                                              ; preds = %600
  %728 = landingpad { ptr, i32 }
          cleanup
  %729 = extractvalue { ptr, i32 } %728, 0
  store ptr %729, ptr %21, align 8
  %730 = extractvalue { ptr, i32 } %728, 1
  store i32 %730, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #10
  br label %1036

731:                                              ; preds = %604
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %21, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #10
  br label %1036

735:                                              ; preds = %608
  %736 = landingpad { ptr, i32 }
          cleanup
  %737 = extractvalue { ptr, i32 } %736, 0
  store ptr %737, ptr %21, align 8
  %738 = extractvalue { ptr, i32 } %736, 1
  store i32 %738, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #10
  br label %1036

739:                                              ; preds = %612
  %740 = landingpad { ptr, i32 }
          cleanup
  %741 = extractvalue { ptr, i32 } %740, 0
  store ptr %741, ptr %21, align 8
  %742 = extractvalue { ptr, i32 } %740, 1
  store i32 %742, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #10
  br label %1036

743:                                              ; preds = %616
  %744 = landingpad { ptr, i32 }
          cleanup
  %745 = extractvalue { ptr, i32 } %744, 0
  store ptr %745, ptr %21, align 8
  %746 = extractvalue { ptr, i32 } %744, 1
  store i32 %746, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #10
  br label %1036

747:                                              ; preds = %620
  %748 = landingpad { ptr, i32 }
          cleanup
  %749 = extractvalue { ptr, i32 } %748, 0
  store ptr %749, ptr %21, align 8
  %750 = extractvalue { ptr, i32 } %748, 1
  store i32 %750, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #10
  br label %1036

751:                                              ; preds = %624
  %752 = landingpad { ptr, i32 }
          cleanup
  %753 = extractvalue { ptr, i32 } %752, 0
  store ptr %753, ptr %21, align 8
  %754 = extractvalue { ptr, i32 } %752, 1
  store i32 %754, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #10
  br label %1036

755:                                              ; preds = %628
  %756 = landingpad { ptr, i32 }
          cleanup
  %757 = extractvalue { ptr, i32 } %756, 0
  store ptr %757, ptr %21, align 8
  %758 = extractvalue { ptr, i32 } %756, 1
  store i32 %758, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #10
  br label %1036

759:                                              ; preds = %653, %647, %642, %629
  %760 = landingpad { ptr, i32 }
          cleanup
  %761 = extractvalue { ptr, i32 } %760, 0
  store ptr %761, ptr %21, align 8
  %762 = extractvalue { ptr, i32 } %760, 1
  store i32 %762, ptr %22, align 4
  br label %1035

763:                                              ; preds = %780, %767, %713, %697
  %764 = landingpad { ptr, i32 }
          cleanup
  %765 = extractvalue { ptr, i32 } %764, 0
  store ptr %765, ptr %21, align 8
  %766 = extractvalue { ptr, i32 } %764, 1
  store i32 %766, ptr %22, align 4
  br label %1033

767:                                              ; preds = %720, %711
  %768 = load ptr, ptr %80, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.b3SolverConstraint, ptr %768, i32 0, i32 13
  %770 = load float, ptr %769, align 16, !tbaa !46
  %771 = load ptr, ptr %16, align 8, !tbaa !5
  %772 = load i32, ptr %40, align 4, !tbaa !9
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds ptr, ptr %771, i64 %773
  %775 = load ptr, ptr %774, align 8, !tbaa !5
  %776 = invoke noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %775)
          to label %777 unwind label %763

777:                                              ; preds = %767
  %778 = fneg float %776
  %779 = fcmp ole float %770, %778
  br i1 %779, label %780, label %791

780:                                              ; preds = %777
  %781 = load ptr, ptr %16, align 8, !tbaa !5
  %782 = load i32, ptr %40, align 4, !tbaa !9
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds ptr, ptr %781, i64 %783
  %785 = load ptr, ptr %784, align 8, !tbaa !5
  %786 = invoke noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %785)
          to label %787 unwind label %763

787:                                              ; preds = %780
  %788 = fneg float %786
  %789 = load ptr, ptr %80, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.b3SolverConstraint, ptr %789, i32 0, i32 13
  store float %788, ptr %790, align 16, !tbaa !46
  br label %791

791:                                              ; preds = %787, %777
  %792 = load ptr, ptr %46, align 8, !tbaa !5
  %793 = load ptr, ptr %80, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.b3SolverConstraint, ptr %793, i32 0, i32 16
  store ptr %792, ptr %794, align 16, !tbaa !75
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #10
  %795 = load ptr, ptr %12, align 8, !tbaa !5
  %796 = load ptr, ptr %46, align 8, !tbaa !5
  %797 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %796)
          to label %798 unwind label %977

798:                                              ; preds = %791
  %799 = sext i32 %797 to i64
  %800 = getelementptr inbounds %struct.b3InertiaData, ptr %795, i64 %799
  %801 = getelementptr inbounds %struct.b3InertiaData, ptr %800, i32 0, i32 0
  store ptr %801, ptr %81, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #10
  %802 = load ptr, ptr %80, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.b3SolverConstraint, ptr %802, i32 0, i32 0
  store ptr %803, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %83) #10
  %804 = load ptr, ptr %81, align 8, !tbaa !5
  %805 = load ptr, ptr %82, align 8, !tbaa !5
  %806 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %804, ptr noundef nonnull align 16 dereferenceable(16) %805)
          to label %807 unwind label %981

807:                                              ; preds = %798
  %808 = getelementptr inbounds %class.b3Vector3, ptr %83, i32 0, i32 0
  %809 = getelementptr inbounds %union.anon, ptr %808, i32 0, i32 0
  %810 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %809, i32 0, i32 0
  %811 = extractvalue { <2 x float>, <2 x float> } %806, 0
  store <2 x float> %811, ptr %810, align 16
  %812 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %809, i32 0, i32 1
  %813 = extractvalue { <2 x float>, <2 x float> } %806, 1
  store <2 x float> %813, ptr %812, align 8
  %814 = load ptr, ptr %80, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.b3SolverConstraint, ptr %814, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %815, ptr align 16 %83, i64 16, i1 false), !tbaa.struct !76
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #10
  %816 = load ptr, ptr %12, align 8, !tbaa !5
  %817 = load ptr, ptr %46, align 8, !tbaa !5
  %818 = invoke noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %817)
          to label %819 unwind label %985

819:                                              ; preds = %807
  %820 = sext i32 %818 to i64
  %821 = getelementptr inbounds %struct.b3InertiaData, ptr %816, i64 %820
  %822 = getelementptr inbounds %struct.b3InertiaData, ptr %821, i32 0, i32 0
  store ptr %822, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #10
  %823 = load ptr, ptr %80, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.b3SolverConstraint, ptr %823, i32 0, i32 2
  store ptr %824, ptr %85, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %86) #10
  %825 = load ptr, ptr %84, align 8, !tbaa !5
  %826 = load ptr, ptr %85, align 8, !tbaa !5
  %827 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %825, ptr noundef nonnull align 16 dereferenceable(16) %826)
          to label %828 unwind label %989

828:                                              ; preds = %819
  %829 = getelementptr inbounds %class.b3Vector3, ptr %86, i32 0, i32 0
  %830 = getelementptr inbounds %union.anon, ptr %829, i32 0, i32 0
  %831 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %830, i32 0, i32 0
  %832 = extractvalue { <2 x float>, <2 x float> } %827, 0
  store <2 x float> %832, ptr %831, align 16
  %833 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %830, i32 0, i32 1
  %834 = extractvalue { <2 x float>, <2 x float> } %827, 1
  store <2 x float> %834, ptr %833, align 8
  %835 = load ptr, ptr %80, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.b3SolverConstraint, ptr %835, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %836, ptr align 16 %86, i64 16, i1 false), !tbaa.struct !76
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %87) #10
  %837 = load ptr, ptr %80, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.b3SolverConstraint, ptr %837, i32 0, i32 1
  %839 = load ptr, ptr %47, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.b3RigidBodyData, ptr %839, i32 0, i32 5
  %841 = invoke { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %838, ptr noundef nonnull align 4 dereferenceable(4) %840)
          to label %842 unwind label %993

842:                                              ; preds = %828
  %843 = getelementptr inbounds %class.b3Vector3, ptr %87, i32 0, i32 0
  %844 = getelementptr inbounds %union.anon, ptr %843, i32 0, i32 0
  %845 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %844, i32 0, i32 0
  %846 = extractvalue { <2 x float>, <2 x float> } %841, 0
  store <2 x float> %846, ptr %845, align 16
  %847 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %844, i32 0, i32 1
  %848 = extractvalue { <2 x float>, <2 x float> } %841, 1
  store <2 x float> %848, ptr %847, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %88) #10
  %849 = load ptr, ptr %81, align 8, !tbaa !5
  %850 = load ptr, ptr %80, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.b3SolverConstraint, ptr %850, i32 0, i32 0
  %852 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %849, ptr noundef nonnull align 16 dereferenceable(16) %851)
          to label %853 unwind label %997

853:                                              ; preds = %842
  %854 = getelementptr inbounds %class.b3Vector3, ptr %88, i32 0, i32 0
  %855 = getelementptr inbounds %union.anon, ptr %854, i32 0, i32 0
  %856 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %855, i32 0, i32 0
  %857 = extractvalue { <2 x float>, <2 x float> } %852, 0
  store <2 x float> %857, ptr %856, align 16
  %858 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %855, i32 0, i32 1
  %859 = extractvalue { <2 x float>, <2 x float> } %852, 1
  store <2 x float> %859, ptr %858, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %89) #10
  %860 = load ptr, ptr %80, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.b3SolverConstraint, ptr %860, i32 0, i32 1
  %862 = load ptr, ptr %48, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.b3RigidBodyData, ptr %862, i32 0, i32 5
  %864 = invoke { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %861, ptr noundef nonnull align 4 dereferenceable(4) %863)
          to label %865 unwind label %1001

865:                                              ; preds = %853
  %866 = getelementptr inbounds %class.b3Vector3, ptr %89, i32 0, i32 0
  %867 = getelementptr inbounds %union.anon, ptr %866, i32 0, i32 0
  %868 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %867, i32 0, i32 0
  %869 = extractvalue { <2 x float>, <2 x float> } %864, 0
  store <2 x float> %869, ptr %868, align 16
  %870 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %867, i32 0, i32 1
  %871 = extractvalue { <2 x float>, <2 x float> } %864, 1
  store <2 x float> %871, ptr %870, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %90) #10
  %872 = load ptr, ptr %84, align 8, !tbaa !5
  %873 = load ptr, ptr %80, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.b3SolverConstraint, ptr %873, i32 0, i32 2
  %875 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %872, ptr noundef nonnull align 16 dereferenceable(16) %874)
          to label %876 unwind label %1005

876:                                              ; preds = %865
  %877 = getelementptr inbounds %class.b3Vector3, ptr %90, i32 0, i32 0
  %878 = getelementptr inbounds %union.anon, ptr %877, i32 0, i32 0
  %879 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %878, i32 0, i32 0
  %880 = extractvalue { <2 x float>, <2 x float> } %875, 0
  store <2 x float> %880, ptr %879, align 16
  %881 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %878, i32 0, i32 1
  %882 = extractvalue { <2 x float>, <2 x float> } %875, 1
  store <2 x float> %882, ptr %881, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #10
  %883 = load ptr, ptr %80, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct.b3SolverConstraint, ptr %883, i32 0, i32 1
  %885 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %87, ptr noundef nonnull align 16 dereferenceable(16) %884)
          to label %886 unwind label %1009

886:                                              ; preds = %876
  store float %885, ptr %91, align 4, !tbaa !55
  %887 = load ptr, ptr %80, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.b3SolverConstraint, ptr %887, i32 0, i32 0
  %889 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %88, ptr noundef nonnull align 16 dereferenceable(16) %888)
          to label %890 unwind label %1009

890:                                              ; preds = %886
  %891 = load float, ptr %91, align 4, !tbaa !55
  %892 = fadd float %891, %889
  store float %892, ptr %91, align 4, !tbaa !55
  %893 = load ptr, ptr %80, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.b3SolverConstraint, ptr %893, i32 0, i32 1
  %895 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %89, ptr noundef nonnull align 16 dereferenceable(16) %894)
          to label %896 unwind label %1009

896:                                              ; preds = %890
  %897 = load float, ptr %91, align 4, !tbaa !55
  %898 = fadd float %897, %895
  store float %898, ptr %91, align 4, !tbaa !55
  %899 = load ptr, ptr %80, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.b3SolverConstraint, ptr %899, i32 0, i32 2
  %901 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %90, ptr noundef nonnull align 16 dereferenceable(16) %900)
          to label %902 unwind label %1009

902:                                              ; preds = %896
  %903 = load float, ptr %91, align 4, !tbaa !55
  %904 = fadd float %903, %901
  store float %904, ptr %91, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #10
  %905 = load float, ptr %91, align 4, !tbaa !55
  %906 = invoke noundef float @_Z6b3Fabsf(float noundef %905)
          to label %907 unwind label %1013

907:                                              ; preds = %902
  store float %906, ptr %92, align 4, !tbaa !55
  %908 = load float, ptr %92, align 4, !tbaa !55
  %909 = fcmp ogt float %908, 0x3E80000000000000
  br i1 %909, label %910, label %913

910:                                              ; preds = %907
  %911 = load float, ptr %91, align 4, !tbaa !55
  %912 = fdiv float 1.000000e+00, %911
  br label %914

913:                                              ; preds = %907
  br label %914

914:                                              ; preds = %913, %910
  %915 = phi float [ %912, %910 ], [ 0.000000e+00, %913 ]
  %916 = load ptr, ptr %80, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.b3SolverConstraint, ptr %916, i32 0, i32 10
  store float %915, ptr %917, align 4, !tbaa !77
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #10
  %918 = load ptr, ptr %80, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.b3SolverConstraint, ptr %918, i32 0, i32 1
  %920 = load ptr, ptr %47, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.b3RigidBodyData, ptr %920, i32 0, i32 2
  %922 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %919, ptr noundef nonnull align 16 dereferenceable(16) %921)
          to label %923 unwind label %1022

923:                                              ; preds = %914
  %924 = load ptr, ptr %80, align 8, !tbaa !5
  %925 = getelementptr inbounds %struct.b3SolverConstraint, ptr %924, i32 0, i32 0
  %926 = load ptr, ptr %47, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.b3RigidBodyData, ptr %926, i32 0, i32 3
  %928 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %925, ptr noundef nonnull align 16 dereferenceable(16) %927)
          to label %929 unwind label %1022

929:                                              ; preds = %923
  %930 = fadd float %922, %928
  store float %930, ptr %94, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #10
  %931 = load ptr, ptr %80, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.b3SolverConstraint, ptr %931, i32 0, i32 1
  %933 = load ptr, ptr %48, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.b3RigidBodyData, ptr %933, i32 0, i32 2
  %935 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %932, ptr noundef nonnull align 16 dereferenceable(16) %934)
          to label %936 unwind label %1026

936:                                              ; preds = %929
  %937 = fneg float %935
  %938 = load ptr, ptr %80, align 8, !tbaa !5
  %939 = getelementptr inbounds %struct.b3SolverConstraint, ptr %938, i32 0, i32 2
  %940 = load ptr, ptr %48, align 8, !tbaa !5
  %941 = getelementptr inbounds %struct.b3RigidBodyData, ptr %940, i32 0, i32 3
  %942 = invoke noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %939, ptr noundef nonnull align 16 dereferenceable(16) %941)
          to label %943 unwind label %1026

943:                                              ; preds = %936
  %944 = fadd float %937, %942
  store float %944, ptr %95, align 4, !tbaa !55
  %945 = load float, ptr %94, align 4, !tbaa !55
  %946 = load float, ptr %95, align 4, !tbaa !55
  %947 = fadd float %945, %946
  store float %947, ptr %93, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #10
  store float 0.000000e+00, ptr %96, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #10
  %948 = load ptr, ptr %80, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.b3SolverConstraint, ptr %948, i32 0, i32 11
  %950 = load float, ptr %949, align 8, !tbaa !78
  store float %950, ptr %97, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #10
  %951 = load float, ptr %96, align 4, !tbaa !55
  %952 = load float, ptr %93, align 4, !tbaa !55
  %953 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %79, i32 0, i32 13
  %954 = load float, ptr %953, align 4, !tbaa !70
  %955 = fneg float %952
  %956 = call float @llvm.fmuladd.f32(float %955, float %954, float %951)
  store float %956, ptr %98, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #10
  %957 = load float, ptr %97, align 4, !tbaa !55
  %958 = load ptr, ptr %80, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.b3SolverConstraint, ptr %958, i32 0, i32 10
  %960 = load float, ptr %959, align 4, !tbaa !77
  %961 = fmul float %957, %960
  store float %961, ptr %99, align 4, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #10
  %962 = load float, ptr %98, align 4, !tbaa !55
  %963 = load ptr, ptr %80, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.b3SolverConstraint, ptr %963, i32 0, i32 10
  %965 = load float, ptr %964, align 4, !tbaa !77
  %966 = fmul float %962, %965
  store float %966, ptr %100, align 4, !tbaa !55
  %967 = load float, ptr %99, align 4, !tbaa !55
  %968 = load float, ptr %100, align 4, !tbaa !55
  %969 = fadd float %967, %968
  %970 = load ptr, ptr %80, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.b3SolverConstraint, ptr %970, i32 0, i32 11
  store float %969, ptr %971, align 8, !tbaa !78
  %972 = load ptr, ptr %80, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.b3SolverConstraint, ptr %972, i32 0, i32 6
  store float 0.000000e+00, ptr %973, align 4, !tbaa !49
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  br label %974

974:                                              ; preds = %943
  %975 = load i32, ptr %54, align 4, !tbaa !9
  %976 = add nsw i32 %975, 1
  store i32 %976, ptr %54, align 4, !tbaa !9
  br label %691, !llvm.loop !79

977:                                              ; preds = %791
  %978 = landingpad { ptr, i32 }
          cleanup
  %979 = extractvalue { ptr, i32 } %978, 0
  store ptr %979, ptr %21, align 8
  %980 = extractvalue { ptr, i32 } %978, 1
  store i32 %980, ptr %22, align 4
  br label %1032

981:                                              ; preds = %798
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %21, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %83) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #10
  br label %1032

985:                                              ; preds = %807
  %986 = landingpad { ptr, i32 }
          cleanup
  %987 = extractvalue { ptr, i32 } %986, 0
  store ptr %987, ptr %21, align 8
  %988 = extractvalue { ptr, i32 } %986, 1
  store i32 %988, ptr %22, align 4
  br label %1031

989:                                              ; preds = %819
  %990 = landingpad { ptr, i32 }
          cleanup
  %991 = extractvalue { ptr, i32 } %990, 0
  store ptr %991, ptr %21, align 8
  %992 = extractvalue { ptr, i32 } %990, 1
  store i32 %992, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #10
  br label %1031

993:                                              ; preds = %828
  %994 = landingpad { ptr, i32 }
          cleanup
  %995 = extractvalue { ptr, i32 } %994, 0
  store ptr %995, ptr %21, align 8
  %996 = extractvalue { ptr, i32 } %994, 1
  store i32 %996, ptr %22, align 4
  br label %1021

997:                                              ; preds = %842
  %998 = landingpad { ptr, i32 }
          cleanup
  %999 = extractvalue { ptr, i32 } %998, 0
  store ptr %999, ptr %21, align 8
  %1000 = extractvalue { ptr, i32 } %998, 1
  store i32 %1000, ptr %22, align 4
  br label %1020

1001:                                             ; preds = %853
  %1002 = landingpad { ptr, i32 }
          cleanup
  %1003 = extractvalue { ptr, i32 } %1002, 0
  store ptr %1003, ptr %21, align 8
  %1004 = extractvalue { ptr, i32 } %1002, 1
  store i32 %1004, ptr %22, align 4
  br label %1019

1005:                                             ; preds = %865
  %1006 = landingpad { ptr, i32 }
          cleanup
  %1007 = extractvalue { ptr, i32 } %1006, 0
  store ptr %1007, ptr %21, align 8
  %1008 = extractvalue { ptr, i32 } %1006, 1
  store i32 %1008, ptr %22, align 4
  br label %1018

1009:                                             ; preds = %896, %890, %886, %876
  %1010 = landingpad { ptr, i32 }
          cleanup
  %1011 = extractvalue { ptr, i32 } %1010, 0
  store ptr %1011, ptr %21, align 8
  %1012 = extractvalue { ptr, i32 } %1010, 1
  store i32 %1012, ptr %22, align 4
  br label %1017

1013:                                             ; preds = %902
  %1014 = landingpad { ptr, i32 }
          cleanup
  %1015 = extractvalue { ptr, i32 } %1014, 0
  store ptr %1015, ptr %21, align 8
  %1016 = extractvalue { ptr, i32 } %1014, 1
  store i32 %1016, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #10
  br label %1017

1017:                                             ; preds = %1013, %1009
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #10
  br label %1018

1018:                                             ; preds = %1017, %1005
  call void @llvm.lifetime.end.p0(i64 16, ptr %90) #10
  br label %1019

1019:                                             ; preds = %1018, %1001
  call void @llvm.lifetime.end.p0(i64 16, ptr %89) #10
  br label %1020

1020:                                             ; preds = %1019, %997
  call void @llvm.lifetime.end.p0(i64 16, ptr %88) #10
  br label %1021

1021:                                             ; preds = %1020, %993
  call void @llvm.lifetime.end.p0(i64 16, ptr %87) #10
  br label %1031

1022:                                             ; preds = %923, %914
  %1023 = landingpad { ptr, i32 }
          cleanup
  %1024 = extractvalue { ptr, i32 } %1023, 0
  store ptr %1024, ptr %21, align 8
  %1025 = extractvalue { ptr, i32 } %1023, 1
  store i32 %1025, ptr %22, align 4
  br label %1030

1026:                                             ; preds = %936, %929
  %1027 = landingpad { ptr, i32 }
          cleanup
  %1028 = extractvalue { ptr, i32 } %1027, 0
  store ptr %1028, ptr %21, align 8
  %1029 = extractvalue { ptr, i32 } %1027, 1
  store i32 %1029, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #10
  br label %1030

1030:                                             ; preds = %1026, %1022
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #10
  br label %1031

1031:                                             ; preds = %1030, %1021, %989, %985
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #10
  br label %1032

1032:                                             ; preds = %1031, %981, %977
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #10
  br label %1033

1033:                                             ; preds = %1032, %763
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #10
  br label %1035

1034:                                             ; preds = %691
  call void @llvm.lifetime.end.p0(i64 96, ptr %79) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %1045

1035:                                             ; preds = %1033, %759
  call void @llvm.lifetime.end.p0(i64 96, ptr %79) #10
  br label %1036

1036:                                             ; preds = %1035, %755, %751, %747, %743, %739, %735, %731, %727, %723
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #10
  br label %1037

1037:                                             ; preds = %1036, %540
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #10
  br label %1038

1038:                                             ; preds = %1037, %536
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #10
  br label %1039

1039:                                             ; preds = %1038, %532
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #10
  br label %1040

1040:                                             ; preds = %1039, %528
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #10
  br label %1041

1041:                                             ; preds = %1040, %524
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #10
  br label %1042

1042:                                             ; preds = %1041, %520
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  br label %1043

1043:                                             ; preds = %1042, %516
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  br label %1044

1044:                                             ; preds = %1043, %512
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %1057

1045:                                             ; preds = %1034, %438
  %1046 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 9
  %1047 = load i32, ptr %40, align 4, !tbaa !9
  %1048 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EEixEi(ptr noundef nonnull align 8 dereferenceable(25) %1046, i32 noundef %1047)
          to label %1049 unwind label %508

1049:                                             ; preds = %1045
  %1050 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo1", ptr %1048, i32 0, i32 0
  %1051 = load i32, ptr %1050, align 4, !tbaa !40
  %1052 = load i32, ptr %43, align 4, !tbaa !9
  %1053 = add nsw i32 %1052, %1051
  store i32 %1053, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %1054

1054:                                             ; preds = %1049
  %1055 = load i32, ptr %40, align 4, !tbaa !9
  %1056 = add nsw i32 %1055, 1
  store i32 %1056, ptr %40, align 4, !tbaa !9
  br label %430, !llvm.loop !80

1057:                                             ; preds = %1044, %508
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %1076

1058:                                             ; preds = %430
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #10
  store i32 0, ptr %101, align 4, !tbaa !9
  br label %1059

1059:                                             ; preds = %1073, %1058
  %1060 = load i32, ptr %101, align 4, !tbaa !9
  %1061 = load i32, ptr %15, align 4, !tbaa !9
  %1062 = icmp slt i32 %1060, %1061
  br i1 %1062, label %1063, label %1081

1063:                                             ; preds = %1059
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #10
  %1064 = load ptr, ptr %14, align 8, !tbaa !5
  %1065 = load i32, ptr %101, align 4, !tbaa !9
  %1066 = sext i32 %1065 to i64
  %1067 = getelementptr inbounds %struct.b3Contact4, ptr %1064, i64 %1066
  store ptr %1067, ptr %102, align 8, !tbaa !5
  %1068 = load ptr, ptr %11, align 8, !tbaa !5
  %1069 = load ptr, ptr %12, align 8, !tbaa !5
  %1070 = load ptr, ptr %102, align 8, !tbaa !5
  %1071 = load ptr, ptr %18, align 8, !tbaa !5
  invoke void @_ZN17b3PgsJacobiSolver14convertContactEP15b3RigidBodyDataP13b3InertiaDataP10b3Contact4RK19b3ContactSolverInfo(ptr noundef nonnull align 8 dereferenceable(448) %107, ptr noundef %1068, ptr noundef %1069, ptr noundef %1070, ptr noundef nonnull align 4 dereferenceable(84) %1071)
          to label %1072 unwind label %1077

1072:                                             ; preds = %1063
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #10
  br label %1073

1073:                                             ; preds = %1072
  %1074 = load i32, ptr %101, align 4, !tbaa !9
  %1075 = add nsw i32 %1074, 1
  store i32 %1075, ptr %101, align 4, !tbaa !9
  br label %1059, !llvm.loop !81

1076:                                             ; preds = %1057, %425, %370
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  br label %1173

1077:                                             ; preds = %1063
  %1078 = landingpad { ptr, i32 }
          cleanup
  %1079 = extractvalue { ptr, i32 } %1078, 0
  store ptr %1079, ptr %21, align 8
  %1080 = extractvalue { ptr, i32 } %1078, 1
  store i32 %1080, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #10
  br label %1173

1081:                                             ; preds = %1059
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #10
  %1082 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 3
  %1083 = invoke noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %1082)
          to label %1084 unwind label %1104

1084:                                             ; preds = %1081
  store i32 %1083, ptr %103, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #10
  %1085 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 2
  %1086 = invoke noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %1085)
          to label %1087 unwind label %1108

1087:                                             ; preds = %1084
  store i32 %1086, ptr %104, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #10
  %1088 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 4
  %1089 = invoke noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %1088)
          to label %1090 unwind label %1112

1090:                                             ; preds = %1087
  store i32 %1089, ptr %105, align 4, !tbaa !9
  %1091 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 7
  %1092 = load i32, ptr %103, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %1091, i32 noundef %1092)
          to label %1093 unwind label %1112

1093:                                             ; preds = %1090
  %1094 = load ptr, ptr %18, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %1094, i32 0, i32 16
  %1096 = load i32, ptr %1095, align 4, !tbaa !82
  %1097 = and i32 %1096, 16
  %1098 = icmp ne i32 %1097, 0
  br i1 %1098, label %1099, label %1116

1099:                                             ; preds = %1093
  %1100 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 6
  %1101 = load i32, ptr %104, align 4, !tbaa !9
  %1102 = mul nsw i32 %1101, 2
  invoke void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %1100, i32 noundef %1102)
          to label %1103 unwind label %1112

1103:                                             ; preds = %1099
  br label %1120

1104:                                             ; preds = %1081
  %1105 = landingpad { ptr, i32 }
          cleanup
  %1106 = extractvalue { ptr, i32 } %1105, 0
  store ptr %1106, ptr %21, align 8
  %1107 = extractvalue { ptr, i32 } %1105, 1
  store i32 %1107, ptr %22, align 4
  br label %1172

1108:                                             ; preds = %1084
  %1109 = landingpad { ptr, i32 }
          cleanup
  %1110 = extractvalue { ptr, i32 } %1109, 0
  store ptr %1110, ptr %21, align 8
  %1111 = extractvalue { ptr, i32 } %1109, 1
  store i32 %1111, ptr %22, align 4
  br label %1171

1112:                                             ; preds = %1120, %1116, %1099, %1090, %1087
  %1113 = landingpad { ptr, i32 }
          cleanup
  %1114 = extractvalue { ptr, i32 } %1113, 0
  store ptr %1114, ptr %21, align 8
  %1115 = extractvalue { ptr, i32 } %1113, 1
  store i32 %1115, ptr %22, align 4
  br label %1170

1116:                                             ; preds = %1093
  %1117 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 6
  %1118 = load i32, ptr %104, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %1117, i32 noundef %1118)
          to label %1119 unwind label %1112

1119:                                             ; preds = %1116
  br label %1120

1120:                                             ; preds = %1119, %1103
  %1121 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 8
  %1122 = load i32, ptr %105, align 4, !tbaa !9
  invoke void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %1121, i32 noundef %1122)
          to label %1123 unwind label %1112

1123:                                             ; preds = %1120
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #10
  store i32 0, ptr %106, align 4, !tbaa !9
  br label %1124

1124:                                             ; preds = %1134, %1123
  %1125 = load i32, ptr %106, align 4, !tbaa !9
  %1126 = load i32, ptr %103, align 4, !tbaa !9
  %1127 = icmp slt i32 %1125, %1126
  br i1 %1127, label %1128, label %1141

1128:                                             ; preds = %1124
  %1129 = load i32, ptr %106, align 4, !tbaa !9
  %1130 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 7
  %1131 = load i32, ptr %106, align 4, !tbaa !9
  %1132 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %1130, i32 noundef %1131)
          to label %1133 unwind label %1137

1133:                                             ; preds = %1128
  store i32 %1129, ptr %1132, align 4, !tbaa !9
  br label %1134

1134:                                             ; preds = %1133
  %1135 = load i32, ptr %106, align 4, !tbaa !9
  %1136 = add nsw i32 %1135, 1
  store i32 %1136, ptr %106, align 4, !tbaa !9
  br label %1124, !llvm.loop !83

1137:                                             ; preds = %1160, %1146, %1128
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %21, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #10
  br label %1170

1141:                                             ; preds = %1124
  store i32 0, ptr %106, align 4, !tbaa !9
  br label %1142

1142:                                             ; preds = %1152, %1141
  %1143 = load i32, ptr %106, align 4, !tbaa !9
  %1144 = load i32, ptr %104, align 4, !tbaa !9
  %1145 = icmp slt i32 %1143, %1144
  br i1 %1145, label %1146, label %1155

1146:                                             ; preds = %1142
  %1147 = load i32, ptr %106, align 4, !tbaa !9
  %1148 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 6
  %1149 = load i32, ptr %106, align 4, !tbaa !9
  %1150 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %1148, i32 noundef %1149)
          to label %1151 unwind label %1137

1151:                                             ; preds = %1146
  store i32 %1147, ptr %1150, align 4, !tbaa !9
  br label %1152

1152:                                             ; preds = %1151
  %1153 = load i32, ptr %106, align 4, !tbaa !9
  %1154 = add nsw i32 %1153, 1
  store i32 %1154, ptr %106, align 4, !tbaa !9
  br label %1142, !llvm.loop !84

1155:                                             ; preds = %1142
  store i32 0, ptr %106, align 4, !tbaa !9
  br label %1156

1156:                                             ; preds = %1166, %1155
  %1157 = load i32, ptr %106, align 4, !tbaa !9
  %1158 = load i32, ptr %105, align 4, !tbaa !9
  %1159 = icmp slt i32 %1157, %1158
  br i1 %1159, label %1160, label %1169

1160:                                             ; preds = %1156
  %1161 = load i32, ptr %106, align 4, !tbaa !9
  %1162 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %107, i32 0, i32 8
  %1163 = load i32, ptr %106, align 4, !tbaa !9
  %1164 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %1162, i32 noundef %1163)
          to label %1165 unwind label %1137

1165:                                             ; preds = %1160
  store i32 %1161, ptr %1164, align 4, !tbaa !9
  br label %1166

1166:                                             ; preds = %1165
  %1167 = load i32, ptr %106, align 4, !tbaa !9
  %1168 = add nsw i32 %1167, 1
  store i32 %1168, ptr %106, align 4, !tbaa !9
  br label %1156, !llvm.loop !85

1169:                                             ; preds = %1156
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #10
  call void @_ZN13b3ProfileZoneD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #10
  ret float 0.000000e+00

1170:                                             ; preds = %1137, %1112
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #10
  br label %1171

1171:                                             ; preds = %1170, %1108
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #10
  br label %1172

1172:                                             ; preds = %1171, %1104
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #10
  br label %1173

1173:                                             ; preds = %1172, %1077, %1076, %331, %314, %229, %185, %181, %177, %173, %169, %165, %161, %157, %153
  call void @_ZN13b3ProfileZoneD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #10
  br label %1174

1174:                                             ; preds = %1173
  %1175 = load ptr, ptr %21, align 8
  %1176 = load i32, ptr %22, align 4
  %1177 = insertvalue { ptr, i32 } poison, ptr %1175, 0
  %1178 = insertvalue { ptr, i32 } %1177, i32 %1176, 1
  resume { ptr, i32 } %1178
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayI12b3SolverBodyE6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, ptr noundef nonnull align 16 dereferenceable(228)) #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) #8 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, ptr noundef nonnull align 16 dereferenceable(16)) #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN17b3TypedConstraint25internalSetAppliedImpulseEf(ptr noundef nonnull align 16 dereferenceable(64), float noundef) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(8) ptr @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EEixEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN17b3TypedConstraint16getJointFeedbackEv(ptr noundef nonnull align 16 dereferenceable(64)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK17b3TypedConstraint9isEnabledEv(ptr noundef nonnull align 16 dereferenceable(64)) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayI18b3SolverConstraintE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) #8 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK17b3TypedConstraint30getOverrideNumSolverIterationsEv(ptr noundef nonnull align 16 dereferenceable(64)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_Z6b3Fabsf(float noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) #8 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress uwtable "min-legal-vector-width"="64" "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 #10 = { 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 428}
!12 = !{!"_ZTS17b3PgsJacobiSolver", !13, i64 8, !16, i64 40, !16, i64 72, !16, i64 104, !16, i64 136, !18, i64 168, !18, i64 200, !18, i64 232, !20, i64 264, !18, i64 296, !18, i64 328, !22, i64 360, !22, i64 392, !15, i64 424, !10, i64 428, !10, i64 432, !24, i64 440}
!13 = !{!"_ZTS20b3AlignedObjectArrayI12b3SolverBodyE", !14, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !15, i64 24}
!14 = !{!"_ZTS18b3AlignedAllocatorI12b3SolverBodyLj16EE"}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTS20b3AlignedObjectArrayI18b3SolverConstraintE", !17, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !15, i64 24}
!17 = !{!"_ZTS18b3AlignedAllocatorI18b3SolverConstraintLj16EE"}
!18 = !{!"_ZTS20b3AlignedObjectArrayIiE", !19, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !15, i64 24}
!19 = !{!"_ZTS18b3AlignedAllocatorIiLj16EE"}
!20 = !{!"_ZTS20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EE", !21, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !15, i64 24}
!21 = !{!"_ZTS18b3AlignedAllocatorIN17b3TypedConstraint17b3ConstraintInfo1ELj16EE"}
!22 = !{!"_ZTS20b3AlignedObjectArrayI9b3Vector3E", !23, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !15, i64 24}
!23 = !{!"_ZTS18b3AlignedAllocatorI9b3Vector3Lj16EE"}
!24 = !{!"long", !7, i64 0}
!25 = !{!12, !15, i64 424}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!31, !35, i64 68}
!31 = !{!"_ZTS15b3RigidBodyData", !32, i64 0, !33, i64 16, !32, i64 32, !32, i64 48, !10, i64 64, !35, i64 68, !35, i64 72, !35, i64 76}
!32 = !{!"_ZTS9b3Vector3", !7, i64 0}
!33 = !{!"_ZTS12b3Quaternion", !34, i64 0}
!34 = !{!"_ZTS10b3QuadWord", !7, i64 0}
!35 = !{!"float", !7, i64 0}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !29}
!38 = !{!39, !39, i64 0}
!39 = !{!"vtable pointer", !8, i64 0}
!40 = !{!41, !10, i64 0}
!41 = !{!"_ZTSN17b3TypedConstraint17b3ConstraintInfo1E", !10, i64 0, !10, i64 4}
!42 = !{!41, !10, i64 4}
!43 = distinct !{!43, !29}
!44 = !{!45, !10, i64 20}
!45 = !{!"_ZTS23b3ContactSolverInfoData", !35, i64 0, !35, i64 4, !35, i64 8, !35, i64 12, !35, i64 16, !10, i64 20, !35, i64 24, !35, i64 28, !35, i64 32, !35, i64 36, !35, i64 40, !10, i64 44, !35, i64 48, !35, i64 52, !35, i64 56, !35, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !35, i64 76, !35, i64 80}
!46 = !{!47, !35, i64 112}
!47 = !{!"_ZTS18b3SolverConstraint", !32, i64 0, !32, i64 16, !32, i64 32, !32, i64 48, !32, i64 64, !35, i64 80, !35, i64 84, !10, i64 88, !10, i64 92, !35, i64 96, !35, i64 100, !35, i64 104, !35, i64 108, !35, i64 112, !35, i64 116, !35, i64 120, !7, i64 128, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148}
!48 = !{!47, !35, i64 116}
!49 = !{!47, !35, i64 84}
!50 = !{!47, !35, i64 80}
!51 = !{!47, !10, i64 144}
!52 = !{!47, !10, i64 148}
!53 = !{!47, !10, i64 136}
!54 = distinct !{!54, !29}
!55 = !{!35, !35, i64 0}
!56 = !{!45, !35, i64 12}
!57 = !{!58, !35, i64 0}
!58 = !{!"_ZTSN17b3TypedConstraint17b3ConstraintInfo2E", !35, i64 0, !35, i64 4, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !35, i64 92}
!59 = !{!45, !35, i64 32}
!60 = !{!58, !35, i64 4}
!61 = !{!58, !6, i64 8}
!62 = !{!58, !6, i64 16}
!63 = !{!58, !6, i64 24}
!64 = !{!58, !6, i64 32}
!65 = !{!58, !10, i64 40}
!66 = !{!58, !6, i64 48}
!67 = !{!45, !35, i64 40}
!68 = !{!47, !35, i64 108}
!69 = !{!45, !35, i64 4}
!70 = !{!58, !35, i64 92}
!71 = !{!58, !6, i64 56}
!72 = !{!58, !6, i64 64}
!73 = !{!58, !6, i64 72}
!74 = !{!58, !10, i64 88}
!75 = !{!7, !7, i64 0}
!76 = !{i64 0, i64 16, !75}
!77 = !{!47, !35, i64 100}
!78 = !{!47, !35, i64 104}
!79 = distinct !{!79, !29}
!80 = distinct !{!80, !29}
!81 = distinct !{!81, !29}
!82 = !{!45, !10, i64 64}
!83 = distinct !{!83, !29}
!84 = distinct !{!84, !29}
!85 = distinct !{!85, !29}


; 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.b3ProfileZone = type { i8 }
%struct.b3SolverBody = type <{ %class.b3Transform, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %union.anon.8, [3 x i32], [12 x i8] }>
%class.b3Transform = type { %class.b3Matrix3x3, %class.b3Vector3 }
%class.b3Matrix3x3 = type { [3 x %class.b3Vector3] }
%class.b3Vector3 = type { %union.anon }
%union.anon = type { [4 x float] }
%union.anon.8 = type { ptr }
%"struct.b3TypedConstraint::b3ConstraintInfo2" = type { float, float, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, i32, float }
%struct.b3Contact4 = type { %struct.b3Contact4Data }
%struct.b3Contact4Data = type { [4 x %class.b3Vector3], %class.b3Vector3, i16, i16, i32, i32, i32, i32, i32, i32, i32 }
%struct.b3RigidBodyData = type { %class.b3Vector3, %class.b3Quaternion, %class.b3Vector3, %class.b3Vector3, i32, float, float, float }
%class.b3Quaternion = type { %class.b3QuadWord }
%class.b3QuadWord = type { %union.anon.10 }
%union.anon.10 = type { [4 x float] }
%struct.b3SolverConstraint = type { %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, float, float, i32, i32, float, float, float, float, float, float, float, %union.anon.9, i32, i32, i32, i32, [8 x i8] }
%union.anon.9 = type { ptr }
%struct.b3InertiaData = type { %class.b3Matrix3x3, %class.b3Matrix3x3 }

@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody30internalGetDeltaLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody31internalGetDeltaAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetPushVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetTurnVelocityEv(ptr noundef nonnull align 16 dereferenceable(228)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_Z13b3MakeVector3fff(float noundef, float noundef, float noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN17b3PgsJacobiSolver19getOrInitSolverBodyEiP15b3RigidBodyDataP13b3InertiaData(ptr noundef nonnull align 8 dereferenceable(448), i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN12b3SolverBodyC2Ev(ptr noundef nonnull align 16 dereferenceable(228)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK10b3Contact48getBodyAEv(ptr noundef nonnull align 16 dereferenceable(112)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK10b3Contact48getBodyBEv(ptr noundef nonnull align 16 dereferenceable(112)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN17b3PgsJacobiSolver28solveGroupCacheFriendlySetupEP15b3RigidBodyDataP13b3InertiaDataiP10b3Contact4iPP17b3TypedConstraintiRK19b3ContactSolverInfo(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5, ptr nocapture noundef readonly %6, i32 noundef %7, ptr noundef nonnull align 4 dereferenceable(84) %8) unnamed_addr #8 align 2 personality ptr @__gxx_personality_v0 {
  %10 = alloca %class.b3ProfileZone, align 1
  %11 = alloca %struct.b3SolverBody, align 16
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %class.b3Vector3, align 16
  %17 = alloca %class.b3Vector3, align 16
  %18 = alloca %class.b3Vector3, align 16
  %19 = alloca %class.b3Vector3, align 16
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca %"struct.b3TypedConstraint::b3ConstraintInfo2", align 8
  %45 = alloca %class.b3Vector3, align 16
  %46 = alloca %class.b3Vector3, align 16
  %47 = alloca %class.b3Vector3, align 16
  %48 = alloca %class.b3Vector3, align 16
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #9
  call void @_ZN13b3ProfileZoneC2EPKc(ptr noundef nonnull align 1 dereferenceable(1) %10, ptr noundef nonnull @.str.1)
  %49 = getelementptr inbounds i8, ptr %0, i64 428
  store i32 0, ptr %49, align 4, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %0, i64 8
  call void @llvm.lifetime.start.p0(i64 240, ptr nonnull %11) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(240) %11, i8 0, i64 240, i1 false)
  invoke void @_ZN12b3SolverBodyC2Ev(ptr noundef nonnull align 16 dereferenceable(228) %11)
          to label %51 unwind label %77

51:                                               ; preds = %9
  invoke void @_ZN20b3AlignedObjectArrayI12b3SolverBodyE6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %50, i32 noundef 0, ptr noundef nonnull align 16 dereferenceable(228) %11)
          to label %52 unwind label %77

52:                                               ; preds = %51
  call void @llvm.lifetime.end.p0(i64 240, ptr nonnull %11) #9
  %53 = getelementptr inbounds i8, ptr %0, i64 296
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #9
  store i32 0, ptr %12, align 4, !tbaa !23
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %54 unwind label %79

54:                                               ; preds = %52
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #9
  store i32 0, ptr %13, align 4, !tbaa !23
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef %3, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %55 unwind label %81

55:                                               ; preds = %54
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #9
  %56 = getelementptr inbounds i8, ptr %0, i64 328
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #9
  store i32 0, ptr %14, align 4, !tbaa !23
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %56, i32 noundef 0, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %57 unwind label %83

57:                                               ; preds = %55
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #9
  store i32 0, ptr %15, align 4, !tbaa !23
  invoke void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25) %56, i32 noundef %3, ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %58 unwind label %85

58:                                               ; preds = %57
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  %59 = getelementptr inbounds i8, ptr %0, i64 360
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %16, i8 0, i64 16, i1 false)
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %59, i32 noundef 0, ptr noundef nonnull align 16 dereferenceable(16) %16)
          to label %60 unwind label %87

60:                                               ; preds = %58
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #9
  %61 = call { <2 x float>, <2 x float> } @_Z13b3MakeVector3fff(float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %62 = extractvalue { <2 x float>, <2 x float> } %61, 0
  store <2 x float> %62, ptr %17, align 16
  %63 = getelementptr inbounds i8, ptr %17, i64 8
  %64 = extractvalue { <2 x float>, <2 x float> } %61, 1
  store <2 x float> %64, ptr %63, align 8
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %59, i32 noundef %3, ptr noundef nonnull align 16 dereferenceable(16) %17)
          to label %65 unwind label %89

65:                                               ; preds = %60
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #9
  %66 = getelementptr inbounds i8, ptr %0, i64 392
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %18, i8 0, i64 16, i1 false)
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %66, i32 noundef 0, ptr noundef nonnull align 16 dereferenceable(16) %18)
          to label %67 unwind label %91

67:                                               ; preds = %65
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #9
  %68 = call { <2 x float>, <2 x float> } @_Z13b3MakeVector3fff(float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %69 = extractvalue { <2 x float>, <2 x float> } %68, 0
  store <2 x float> %69, ptr %19, align 16
  %70 = getelementptr inbounds i8, ptr %19, i64 8
  %71 = extractvalue { <2 x float>, <2 x float> } %68, 1
  store <2 x float> %71, ptr %70, align 8
  invoke void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25) %66, i32 noundef %3, ptr noundef nonnull align 16 dereferenceable(16) %19)
          to label %72 unwind label %93

72:                                               ; preds = %67
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #9
  %73 = icmp sgt i32 %7, 0
  br i1 %73, label %.lr.ph, label %.preheader285

.lr.ph:                                           ; preds = %72
  %74 = getelementptr inbounds i8, ptr %0, i64 424
  %wide.trip.count = zext nneg i32 %7 to i64
  br label %95

.preheader285:                                    ; preds = %106, %72
  %75 = icmp sgt i32 %5, 0
  br i1 %75, label %.lr.ph289, label %.preheader284

.lr.ph289:                                        ; preds = %.preheader285
  %76 = getelementptr inbounds i8, ptr %0, i64 424
  %wide.trip.count320 = zext nneg i32 %5 to i64
  br label %107

77:                                               ; preds = %51, %9
  %78 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 240, ptr nonnull %11) #9
  br label %413

79:                                               ; preds = %52
  %80 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #9
  br label %413

81:                                               ; preds = %54
  %82 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #9
  br label %413

83:                                               ; preds = %55
  %84 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #9
  br label %413

85:                                               ; preds = %57
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #9
  br label %413

87:                                               ; preds = %58
  %88 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #9
  br label %413

89:                                               ; preds = %60
  %90 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #9
  br label %413

91:                                               ; preds = %65
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #9
  br label %413

93:                                               ; preds = %67
  %94 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #9
  br label %413

95:                                               ; preds = %.lr.ph, %106
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %106 ]
  %96 = getelementptr inbounds ptr, ptr %6, i64 %indvars.iv
  %97 = load ptr, ptr %96, align 8, !tbaa !24
  %98 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %97)
  %99 = load ptr, ptr %96, align 8, !tbaa !24
  %100 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %99)
  %101 = load i8, ptr %74, align 8, !tbaa !25, !range !26, !noundef !27
  %102 = trunc nuw i8 %101 to i1
  br i1 %102, label %103, label %106

103:                                              ; preds = %95
  %104 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef %98)
  store i32 -1, ptr %104, align 4, !tbaa !23
  %105 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef %100)
  store i32 -1, ptr %105, align 4, !tbaa !23
  br label %106

106:                                              ; preds = %95, %103
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.preheader285, label %95, !llvm.loop !28

.preheader284:                                    ; preds = %133, %.preheader285
  br i1 %73, label %.lr.ph291.preheader, label %._crit_edge

.lr.ph291.preheader:                              ; preds = %.preheader284
  %wide.trip.count325 = zext nneg i32 %7 to i64
  br label %.lr.ph291

107:                                              ; preds = %.lr.ph289, %133
  %indvars.iv317 = phi i64 [ 0, %.lr.ph289 ], [ %indvars.iv.next318, %133 ]
  %108 = getelementptr inbounds %struct.b3Contact4, ptr %4, i64 %indvars.iv317
  %109 = call noundef i32 @_ZNK10b3Contact48getBodyAEv(ptr noundef nonnull align 16 dereferenceable(112) %108)
  %110 = call noundef i32 @_ZNK10b3Contact48getBodyBEv(ptr noundef nonnull align 16 dereferenceable(112) %108)
  %111 = load i8, ptr %76, align 8, !tbaa !25, !range !26, !noundef !27
  %112 = trunc nuw i8 %111 to i1
  br i1 %112, label %113, label %116

113:                                              ; preds = %107
  %114 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef %109)
  store i32 -1, ptr %114, align 4, !tbaa !23
  %115 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef %110)
  store i32 -1, ptr %115, align 4, !tbaa !23
  br label %133

116:                                              ; preds = %107
  %117 = sext i32 %109 to i64
  %118 = getelementptr inbounds %struct.b3RigidBodyData, ptr %1, i64 %117, i32 5
  %119 = load float, ptr %118, align 4, !tbaa !30
  %120 = fcmp une float %119, 0.000000e+00
  %121 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef %109)
  %122 = load i32, ptr %121, align 4
  %123 = add nsw i32 %122, 1
  %.sink = select i1 %120, i32 %123, i32 -1
  store i32 %.sink, ptr %121, align 4, !tbaa !23
  %124 = sext i32 %110 to i64
  %125 = getelementptr inbounds %struct.b3RigidBodyData, ptr %1, i64 %124, i32 5
  %126 = load float, ptr %125, align 4, !tbaa !30
  %127 = fcmp une float %126, 0.000000e+00
  %128 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %53, i32 noundef %110)
  br i1 %127, label %129, label %132

129:                                              ; preds = %116
  %130 = load i32, ptr %128, align 4, !tbaa !23
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %128, align 4, !tbaa !23
  br label %133

132:                                              ; preds = %116
  store i32 -1, ptr %128, align 4, !tbaa !23
  br label %133

133:                                              ; preds = %129, %132, %113
  %indvars.iv.next318 = add nuw nsw i64 %indvars.iv317, 1
  %exitcond321.not = icmp eq i64 %indvars.iv.next318, %wide.trip.count320
  br i1 %exitcond321.not, label %.preheader284, label %107, !llvm.loop !36

.lr.ph291:                                        ; preds = %.lr.ph291.preheader, %.lr.ph291
  %indvars.iv322 = phi i64 [ 0, %.lr.ph291.preheader ], [ %indvars.iv.next323, %.lr.ph291 ]
  %134 = getelementptr inbounds ptr, ptr %6, i64 %indvars.iv322
  %135 = load ptr, ptr %134, align 8, !tbaa !24
  call void @_ZN17b3TypedConstraint25internalSetAppliedImpulseEf(ptr noundef nonnull align 16 dereferenceable(64) %135, float noundef 0.000000e+00)
  %indvars.iv.next323 = add nuw nsw i64 %indvars.iv322, 1
  %exitcond326.not = icmp eq i64 %indvars.iv.next323, %wide.trip.count325
  br i1 %exitcond326.not, label %._crit_edge, label %.lr.ph291, !llvm.loop !37

._crit_edge:                                      ; preds = %.lr.ph291, %.preheader284
  %136 = getelementptr inbounds i8, ptr %0, i64 264
  invoke void @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %136, i32 noundef %7)
          to label %.preheader283 unwind label %146

.preheader283:                                    ; preds = %._crit_edge
  br i1 %73, label %.lr.ph294.preheader, label %._crit_edge295

.lr.ph294.preheader:                              ; preds = %.preheader283
  %wide.trip.count330 = zext nneg i32 %7 to i64
  br label %.lr.ph294

.lr.ph294:                                        ; preds = %.lr.ph294.preheader, %162
  %indvars.iv327 = phi i64 [ 0, %.lr.ph294.preheader ], [ %indvars.iv.next328, %162 ]
  %.0255293 = phi i32 [ 0, %.lr.ph294.preheader ], [ %164, %162 ]
  %137 = trunc nuw nsw i64 %indvars.iv327 to i32
  %138 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EEixEi(ptr noundef nonnull align 8 dereferenceable(25) %136, i32 noundef %137)
  %139 = getelementptr inbounds ptr, ptr %6, i64 %indvars.iv327
  %140 = load ptr, ptr %139, align 8, !tbaa !24
  %141 = call noundef ptr @_ZN17b3TypedConstraint16getJointFeedbackEv(ptr noundef nonnull align 16 dereferenceable(64) %140)
  %.not274 = icmp eq ptr %141, null
  br i1 %.not274, label %150, label %142

142:                                              ; preds = %.lr.ph294
  call void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %141)
  %143 = getelementptr inbounds i8, ptr %141, i64 16
  call void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %143)
  %144 = getelementptr inbounds i8, ptr %141, i64 32
  call void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %144)
  %145 = getelementptr inbounds i8, ptr %141, i64 48
  call void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16) %145)
  br label %150

146:                                              ; preds = %._crit_edge295, %._crit_edge
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %413

148:                                              ; preds = %155
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %413

150:                                              ; preds = %142, %.lr.ph294
  %151 = load ptr, ptr %139, align 8, !tbaa !24
  %152 = call noundef zeroext i1 @_ZNK17b3TypedConstraint9isEnabledEv(ptr noundef nonnull align 16 dereferenceable(64) %151)
  %153 = load ptr, ptr %139, align 8, !tbaa !24
  %154 = call noundef zeroext i1 @_ZNK17b3TypedConstraint9isEnabledEv(ptr noundef nonnull align 16 dereferenceable(64) %153)
  br i1 %154, label %155, label %160

155:                                              ; preds = %150
  %156 = load ptr, ptr %139, align 8, !tbaa !24
  %157 = load ptr, ptr %156, align 16, !tbaa !38
  %158 = getelementptr inbounds i8, ptr %157, i64 24
  %159 = load ptr, ptr %158, align 8
  invoke void %159(ptr noundef nonnull align 16 dereferenceable(64) %156, ptr noundef nonnull %138, ptr noundef %1)
          to label %._crit_edge351 unwind label %148

._crit_edge351:                                   ; preds = %155
  %.pre = load i32, ptr %138, align 4, !tbaa !40
  br label %162

160:                                              ; preds = %150
  store i32 0, ptr %138, align 4, !tbaa !40
  %161 = getelementptr inbounds i8, ptr %138, i64 4
  store i32 0, ptr %161, align 4, !tbaa !42
  br label %162

162:                                              ; preds = %._crit_edge351, %160
  %163 = phi i32 [ %.pre, %._crit_edge351 ], [ 0, %160 ]
  %164 = add nsw i32 %163, %.0255293
  %indvars.iv.next328 = add nuw nsw i64 %indvars.iv327, 1
  %exitcond331.not = icmp eq i64 %indvars.iv.next328, %wide.trip.count330
  br i1 %exitcond331.not, label %._crit_edge295, label %.lr.ph294, !llvm.loop !43

._crit_edge295:                                   ; preds = %162, %.preheader283
  %.0255.lcssa = phi i32 [ 0, %.preheader283 ], [ %164, %162 ]
  %165 = getelementptr inbounds i8, ptr %0, i64 72
  invoke void @_ZN20b3AlignedObjectArrayI18b3SolverConstraintE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %165, i32 noundef %.0255.lcssa)
          to label %.preheader282 unwind label %146

.preheader282:                                    ; preds = %._crit_edge295
  br i1 %73, label %.lr.ph305, label %.preheader280

.lr.ph305:                                        ; preds = %.preheader282
  %166 = getelementptr inbounds i8, ptr %8, i64 20
  %167 = getelementptr inbounds i8, ptr %8, i64 12
  %168 = getelementptr inbounds i8, ptr %8, i64 32
  %169 = getelementptr inbounds i8, ptr %44, i64 4
  %170 = getelementptr inbounds i8, ptr %44, i64 8
  %171 = getelementptr inbounds i8, ptr %44, i64 16
  %172 = getelementptr inbounds i8, ptr %44, i64 24
  %173 = getelementptr inbounds i8, ptr %44, i64 32
  %174 = getelementptr inbounds i8, ptr %44, i64 40
  %175 = getelementptr inbounds i8, ptr %44, i64 48
  %176 = getelementptr inbounds i8, ptr %8, i64 40
  %177 = getelementptr inbounds i8, ptr %8, i64 4
  %178 = getelementptr inbounds i8, ptr %44, i64 92
  %179 = getelementptr inbounds i8, ptr %44, i64 56
  %180 = getelementptr inbounds i8, ptr %44, i64 64
  %181 = getelementptr inbounds i8, ptr %44, i64 72
  %182 = getelementptr inbounds i8, ptr %44, i64 88
  %183 = getelementptr inbounds i8, ptr %45, i64 8
  %184 = getelementptr inbounds i8, ptr %46, i64 8
  %185 = getelementptr inbounds i8, ptr %47, i64 8
  %186 = getelementptr inbounds i8, ptr %48, i64 8
  %wide.trip.count341 = zext nneg i32 %7 to i64
  br label %187

.preheader280:                                    ; preds = %378, %.preheader282
  br i1 %75, label %.lr.ph307.preheader, label %._crit_edge308

.lr.ph307.preheader:                              ; preds = %.preheader280
  %wide.trip.count346 = zext nneg i32 %5 to i64
  br label %.lr.ph307

187:                                              ; preds = %.lr.ph305, %378
  %indvars.iv338 = phi i64 [ 0, %.lr.ph305 ], [ %indvars.iv.next339, %378 ]
  %.0258303 = phi i32 [ 0, %.lr.ph305 ], [ %381, %378 ]
  %188 = trunc nuw nsw i64 %indvars.iv338 to i32
  %189 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EEixEi(ptr noundef nonnull align 8 dereferenceable(25) %136, i32 noundef %188)
  %190 = load i32, ptr %189, align 4, !tbaa !40
  %.not265 = icmp eq i32 %190, 0
  br i1 %.not265, label %378, label %191

191:                                              ; preds = %187
  %192 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %165, i32 noundef %.0258303)
  %193 = getelementptr inbounds ptr, ptr %6, i64 %indvars.iv338
  %194 = load ptr, ptr %193, align 8, !tbaa !24
  %195 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds %struct.b3RigidBodyData, ptr %1, i64 %196
  %198 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds %struct.b3RigidBodyData, ptr %1, i64 %199
  %201 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  %202 = invoke noundef i32 @_ZN17b3PgsJacobiSolver19getOrInitSolverBodyEiP15b3RigidBodyDataP13b3InertiaData(ptr noundef nonnull align 8 dereferenceable(448) %0, i32 noundef %201, ptr noundef %1, ptr noundef %2)
          to label %203 unwind label %220

203:                                              ; preds = %191
  %204 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  %205 = invoke noundef i32 @_ZN17b3PgsJacobiSolver19getOrInitSolverBodyEiP15b3RigidBodyDataP13b3InertiaData(ptr noundef nonnull align 8 dereferenceable(448) %0, i32 noundef %204, ptr noundef %1, ptr noundef %2)
          to label %206 unwind label %222

206:                                              ; preds = %203
  %207 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %50, i32 noundef %202)
  %208 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %50, i32 noundef %205)
  %209 = call noundef i32 @_ZNK17b3TypedConstraint30getOverrideNumSolverIterationsEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  %210 = icmp sgt i32 %209, 0
  br i1 %210, label %211, label %213

211:                                              ; preds = %206
  %212 = call noundef i32 @_ZNK17b3TypedConstraint30getOverrideNumSolverIterationsEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  br label %215

213:                                              ; preds = %206
  %214 = load i32, ptr %166, align 4, !tbaa !44
  br label %215

215:                                              ; preds = %213, %211
  %216 = phi i32 [ %212, %211 ], [ %214, %213 ]
  %217 = load i32, ptr %49, align 4, !tbaa !5
  %218 = icmp sgt i32 %216, %217
  br i1 %218, label %219, label %224

219:                                              ; preds = %215
  store i32 %216, ptr %49, align 4, !tbaa !5
  br label %224

220:                                              ; preds = %191
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %413

222:                                              ; preds = %203
  %223 = landingpad { ptr, i32 }
          cleanup
  br label %413

224:                                              ; preds = %219, %215
  %225 = load i32, ptr %189, align 4, !tbaa !40
  %226 = icmp sgt i32 %225, 0
  br i1 %226, label %.lr.ph298, label %._crit_edge299

.lr.ph298:                                        ; preds = %224, %.lr.ph298
  %indvars.iv332 = phi i64 [ %indvars.iv.next333, %.lr.ph298 ], [ 0, %224 ]
  %227 = getelementptr inbounds %struct.b3SolverConstraint, ptr %192, i64 %indvars.iv332
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(160) %227, i8 0, i64 160, i1 false)
  %228 = getelementptr inbounds i8, ptr %227, i64 112
  store <2 x float> <float 0xC7EFFFFFE0000000, float 0x47EFFFFFE0000000>, ptr %228, align 16, !tbaa !46
  %229 = getelementptr inbounds i8, ptr %227, i64 80
  store float 0.000000e+00, ptr %229, align 16, !tbaa !47
  %230 = getelementptr inbounds i8, ptr %227, i64 144
  store i32 %202, ptr %230, align 16, !tbaa !49
  %231 = getelementptr inbounds i8, ptr %227, i64 148
  store i32 %205, ptr %231, align 4, !tbaa !50
  %232 = getelementptr inbounds i8, ptr %227, i64 136
  store i32 %216, ptr %232, align 8, !tbaa !51
  %indvars.iv.next333 = add nuw nsw i64 %indvars.iv332, 1
  %233 = load i32, ptr %189, align 4, !tbaa !40
  %234 = sext i32 %233 to i64
  %235 = icmp slt i64 %indvars.iv.next333, %234
  br i1 %235, label %.lr.ph298, label %._crit_edge299, !llvm.loop !52

._crit_edge299:                                   ; preds = %.lr.ph298, %224
  %236 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody30internalGetDeltaLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %207)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #9
  store float 0.000000e+00, ptr %20, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #9
  store float 0.000000e+00, ptr %21, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #9
  store float 0.000000e+00, ptr %22, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %236, ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %21, ptr noundef nonnull align 4 dereferenceable(4) %22)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #9
  %237 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody31internalGetDeltaAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %207)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #9
  store float 0.000000e+00, ptr %23, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #9
  store float 0.000000e+00, ptr %24, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #9
  store float 0.000000e+00, ptr %25, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %237, ptr noundef nonnull align 4 dereferenceable(4) %23, ptr noundef nonnull align 4 dereferenceable(4) %24, ptr noundef nonnull align 4 dereferenceable(4) %25)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #9
  %238 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetPushVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %207)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #9
  store float 0.000000e+00, ptr %26, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %27) #9
  store float 0.000000e+00, ptr %27, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #9
  store float 0.000000e+00, ptr %28, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %238, ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %28)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %27) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #9
  %239 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetTurnVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %207)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %29) #9
  store float 0.000000e+00, ptr %29, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #9
  store float 0.000000e+00, ptr %30, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #9
  store float 0.000000e+00, ptr %31, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %239, ptr noundef nonnull align 4 dereferenceable(4) %29, ptr noundef nonnull align 4 dereferenceable(4) %30, ptr noundef nonnull align 4 dereferenceable(4) %31)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %29) #9
  %240 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody30internalGetDeltaLinearVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %208)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #9
  store float 0.000000e+00, ptr %32, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #9
  store float 0.000000e+00, ptr %33, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #9
  store float 0.000000e+00, ptr %34, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %240, ptr noundef nonnull align 4 dereferenceable(4) %32, ptr noundef nonnull align 4 dereferenceable(4) %33, ptr noundef nonnull align 4 dereferenceable(4) %34)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #9
  %241 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody31internalGetDeltaAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %208)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #9
  store float 0.000000e+00, ptr %35, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %36) #9
  store float 0.000000e+00, ptr %36, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %37) #9
  store float 0.000000e+00, ptr %37, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %241, ptr noundef nonnull align 4 dereferenceable(4) %35, ptr noundef nonnull align 4 dereferenceable(4) %36, ptr noundef nonnull align 4 dereferenceable(4) %37)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #9
  %242 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetPushVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %208)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %38) #9
  store float 0.000000e+00, ptr %38, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %39) #9
  store float 0.000000e+00, ptr %39, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %40) #9
  store float 0.000000e+00, ptr %40, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %242, ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 4 dereferenceable(4) %39, ptr noundef nonnull align 4 dereferenceable(4) %40)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %38) #9
  %243 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN12b3SolverBody23internalGetTurnVelocityEv(ptr noundef nonnull align 16 dereferenceable(228) %208)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #9
  store float 0.000000e+00, ptr %41, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #9
  store float 0.000000e+00, ptr %42, align 4, !tbaa !46
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %43) #9
  store float 0.000000e+00, ptr %43, align 4, !tbaa !46
  call void @_ZN9b3Vector38setValueERKfS1_S1_(ptr noundef nonnull align 16 dereferenceable(16) %243, ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 4 dereferenceable(4) %43)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #9
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %44) #9
  %244 = load float, ptr %167, align 4, !tbaa !53
  %245 = fdiv float 1.000000e+00, %244
  store float %245, ptr %44, align 8, !tbaa !54
  %246 = load float, ptr %168, align 4, !tbaa !56
  store float %246, ptr %169, align 4, !tbaa !57
  %247 = getelementptr inbounds i8, ptr %192, i64 16
  %248 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %247)
  store ptr %248, ptr %170, align 8, !tbaa !58
  %249 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %192)
  store ptr %249, ptr %171, align 8, !tbaa !59
  store ptr null, ptr %172, align 8, !tbaa !60
  %250 = getelementptr inbounds i8, ptr %192, i64 32
  %251 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %250)
  store ptr %251, ptr %173, align 8, !tbaa !61
  store i32 40, ptr %174, align 8, !tbaa !62
  %252 = getelementptr inbounds i8, ptr %192, i64 104
  store ptr %252, ptr %175, align 8, !tbaa !63
  %253 = load float, ptr %176, align 4, !tbaa !64
  %254 = getelementptr inbounds i8, ptr %192, i64 108
  store float %253, ptr %254, align 4, !tbaa !65
  %255 = load float, ptr %177, align 4, !tbaa !66
  store float %255, ptr %178, align 4, !tbaa !67
  store ptr %254, ptr %179, align 8, !tbaa !68
  %256 = getelementptr inbounds i8, ptr %192, i64 112
  store ptr %256, ptr %180, align 8, !tbaa !69
  %257 = getelementptr inbounds i8, ptr %192, i64 116
  store ptr %257, ptr %181, align 8, !tbaa !70
  %258 = load i32, ptr %166, align 4, !tbaa !44
  store i32 %258, ptr %182, align 8, !tbaa !71
  %259 = load ptr, ptr %193, align 8, !tbaa !24
  %260 = load ptr, ptr %259, align 16, !tbaa !38
  %261 = getelementptr inbounds i8, ptr %260, i64 32
  %262 = load ptr, ptr %261, align 8
  invoke void %262(ptr noundef nonnull align 16 dereferenceable(64) %259, ptr noundef nonnull %44, ptr noundef %1)
          to label %.preheader281 unwind label %281

.preheader281:                                    ; preds = %._crit_edge299
  %263 = load i32, ptr %189, align 4, !tbaa !40
  %264 = icmp sgt i32 %263, 0
  br i1 %264, label %.lr.ph301, label %._crit_edge302

.lr.ph301:                                        ; preds = %.preheader281
  %265 = getelementptr inbounds i8, ptr %197, i64 68
  %266 = getelementptr inbounds i8, ptr %200, i64 68
  %267 = getelementptr inbounds i8, ptr %197, i64 32
  %268 = getelementptr inbounds i8, ptr %197, i64 48
  %269 = getelementptr inbounds i8, ptr %200, i64 32
  %270 = getelementptr inbounds i8, ptr %200, i64 48
  br label %271

271:                                              ; preds = %.lr.ph301, %327
  %indvars.iv335 = phi i64 [ 0, %.lr.ph301 ], [ %indvars.iv.next336, %327 ]
  %272 = getelementptr inbounds %struct.b3SolverConstraint, ptr %192, i64 %indvars.iv335
  %273 = getelementptr inbounds i8, ptr %272, i64 116
  %274 = load float, ptr %273, align 4, !tbaa !72
  %275 = load ptr, ptr %193, align 8, !tbaa !24
  %276 = call noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %275)
  %277 = fcmp ult float %274, %276
  br i1 %277, label %283, label %278

278:                                              ; preds = %271
  %279 = load ptr, ptr %193, align 8, !tbaa !24
  %280 = call noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %279)
  store float %280, ptr %273, align 4, !tbaa !72
  br label %283

281:                                              ; preds = %._crit_edge299
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %377

283:                                              ; preds = %278, %271
  %284 = getelementptr inbounds i8, ptr %272, i64 112
  %285 = load float, ptr %284, align 16, !tbaa !73
  %286 = load ptr, ptr %193, align 8, !tbaa !24
  %287 = call noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %286)
  %288 = fneg float %287
  %289 = fcmp ugt float %285, %288
  br i1 %289, label %294, label %290

290:                                              ; preds = %283
  %291 = load ptr, ptr %193, align 8, !tbaa !24
  %292 = call noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64) %291)
  %293 = fneg float %292
  store float %293, ptr %284, align 16, !tbaa !73
  br label %294

294:                                              ; preds = %290, %283
  %295 = getelementptr inbounds i8, ptr %272, i64 128
  store ptr %194, ptr %295, align 16, !tbaa !74
  %296 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds %struct.b3InertiaData, ptr %2, i64 %297
  %299 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %298, ptr noundef nonnull align 16 dereferenceable(16) %272)
          to label %300 unwind label %362

300:                                              ; preds = %294
  %301 = extractvalue { <2 x float>, <2 x float> } %299, 0
  %302 = extractvalue { <2 x float>, <2 x float> } %299, 1
  %303 = getelementptr inbounds i8, ptr %272, i64 48
  store <2 x float> %301, ptr %303, align 16
  %.sroa.540.0..sroa_idx = getelementptr inbounds i8, ptr %272, i64 56
  store <2 x float> %302, ptr %.sroa.540.0..sroa_idx, align 8, !tbaa !74
  %304 = call noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64) %194)
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds %struct.b3InertiaData, ptr %2, i64 %305
  %307 = getelementptr inbounds i8, ptr %272, i64 32
  %308 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %306, ptr noundef nonnull align 16 dereferenceable(16) %307)
          to label %309 unwind label %364

309:                                              ; preds = %300
  %310 = extractvalue { <2 x float>, <2 x float> } %308, 0
  %311 = extractvalue { <2 x float>, <2 x float> } %308, 1
  %312 = getelementptr inbounds i8, ptr %272, i64 64
  store <2 x float> %310, ptr %312, align 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %272, i64 72
  store <2 x float> %311, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !74
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %45) #9
  %313 = getelementptr inbounds i8, ptr %272, i64 16
  %314 = invoke { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %313, ptr noundef nonnull align 4 dereferenceable(4) %265)
          to label %315 unwind label %366

315:                                              ; preds = %309
  %316 = extractvalue { <2 x float>, <2 x float> } %314, 0
  store <2 x float> %316, ptr %45, align 16
  %317 = extractvalue { <2 x float>, <2 x float> } %314, 1
  store <2 x float> %317, ptr %183, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %46) #9
  %318 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %298, ptr noundef nonnull align 16 dereferenceable(16) %272)
          to label %319 unwind label %368

319:                                              ; preds = %315
  %320 = extractvalue { <2 x float>, <2 x float> } %318, 0
  store <2 x float> %320, ptr %46, align 16
  %321 = extractvalue { <2 x float>, <2 x float> } %318, 1
  store <2 x float> %321, ptr %184, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %47) #9
  %322 = invoke { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %313, ptr noundef nonnull align 4 dereferenceable(4) %266)
          to label %323 unwind label %370

323:                                              ; preds = %319
  %324 = extractvalue { <2 x float>, <2 x float> } %322, 0
  store <2 x float> %324, ptr %47, align 16
  %325 = extractvalue { <2 x float>, <2 x float> } %322, 1
  store <2 x float> %325, ptr %185, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %48) #9
  %326 = invoke { <2 x float>, <2 x float> } @_ZmlRK11b3Matrix3x3RK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(48) %306, ptr noundef nonnull align 16 dereferenceable(16) %307)
          to label %327 unwind label %372

327:                                              ; preds = %323
  %328 = extractvalue { <2 x float>, <2 x float> } %326, 0
  store <2 x float> %328, ptr %48, align 16
  %329 = extractvalue { <2 x float>, <2 x float> } %326, 1
  store <2 x float> %329, ptr %186, align 8
  %330 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %45, ptr noundef nonnull align 16 dereferenceable(16) %313)
  %331 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %46, ptr noundef nonnull align 16 dereferenceable(16) %272)
  %332 = fadd float %330, %331
  %333 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %47, ptr noundef nonnull align 16 dereferenceable(16) %313)
  %334 = fadd float %332, %333
  %335 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %48, ptr noundef nonnull align 16 dereferenceable(16) %307)
  %336 = fadd float %334, %335
  %337 = call noundef float @_Z6b3Fabsf(float noundef %336)
  %338 = fcmp ogt float %337, 0x3E80000000000000
  %339 = fdiv float 1.000000e+00, %336
  %340 = select i1 %338, float %339, float 0.000000e+00
  %341 = getelementptr inbounds i8, ptr %272, i64 100
  store float %340, ptr %341, align 4, !tbaa !75
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %46) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #9
  %342 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %313, ptr noundef nonnull align 16 dereferenceable(16) %267)
  %343 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %272, ptr noundef nonnull align 16 dereferenceable(16) %268)
  %344 = fadd float %342, %343
  %345 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %313, ptr noundef nonnull align 16 dereferenceable(16) %269)
  %346 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %307, ptr noundef nonnull align 16 dereferenceable(16) %270)
  %347 = fsub float %346, %345
  %348 = fadd float %344, %347
  %349 = getelementptr inbounds i8, ptr %272, i64 104
  %350 = load float, ptr %349, align 8, !tbaa !76
  %351 = load float, ptr %178, align 4, !tbaa !67
  %352 = fneg float %348
  %353 = call float @llvm.fmuladd.f32(float %352, float %351, float 0.000000e+00)
  %354 = load float, ptr %341, align 4, !tbaa !75
  %355 = fmul float %350, %354
  %356 = fmul float %353, %354
  %357 = fadd float %355, %356
  store float %357, ptr %349, align 8, !tbaa !76
  %358 = getelementptr inbounds i8, ptr %272, i64 84
  store float 0.000000e+00, ptr %358, align 4, !tbaa !77
  %indvars.iv.next336 = add nuw nsw i64 %indvars.iv335, 1
  %359 = load i32, ptr %189, align 4, !tbaa !40
  %360 = sext i32 %359 to i64
  %361 = icmp slt i64 %indvars.iv.next336, %360
  br i1 %361, label %271, label %._crit_edge302, !llvm.loop !78

362:                                              ; preds = %294
  %363 = landingpad { ptr, i32 }
          cleanup
  br label %377

364:                                              ; preds = %300
  %365 = landingpad { ptr, i32 }
          cleanup
  br label %377

366:                                              ; preds = %309
  %367 = landingpad { ptr, i32 }
          cleanup
  br label %376

368:                                              ; preds = %315
  %369 = landingpad { ptr, i32 }
          cleanup
  br label %375

370:                                              ; preds = %319
  %371 = landingpad { ptr, i32 }
          cleanup
  br label %374

372:                                              ; preds = %323
  %373 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %48) #9
  br label %374

374:                                              ; preds = %372, %370
  %.pn = phi { ptr, i32 } [ %373, %372 ], [ %371, %370 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #9
  br label %375

375:                                              ; preds = %374, %368
  %.pn.pn = phi { ptr, i32 } [ %.pn, %374 ], [ %369, %368 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %46) #9
  br label %376

376:                                              ; preds = %375, %366
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %375 ], [ %367, %366 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #9
  br label %377

._crit_edge302:                                   ; preds = %327, %.preheader281
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %44) #9
  br label %378

377:                                              ; preds = %362, %376, %364, %281
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %282, %281 ], [ %363, %362 ], [ %.pn.pn.pn, %376 ], [ %365, %364 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %44) #9
  br label %413

378:                                              ; preds = %._crit_edge302, %187
  %379 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EEixEi(ptr noundef nonnull align 8 dereferenceable(25) %136, i32 noundef %188)
  %380 = load i32, ptr %379, align 4, !tbaa !40
  %381 = add nsw i32 %380, %.0258303
  %indvars.iv.next339 = add nuw nsw i64 %indvars.iv338, 1
  %exitcond342.not = icmp eq i64 %indvars.iv.next339, %wide.trip.count341
  br i1 %exitcond342.not, label %.preheader280, label %187, !llvm.loop !79

.lr.ph307:                                        ; preds = %.lr.ph307.preheader, %383
  %indvars.iv343 = phi i64 [ 0, %.lr.ph307.preheader ], [ %indvars.iv.next344, %383 ]
  %382 = getelementptr inbounds %struct.b3Contact4, ptr %4, i64 %indvars.iv343
  invoke void @_ZN17b3PgsJacobiSolver14convertContactEP15b3RigidBodyDataP13b3InertiaDataP10b3Contact4RK19b3ContactSolverInfo(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef %1, ptr noundef %2, ptr noundef %382, ptr noundef nonnull align 4 dereferenceable(84) %8)
          to label %383 unwind label %384

383:                                              ; preds = %.lr.ph307
  %indvars.iv.next344 = add nuw nsw i64 %indvars.iv343, 1
  %exitcond347.not = icmp eq i64 %indvars.iv.next344, %wide.trip.count346
  br i1 %exitcond347.not, label %._crit_edge308, label %.lr.ph307, !llvm.loop !80

384:                                              ; preds = %.lr.ph307
  %385 = landingpad { ptr, i32 }
          cleanup
  br label %413

._crit_edge308:                                   ; preds = %383, %.preheader280
  %386 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %165)
  %387 = getelementptr inbounds i8, ptr %0, i64 40
  %388 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %387)
  %389 = getelementptr inbounds i8, ptr %0, i64 104
  %390 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %389)
  %391 = getelementptr inbounds i8, ptr %0, i64 200
  invoke void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %391, i32 noundef %386)
          to label %.invoke unwind label %398

.invoke:                                          ; preds = %._crit_edge308
  %392 = getelementptr inbounds i8, ptr %8, i64 64
  %393 = load i32, ptr %392, align 4, !tbaa !81
  %394 = getelementptr inbounds i8, ptr %0, i64 168
  %395 = lshr i32 %393, 4
  %396 = and i32 %395, 1
  %397 = shl i32 %388, %396
  invoke void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %394, i32 noundef %397)
          to label %400 unwind label %398

398:                                              ; preds = %.invoke, %400, %._crit_edge308
  %399 = landingpad { ptr, i32 }
          cleanup
  br label %413

400:                                              ; preds = %.invoke
  %401 = getelementptr inbounds i8, ptr %0, i64 232
  invoke void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25) %401, i32 noundef %390)
          to label %.preheader279 unwind label %398

.preheader279:                                    ; preds = %400
  %402 = icmp sgt i32 %386, 0
  br i1 %402, label %.lr.ph310, label %.preheader278

.preheader278:                                    ; preds = %.lr.ph310, %.preheader279
  %403 = icmp sgt i32 %388, 0
  br i1 %403, label %.lr.ph312, label %.preheader

.lr.ph312:                                        ; preds = %.preheader278
  %404 = getelementptr inbounds i8, ptr %0, i64 168
  br label %408

.lr.ph310:                                        ; preds = %.preheader279, %.lr.ph310
  %.0309 = phi i32 [ %406, %.lr.ph310 ], [ 0, %.preheader279 ]
  %405 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %391, i32 noundef %.0309)
  store i32 %.0309, ptr %405, align 4, !tbaa !23
  %406 = add nuw nsw i32 %.0309, 1
  %exitcond348.not = icmp eq i32 %406, %386
  br i1 %exitcond348.not, label %.preheader278, label %.lr.ph310, !llvm.loop !82

.preheader:                                       ; preds = %408, %.preheader278
  %407 = icmp sgt i32 %390, 0
  br i1 %407, label %.lr.ph314, label %._crit_edge315

408:                                              ; preds = %.lr.ph312, %408
  %.1311 = phi i32 [ 0, %.lr.ph312 ], [ %410, %408 ]
  %409 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %404, i32 noundef %.1311)
  store i32 %.1311, ptr %409, align 4, !tbaa !23
  %410 = add nuw nsw i32 %.1311, 1
  %exitcond349.not = icmp eq i32 %410, %388
  br i1 %exitcond349.not, label %.preheader, label %408, !llvm.loop !83

.lr.ph314:                                        ; preds = %.preheader, %.lr.ph314
  %.2313 = phi i32 [ %412, %.lr.ph314 ], [ 0, %.preheader ]
  %411 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %401, i32 noundef %.2313)
  store i32 %.2313, ptr %411, align 4, !tbaa !23
  %412 = add nuw nsw i32 %.2313, 1
  %exitcond350.not = icmp eq i32 %412, %390
  br i1 %exitcond350.not, label %._crit_edge315, label %.lr.ph314, !llvm.loop !84

._crit_edge315:                                   ; preds = %.lr.ph314, %.preheader
  call void @_ZN13b3ProfileZoneD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  ret float 0.000000e+00

413:                                              ; preds = %146, %148, %222, %377, %220, %398, %384, %93, %91, %89, %87, %85, %83, %81, %79, %77
  %.pn275.pn = phi { ptr, i32 } [ %385, %384 ], [ %399, %398 ], [ %94, %93 ], [ %92, %91 ], [ %90, %89 ], [ %88, %87 ], [ %86, %85 ], [ %84, %83 ], [ %82, %81 ], [ %80, %79 ], [ %78, %77 ], [ %149, %148 ], [ %147, %146 ], [ %221, %220 ], [ %.pn.pn.pn.pn.pn.pn, %377 ], [ %223, %222 ]
  call void @_ZN13b3ProfileZoneD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #9
  resume { ptr, i32 } %.pn275.pn
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayI12b3SolverBodyE6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, ptr noundef nonnull align 16 dereferenceable(228)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayIiE6resizeEiRKi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayI9b3Vector3E6resizeEiRKS0_(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef, ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN17b3TypedConstraint13getRigidBodyAEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN17b3TypedConstraint13getRigidBodyBEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN17b3TypedConstraint25internalSetAppliedImpulseEf(ptr noundef nonnull align 16 dereferenceable(64), float noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN17b3TypedConstraint16getJointFeedbackEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN9b3Vector37setZeroEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK17b3TypedConstraint9isEnabledEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayI18b3SolverConstraintE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK17b3TypedConstraint30getOverrideNumSolverIterationsEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK17b3TypedConstraint27getBreakingImpulseThresholdEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_Z6b3Fabsf(float noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN20b3AlignedObjectArrayIiE18resizeNoInitializeEi(ptr noundef nonnull align 8 dereferenceable(25), i32 noundef) local_unnamed_addr #7 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress uwtable "min-legal-vector-width"="64" "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 #9 = { 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, !9, i64 428}
!6 = !{!"_ZTS17b3PgsJacobiSolver", !7, i64 8, !14, i64 40, !14, i64 72, !14, i64 104, !14, i64 136, !16, i64 168, !16, i64 200, !16, i64 232, !18, i64 264, !16, i64 296, !16, i64 328, !20, i64 360, !20, i64 392, !13, i64 424, !9, i64 428, !9, i64 432, !22, i64 440}
!7 = !{!"_ZTS20b3AlignedObjectArrayI12b3SolverBodyE", !8, i64 0, !9, i64 4, !9, i64 8, !12, i64 16, !13, i64 24}
!8 = !{!"_ZTS18b3AlignedAllocatorI12b3SolverBodyLj16EE"}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"any pointer", !10, i64 0}
!13 = !{!"bool", !10, i64 0}
!14 = !{!"_ZTS20b3AlignedObjectArrayI18b3SolverConstraintE", !15, i64 0, !9, i64 4, !9, i64 8, !12, i64 16, !13, i64 24}
!15 = !{!"_ZTS18b3AlignedAllocatorI18b3SolverConstraintLj16EE"}
!16 = !{!"_ZTS20b3AlignedObjectArrayIiE", !17, i64 0, !9, i64 4, !9, i64 8, !12, i64 16, !13, i64 24}
!17 = !{!"_ZTS18b3AlignedAllocatorIiLj16EE"}
!18 = !{!"_ZTS20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EE", !19, i64 0, !9, i64 4, !9, i64 8, !12, i64 16, !13, i64 24}
!19 = !{!"_ZTS18b3AlignedAllocatorIN17b3TypedConstraint17b3ConstraintInfo1ELj16EE"}
!20 = !{!"_ZTS20b3AlignedObjectArrayI9b3Vector3E", !21, i64 0, !9, i64 4, !9, i64 8, !12, i64 16, !13, i64 24}
!21 = !{!"_ZTS18b3AlignedAllocatorI9b3Vector3Lj16EE"}
!22 = !{!"long", !10, i64 0}
!23 = !{!9, !9, i64 0}
!24 = !{!12, !12, i64 0}
!25 = !{!6, !13, i64 424}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!31, !35, i64 68}
!31 = !{!"_ZTS15b3RigidBodyData", !32, i64 0, !33, i64 16, !32, i64 32, !32, i64 48, !9, i64 64, !35, i64 68, !35, i64 72, !35, i64 76}
!32 = !{!"_ZTS9b3Vector3", !10, i64 0}
!33 = !{!"_ZTS12b3Quaternion", !34, i64 0}
!34 = !{!"_ZTS10b3QuadWord", !10, i64 0}
!35 = !{!"float", !10, i64 0}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !29}
!38 = !{!39, !39, i64 0}
!39 = !{!"vtable pointer", !11, i64 0}
!40 = !{!41, !9, i64 0}
!41 = !{!"_ZTSN17b3TypedConstraint17b3ConstraintInfo1E", !9, i64 0, !9, i64 4}
!42 = !{!41, !9, i64 4}
!43 = distinct !{!43, !29}
!44 = !{!45, !9, i64 20}
!45 = !{!"_ZTS23b3ContactSolverInfoData", !35, i64 0, !35, i64 4, !35, i64 8, !35, i64 12, !35, i64 16, !9, i64 20, !35, i64 24, !35, i64 28, !35, i64 32, !35, i64 36, !35, i64 40, !9, i64 44, !35, i64 48, !35, i64 52, !35, i64 56, !35, i64 60, !9, i64 64, !9, i64 68, !9, i64 72, !35, i64 76, !35, i64 80}
!46 = !{!35, !35, i64 0}
!47 = !{!48, !35, i64 80}
!48 = !{!"_ZTS18b3SolverConstraint", !32, i64 0, !32, i64 16, !32, i64 32, !32, i64 48, !32, i64 64, !35, i64 80, !35, i64 84, !9, i64 88, !9, i64 92, !35, i64 96, !35, i64 100, !35, i64 104, !35, i64 108, !35, i64 112, !35, i64 116, !35, i64 120, !10, i64 128, !9, i64 136, !9, i64 140, !9, i64 144, !9, i64 148}
!49 = !{!48, !9, i64 144}
!50 = !{!48, !9, i64 148}
!51 = !{!48, !9, i64 136}
!52 = distinct !{!52, !29}
!53 = !{!45, !35, i64 12}
!54 = !{!55, !35, i64 0}
!55 = !{!"_ZTSN17b3TypedConstraint17b3ConstraintInfo2E", !35, i64 0, !35, i64 4, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !9, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !9, i64 88, !35, i64 92}
!56 = !{!45, !35, i64 32}
!57 = !{!55, !35, i64 4}
!58 = !{!55, !12, i64 8}
!59 = !{!55, !12, i64 16}
!60 = !{!55, !12, i64 24}
!61 = !{!55, !12, i64 32}
!62 = !{!55, !9, i64 40}
!63 = !{!55, !12, i64 48}
!64 = !{!45, !35, i64 40}
!65 = !{!48, !35, i64 108}
!66 = !{!45, !35, i64 4}
!67 = !{!55, !35, i64 92}
!68 = !{!55, !12, i64 56}
!69 = !{!55, !12, i64 64}
!70 = !{!55, !12, i64 72}
!71 = !{!55, !9, i64 88}
!72 = !{!48, !35, i64 116}
!73 = !{!48, !35, i64 112}
!74 = !{!10, !10, i64 0}
!75 = !{!48, !35, i64 100}
!76 = !{!48, !35, i64 104}
!77 = !{!48, !35, i64 84}
!78 = distinct !{!78, !29}
!79 = distinct !{!79, !29}
!80 = distinct !{!80, !29}
!81 = !{!45, !9, i64 64}
!82 = distinct !{!82, !29}
!83 = distinct !{!83, !29}
!84 = distinct !{!84, !29}


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