; 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.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.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] }
%class.b3Vector3 = type { %union.anon }
%union.anon = type { [4 x float] }
%union.anon.9 = type { ptr }

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver40resolveSingleConstraintRowLowerLimitSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver36resolveSingleConstraintRowLowerLimitER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) #2 align 2

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN17b3PgsJacobiSolver20solveSingleIterationEiPP17b3TypedConstraintiRK19b3ContactSolverInfo(ptr noundef nonnull align 8 dereferenceable(448) %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, ptr noundef nonnull align 4 dereferenceable(84) %4) #1 align 2 {
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca float, align 4
  %29 = alloca ptr, align 8
  %30 = alloca i8, align 1
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca float, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca float, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca ptr, align 8
  %55 = alloca float, align 4
  %56 = alloca float, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  store ptr %4, ptr %10, align 8, !tbaa !5
  %57 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %58 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 3
  %59 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %58)
  store i32 %59, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %60 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %61 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %60)
  store i32 %61, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %62 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 4
  %63 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %62)
  store i32 %63, ptr %13, align 4, !tbaa !9
  %64 = load ptr, ptr %10, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %64, i32 0, i32 16
  %66 = load i32, ptr %65, align 4, !tbaa !11
  %67 = and i32 %66, 1
  %68 = icmp ne i32 %67, 0
  br i1 %68, label %69, label %161

69:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %70

70:                                               ; preds = %94, %69
  %71 = load i32, ptr %14, align 4, !tbaa !9
  %72 = load i32, ptr %11, align 4, !tbaa !9
  %73 = icmp slt i32 %71, %72
  br i1 %73, label %75, label %74

74:                                               ; preds = %70
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %97

75:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %76 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 7
  %77 = load i32, ptr %14, align 4, !tbaa !9
  %78 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %76, i32 noundef %77)
  %79 = load i32, ptr %78, align 4, !tbaa !9
  store i32 %79, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %80 = load i32, ptr %14, align 4, !tbaa !9
  %81 = add nsw i32 %80, 1
  %82 = call noundef i32 @_ZN17b3PgsJacobiSolver10b3RandInt2Ei(ptr noundef nonnull align 8 dereferenceable(448) %57, i32 noundef %81)
  store i32 %82, ptr %16, align 4, !tbaa !9
  %83 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 7
  %84 = load i32, ptr %16, align 4, !tbaa !9
  %85 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %83, i32 noundef %84)
  %86 = load i32, ptr %85, align 4, !tbaa !9
  %87 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 7
  %88 = load i32, ptr %14, align 4, !tbaa !9
  %89 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %87, i32 noundef %88)
  store i32 %86, ptr %89, align 4, !tbaa !9
  %90 = load i32, ptr %15, align 4, !tbaa !9
  %91 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 7
  %92 = load i32, ptr %16, align 4, !tbaa !9
  %93 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %91, i32 noundef %92)
  store i32 %90, ptr %93, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %94

94:                                               ; preds = %75
  %95 = load i32, ptr %14, align 4, !tbaa !9
  %96 = add nsw i32 %95, 1
  store i32 %96, ptr %14, align 4, !tbaa !9
  br label %70, !llvm.loop !14

97:                                               ; preds = %74
  %98 = load i32, ptr %7, align 4, !tbaa !9
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %99, i32 0, i32 5
  %101 = load i32, ptr %100, align 4, !tbaa !16
  %102 = icmp slt i32 %98, %101
  br i1 %102, label %103, label %160

103:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %104

104:                                              ; preds = %128, %103
  %105 = load i32, ptr %17, align 4, !tbaa !9
  %106 = load i32, ptr %12, align 4, !tbaa !9
  %107 = icmp slt i32 %105, %106
  br i1 %107, label %109, label %108

108:                                              ; preds = %104
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %131

109:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %110 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 6
  %111 = load i32, ptr %17, align 4, !tbaa !9
  %112 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %110, i32 noundef %111)
  %113 = load i32, ptr %112, align 4, !tbaa !9
  store i32 %113, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %114 = load i32, ptr %17, align 4, !tbaa !9
  %115 = add nsw i32 %114, 1
  %116 = call noundef i32 @_ZN17b3PgsJacobiSolver10b3RandInt2Ei(ptr noundef nonnull align 8 dereferenceable(448) %57, i32 noundef %115)
  store i32 %116, ptr %19, align 4, !tbaa !9
  %117 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 6
  %118 = load i32, ptr %19, align 4, !tbaa !9
  %119 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %117, i32 noundef %118)
  %120 = load i32, ptr %119, align 4, !tbaa !9
  %121 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 6
  %122 = load i32, ptr %17, align 4, !tbaa !9
  %123 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %121, i32 noundef %122)
  store i32 %120, ptr %123, align 4, !tbaa !9
  %124 = load i32, ptr %18, align 4, !tbaa !9
  %125 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 6
  %126 = load i32, ptr %19, align 4, !tbaa !9
  %127 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %125, i32 noundef %126)
  store i32 %124, ptr %127, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %128

128:                                              ; preds = %109
  %129 = load i32, ptr %17, align 4, !tbaa !9
  %130 = add nsw i32 %129, 1
  store i32 %130, ptr %17, align 4, !tbaa !9
  br label %104, !llvm.loop !17

131:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %132

132:                                              ; preds = %156, %131
  %133 = load i32, ptr %20, align 4, !tbaa !9
  %134 = load i32, ptr %13, align 4, !tbaa !9
  %135 = icmp slt i32 %133, %134
  br i1 %135, label %137, label %136

136:                                              ; preds = %132
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %159

137:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %138 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %139 = load i32, ptr %20, align 4, !tbaa !9
  %140 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %138, i32 noundef %139)
  %141 = load i32, ptr %140, align 4, !tbaa !9
  store i32 %141, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %142 = load i32, ptr %20, align 4, !tbaa !9
  %143 = add nsw i32 %142, 1
  %144 = call noundef i32 @_ZN17b3PgsJacobiSolver10b3RandInt2Ei(ptr noundef nonnull align 8 dereferenceable(448) %57, i32 noundef %143)
  store i32 %144, ptr %22, align 4, !tbaa !9
  %145 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %146 = load i32, ptr %22, align 4, !tbaa !9
  %147 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %145, i32 noundef %146)
  %148 = load i32, ptr %147, align 4, !tbaa !9
  %149 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %150 = load i32, ptr %20, align 4, !tbaa !9
  %151 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %149, i32 noundef %150)
  store i32 %148, ptr %151, align 4, !tbaa !9
  %152 = load i32, ptr %21, align 4, !tbaa !9
  %153 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %154 = load i32, ptr %22, align 4, !tbaa !9
  %155 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %153, i32 noundef %154)
  store i32 %152, ptr %155, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  br label %156

156:                                              ; preds = %137
  %157 = load i32, ptr %20, align 4, !tbaa !9
  %158 = add nsw i32 %157, 1
  store i32 %158, ptr %20, align 4, !tbaa !9
  br label %132, !llvm.loop !18

159:                                              ; preds = %136
  br label %160

160:                                              ; preds = %159, %97
  br label %161

161:                                              ; preds = %160, %5
  %162 = load ptr, ptr %10, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %162, i32 0, i32 16
  %164 = load i32, ptr %163, align 4, !tbaa !11
  %165 = and i32 %164, 256
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %490

167:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %168

168:                                              ; preds = %199, %167
  %169 = load i32, ptr %23, align 4, !tbaa !9
  %170 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 3
  %171 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %170)
  %172 = icmp slt i32 %169, %171
  br i1 %172, label %174, label %173

173:                                              ; preds = %168
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %202

174:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %175 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 3
  %176 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 7
  %177 = load i32, ptr %23, align 4, !tbaa !9
  %178 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %176, i32 noundef %177)
  %179 = load i32, ptr %178, align 4, !tbaa !9
  %180 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %175, i32 noundef %179)
  store ptr %180, ptr %24, align 8, !tbaa !5
  %181 = load i32, ptr %7, align 4, !tbaa !9
  %182 = load ptr, ptr %24, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.b3SolverConstraint, ptr %182, i32 0, i32 17
  %184 = load i32, ptr %183, align 8, !tbaa !19
  %185 = icmp slt i32 %181, %184
  br i1 %185, label %186, label %198

186:                                              ; preds = %174
  %187 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %188 = load ptr, ptr %24, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.b3SolverConstraint, ptr %188, i32 0, i32 19
  %190 = load i32, ptr %189, align 16, !tbaa !22
  %191 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %187, i32 noundef %190)
  %192 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %193 = load ptr, ptr %24, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.b3SolverConstraint, ptr %193, i32 0, i32 20
  %195 = load i32, ptr %194, align 4, !tbaa !23
  %196 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %192, i32 noundef %195)
  %197 = load ptr, ptr %24, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %191, ptr noundef nonnull align 16 dereferenceable(228) %196, ptr noundef nonnull align 16 dereferenceable(160) %197)
  br label %198

198:                                              ; preds = %186, %174
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %199

199:                                              ; preds = %198
  %200 = load i32, ptr %23, align 4, !tbaa !9
  %201 = add nsw i32 %200, 1
  store i32 %201, ptr %23, align 4, !tbaa !9
  br label %168, !llvm.loop !24

202:                                              ; preds = %173
  %203 = load i32, ptr %7, align 4, !tbaa !9
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %204, i32 0, i32 5
  %206 = load i32, ptr %205, align 4, !tbaa !16
  %207 = icmp slt i32 %203, %206
  br i1 %207, label %208, label %489

208:                                              ; preds = %202
  %209 = load ptr, ptr %10, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %209, i32 0, i32 16
  %211 = load i32, ptr %210, align 4, !tbaa !11
  %212 = and i32 %211, 512
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %214, label %342

214:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %215 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %216 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %215)
  store i32 %216, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %217, i32 0, i32 16
  %219 = load i32, ptr %218, align 4, !tbaa !11
  %220 = and i32 %219, 16
  %221 = icmp ne i32 %220, 0
  %222 = zext i1 %221 to i64
  %223 = select i1 %221, i32 2, i32 1
  store i32 %223, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %338, %214
  %225 = load i32, ptr %27, align 4, !tbaa !9
  %226 = load i32, ptr %25, align 4, !tbaa !9
  %227 = icmp slt i32 %225, %226
  br i1 %227, label %229, label %228

228:                                              ; preds = %224
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  br label %341

229:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  store float 0.000000e+00, ptr %28, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %230 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %231 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 6
  %232 = load i32, ptr %27, align 4, !tbaa !9
  %233 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %231, i32 noundef %232)
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %230, i32 noundef %234)
  store ptr %235, ptr %29, align 8, !tbaa !5
  %236 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %237 = load ptr, ptr %29, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.b3SolverConstraint, ptr %237, i32 0, i32 19
  %239 = load i32, ptr %238, align 16, !tbaa !22
  %240 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %236, i32 noundef %239)
  %241 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %242 = load ptr, ptr %29, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.b3SolverConstraint, ptr %242, i32 0, i32 20
  %244 = load i32, ptr %243, align 4, !tbaa !23
  %245 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %241, i32 noundef %244)
  %246 = load ptr, ptr %29, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver40resolveSingleConstraintRowLowerLimitSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %240, ptr noundef nonnull align 16 dereferenceable(228) %245, ptr noundef nonnull align 16 dereferenceable(160) %246)
  %247 = load ptr, ptr %29, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.b3SolverConstraint, ptr %247, i32 0, i32 6
  %249 = load float, ptr %248, align 4, !tbaa !26
  store float %249, ptr %28, align 4, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #5
  store i8 1, ptr %30, align 1, !tbaa !27
  %250 = load i8, ptr %30, align 1, !tbaa !27, !range !29, !noundef !30
  %251 = trunc i8 %250 to i1
  br i1 %251, label %252, label %337

252:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %253 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 4
  %254 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %255 = load i32, ptr %27, align 4, !tbaa !9
  %256 = load i32, ptr %26, align 4, !tbaa !9
  %257 = mul nsw i32 %255, %256
  %258 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %254, i32 noundef %257)
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %253, i32 noundef %259)
  store ptr %260, ptr %31, align 8, !tbaa !5
  %261 = load float, ptr %28, align 4, !tbaa !25
  %262 = fcmp ogt float %261, 0.000000e+00
  br i1 %262, label %263, label %290

263:                                              ; preds = %252
  %264 = load ptr, ptr %31, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.b3SolverConstraint, ptr %264, i32 0, i32 9
  %266 = load float, ptr %265, align 16, !tbaa !31
  %267 = load float, ptr %28, align 4, !tbaa !25
  %268 = fmul float %266, %267
  %269 = fneg float %268
  %270 = load ptr, ptr %31, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.b3SolverConstraint, ptr %270, i32 0, i32 13
  store float %269, ptr %271, align 16, !tbaa !32
  %272 = load ptr, ptr %31, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.b3SolverConstraint, ptr %272, i32 0, i32 9
  %274 = load float, ptr %273, align 16, !tbaa !31
  %275 = load float, ptr %28, align 4, !tbaa !25
  %276 = fmul float %274, %275
  %277 = load ptr, ptr %31, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.b3SolverConstraint, ptr %277, i32 0, i32 14
  store float %276, ptr %278, align 4, !tbaa !33
  %279 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %280 = load ptr, ptr %31, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.b3SolverConstraint, ptr %280, i32 0, i32 19
  %282 = load i32, ptr %281, align 16, !tbaa !22
  %283 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %279, i32 noundef %282)
  %284 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %285 = load ptr, ptr %31, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.b3SolverConstraint, ptr %285, i32 0, i32 20
  %287 = load i32, ptr %286, align 4, !tbaa !23
  %288 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %284, i32 noundef %287)
  %289 = load ptr, ptr %31, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %283, ptr noundef nonnull align 16 dereferenceable(228) %288, ptr noundef nonnull align 16 dereferenceable(160) %289)
  br label %290

290:                                              ; preds = %263, %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  %291 = load ptr, ptr %10, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %291, i32 0, i32 16
  %293 = load i32, ptr %292, align 4, !tbaa !11
  %294 = and i32 %293, 16
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %296, label %336

296:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %297 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 4
  %298 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %299 = load i32, ptr %27, align 4, !tbaa !9
  %300 = load i32, ptr %26, align 4, !tbaa !9
  %301 = mul nsw i32 %299, %300
  %302 = add nsw i32 %301, 1
  %303 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %298, i32 noundef %302)
  %304 = load i32, ptr %303, align 4, !tbaa !9
  %305 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %297, i32 noundef %304)
  store ptr %305, ptr %32, align 8, !tbaa !5
  %306 = load float, ptr %28, align 4, !tbaa !25
  %307 = fcmp ogt float %306, 0.000000e+00
  br i1 %307, label %308, label %335

308:                                              ; preds = %296
  %309 = load ptr, ptr %32, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.b3SolverConstraint, ptr %309, i32 0, i32 9
  %311 = load float, ptr %310, align 16, !tbaa !31
  %312 = load float, ptr %28, align 4, !tbaa !25
  %313 = fmul float %311, %312
  %314 = fneg float %313
  %315 = load ptr, ptr %32, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.b3SolverConstraint, ptr %315, i32 0, i32 13
  store float %314, ptr %316, align 16, !tbaa !32
  %317 = load ptr, ptr %32, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.b3SolverConstraint, ptr %317, i32 0, i32 9
  %319 = load float, ptr %318, align 16, !tbaa !31
  %320 = load float, ptr %28, align 4, !tbaa !25
  %321 = fmul float %319, %320
  %322 = load ptr, ptr %32, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.b3SolverConstraint, ptr %322, i32 0, i32 14
  store float %321, ptr %323, align 4, !tbaa !33
  %324 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %325 = load ptr, ptr %32, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.b3SolverConstraint, ptr %325, i32 0, i32 19
  %327 = load i32, ptr %326, align 16, !tbaa !22
  %328 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %324, i32 noundef %327)
  %329 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %330 = load ptr, ptr %32, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.b3SolverConstraint, ptr %330, i32 0, i32 20
  %332 = load i32, ptr %331, align 4, !tbaa !23
  %333 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %329, i32 noundef %332)
  %334 = load ptr, ptr %32, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %328, ptr noundef nonnull align 16 dereferenceable(228) %333, ptr noundef nonnull align 16 dereferenceable(160) %334)
  br label %335

335:                                              ; preds = %308, %296
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %336

336:                                              ; preds = %335, %290
  br label %337

337:                                              ; preds = %336, %229
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %338

338:                                              ; preds = %337
  %339 = load i32, ptr %27, align 4, !tbaa !9
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %27, align 4, !tbaa !9
  br label %224, !llvm.loop !34

341:                                              ; preds = %228
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %488

342:                                              ; preds = %208
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %343 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %344 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %343)
  store i32 %344, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %345

345:                                              ; preds = %367, %342
  %346 = load i32, ptr %34, align 4, !tbaa !9
  %347 = load i32, ptr %33, align 4, !tbaa !9
  %348 = icmp slt i32 %346, %347
  br i1 %348, label %349, label %370

349:                                              ; preds = %345
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %350 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %351 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 6
  %352 = load i32, ptr %34, align 4, !tbaa !9
  %353 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %351, i32 noundef %352)
  %354 = load i32, ptr %353, align 4, !tbaa !9
  %355 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %350, i32 noundef %354)
  store ptr %355, ptr %35, align 8, !tbaa !5
  %356 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %357 = load ptr, ptr %35, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.b3SolverConstraint, ptr %357, i32 0, i32 19
  %359 = load i32, ptr %358, align 16, !tbaa !22
  %360 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %356, i32 noundef %359)
  %361 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %362 = load ptr, ptr %35, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.b3SolverConstraint, ptr %362, i32 0, i32 20
  %364 = load i32, ptr %363, align 4, !tbaa !23
  %365 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %361, i32 noundef %364)
  %366 = load ptr, ptr %35, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver40resolveSingleConstraintRowLowerLimitSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %360, ptr noundef nonnull align 16 dereferenceable(228) %365, ptr noundef nonnull align 16 dereferenceable(160) %366)
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  br label %367

367:                                              ; preds = %349
  %368 = load i32, ptr %34, align 4, !tbaa !9
  %369 = add nsw i32 %368, 1
  store i32 %369, ptr %34, align 4, !tbaa !9
  br label %345, !llvm.loop !35

370:                                              ; preds = %345
  %371 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 14
  %372 = load i8, ptr %371, align 8, !tbaa !36, !range !29, !noundef !30
  %373 = trunc i8 %372 to i1
  br i1 %373, label %375, label %374

374:                                              ; preds = %370
  call void @_ZN17b3PgsJacobiSolver17averageVelocitiesEv(ptr noundef nonnull align 8 dereferenceable(448) %57)
  br label %375

375:                                              ; preds = %374, %370
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %376 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 4
  %377 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %376)
  store i32 %377, ptr %36, align 4, !tbaa !9
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %378

378:                                              ; preds = %426, %375
  %379 = load i32, ptr %34, align 4, !tbaa !9
  %380 = load i32, ptr %36, align 4, !tbaa !9
  %381 = icmp slt i32 %379, %380
  br i1 %381, label %382, label %429

382:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %383 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 4
  %384 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %385 = load i32, ptr %34, align 4, !tbaa !9
  %386 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %384, i32 noundef %385)
  %387 = load i32, ptr %386, align 4, !tbaa !9
  %388 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %383, i32 noundef %387)
  store ptr %388, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %389 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %390 = load ptr, ptr %37, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.b3SolverConstraint, ptr %390, i32 0, i32 18
  %392 = load i32, ptr %391, align 4, !tbaa !49
  %393 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %389, i32 noundef %392)
  %394 = getelementptr inbounds %struct.b3SolverConstraint, ptr %393, i32 0, i32 6
  %395 = load float, ptr %394, align 4, !tbaa !26
  store float %395, ptr %38, align 4, !tbaa !25
  %396 = load float, ptr %38, align 4, !tbaa !25
  %397 = fcmp ogt float %396, 0.000000e+00
  br i1 %397, label %398, label %425

398:                                              ; preds = %382
  %399 = load ptr, ptr %37, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.b3SolverConstraint, ptr %399, i32 0, i32 9
  %401 = load float, ptr %400, align 16, !tbaa !31
  %402 = load float, ptr %38, align 4, !tbaa !25
  %403 = fmul float %401, %402
  %404 = fneg float %403
  %405 = load ptr, ptr %37, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.b3SolverConstraint, ptr %405, i32 0, i32 13
  store float %404, ptr %406, align 16, !tbaa !32
  %407 = load ptr, ptr %37, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.b3SolverConstraint, ptr %407, i32 0, i32 9
  %409 = load float, ptr %408, align 16, !tbaa !31
  %410 = load float, ptr %38, align 4, !tbaa !25
  %411 = fmul float %409, %410
  %412 = load ptr, ptr %37, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.b3SolverConstraint, ptr %412, i32 0, i32 14
  store float %411, ptr %413, align 4, !tbaa !33
  %414 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %415 = load ptr, ptr %37, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.b3SolverConstraint, ptr %415, i32 0, i32 19
  %417 = load i32, ptr %416, align 16, !tbaa !22
  %418 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %414, i32 noundef %417)
  %419 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %420 = load ptr, ptr %37, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.b3SolverConstraint, ptr %420, i32 0, i32 20
  %422 = load i32, ptr %421, align 4, !tbaa !23
  %423 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %419, i32 noundef %422)
  %424 = load ptr, ptr %37, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %418, ptr noundef nonnull align 16 dereferenceable(228) %423, ptr noundef nonnull align 16 dereferenceable(160) %424)
  br label %425

425:                                              ; preds = %398, %382
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  br label %426

426:                                              ; preds = %425
  %427 = load i32, ptr %34, align 4, !tbaa !9
  %428 = add nsw i32 %427, 1
  store i32 %428, ptr %34, align 4, !tbaa !9
  br label %378, !llvm.loop !50

429:                                              ; preds = %378
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %430 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 5
  %431 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %430)
  store i32 %431, ptr %39, align 4, !tbaa !9
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %432

432:                                              ; preds = %484, %429
  %433 = load i32, ptr %34, align 4, !tbaa !9
  %434 = load i32, ptr %39, align 4, !tbaa !9
  %435 = icmp slt i32 %433, %434
  br i1 %435, label %436, label %487

436:                                              ; preds = %432
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %437 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 5
  %438 = load i32, ptr %34, align 4, !tbaa !9
  %439 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %437, i32 noundef %438)
  store ptr %439, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %440 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %441 = load ptr, ptr %40, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.b3SolverConstraint, ptr %441, i32 0, i32 18
  %443 = load i32, ptr %442, align 4, !tbaa !49
  %444 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %440, i32 noundef %443)
  %445 = getelementptr inbounds %struct.b3SolverConstraint, ptr %444, i32 0, i32 6
  %446 = load float, ptr %445, align 4, !tbaa !26
  store float %446, ptr %41, align 4, !tbaa !25
  %447 = load float, ptr %41, align 4, !tbaa !25
  %448 = fcmp ogt float %447, 0.000000e+00
  br i1 %448, label %449, label %483

449:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  %450 = load ptr, ptr %40, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.b3SolverConstraint, ptr %450, i32 0, i32 9
  %452 = load float, ptr %451, align 16, !tbaa !31
  %453 = load float, ptr %41, align 4, !tbaa !25
  %454 = fmul float %452, %453
  store float %454, ptr %42, align 4, !tbaa !25
  %455 = load float, ptr %42, align 4, !tbaa !25
  %456 = load ptr, ptr %40, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.b3SolverConstraint, ptr %456, i32 0, i32 9
  %458 = load float, ptr %457, align 16, !tbaa !31
  %459 = fcmp ogt float %455, %458
  br i1 %459, label %460, label %464

460:                                              ; preds = %449
  %461 = load ptr, ptr %40, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.b3SolverConstraint, ptr %461, i32 0, i32 9
  %463 = load float, ptr %462, align 16, !tbaa !31
  store float %463, ptr %42, align 4, !tbaa !25
  br label %464

464:                                              ; preds = %460, %449
  %465 = load float, ptr %42, align 4, !tbaa !25
  %466 = fneg float %465
  %467 = load ptr, ptr %40, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.b3SolverConstraint, ptr %467, i32 0, i32 13
  store float %466, ptr %468, align 16, !tbaa !32
  %469 = load float, ptr %42, align 4, !tbaa !25
  %470 = load ptr, ptr %40, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.b3SolverConstraint, ptr %470, i32 0, i32 14
  store float %469, ptr %471, align 4, !tbaa !33
  %472 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %473 = load ptr, ptr %40, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.b3SolverConstraint, ptr %473, i32 0, i32 19
  %475 = load i32, ptr %474, align 16, !tbaa !22
  %476 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %472, i32 noundef %475)
  %477 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %478 = load ptr, ptr %40, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.b3SolverConstraint, ptr %478, i32 0, i32 20
  %480 = load i32, ptr %479, align 4, !tbaa !23
  %481 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %477, i32 noundef %480)
  %482 = load ptr, ptr %40, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %476, ptr noundef nonnull align 16 dereferenceable(228) %481, ptr noundef nonnull align 16 dereferenceable(160) %482)
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  br label %483

483:                                              ; preds = %464, %436
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  br label %484

484:                                              ; preds = %483
  %485 = load i32, ptr %34, align 4, !tbaa !9
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %34, align 4, !tbaa !9
  br label %432, !llvm.loop !51

487:                                              ; preds = %432
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %488

488:                                              ; preds = %487, %341
  br label %489

489:                                              ; preds = %488, %202
  br label %676

490:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %491

491:                                              ; preds = %522, %490
  %492 = load i32, ptr %43, align 4, !tbaa !9
  %493 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 3
  %494 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %493)
  %495 = icmp slt i32 %492, %494
  br i1 %495, label %497, label %496

496:                                              ; preds = %491
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  br label %525

497:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %498 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 3
  %499 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 7
  %500 = load i32, ptr %43, align 4, !tbaa !9
  %501 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %499, i32 noundef %500)
  %502 = load i32, ptr %501, align 4, !tbaa !9
  %503 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %498, i32 noundef %502)
  store ptr %503, ptr %44, align 8, !tbaa !5
  %504 = load i32, ptr %7, align 4, !tbaa !9
  %505 = load ptr, ptr %44, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.b3SolverConstraint, ptr %505, i32 0, i32 17
  %507 = load i32, ptr %506, align 8, !tbaa !19
  %508 = icmp slt i32 %504, %507
  br i1 %508, label %509, label %521

509:                                              ; preds = %497
  %510 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %511 = load ptr, ptr %44, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.b3SolverConstraint, ptr %511, i32 0, i32 19
  %513 = load i32, ptr %512, align 16, !tbaa !22
  %514 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %510, i32 noundef %513)
  %515 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %516 = load ptr, ptr %44, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.b3SolverConstraint, ptr %516, i32 0, i32 20
  %518 = load i32, ptr %517, align 4, !tbaa !23
  %519 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %515, i32 noundef %518)
  %520 = load ptr, ptr %44, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %514, ptr noundef nonnull align 16 dereferenceable(228) %519, ptr noundef nonnull align 16 dereferenceable(160) %520)
  br label %521

521:                                              ; preds = %509, %497
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  br label %522

522:                                              ; preds = %521
  %523 = load i32, ptr %43, align 4, !tbaa !9
  %524 = add nsw i32 %523, 1
  store i32 %524, ptr %43, align 4, !tbaa !9
  br label %491, !llvm.loop !52

525:                                              ; preds = %496
  %526 = load i32, ptr %7, align 4, !tbaa !9
  %527 = load ptr, ptr %10, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.b3ContactSolverInfoData, ptr %527, i32 0, i32 5
  %529 = load i32, ptr %528, align 4, !tbaa !16
  %530 = icmp slt i32 %526, %529
  br i1 %530, label %531, label %675

531:                                              ; preds = %525
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %532 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %533 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %532)
  store i32 %533, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %534

534:                                              ; preds = %557, %531
  %535 = load i32, ptr %46, align 4, !tbaa !9
  %536 = load i32, ptr %45, align 4, !tbaa !9
  %537 = icmp slt i32 %535, %536
  br i1 %537, label %539, label %538

538:                                              ; preds = %534
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  br label %560

539:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %540 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %541 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 6
  %542 = load i32, ptr %46, align 4, !tbaa !9
  %543 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %541, i32 noundef %542)
  %544 = load i32, ptr %543, align 4, !tbaa !9
  %545 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %540, i32 noundef %544)
  store ptr %545, ptr %47, align 8, !tbaa !5
  %546 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %547 = load ptr, ptr %47, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.b3SolverConstraint, ptr %547, i32 0, i32 19
  %549 = load i32, ptr %548, align 16, !tbaa !22
  %550 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %546, i32 noundef %549)
  %551 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %552 = load ptr, ptr %47, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.b3SolverConstraint, ptr %552, i32 0, i32 20
  %554 = load i32, ptr %553, align 4, !tbaa !23
  %555 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %551, i32 noundef %554)
  %556 = load ptr, ptr %47, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver36resolveSingleConstraintRowLowerLimitER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %550, ptr noundef nonnull align 16 dereferenceable(228) %555, ptr noundef nonnull align 16 dereferenceable(160) %556)
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  br label %557

557:                                              ; preds = %539
  %558 = load i32, ptr %46, align 4, !tbaa !9
  %559 = add nsw i32 %558, 1
  store i32 %559, ptr %46, align 4, !tbaa !9
  br label %534, !llvm.loop !53

560:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %561 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 4
  %562 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %561)
  store i32 %562, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %563

563:                                              ; preds = %612, %560
  %564 = load i32, ptr %49, align 4, !tbaa !9
  %565 = load i32, ptr %48, align 4, !tbaa !9
  %566 = icmp slt i32 %564, %565
  br i1 %566, label %568, label %567

567:                                              ; preds = %563
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  br label %615

568:                                              ; preds = %563
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %569 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 4
  %570 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 8
  %571 = load i32, ptr %49, align 4, !tbaa !9
  %572 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %570, i32 noundef %571)
  %573 = load i32, ptr %572, align 4, !tbaa !9
  %574 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %569, i32 noundef %573)
  store ptr %574, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  %575 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %576 = load ptr, ptr %50, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.b3SolverConstraint, ptr %576, i32 0, i32 18
  %578 = load i32, ptr %577, align 4, !tbaa !49
  %579 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %575, i32 noundef %578)
  %580 = getelementptr inbounds %struct.b3SolverConstraint, ptr %579, i32 0, i32 6
  %581 = load float, ptr %580, align 4, !tbaa !26
  store float %581, ptr %51, align 4, !tbaa !25
  %582 = load float, ptr %51, align 4, !tbaa !25
  %583 = fcmp ogt float %582, 0.000000e+00
  br i1 %583, label %584, label %611

584:                                              ; preds = %568
  %585 = load ptr, ptr %50, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.b3SolverConstraint, ptr %585, i32 0, i32 9
  %587 = load float, ptr %586, align 16, !tbaa !31
  %588 = load float, ptr %51, align 4, !tbaa !25
  %589 = fmul float %587, %588
  %590 = fneg float %589
  %591 = load ptr, ptr %50, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.b3SolverConstraint, ptr %591, i32 0, i32 13
  store float %590, ptr %592, align 16, !tbaa !32
  %593 = load ptr, ptr %50, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.b3SolverConstraint, ptr %593, i32 0, i32 9
  %595 = load float, ptr %594, align 16, !tbaa !31
  %596 = load float, ptr %51, align 4, !tbaa !25
  %597 = fmul float %595, %596
  %598 = load ptr, ptr %50, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.b3SolverConstraint, ptr %598, i32 0, i32 14
  store float %597, ptr %599, align 4, !tbaa !33
  %600 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %601 = load ptr, ptr %50, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.b3SolverConstraint, ptr %601, i32 0, i32 19
  %603 = load i32, ptr %602, align 16, !tbaa !22
  %604 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %600, i32 noundef %603)
  %605 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %606 = load ptr, ptr %50, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.b3SolverConstraint, ptr %606, i32 0, i32 20
  %608 = load i32, ptr %607, align 4, !tbaa !23
  %609 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %605, i32 noundef %608)
  %610 = load ptr, ptr %50, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %604, ptr noundef nonnull align 16 dereferenceable(228) %609, ptr noundef nonnull align 16 dereferenceable(160) %610)
  br label %611

611:                                              ; preds = %584, %568
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  br label %612

612:                                              ; preds = %611
  %613 = load i32, ptr %49, align 4, !tbaa !9
  %614 = add nsw i32 %613, 1
  store i32 %614, ptr %49, align 4, !tbaa !9
  br label %563, !llvm.loop !54

615:                                              ; preds = %567
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %616 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 5
  %617 = call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %616)
  store i32 %617, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %618

618:                                              ; preds = %671, %615
  %619 = load i32, ptr %53, align 4, !tbaa !9
  %620 = load i32, ptr %52, align 4, !tbaa !9
  %621 = icmp slt i32 %619, %620
  br i1 %621, label %623, label %622

622:                                              ; preds = %618
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  br label %674

623:                                              ; preds = %618
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  %624 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 5
  %625 = load i32, ptr %53, align 4, !tbaa !9
  %626 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %624, i32 noundef %625)
  store ptr %626, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #5
  %627 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 2
  %628 = load ptr, ptr %54, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.b3SolverConstraint, ptr %628, i32 0, i32 18
  %630 = load i32, ptr %629, align 4, !tbaa !49
  %631 = call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %627, i32 noundef %630)
  %632 = getelementptr inbounds %struct.b3SolverConstraint, ptr %631, i32 0, i32 6
  %633 = load float, ptr %632, align 4, !tbaa !26
  store float %633, ptr %55, align 4, !tbaa !25
  %634 = load float, ptr %55, align 4, !tbaa !25
  %635 = fcmp ogt float %634, 0.000000e+00
  br i1 %635, label %636, label %670

636:                                              ; preds = %623
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  %637 = load ptr, ptr %54, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.b3SolverConstraint, ptr %637, i32 0, i32 9
  %639 = load float, ptr %638, align 16, !tbaa !31
  %640 = load float, ptr %55, align 4, !tbaa !25
  %641 = fmul float %639, %640
  store float %641, ptr %56, align 4, !tbaa !25
  %642 = load float, ptr %56, align 4, !tbaa !25
  %643 = load ptr, ptr %54, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.b3SolverConstraint, ptr %643, i32 0, i32 9
  %645 = load float, ptr %644, align 16, !tbaa !31
  %646 = fcmp ogt float %642, %645
  br i1 %646, label %647, label %651

647:                                              ; preds = %636
  %648 = load ptr, ptr %54, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.b3SolverConstraint, ptr %648, i32 0, i32 9
  %650 = load float, ptr %649, align 16, !tbaa !31
  store float %650, ptr %56, align 4, !tbaa !25
  br label %651

651:                                              ; preds = %647, %636
  %652 = load float, ptr %56, align 4, !tbaa !25
  %653 = fneg float %652
  %654 = load ptr, ptr %54, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.b3SolverConstraint, ptr %654, i32 0, i32 13
  store float %653, ptr %655, align 16, !tbaa !32
  %656 = load float, ptr %56, align 4, !tbaa !25
  %657 = load ptr, ptr %54, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.b3SolverConstraint, ptr %657, i32 0, i32 14
  store float %656, ptr %658, align 4, !tbaa !33
  %659 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %660 = load ptr, ptr %54, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.b3SolverConstraint, ptr %660, i32 0, i32 19
  %662 = load i32, ptr %661, align 16, !tbaa !22
  %663 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %659, i32 noundef %662)
  %664 = getelementptr inbounds %class.b3PgsJacobiSolver, ptr %57, i32 0, i32 1
  %665 = load ptr, ptr %54, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.b3SolverConstraint, ptr %665, i32 0, i32 20
  %667 = load i32, ptr %666, align 4, !tbaa !23
  %668 = call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %664, i32 noundef %667)
  %669 = load ptr, ptr %54, align 8, !tbaa !5
  call void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %57, ptr noundef nonnull align 16 dereferenceable(228) %663, ptr noundef nonnull align 16 dereferenceable(228) %668, ptr noundef nonnull align 16 dereferenceable(160) %669)
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  br label %670

670:                                              ; preds = %651, %623
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  br label %671

671:                                              ; preds = %670
  %672 = load i32, ptr %53, align 4, !tbaa !9
  %673 = add nsw i32 %672, 1
  store i32 %673, ptr %53, align 4, !tbaa !9
  br label %618, !llvm.loop !55

674:                                              ; preds = %622
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  br label %675

675:                                              ; preds = %674, %525
  br label %676

676:                                              ; preds = %675, %489
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  ret float 0.000000e+00
}

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

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


; 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"

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver40resolveSingleConstraintRowLowerLimitSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN17b3PgsJacobiSolver36resolveSingleConstraintRowLowerLimitER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(228), ptr noundef nonnull align 16 dereferenceable(160)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef float @_ZN17b3PgsJacobiSolver20solveSingleIterationEiPP17b3TypedConstraintiRK19b3ContactSolverInfo(ptr noundef nonnull align 8 dereferenceable(448) %0, i32 noundef %1, ptr nocapture noundef readnone %2, i32 noundef %3, ptr nocapture noundef nonnull readonly align 4 dereferenceable(84) %4) local_unnamed_addr #0 align 2 {
  %6 = getelementptr inbounds i8, ptr %0, i64 72
  %7 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %6)
  %8 = getelementptr inbounds i8, ptr %0, i64 40
  %9 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %8)
  %10 = getelementptr inbounds i8, ptr %0, i64 104
  %11 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %10)
  %12 = getelementptr inbounds i8, ptr %4, i64 64
  %13 = load i32, ptr %12, align 4, !tbaa !5
  %14 = and i32 %13, 1
  %.not = icmp eq i32 %14, 0
  br i1 %.not, label %.loopexit196, label %.preheader198

.preheader198:                                    ; preds = %5
  %15 = icmp sgt i32 %7, 0
  br i1 %15, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader198
  %16 = getelementptr inbounds i8, ptr %0, i64 200
  br label %22

._crit_edge:                                      ; preds = %22, %.preheader198
  %17 = getelementptr inbounds i8, ptr %4, i64 20
  %18 = load i32, ptr %17, align 4, !tbaa !11
  %19 = icmp sgt i32 %18, %1
  br i1 %19, label %.preheader197, label %.loopexit196

.preheader197:                                    ; preds = %._crit_edge
  %20 = icmp sgt i32 %9, 0
  br i1 %20, label %.lr.ph201, label %.preheader195

.lr.ph201:                                        ; preds = %.preheader197
  %21 = getelementptr inbounds i8, ptr %0, i64 168
  br label %33

22:                                               ; preds = %.lr.ph, %22
  %.0167199 = phi i32 [ 0, %.lr.ph ], [ %25, %22 ]
  %23 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %16, i32 noundef %.0167199)
  %24 = load i32, ptr %23, align 4, !tbaa !12
  %25 = add nuw nsw i32 %.0167199, 1
  %26 = tail call noundef i32 @_ZN17b3PgsJacobiSolver10b3RandInt2Ei(ptr noundef nonnull align 8 dereferenceable(448) %0, i32 noundef %25)
  %27 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %16, i32 noundef %26)
  %28 = load i32, ptr %27, align 4, !tbaa !12
  %29 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %16, i32 noundef %.0167199)
  store i32 %28, ptr %29, align 4, !tbaa !12
  %30 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %16, i32 noundef %26)
  store i32 %24, ptr %30, align 4, !tbaa !12
  %exitcond.not = icmp eq i32 %25, %7
  br i1 %exitcond.not, label %._crit_edge, label %22, !llvm.loop !13

.preheader195:                                    ; preds = %33, %.preheader197
  %31 = icmp sgt i32 %11, 0
  br i1 %31, label %.lr.ph203, label %.loopexit196

.lr.ph203:                                        ; preds = %.preheader195
  %32 = getelementptr inbounds i8, ptr %0, i64 232
  br label %42

33:                                               ; preds = %.lr.ph201, %33
  %.0168200 = phi i32 [ 0, %.lr.ph201 ], [ %36, %33 ]
  %34 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %21, i32 noundef %.0168200)
  %35 = load i32, ptr %34, align 4, !tbaa !12
  %36 = add nuw nsw i32 %.0168200, 1
  %37 = tail call noundef i32 @_ZN17b3PgsJacobiSolver10b3RandInt2Ei(ptr noundef nonnull align 8 dereferenceable(448) %0, i32 noundef %36)
  %38 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %21, i32 noundef %37)
  %39 = load i32, ptr %38, align 4, !tbaa !12
  %40 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %21, i32 noundef %.0168200)
  store i32 %39, ptr %40, align 4, !tbaa !12
  %41 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %21, i32 noundef %37)
  store i32 %35, ptr %41, align 4, !tbaa !12
  %exitcond237.not = icmp eq i32 %36, %9
  br i1 %exitcond237.not, label %.preheader195, label %33, !llvm.loop !15

42:                                               ; preds = %.lr.ph203, %42
  %.0170202 = phi i32 [ 0, %.lr.ph203 ], [ %45, %42 ]
  %43 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %32, i32 noundef %.0170202)
  %44 = load i32, ptr %43, align 4, !tbaa !12
  %45 = add nuw nsw i32 %.0170202, 1
  %46 = tail call noundef i32 @_ZN17b3PgsJacobiSolver10b3RandInt2Ei(ptr noundef nonnull align 8 dereferenceable(448) %0, i32 noundef %45)
  %47 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %32, i32 noundef %46)
  %48 = load i32, ptr %47, align 4, !tbaa !12
  %49 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %32, i32 noundef %.0170202)
  store i32 %48, ptr %49, align 4, !tbaa !12
  %50 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %32, i32 noundef %46)
  store i32 %44, ptr %50, align 4, !tbaa !12
  %exitcond238.not = icmp eq i32 %45, %11
  br i1 %exitcond238.not, label %.loopexit196, label %42, !llvm.loop !16

.loopexit196:                                     ; preds = %42, %.preheader195, %._crit_edge, %5
  %51 = load i32, ptr %12, align 4, !tbaa !5
  %52 = and i32 %51, 256
  %.not188 = icmp eq i32 %52, 0
  %53 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %6)
  %54 = icmp sgt i32 %53, 0
  br i1 %.not188, label %.preheader, label %.preheader194

.preheader194:                                    ; preds = %.loopexit196
  br i1 %54, label %.lr.ph205, label %._crit_edge206

.lr.ph205:                                        ; preds = %.preheader194
  %55 = getelementptr inbounds i8, ptr %0, i64 200
  %56 = getelementptr inbounds i8, ptr %0, i64 8
  br label %62

.preheader:                                       ; preds = %.loopexit196
  br i1 %54, label %.lr.ph222, label %._crit_edge223

.lr.ph222:                                        ; preds = %.preheader
  %57 = getelementptr inbounds i8, ptr %0, i64 200
  %58 = getelementptr inbounds i8, ptr %0, i64 8
  br label %232

._crit_edge206:                                   ; preds = %76, %.preheader194
  %59 = getelementptr inbounds i8, ptr %4, i64 20
  %60 = load i32, ptr %59, align 4, !tbaa !11
  %61 = icmp sgt i32 %60, %1
  br i1 %61, label %80, label %.loopexit

62:                                               ; preds = %.lr.ph205, %76
  %.0171204 = phi i32 [ 0, %.lr.ph205 ], [ %77, %76 ]
  %63 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %55, i32 noundef %.0171204)
  %64 = load i32, ptr %63, align 4, !tbaa !12
  %65 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %6, i32 noundef %64)
  %66 = getelementptr inbounds i8, ptr %65, i64 136
  %67 = load i32, ptr %66, align 8, !tbaa !17
  %68 = icmp sgt i32 %67, %1
  br i1 %68, label %69, label %76

69:                                               ; preds = %62
  %70 = getelementptr inbounds i8, ptr %65, i64 144
  %71 = load i32, ptr %70, align 16, !tbaa !20
  %72 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %56, i32 noundef %71)
  %73 = getelementptr inbounds i8, ptr %65, i64 148
  %74 = load i32, ptr %73, align 4, !tbaa !21
  %75 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %56, i32 noundef %74)
  tail call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %72, ptr noundef nonnull align 16 dereferenceable(228) %75, ptr noundef nonnull align 16 dereferenceable(160) %65)
  br label %76

76:                                               ; preds = %69, %62
  %77 = add nuw nsw i32 %.0171204, 1
  %78 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %6)
  %79 = icmp slt i32 %77, %78
  br i1 %79, label %62, label %._crit_edge206, !llvm.loop !22

80:                                               ; preds = %._crit_edge206
  %81 = load i32, ptr %12, align 4, !tbaa !5
  %82 = and i32 %81, 512
  %.not189 = icmp eq i32 %82, 0
  %83 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %8)
  %84 = icmp sgt i32 %83, 0
  br i1 %.not189, label %150, label %85

85:                                               ; preds = %80
  br i1 %84, label %.lr.ph209, label %.loopexit

.lr.ph209:                                        ; preds = %85
  %86 = load i32, ptr %12, align 4, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %0, i64 168
  %88 = getelementptr inbounds i8, ptr %0, i64 8
  %89 = getelementptr inbounds i8, ptr %0, i64 232
  %90 = lshr i32 %86, 4
  %.lobit = and i32 %90, 1
  br label %91

91:                                               ; preds = %.lr.ph209, %148
  %.0172207 = phi i32 [ 0, %.lr.ph209 ], [ %149, %148 ]
  %92 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %87, i32 noundef %.0172207)
  %93 = load i32, ptr %92, align 4, !tbaa !12
  %94 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %93)
  %95 = getelementptr inbounds i8, ptr %94, i64 144
  %96 = load i32, ptr %95, align 16, !tbaa !20
  %97 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %88, i32 noundef %96)
  %98 = getelementptr inbounds i8, ptr %94, i64 148
  %99 = load i32, ptr %98, align 4, !tbaa !21
  %100 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %88, i32 noundef %99)
  tail call void @_ZN17b3PgsJacobiSolver40resolveSingleConstraintRowLowerLimitSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %97, ptr noundef nonnull align 16 dereferenceable(228) %100, ptr noundef nonnull align 16 dereferenceable(160) %94)
  %101 = getelementptr inbounds i8, ptr %94, i64 84
  %102 = load float, ptr %101, align 4, !tbaa !23
  %103 = shl nuw i32 %.0172207, %.lobit
  %104 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %89, i32 noundef %103)
  %105 = load i32, ptr %104, align 4, !tbaa !12
  %106 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %10, i32 noundef %105)
  %107 = fcmp ogt float %102, 0.000000e+00
  br i1 %107, label %108, label %124

108:                                              ; preds = %91
  %109 = getelementptr inbounds i8, ptr %106, i64 96
  %110 = load float, ptr %109, align 16, !tbaa !24
  %111 = fneg float %110
  %112 = getelementptr inbounds i8, ptr %106, i64 112
  %113 = insertelement <2 x float> poison, float %102, i64 0
  %114 = shufflevector <2 x float> %113, <2 x float> poison, <2 x i32> zeroinitializer
  %115 = insertelement <2 x float> poison, float %111, i64 0
  %116 = insertelement <2 x float> %115, float %110, i64 1
  %117 = fmul <2 x float> %114, %116
  store <2 x float> %117, ptr %112, align 16, !tbaa !25
  %118 = getelementptr inbounds i8, ptr %106, i64 144
  %119 = load i32, ptr %118, align 16, !tbaa !20
  %120 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %88, i32 noundef %119)
  %121 = getelementptr inbounds i8, ptr %106, i64 148
  %122 = load i32, ptr %121, align 4, !tbaa !21
  %123 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %88, i32 noundef %122)
  tail call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %120, ptr noundef nonnull align 16 dereferenceable(228) %123, ptr noundef nonnull align 16 dereferenceable(160) %106)
  br label %124

124:                                              ; preds = %108, %91
  %125 = load i32, ptr %12, align 4, !tbaa !5
  %126 = and i32 %125, 16
  %.not191 = icmp eq i32 %126, 0
  br i1 %.not191, label %148, label %127

127:                                              ; preds = %124
  %128 = add nsw i32 %103, 1
  %129 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %89, i32 noundef %128)
  %130 = load i32, ptr %129, align 4, !tbaa !12
  %131 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %10, i32 noundef %130)
  br i1 %107, label %132, label %148

132:                                              ; preds = %127
  %133 = getelementptr inbounds i8, ptr %131, i64 96
  %134 = load float, ptr %133, align 16, !tbaa !24
  %135 = fneg float %134
  %136 = getelementptr inbounds i8, ptr %131, i64 112
  %137 = insertelement <2 x float> poison, float %102, i64 0
  %138 = shufflevector <2 x float> %137, <2 x float> poison, <2 x i32> zeroinitializer
  %139 = insertelement <2 x float> poison, float %135, i64 0
  %140 = insertelement <2 x float> %139, float %134, i64 1
  %141 = fmul <2 x float> %138, %140
  store <2 x float> %141, ptr %136, align 16, !tbaa !25
  %142 = getelementptr inbounds i8, ptr %131, i64 144
  %143 = load i32, ptr %142, align 16, !tbaa !20
  %144 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %88, i32 noundef %143)
  %145 = getelementptr inbounds i8, ptr %131, i64 148
  %146 = load i32, ptr %145, align 4, !tbaa !21
  %147 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %88, i32 noundef %146)
  tail call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %144, ptr noundef nonnull align 16 dereferenceable(228) %147, ptr noundef nonnull align 16 dereferenceable(160) %131)
  br label %148

148:                                              ; preds = %127, %132, %124
  %149 = add nuw nsw i32 %.0172207, 1
  %exitcond239.not = icmp eq i32 %149, %83
  br i1 %exitcond239.not, label %.loopexit, label %91, !llvm.loop !26

150:                                              ; preds = %80
  br i1 %84, label %.lr.ph212, label %._crit_edge213

.lr.ph212:                                        ; preds = %150
  %151 = getelementptr inbounds i8, ptr %0, i64 168
  %152 = getelementptr inbounds i8, ptr %0, i64 8
  br label %153

153:                                              ; preds = %.lr.ph212, %153
  %.0174210 = phi i32 [ 0, %.lr.ph212 ], [ %163, %153 ]
  %154 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %151, i32 noundef %.0174210)
  %155 = load i32, ptr %154, align 4, !tbaa !12
  %156 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %155)
  %157 = getelementptr inbounds i8, ptr %156, i64 144
  %158 = load i32, ptr %157, align 16, !tbaa !20
  %159 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %152, i32 noundef %158)
  %160 = getelementptr inbounds i8, ptr %156, i64 148
  %161 = load i32, ptr %160, align 4, !tbaa !21
  %162 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %152, i32 noundef %161)
  tail call void @_ZN17b3PgsJacobiSolver40resolveSingleConstraintRowLowerLimitSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %159, ptr noundef nonnull align 16 dereferenceable(228) %162, ptr noundef nonnull align 16 dereferenceable(160) %156)
  %163 = add nuw nsw i32 %.0174210, 1
  %exitcond240.not = icmp eq i32 %163, %83
  br i1 %exitcond240.not, label %._crit_edge213, label %153, !llvm.loop !27

._crit_edge213:                                   ; preds = %153, %150
  %164 = getelementptr inbounds i8, ptr %0, i64 424
  %165 = load i8, ptr %164, align 8, !tbaa !28, !range !43, !noundef !44
  %166 = trunc nuw i8 %165 to i1
  br i1 %166, label %168, label %167

167:                                              ; preds = %._crit_edge213
  tail call void @_ZN17b3PgsJacobiSolver17averageVelocitiesEv(ptr noundef nonnull align 8 dereferenceable(448) %0)
  br label %168

168:                                              ; preds = %167, %._crit_edge213
  %169 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %10)
  %170 = icmp sgt i32 %169, 0
  br i1 %170, label %.lr.ph216, label %._crit_edge217

.lr.ph216:                                        ; preds = %168
  %171 = getelementptr inbounds i8, ptr %0, i64 232
  %172 = getelementptr inbounds i8, ptr %0, i64 8
  br label %173

173:                                              ; preds = %.lr.ph216, %199
  %.1214 = phi i32 [ 0, %.lr.ph216 ], [ %200, %199 ]
  %174 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %171, i32 noundef %.1214)
  %175 = load i32, ptr %174, align 4, !tbaa !12
  %176 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %10, i32 noundef %175)
  %177 = getelementptr inbounds i8, ptr %176, i64 140
  %178 = load i32, ptr %177, align 4, !tbaa !45
  %179 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %178)
  %180 = getelementptr inbounds i8, ptr %179, i64 84
  %181 = load float, ptr %180, align 4, !tbaa !23
  %182 = fcmp ogt float %181, 0.000000e+00
  br i1 %182, label %183, label %199

183:                                              ; preds = %173
  %184 = getelementptr inbounds i8, ptr %176, i64 96
  %185 = load float, ptr %184, align 16, !tbaa !24
  %186 = fneg float %185
  %187 = getelementptr inbounds i8, ptr %176, i64 112
  %188 = insertelement <2 x float> poison, float %181, i64 0
  %189 = shufflevector <2 x float> %188, <2 x float> poison, <2 x i32> zeroinitializer
  %190 = insertelement <2 x float> poison, float %186, i64 0
  %191 = insertelement <2 x float> %190, float %185, i64 1
  %192 = fmul <2 x float> %189, %191
  store <2 x float> %192, ptr %187, align 16, !tbaa !25
  %193 = getelementptr inbounds i8, ptr %176, i64 144
  %194 = load i32, ptr %193, align 16, !tbaa !20
  %195 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %172, i32 noundef %194)
  %196 = getelementptr inbounds i8, ptr %176, i64 148
  %197 = load i32, ptr %196, align 4, !tbaa !21
  %198 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %172, i32 noundef %197)
  tail call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %195, ptr noundef nonnull align 16 dereferenceable(228) %198, ptr noundef nonnull align 16 dereferenceable(160) %176)
  br label %199

199:                                              ; preds = %183, %173
  %200 = add nuw nsw i32 %.1214, 1
  %exitcond241.not = icmp eq i32 %200, %169
  br i1 %exitcond241.not, label %._crit_edge217, label %173, !llvm.loop !46

._crit_edge217:                                   ; preds = %199, %168
  %201 = getelementptr inbounds i8, ptr %0, i64 136
  %202 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %201)
  %203 = icmp sgt i32 %202, 0
  br i1 %203, label %.lr.ph220, label %.loopexit

.lr.ph220:                                        ; preds = %._crit_edge217
  %204 = getelementptr inbounds i8, ptr %0, i64 8
  br label %205

205:                                              ; preds = %.lr.ph220, %227
  %.2218 = phi i32 [ 0, %.lr.ph220 ], [ %228, %227 ]
  %206 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %201, i32 noundef %.2218)
  %207 = getelementptr inbounds i8, ptr %206, i64 140
  %208 = load i32, ptr %207, align 4, !tbaa !45
  %209 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %208)
  %210 = getelementptr inbounds i8, ptr %209, i64 84
  %211 = load float, ptr %210, align 4, !tbaa !23
  %212 = fcmp ogt float %211, 0.000000e+00
  br i1 %212, label %213, label %227

213:                                              ; preds = %205
  %214 = getelementptr inbounds i8, ptr %206, i64 96
  %215 = load float, ptr %214, align 16, !tbaa !24
  %216 = fmul float %211, %215
  %217 = fcmp ogt float %216, %215
  %.0176 = select i1 %217, float %215, float %216
  %218 = fneg float %.0176
  %219 = getelementptr inbounds i8, ptr %206, i64 112
  store float %218, ptr %219, align 16, !tbaa !47
  %220 = getelementptr inbounds i8, ptr %206, i64 116
  store float %.0176, ptr %220, align 4, !tbaa !48
  %221 = getelementptr inbounds i8, ptr %206, i64 144
  %222 = load i32, ptr %221, align 16, !tbaa !20
  %223 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %204, i32 noundef %222)
  %224 = getelementptr inbounds i8, ptr %206, i64 148
  %225 = load i32, ptr %224, align 4, !tbaa !21
  %226 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %204, i32 noundef %225)
  tail call void @_ZN17b3PgsJacobiSolver37resolveSingleConstraintRowGenericSIMDER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %223, ptr noundef nonnull align 16 dereferenceable(228) %226, ptr noundef nonnull align 16 dereferenceable(160) %206)
  br label %227

227:                                              ; preds = %213, %205
  %228 = add nuw nsw i32 %.2218, 1
  %exitcond242.not = icmp eq i32 %228, %202
  br i1 %exitcond242.not, label %.loopexit, label %205, !llvm.loop !49

._crit_edge223:                                   ; preds = %246, %.preheader
  %229 = getelementptr inbounds i8, ptr %4, i64 20
  %230 = load i32, ptr %229, align 4, !tbaa !11
  %231 = icmp sgt i32 %230, %1
  br i1 %231, label %250, label %.loopexit

232:                                              ; preds = %.lr.ph222, %246
  %.0177221 = phi i32 [ 0, %.lr.ph222 ], [ %247, %246 ]
  %233 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %57, i32 noundef %.0177221)
  %234 = load i32, ptr %233, align 4, !tbaa !12
  %235 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %6, i32 noundef %234)
  %236 = getelementptr inbounds i8, ptr %235, i64 136
  %237 = load i32, ptr %236, align 8, !tbaa !17
  %238 = icmp sgt i32 %237, %1
  br i1 %238, label %239, label %246

239:                                              ; preds = %232
  %240 = getelementptr inbounds i8, ptr %235, i64 144
  %241 = load i32, ptr %240, align 16, !tbaa !20
  %242 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %58, i32 noundef %241)
  %243 = getelementptr inbounds i8, ptr %235, i64 148
  %244 = load i32, ptr %243, align 4, !tbaa !21
  %245 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %58, i32 noundef %244)
  tail call void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %242, ptr noundef nonnull align 16 dereferenceable(228) %245, ptr noundef nonnull align 16 dereferenceable(160) %235)
  br label %246

246:                                              ; preds = %239, %232
  %247 = add nuw nsw i32 %.0177221, 1
  %248 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %6)
  %249 = icmp slt i32 %247, %248
  br i1 %249, label %232, label %._crit_edge223, !llvm.loop !50

250:                                              ; preds = %._crit_edge223
  %251 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %8)
  %252 = icmp sgt i32 %251, 0
  br i1 %252, label %.lr.ph226, label %._crit_edge227

.lr.ph226:                                        ; preds = %250
  %253 = getelementptr inbounds i8, ptr %0, i64 168
  %254 = getelementptr inbounds i8, ptr %0, i64 8
  br label %259

._crit_edge227:                                   ; preds = %259, %250
  %255 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %10)
  %256 = icmp sgt i32 %255, 0
  br i1 %256, label %.lr.ph230, label %._crit_edge231

.lr.ph230:                                        ; preds = %._crit_edge227
  %257 = getelementptr inbounds i8, ptr %0, i64 232
  %258 = getelementptr inbounds i8, ptr %0, i64 8
  br label %274

259:                                              ; preds = %.lr.ph226, %259
  %.0175224 = phi i32 [ 0, %.lr.ph226 ], [ %269, %259 ]
  %260 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %253, i32 noundef %.0175224)
  %261 = load i32, ptr %260, align 4, !tbaa !12
  %262 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %261)
  %263 = getelementptr inbounds i8, ptr %262, i64 144
  %264 = load i32, ptr %263, align 16, !tbaa !20
  %265 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %254, i32 noundef %264)
  %266 = getelementptr inbounds i8, ptr %262, i64 148
  %267 = load i32, ptr %266, align 4, !tbaa !21
  %268 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %254, i32 noundef %267)
  tail call void @_ZN17b3PgsJacobiSolver36resolveSingleConstraintRowLowerLimitER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %265, ptr noundef nonnull align 16 dereferenceable(228) %268, ptr noundef nonnull align 16 dereferenceable(160) %262)
  %269 = add nuw nsw i32 %.0175224, 1
  %exitcond243.not = icmp eq i32 %269, %251
  br i1 %exitcond243.not, label %._crit_edge227, label %259, !llvm.loop !51

._crit_edge231:                                   ; preds = %300, %._crit_edge227
  %270 = getelementptr inbounds i8, ptr %0, i64 136
  %271 = tail call noundef i32 @_ZNK20b3AlignedObjectArrayI18b3SolverConstraintE4sizeEv(ptr noundef nonnull align 8 dereferenceable(25) %270)
  %272 = icmp sgt i32 %271, 0
  br i1 %272, label %.lr.ph234, label %.loopexit

.lr.ph234:                                        ; preds = %._crit_edge231
  %273 = getelementptr inbounds i8, ptr %0, i64 8
  br label %302

274:                                              ; preds = %.lr.ph230, %300
  %.0173228 = phi i32 [ 0, %.lr.ph230 ], [ %301, %300 ]
  %275 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN20b3AlignedObjectArrayIiEixEi(ptr noundef nonnull align 8 dereferenceable(25) %257, i32 noundef %.0173228)
  %276 = load i32, ptr %275, align 4, !tbaa !12
  %277 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %10, i32 noundef %276)
  %278 = getelementptr inbounds i8, ptr %277, i64 140
  %279 = load i32, ptr %278, align 4, !tbaa !45
  %280 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %279)
  %281 = getelementptr inbounds i8, ptr %280, i64 84
  %282 = load float, ptr %281, align 4, !tbaa !23
  %283 = fcmp ogt float %282, 0.000000e+00
  br i1 %283, label %284, label %300

284:                                              ; preds = %274
  %285 = getelementptr inbounds i8, ptr %277, i64 96
  %286 = load float, ptr %285, align 16, !tbaa !24
  %287 = fneg float %286
  %288 = getelementptr inbounds i8, ptr %277, i64 112
  %289 = insertelement <2 x float> poison, float %282, i64 0
  %290 = shufflevector <2 x float> %289, <2 x float> poison, <2 x i32> zeroinitializer
  %291 = insertelement <2 x float> poison, float %287, i64 0
  %292 = insertelement <2 x float> %291, float %286, i64 1
  %293 = fmul <2 x float> %290, %292
  store <2 x float> %293, ptr %288, align 16, !tbaa !25
  %294 = getelementptr inbounds i8, ptr %277, i64 144
  %295 = load i32, ptr %294, align 16, !tbaa !20
  %296 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %258, i32 noundef %295)
  %297 = getelementptr inbounds i8, ptr %277, i64 148
  %298 = load i32, ptr %297, align 4, !tbaa !21
  %299 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %258, i32 noundef %298)
  tail call void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %296, ptr noundef nonnull align 16 dereferenceable(228) %299, ptr noundef nonnull align 16 dereferenceable(160) %277)
  br label %300

300:                                              ; preds = %284, %274
  %301 = add nuw nsw i32 %.0173228, 1
  %exitcond244.not = icmp eq i32 %301, %255
  br i1 %exitcond244.not, label %._crit_edge231, label %274, !llvm.loop !52

302:                                              ; preds = %.lr.ph234, %324
  %.0169232 = phi i32 [ 0, %.lr.ph234 ], [ %325, %324 ]
  %303 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %270, i32 noundef %.0169232)
  %304 = getelementptr inbounds i8, ptr %303, i64 140
  %305 = load i32, ptr %304, align 4, !tbaa !45
  %306 = tail call noundef nonnull align 16 dereferenceable(160) ptr @_ZN20b3AlignedObjectArrayI18b3SolverConstraintEixEi(ptr noundef nonnull align 8 dereferenceable(25) %8, i32 noundef %305)
  %307 = getelementptr inbounds i8, ptr %306, i64 84
  %308 = load float, ptr %307, align 4, !tbaa !23
  %309 = fcmp ogt float %308, 0.000000e+00
  br i1 %309, label %310, label %324

310:                                              ; preds = %302
  %311 = getelementptr inbounds i8, ptr %303, i64 96
  %312 = load float, ptr %311, align 16, !tbaa !24
  %313 = fmul float %308, %312
  %314 = fcmp ogt float %313, %312
  %.0 = select i1 %314, float %312, float %313
  %315 = fneg float %.0
  %316 = getelementptr inbounds i8, ptr %303, i64 112
  store float %315, ptr %316, align 16, !tbaa !47
  %317 = getelementptr inbounds i8, ptr %303, i64 116
  store float %.0, ptr %317, align 4, !tbaa !48
  %318 = getelementptr inbounds i8, ptr %303, i64 144
  %319 = load i32, ptr %318, align 16, !tbaa !20
  %320 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %273, i32 noundef %319)
  %321 = getelementptr inbounds i8, ptr %303, i64 148
  %322 = load i32, ptr %321, align 4, !tbaa !21
  %323 = tail call noundef nonnull align 16 dereferenceable(228) ptr @_ZN20b3AlignedObjectArrayI12b3SolverBodyEixEi(ptr noundef nonnull align 8 dereferenceable(25) %273, i32 noundef %322)
  tail call void @_ZN17b3PgsJacobiSolver33resolveSingleConstraintRowGenericER12b3SolverBodyS1_RK18b3SolverConstraint(ptr noundef nonnull align 8 dereferenceable(448) %0, ptr noundef nonnull align 16 dereferenceable(228) %320, ptr noundef nonnull align 16 dereferenceable(228) %323, ptr noundef nonnull align 16 dereferenceable(160) %303)
  br label %324

324:                                              ; preds = %310, %302
  %325 = add nuw nsw i32 %.0169232, 1
  %exitcond245.not = icmp eq i32 %325, %271
  br i1 %exitcond245.not, label %.loopexit, label %302, !llvm.loop !53

.loopexit:                                        ; preds = %148, %227, %324, %85, %._crit_edge217, %._crit_edge231, %._crit_edge223, %._crit_edge206
  ret float 0.000000e+00
}

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress 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 nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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" }

!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, !10, i64 64}
!6 = !{!"_ZTS23b3ContactSolverInfoData", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !10, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !10, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !7, i64 76, !7, i64 80}
!7 = !{!"float", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !10, i64 20}
!12 = !{!10, !10, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = !{!18, !10, i64 136}
!18 = !{!"_ZTS18b3SolverConstraint", !19, i64 0, !19, i64 16, !19, i64 32, !19, i64 48, !19, i64 64, !7, i64 80, !7, i64 84, !10, i64 88, !10, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !8, i64 128, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148}
!19 = !{!"_ZTS9b3Vector3", !8, i64 0}
!20 = !{!18, !10, i64 144}
!21 = !{!18, !10, i64 148}
!22 = distinct !{!22, !14}
!23 = !{!18, !7, i64 84}
!24 = !{!18, !7, i64 96}
!25 = !{!7, !7, i64 0}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = !{!29, !33, i64 424}
!29 = !{!"_ZTS17b3PgsJacobiSolver", !30, i64 8, !34, i64 40, !34, i64 72, !34, i64 104, !34, i64 136, !36, i64 168, !36, i64 200, !36, i64 232, !38, i64 264, !36, i64 296, !36, i64 328, !40, i64 360, !40, i64 392, !33, i64 424, !10, i64 428, !10, i64 432, !42, i64 440}
!30 = !{!"_ZTS20b3AlignedObjectArrayI12b3SolverBodyE", !31, i64 0, !10, i64 4, !10, i64 8, !32, i64 16, !33, i64 24}
!31 = !{!"_ZTS18b3AlignedAllocatorI12b3SolverBodyLj16EE"}
!32 = !{!"any pointer", !8, i64 0}
!33 = !{!"bool", !8, i64 0}
!34 = !{!"_ZTS20b3AlignedObjectArrayI18b3SolverConstraintE", !35, i64 0, !10, i64 4, !10, i64 8, !32, i64 16, !33, i64 24}
!35 = !{!"_ZTS18b3AlignedAllocatorI18b3SolverConstraintLj16EE"}
!36 = !{!"_ZTS20b3AlignedObjectArrayIiE", !37, i64 0, !10, i64 4, !10, i64 8, !32, i64 16, !33, i64 24}
!37 = !{!"_ZTS18b3AlignedAllocatorIiLj16EE"}
!38 = !{!"_ZTS20b3AlignedObjectArrayIN17b3TypedConstraint17b3ConstraintInfo1EE", !39, i64 0, !10, i64 4, !10, i64 8, !32, i64 16, !33, i64 24}
!39 = !{!"_ZTS18b3AlignedAllocatorIN17b3TypedConstraint17b3ConstraintInfo1ELj16EE"}
!40 = !{!"_ZTS20b3AlignedObjectArrayI9b3Vector3E", !41, i64 0, !10, i64 4, !10, i64 8, !32, i64 16, !33, i64 24}
!41 = !{!"_ZTS18b3AlignedAllocatorI9b3Vector3Lj16EE"}
!42 = !{!"long", !8, i64 0}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{!18, !10, i64 140}
!46 = distinct !{!46, !14}
!47 = !{!18, !7, i64 112}
!48 = !{!18, !7, i64 116}
!49 = distinct !{!49, !14}
!50 = distinct !{!50, !14}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14}
!53 = distinct !{!53, !14}


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