; LLVM IR from erincatto/box2d :: src (solver)

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

%struct.b2WorkerContext = type { ptr, i32, ptr }
%struct.b2ContactHitEvent = type { %struct.b2ShapeId, %struct.b2ShapeId, %struct.b2Vec2, %struct.b2Vec2, float }
%struct.b2ShapeId = type { i32, i16, i16 }
%struct.b2Vec2 = type { float, float }
%struct.b2World = type { %struct.b2ArenaAllocator, %struct.b2BroadPhase, %struct.b2ConstraintGraph, %struct.b2IdPool, %struct.b2BodyArray, %struct.b2IdPool, %struct.b2SolverSetArray, %struct.b2IdPool, %struct.b2JointArray, %struct.b2IdPool, %struct.b2ContactArray, %struct.b2IdPool, %struct.b2IslandArray, %struct.b2IdPool, %struct.b2IdPool, %struct.b2ShapeArray, %struct.b2ChainShapeArray, %struct.b2SensorArray, %struct.b2TaskContextArray, %struct.b2SensorTaskContextArray, %struct.b2BodyMoveEventArray, %struct.b2SensorBeginTouchEventArray, %struct.b2ContactBeginTouchEventArray, [2 x %struct.b2SensorEndTouchEventArray], [2 x %struct.b2ContactEndTouchEventArray], i32, %struct.b2ContactHitEventArray, %struct.b2BitSet, %struct.b2BitSet, %struct.b2BitSet, %struct.b2BitSet, i64, i32, %struct.b2Vec2, float, float, float, float, float, float, float, float, ptr, ptr, i16, %struct.b2Profile, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, float, i32, i32, i16, i8, i8, i8, i8, i8, i8 }
%struct.b2ArenaAllocator = type { ptr, i32, i32, i32, i32, %struct.b2ArenaEntryArray }
%struct.b2ArenaEntryArray = type { ptr, i32, i32 }
%struct.b2BroadPhase = type { [3 x %struct.b2DynamicTree], i32, %struct.b2HashSet, %struct.b2IntArray, ptr, ptr, i32, %struct.b2AtomicInt, %struct.b2HashSet }
%struct.b2DynamicTree = type { ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i32 }
%struct.b2IntArray = type { ptr, i32, i32 }
%struct.b2AtomicInt = type { i32 }
%struct.b2HashSet = type { ptr, i32, i32 }
%struct.b2ConstraintGraph = type { [12 x %struct.b2GraphColor] }
%struct.b2GraphColor = type { %struct.b2BitSet, %struct.b2ContactSimArray, %struct.b2JointSimArray, %union.anon }
%struct.b2ContactSimArray = type { ptr, i32, i32 }
%struct.b2JointSimArray = type { ptr, i32, i32 }
%union.anon = type { ptr }
%struct.b2BodyArray = type { ptr, i32, i32 }
%struct.b2SolverSetArray = type { ptr, i32, i32 }
%struct.b2JointArray = type { ptr, i32, i32 }
%struct.b2ContactArray = type { ptr, i32, i32 }
%struct.b2IslandArray = type { ptr, i32, i32 }
%struct.b2IdPool = type { %struct.b2IntArray, i32 }
%struct.b2ShapeArray = type { ptr, i32, i32 }
%struct.b2ChainShapeArray = type { ptr, i32, i32 }
%struct.b2SensorArray = type { ptr, i32, i32 }
%struct.b2TaskContextArray = type { ptr, i32, i32 }
%struct.b2SensorTaskContextArray = type { ptr, i32, i32 }
%struct.b2BodyMoveEventArray = type { ptr, i32, i32 }
%struct.b2SensorBeginTouchEventArray = type { ptr, i32, i32 }
%struct.b2ContactBeginTouchEventArray = type { ptr, i32, i32 }
%struct.b2SensorEndTouchEventArray = type { ptr, i32, i32 }
%struct.b2ContactEndTouchEventArray = type { ptr, i32, i32 }
%struct.b2ContactHitEventArray = type { ptr, i32, i32 }
%struct.b2BitSet = type { ptr, i32, i32 }
%struct.b2Profile = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }
%struct.b2SolverSet = type { %struct.b2BodySimArray, %struct.b2BodyStateArray, %struct.b2JointSimArray, %struct.b2ContactSimArray, %struct.b2IslandSimArray, i32 }
%struct.b2BodySimArray = type { ptr, i32, i32 }
%struct.b2BodyStateArray = type { ptr, i32, i32 }
%struct.b2IslandSimArray = type { ptr, i32, i32 }
%struct.b2StepContext = type { float, float, float, float, i32, %struct.b2Softness, %struct.b2Softness, %struct.b2Softness, float, float, ptr, ptr, ptr, ptr, ptr, i32, ptr, %struct.b2AtomicInt, ptr, ptr, ptr, i32, i32, ptr, i32, i8, [64 x i8], %struct.b2AtomicU32, [64 x i8] }
%struct.b2Softness = type { float, float, float }
%struct.b2AtomicU32 = type { i32 }
%struct.b2ContactSim = type { i32, i32, i32, i32, i32, float, float, float, float, %struct.b2Manifold, float, float, float, float, i32, %struct.b2SimplexCache }
%struct.b2Manifold = type { %struct.b2Vec2, float, [2 x %struct.b2ManifoldPoint], i32 }
%struct.b2ManifoldPoint = type { %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, float, i16, i8 }
%struct.b2SimplexCache = type { i16, [3 x i8], [3 x i8] }
%struct.b2JointSim = type { i32, i32, i32, i32, %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, %union.anon.0 }
%union.anon.0 = type { %struct.b2PrismaticJoint }
%struct.b2PrismaticJoint = type { %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, float, float, float, float, float, float, float, i32, i32, %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, float, float, %struct.b2Softness, i8, i8, i8 }
%struct.b2SolverBlock = type { i32, i16, i16, %struct.b2AtomicInt }
%struct.b2SolverStage = type { i32, ptr, i32, i32, %struct.b2AtomicInt }
%struct.b2TaskContext = type { %struct.b2BitSet, %struct.b2BitSet, %struct.b2BitSet, float, i32 }
%struct.b2Shape = type { i32, i32, i32, i32, i32, i32, float, float, float, float, float, i32, %struct.b2AABB, %struct.b2AABB, %struct.b2Vec2, i32, %struct.b2Filter, ptr, i32, %union.anon.1, i16, i8, i8, i8, i8, i8 }
%struct.b2AABB = type { %struct.b2Vec2, %struct.b2Vec2 }
%struct.b2Filter = type { i64, i64, i32 }
%union.anon.1 = type { %struct.b2Polygon }
%struct.b2Polygon = type { [8 x %struct.b2Vec2], [8 x %struct.b2Vec2], %struct.b2Vec2, float, i32 }
%struct.b2BodySim = type { %struct.b2Transform, %struct.b2Vec2, %struct.b2Rot, %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, float, float, float, float, i32, i8, i8, i8, i8, i8 }
%struct.b2Transform = type { %struct.b2Vec2, %struct.b2Rot }
%struct.b2Rot = type { float, float }
%struct.b2Body = type { [32 x i8], ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, i32, i32, i32, i16, i8, i8, i8, i8 }
%struct.b2IslandSim = type { i32 }

@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [35 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @b2Solve(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %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 [12 x i32], align 16
  %24 = alloca [12 x i32], align 16
  %25 = alloca [12 x i32], align 16
  %26 = alloca [12 x i32], align 16
  %27 = alloca [12 x i32], align 16
  %28 = alloca [12 x i32], align 16
  %29 = alloca [12 x i32], align 16
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %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 i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca i32, align 4
  %66 = alloca ptr, align 8
  %67 = alloca i32, align 4
  %68 = alloca ptr, align 8
  %69 = alloca i32, align 4
  %70 = alloca ptr, align 8
  %71 = alloca [12 x ptr], align 16
  %72 = alloca ptr, align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca ptr, align 8
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca ptr, align 8
  %82 = alloca ptr, align 8
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca [64 x %struct.b2WorkerContext], align 16
  %88 = alloca i64, align 8
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i64, align 8
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca ptr, align 8
  %95 = alloca ptr, align 8
  %96 = alloca i64, align 8
  %97 = alloca float, align 4
  %98 = alloca ptr, align 8
  %99 = alloca i32, align 4
  %100 = alloca ptr, align 8
  %101 = alloca i32, align 4
  %102 = alloca ptr, align 8
  %103 = alloca i32, align 4
  %104 = alloca ptr, align 8
  %105 = alloca %struct.b2ContactHitEvent, align 8
  %106 = alloca i8, align 1
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca ptr, align 8
  %110 = alloca float, align 4
  %111 = alloca ptr, align 8
  %112 = alloca ptr, align 8
  %113 = alloca %struct.b2ShapeId, align 4
  %114 = alloca %struct.b2ShapeId, align 4
  %115 = alloca i64, align 8
  %116 = alloca ptr, align 8
  %117 = alloca i32, align 4
  %118 = alloca ptr, align 8
  %119 = alloca i32, align 4
  %120 = alloca ptr, align 8
  %121 = alloca ptr, align 8
  %122 = alloca ptr, align 8
  %123 = alloca ptr, align 8
  %124 = alloca i32, align 4
  %125 = alloca i64, align 8
  %126 = alloca i32, align 4
  %127 = alloca i32, align 4
  %128 = alloca ptr, align 8
  %129 = alloca ptr, align 8
  %130 = alloca i32, align 4
  %131 = alloca ptr, align 8
  %132 = alloca ptr, align 8
  %133 = alloca i32, align 4
  %134 = alloca i64, align 8
  %135 = alloca i32, align 4
  %136 = alloca ptr, align 8
  %137 = alloca ptr, align 8
  %138 = alloca ptr, align 8
  %139 = alloca ptr, align 8
  %140 = alloca ptr, align 8
  %141 = alloca ptr, align 8
  %142 = alloca ptr, align 8
  %143 = alloca i32, align 4
  %144 = alloca ptr, align 8
  %145 = alloca i32, align 4
  %146 = alloca ptr, align 8
  %147 = alloca i32, align 4
  %148 = alloca ptr, align 8
  %149 = alloca i32, align 4
  %150 = alloca i32, align 4
  %151 = alloca i64, align 8
  %152 = alloca float, align 4
  %153 = alloca i32, align 4
  %154 = alloca ptr, align 8
  %155 = alloca ptr, align 8
  %156 = alloca i32, align 4
  %157 = alloca ptr, align 8
  %158 = alloca i32, align 4
  %159 = alloca i32, align 4
  %160 = alloca ptr, align 8
  %161 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.b2World, ptr %162, i32 0, i32 31
  %164 = load i64, ptr %163, align 8, !tbaa !9
  %165 = add i64 %164, 1
  store i64 %165, ptr %163, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #8
  %166 = call i64 @b2GetTicks()
  store i64 %166, ptr %5, align 8, !tbaa !26
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  call void @b2MergeAwakeIslands(ptr noundef %167)
  %168 = load i64, ptr %5, align 8, !tbaa !26
  %169 = call float @b2GetMilliseconds(i64 noundef %168)
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.b2World, ptr %170, i32 0, i32 45
  %172 = getelementptr inbounds %struct.b2Profile, ptr %171, i32 0, i32 4
  store float %169, ptr %172, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #8
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.b2World, ptr %173, i32 0, i32 6
  %175 = call ptr @b2SolverSetArray_Get(ptr noundef %174, i32 noundef 2)
  store ptr %175, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %176 = load ptr, ptr %6, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.b2SolverSet, ptr %176, i32 0, i32 0
  %178 = getelementptr inbounds %struct.b2BodySimArray, ptr %177, i32 0, i32 1
  %179 = load i32, ptr %178, align 8, !tbaa !28
  store i32 %179, ptr %7, align 4, !tbaa !30
  %180 = load i32, ptr %7, align 4, !tbaa !30
  %181 = icmp eq i32 %180, 0
  br i1 %181, label %182, label %206

182:                                              ; preds = %2
  %183 = load ptr, ptr %3, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.b2World, ptr %183, i32 0, i32 54
  %185 = load ptr, ptr %184, align 8, !tbaa !31
  %186 = icmp ne ptr %185, null
  br i1 %186, label %187, label %203

187:                                              ; preds = %182
  %188 = load ptr, ptr %3, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.b2World, ptr %188, i32 0, i32 52
  %190 = load ptr, ptr %189, align 8, !tbaa !32
  %191 = load ptr, ptr %3, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.b2World, ptr %191, i32 0, i32 54
  %193 = load ptr, ptr %192, align 8, !tbaa !31
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.b2World, ptr %194, i32 0, i32 53
  %196 = load ptr, ptr %195, align 8, !tbaa !33
  call void %190(ptr noundef %193, ptr noundef %196)
  %197 = load ptr, ptr %3, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.b2World, ptr %197, i32 0, i32 54
  store ptr null, ptr %198, align 8, !tbaa !31
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.b2World, ptr %199, i32 0, i32 57
  %201 = load i32, ptr %200, align 4, !tbaa !34
  %202 = sub nsw i32 %201, 1
  store i32 %202, ptr %200, align 4, !tbaa !34
  br label %203

203:                                              ; preds = %187, %182
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.b2World, ptr %204, i32 0, i32 1
  call void @b2ValidateNoEnlarged(ptr noundef %205)
  store i32 1, ptr %8, align 4
  br label %2195

206:                                              ; preds = %2
  %207 = load ptr, ptr %4, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.b2StepContext, ptr %207, i32 0, i32 17
  call void @b2AtomicStoreInt(ptr noundef %208, i32 noundef 0)
  %209 = load ptr, ptr %3, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.b2World, ptr %209, i32 0, i32 0
  %211 = load i32, ptr %7, align 4, !tbaa !30
  %212 = sext i32 %211 to i64
  %213 = mul i64 %212, 4
  %214 = trunc i64 %213 to i32
  %215 = call ptr @b2AllocateArenaItem(ptr noundef %210, i32 noundef %214, ptr noundef @.str)
  %216 = load ptr, ptr %4, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.b2StepContext, ptr %216, i32 0, i32 16
  store ptr %215, ptr %217, align 8, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %218 = call i64 @b2GetTicks()
  store i64 %218, ptr %9, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %219 = load ptr, ptr %3, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.b2World, ptr %219, i32 0, i32 2
  store ptr %220, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %221 = load ptr, ptr %10, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.b2ConstraintGraph, ptr %221, i32 0, i32 0
  %223 = getelementptr inbounds [12 x %struct.b2GraphColor], ptr %222, i64 0, i64 0
  store ptr %223, ptr %11, align 8, !tbaa !5
  %224 = load ptr, ptr %6, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.b2SolverSet, ptr %224, i32 0, i32 0
  %226 = getelementptr inbounds %struct.b2BodySimArray, ptr %225, i32 0, i32 0
  %227 = load ptr, ptr %226, align 8, !tbaa !39
  %228 = load ptr, ptr %4, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.b2StepContext, ptr %228, i32 0, i32 13
  store ptr %227, ptr %229, align 8, !tbaa !40
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.b2SolverSet, ptr %230, i32 0, i32 1
  %232 = getelementptr inbounds %struct.b2BodyStateArray, ptr %231, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8, !tbaa !41
  %234 = load ptr, ptr %4, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.b2StepContext, ptr %234, i32 0, i32 12
  store ptr %233, ptr %235, align 8, !tbaa !42
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  store i32 0, ptr %12, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  store i32 0, ptr %14, align 4, !tbaa !30
  br label %236

236:                                              ; preds = %267, %206
  %237 = load i32, ptr %14, align 4, !tbaa !30
  %238 = icmp slt i32 %237, 11
  br i1 %238, label %240, label %239

239:                                              ; preds = %236
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  br label %270

240:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  %241 = load ptr, ptr %11, align 8, !tbaa !5
  %242 = load i32, ptr %14, align 4, !tbaa !30
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds %struct.b2GraphColor, ptr %241, i64 %243
  %245 = getelementptr inbounds %struct.b2GraphColor, ptr %244, i32 0, i32 1
  %246 = getelementptr inbounds %struct.b2ContactSimArray, ptr %245, i32 0, i32 1
  %247 = load i32, ptr %246, align 8, !tbaa !43
  store i32 %247, ptr %15, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %248 = load ptr, ptr %11, align 8, !tbaa !5
  %249 = load i32, ptr %14, align 4, !tbaa !30
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds %struct.b2GraphColor, ptr %248, i64 %250
  %252 = getelementptr inbounds %struct.b2GraphColor, ptr %251, i32 0, i32 2
  %253 = getelementptr inbounds %struct.b2JointSimArray, ptr %252, i32 0, i32 1
  %254 = load i32, ptr %253, align 8, !tbaa !45
  store i32 %254, ptr %16, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %255 = load i32, ptr %15, align 4, !tbaa !30
  %256 = load i32, ptr %16, align 4, !tbaa !30
  %257 = add nsw i32 %255, %256
  store i32 %257, ptr %17, align 4, !tbaa !30
  %258 = load i32, ptr %17, align 4, !tbaa !30
  %259 = icmp sgt i32 %258, 0
  %260 = zext i1 %259 to i64
  %261 = select i1 %259, i32 1, i32 0
  %262 = load i32, ptr %13, align 4, !tbaa !30
  %263 = add nsw i32 %262, %261
  store i32 %263, ptr %13, align 4, !tbaa !30
  %264 = load i32, ptr %16, align 4, !tbaa !30
  %265 = load i32, ptr %12, align 4, !tbaa !30
  %266 = add nsw i32 %265, %264
  store i32 %266, ptr %12, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %267

267:                                              ; preds = %240
  %268 = load i32, ptr %14, align 4, !tbaa !30
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %14, align 4, !tbaa !30
  br label %236, !llvm.loop !46

270:                                              ; preds = %239
  %271 = load ptr, ptr %3, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.b2World, ptr %271, i32 0, i32 20
  %273 = load i32, ptr %7, align 4, !tbaa !30
  call void @b2BodyMoveEventArray_Resize(ptr noundef %272, i32 noundef %273)
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %274 = load ptr, ptr %3, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.b2World, ptr %274, i32 0, i32 50
  %276 = load i32, ptr %275, align 8, !tbaa !48
  store i32 %276, ptr %18, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 4, ptr %19, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %277 = load i32, ptr %18, align 4, !tbaa !30
  %278 = mul nsw i32 4, %277
  store i32 %278, ptr %20, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  store i32 32, ptr %21, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %279 = load i32, ptr %7, align 4, !tbaa !30
  %280 = load i32, ptr %21, align 4, !tbaa !30
  %281 = load i32, ptr %20, align 4, !tbaa !30
  %282 = mul nsw i32 %280, %281
  %283 = icmp sgt i32 %279, %282
  br i1 %283, label %284, label %289

284:                                              ; preds = %270
  %285 = load i32, ptr %7, align 4, !tbaa !30
  %286 = load i32, ptr %20, align 4, !tbaa !30
  %287 = sdiv i32 %285, %286
  store i32 %287, ptr %21, align 4, !tbaa !30
  %288 = load i32, ptr %20, align 4, !tbaa !30
  store i32 %288, ptr %22, align 4, !tbaa !30
  br label %294

289:                                              ; preds = %270
  %290 = load i32, ptr %7, align 4, !tbaa !30
  %291 = sub nsw i32 %290, 1
  %292 = ashr i32 %291, 5
  %293 = add nsw i32 %292, 1
  store i32 %293, ptr %22, align 4, !tbaa !30
  br label %294

294:                                              ; preds = %289, %284
  call void @llvm.lifetime.start.p0(i64 48, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 0, ptr %30, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  store i32 0, ptr %31, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  store i32 0, ptr %32, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !30
  br label %295

295:                                              ; preds = %434, %294
  %296 = load i32, ptr %33, align 4, !tbaa !30
  %297 = icmp slt i32 %296, 11
  br i1 %297, label %299, label %298

298:                                              ; preds = %295
  store i32 5, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %437

299:                                              ; preds = %295
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  %300 = load ptr, ptr %11, align 8, !tbaa !5
  %301 = load i32, ptr %33, align 4, !tbaa !30
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds %struct.b2GraphColor, ptr %300, i64 %302
  %304 = getelementptr inbounds %struct.b2GraphColor, ptr %303, i32 0, i32 1
  %305 = getelementptr inbounds %struct.b2ContactSimArray, ptr %304, i32 0, i32 1
  %306 = load i32, ptr %305, align 8, !tbaa !43
  store i32 %306, ptr %34, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  %307 = load ptr, ptr %11, align 8, !tbaa !5
  %308 = load i32, ptr %33, align 4, !tbaa !30
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds %struct.b2GraphColor, ptr %307, i64 %309
  %311 = getelementptr inbounds %struct.b2GraphColor, ptr %310, i32 0, i32 2
  %312 = getelementptr inbounds %struct.b2JointSimArray, ptr %311, i32 0, i32 1
  %313 = load i32, ptr %312, align 8, !tbaa !45
  store i32 %313, ptr %35, align 4, !tbaa !30
  %314 = load i32, ptr %34, align 4, !tbaa !30
  %315 = load i32, ptr %35, align 4, !tbaa !30
  %316 = add nsw i32 %314, %315
  %317 = icmp sgt i32 %316, 0
  br i1 %317, label %318, label %433

318:                                              ; preds = %299
  %319 = load i32, ptr %33, align 4, !tbaa !30
  %320 = load i32, ptr %32, align 4, !tbaa !30
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [12 x i32], ptr %23, i64 0, i64 %321
  store i32 %319, ptr %322, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %323 = load i32, ptr %34, align 4, !tbaa !30
  %324 = icmp sgt i32 %323, 0
  br i1 %324, label %325, label %330

325:                                              ; preds = %318
  %326 = load i32, ptr %34, align 4, !tbaa !30
  %327 = sub nsw i32 %326, 1
  %328 = ashr i32 %327, 2
  %329 = add nsw i32 %328, 1
  br label %331

330:                                              ; preds = %318
  br label %331

331:                                              ; preds = %330, %325
  %332 = phi i32 [ %329, %325 ], [ 0, %330 ]
  store i32 %332, ptr %36, align 4, !tbaa !30
  %333 = load i32, ptr %36, align 4, !tbaa !30
  %334 = load i32, ptr %32, align 4, !tbaa !30
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds [12 x i32], ptr %24, i64 0, i64 %335
  store i32 %333, ptr %336, align 4, !tbaa !30
  %337 = load i32, ptr %36, align 4, !tbaa !30
  %338 = load i32, ptr %20, align 4, !tbaa !30
  %339 = mul nsw i32 4, %338
  %340 = icmp sgt i32 %337, %339
  br i1 %340, label %341, label %352

341:                                              ; preds = %331
  %342 = load i32, ptr %36, align 4, !tbaa !30
  %343 = load i32, ptr %20, align 4, !tbaa !30
  %344 = sdiv i32 %342, %343
  %345 = load i32, ptr %32, align 4, !tbaa !30
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds [12 x i32], ptr %25, i64 0, i64 %346
  store i32 %344, ptr %347, align 4, !tbaa !30
  %348 = load i32, ptr %20, align 4, !tbaa !30
  %349 = load i32, ptr %32, align 4, !tbaa !30
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %350
  store i32 %348, ptr %351, align 4, !tbaa !30
  br label %374

352:                                              ; preds = %331
  %353 = load i32, ptr %36, align 4, !tbaa !30
  %354 = icmp sgt i32 %353, 0
  br i1 %354, label %355, label %366

355:                                              ; preds = %352
  %356 = load i32, ptr %32, align 4, !tbaa !30
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds [12 x i32], ptr %25, i64 0, i64 %357
  store i32 4, ptr %358, align 4, !tbaa !30
  %359 = load i32, ptr %36, align 4, !tbaa !30
  %360 = sub nsw i32 %359, 1
  %361 = ashr i32 %360, 2
  %362 = add nsw i32 %361, 1
  %363 = load i32, ptr %32, align 4, !tbaa !30
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %364
  store i32 %362, ptr %365, align 4, !tbaa !30
  br label %373

366:                                              ; preds = %352
  %367 = load i32, ptr %32, align 4, !tbaa !30
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds [12 x i32], ptr %25, i64 0, i64 %368
  store i32 0, ptr %369, align 4, !tbaa !30
  %370 = load i32, ptr %32, align 4, !tbaa !30
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %371
  store i32 0, ptr %372, align 4, !tbaa !30
  br label %373

373:                                              ; preds = %366, %355
  br label %374

374:                                              ; preds = %373, %341
  %375 = load i32, ptr %35, align 4, !tbaa !30
  %376 = load i32, ptr %32, align 4, !tbaa !30
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [12 x i32], ptr %27, i64 0, i64 %377
  store i32 %375, ptr %378, align 4, !tbaa !30
  %379 = load i32, ptr %35, align 4, !tbaa !30
  %380 = load i32, ptr %20, align 4, !tbaa !30
  %381 = mul nsw i32 4, %380
  %382 = icmp sgt i32 %379, %381
  br i1 %382, label %383, label %394

383:                                              ; preds = %374
  %384 = load i32, ptr %35, align 4, !tbaa !30
  %385 = load i32, ptr %20, align 4, !tbaa !30
  %386 = sdiv i32 %384, %385
  %387 = load i32, ptr %32, align 4, !tbaa !30
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds [12 x i32], ptr %28, i64 0, i64 %388
  store i32 %386, ptr %389, align 4, !tbaa !30
  %390 = load i32, ptr %20, align 4, !tbaa !30
  %391 = load i32, ptr %32, align 4, !tbaa !30
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %392
  store i32 %390, ptr %393, align 4, !tbaa !30
  br label %416

394:                                              ; preds = %374
  %395 = load i32, ptr %35, align 4, !tbaa !30
  %396 = icmp sgt i32 %395, 0
  br i1 %396, label %397, label %408

397:                                              ; preds = %394
  %398 = load i32, ptr %32, align 4, !tbaa !30
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds [12 x i32], ptr %28, i64 0, i64 %399
  store i32 4, ptr %400, align 4, !tbaa !30
  %401 = load i32, ptr %35, align 4, !tbaa !30
  %402 = sub nsw i32 %401, 1
  %403 = ashr i32 %402, 2
  %404 = add nsw i32 %403, 1
  %405 = load i32, ptr %32, align 4, !tbaa !30
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %406
  store i32 %404, ptr %407, align 4, !tbaa !30
  br label %415

408:                                              ; preds = %394
  %409 = load i32, ptr %32, align 4, !tbaa !30
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds [12 x i32], ptr %28, i64 0, i64 %410
  store i32 0, ptr %411, align 4, !tbaa !30
  %412 = load i32, ptr %32, align 4, !tbaa !30
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %413
  store i32 0, ptr %414, align 4, !tbaa !30
  br label %415

415:                                              ; preds = %408, %397
  br label %416

416:                                              ; preds = %415, %383
  %417 = load i32, ptr %32, align 4, !tbaa !30
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !30
  %421 = load i32, ptr %32, align 4, !tbaa !30
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !30
  %425 = add nsw i32 %420, %424
  %426 = load i32, ptr %30, align 4, !tbaa !30
  %427 = add nsw i32 %426, %425
  store i32 %427, ptr %30, align 4, !tbaa !30
  %428 = load i32, ptr %36, align 4, !tbaa !30
  %429 = load i32, ptr %31, align 4, !tbaa !30
  %430 = add nsw i32 %429, %428
  store i32 %430, ptr %31, align 4, !tbaa !30
  %431 = load i32, ptr %32, align 4, !tbaa !30
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %32, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %433

433:                                              ; preds = %416, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %434

434:                                              ; preds = %433
  %435 = load i32, ptr %33, align 4, !tbaa !30
  %436 = add nsw i32 %435, 1
  store i32 %436, ptr %33, align 4, !tbaa !30
  br label %295, !llvm.loop !49

437:                                              ; preds = %298
  %438 = load i32, ptr %32, align 4, !tbaa !30
  store i32 %438, ptr %13, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %439 = load ptr, ptr %3, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.b2World, ptr %439, i32 0, i32 0
  %441 = load i32, ptr %31, align 4, !tbaa !30
  %442 = mul nsw i32 4, %441
  %443 = sext i32 %442 to i64
  %444 = mul i64 %443, 8
  %445 = trunc i64 %444 to i32
  %446 = call ptr @b2AllocateArenaItem(ptr noundef %440, i32 noundef %445, ptr noundef @.str.1)
  store ptr %446, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %447 = load ptr, ptr %3, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.b2World, ptr %447, i32 0, i32 0
  %449 = load i32, ptr %12, align 4, !tbaa !30
  %450 = sext i32 %449 to i64
  %451 = mul i64 %450, 8
  %452 = trunc i64 %451 to i32
  %453 = call ptr @b2AllocateArenaItem(ptr noundef %448, i32 noundef %452, ptr noundef @.str.2)
  store ptr %453, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  %454 = call i32 @b2GetContactConstraintSIMDByteCount()
  store i32 %454, ptr %39, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %455 = load ptr, ptr %3, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.b2World, ptr %455, i32 0, i32 0
  %457 = load i32, ptr %31, align 4, !tbaa !30
  %458 = load i32, ptr %39, align 4, !tbaa !30
  %459 = mul nsw i32 %457, %458
  %460 = call ptr @b2AllocateArenaItem(ptr noundef %456, i32 noundef %459, ptr noundef @.str.3)
  store ptr %460, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %461 = load ptr, ptr %11, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.b2GraphColor, ptr %461, i64 11
  %463 = getelementptr inbounds %struct.b2GraphColor, ptr %462, i32 0, i32 1
  %464 = getelementptr inbounds %struct.b2ContactSimArray, ptr %463, i32 0, i32 1
  %465 = load i32, ptr %464, align 8, !tbaa !43
  store i32 %465, ptr %41, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %466 = load ptr, ptr %3, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.b2World, ptr %466, i32 0, i32 0
  %468 = load i32, ptr %41, align 4, !tbaa !30
  %469 = sext i32 %468 to i64
  %470 = mul i64 %469, 160
  %471 = trunc i64 %470 to i32
  %472 = call ptr @b2AllocateArenaItem(ptr noundef %467, i32 noundef %471, ptr noundef @.str.4)
  store ptr %472, ptr %42, align 8, !tbaa !5
  %473 = load ptr, ptr %42, align 8, !tbaa !5
  %474 = load ptr, ptr %10, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.b2ConstraintGraph, ptr %474, i32 0, i32 0
  %476 = getelementptr inbounds [12 x %struct.b2GraphColor], ptr %475, i64 0, i64 11
  %477 = getelementptr inbounds %struct.b2GraphColor, ptr %476, i32 0, i32 3
  store ptr %473, ptr %477, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  store i32 0, ptr %43, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  store i32 0, ptr %44, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  store i32 0, ptr %45, align 4, !tbaa !30
  br label %478

478:                                              ; preds = %591, %437
  %479 = load i32, ptr %45, align 4, !tbaa !30
  %480 = load i32, ptr %13, align 4, !tbaa !30
  %481 = icmp slt i32 %479, %480
  br i1 %481, label %483, label %482

482:                                              ; preds = %478
  store i32 8, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %594

483:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  %484 = load i32, ptr %45, align 4, !tbaa !30
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds [12 x i32], ptr %23, i64 0, i64 %485
  %487 = load i32, ptr %486, align 4, !tbaa !30
  store i32 %487, ptr %46, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %488 = load ptr, ptr %11, align 8, !tbaa !5
  %489 = load i32, ptr %46, align 4, !tbaa !30
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds %struct.b2GraphColor, ptr %488, i64 %490
  store ptr %491, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %492 = load ptr, ptr %47, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.b2GraphColor, ptr %492, i32 0, i32 1
  %494 = getelementptr inbounds %struct.b2ContactSimArray, ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 8, !tbaa !43
  store i32 %495, ptr %48, align 4, !tbaa !30
  %496 = load i32, ptr %48, align 4, !tbaa !30
  %497 = icmp eq i32 %496, 0
  br i1 %497, label %498, label %501

498:                                              ; preds = %483
  %499 = load ptr, ptr %47, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.b2GraphColor, ptr %499, i32 0, i32 3
  store ptr null, ptr %500, align 8, !tbaa !50
  br label %560

501:                                              ; preds = %483
  %502 = load ptr, ptr %40, align 8, !tbaa !5
  %503 = load i32, ptr %43, align 4, !tbaa !30
  %504 = load i32, ptr %39, align 4, !tbaa !30
  %505 = mul nsw i32 %503, %504
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds i8, ptr %502, i64 %506
  %508 = load ptr, ptr %47, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.b2GraphColor, ptr %508, i32 0, i32 3
  store ptr %507, ptr %509, align 8, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  store i32 0, ptr %49, align 4, !tbaa !30
  br label %510

510:                                              ; preds = %530, %501
  %511 = load i32, ptr %49, align 4, !tbaa !30
  %512 = load i32, ptr %48, align 4, !tbaa !30
  %513 = icmp slt i32 %511, %512
  br i1 %513, label %515, label %514

514:                                              ; preds = %510
  store i32 11, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  br label %533

515:                                              ; preds = %510
  %516 = load ptr, ptr %47, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.b2GraphColor, ptr %516, i32 0, i32 1
  %518 = getelementptr inbounds %struct.b2ContactSimArray, ptr %517, i32 0, i32 0
  %519 = load ptr, ptr %518, align 8, !tbaa !51
  %520 = load i32, ptr %49, align 4, !tbaa !30
  %521 = sext i32 %520 to i64
  %522 = getelementptr inbounds %struct.b2ContactSim, ptr %519, i64 %521
  %523 = load ptr, ptr %37, align 8, !tbaa !5
  %524 = load i32, ptr %43, align 4, !tbaa !30
  %525 = mul nsw i32 4, %524
  %526 = load i32, ptr %49, align 4, !tbaa !30
  %527 = add nsw i32 %525, %526
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds ptr, ptr %523, i64 %528
  store ptr %522, ptr %529, align 8, !tbaa !5
  br label %530

530:                                              ; preds = %515
  %531 = load i32, ptr %49, align 4, !tbaa !30
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %49, align 4, !tbaa !30
  br label %510, !llvm.loop !52

533:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  %534 = load i32, ptr %48, align 4, !tbaa !30
  %535 = sub nsw i32 %534, 1
  %536 = ashr i32 %535, 2
  %537 = add nsw i32 %536, 1
  store i32 %537, ptr %50, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  %538 = load i32, ptr %48, align 4, !tbaa !30
  store i32 %538, ptr %51, align 4, !tbaa !30
  br label %539

539:                                              ; preds = %553, %533
  %540 = load i32, ptr %51, align 4, !tbaa !30
  %541 = load i32, ptr %50, align 4, !tbaa !30
  %542 = mul nsw i32 4, %541
  %543 = icmp slt i32 %540, %542
  br i1 %543, label %545, label %544

544:                                              ; preds = %539
  store i32 14, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  br label %556

545:                                              ; preds = %539
  %546 = load ptr, ptr %37, align 8, !tbaa !5
  %547 = load i32, ptr %43, align 4, !tbaa !30
  %548 = mul nsw i32 4, %547
  %549 = load i32, ptr %51, align 4, !tbaa !30
  %550 = add nsw i32 %548, %549
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds ptr, ptr %546, i64 %551
  store ptr null, ptr %552, align 8, !tbaa !5
  br label %553

553:                                              ; preds = %545
  %554 = load i32, ptr %51, align 4, !tbaa !30
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %51, align 4, !tbaa !30
  br label %539, !llvm.loop !53

556:                                              ; preds = %544
  %557 = load i32, ptr %50, align 4, !tbaa !30
  %558 = load i32, ptr %43, align 4, !tbaa !30
  %559 = add nsw i32 %558, %557
  store i32 %559, ptr %43, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  br label %560

560:                                              ; preds = %556, %498
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %561 = load ptr, ptr %47, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.b2GraphColor, ptr %561, i32 0, i32 2
  %563 = getelementptr inbounds %struct.b2JointSimArray, ptr %562, i32 0, i32 1
  %564 = load i32, ptr %563, align 8, !tbaa !45
  store i32 %564, ptr %52, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  store i32 0, ptr %53, align 4, !tbaa !30
  br label %565

565:                                              ; preds = %584, %560
  %566 = load i32, ptr %53, align 4, !tbaa !30
  %567 = load i32, ptr %52, align 4, !tbaa !30
  %568 = icmp slt i32 %566, %567
  br i1 %568, label %570, label %569

569:                                              ; preds = %565
  store i32 17, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  br label %587

570:                                              ; preds = %565
  %571 = load ptr, ptr %47, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.b2GraphColor, ptr %571, i32 0, i32 2
  %573 = getelementptr inbounds %struct.b2JointSimArray, ptr %572, i32 0, i32 0
  %574 = load ptr, ptr %573, align 8, !tbaa !54
  %575 = load i32, ptr %53, align 4, !tbaa !30
  %576 = sext i32 %575 to i64
  %577 = getelementptr inbounds %struct.b2JointSim, ptr %574, i64 %576
  %578 = load ptr, ptr %38, align 8, !tbaa !5
  %579 = load i32, ptr %44, align 4, !tbaa !30
  %580 = load i32, ptr %53, align 4, !tbaa !30
  %581 = add nsw i32 %579, %580
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds ptr, ptr %578, i64 %582
  store ptr %577, ptr %583, align 8, !tbaa !5
  br label %584

584:                                              ; preds = %570
  %585 = load i32, ptr %53, align 4, !tbaa !30
  %586 = add nsw i32 %585, 1
  store i32 %586, ptr %53, align 4, !tbaa !30
  br label %565, !llvm.loop !55

587:                                              ; preds = %569
  %588 = load i32, ptr %52, align 4, !tbaa !30
  %589 = load i32, ptr %44, align 4, !tbaa !30
  %590 = add nsw i32 %589, %588
  store i32 %590, ptr %44, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  br label %591

591:                                              ; preds = %587
  %592 = load i32, ptr %45, align 4, !tbaa !30
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %45, align 4, !tbaa !30
  br label %478, !llvm.loop !56

594:                                              ; preds = %482
  br label %595

595:                                              ; preds = %594
  %596 = load i32, ptr %43, align 4, !tbaa !30
  %597 = load i32, ptr %31, align 4, !tbaa !30
  %598 = icmp eq i32 %596, %597
  br i1 %598, label %603, label %599

599:                                              ; preds = %595
  %600 = call i32 @b2InternalAssertFcn(ptr noundef @.str.5, ptr noundef @.str.6, i32 noundef 1410)
  %601 = icmp ne i32 %600, 0
  br i1 %601, label %602, label %603

602:                                              ; preds = %599
  call void @llvm.trap()
  br label %603

603:                                              ; preds = %602, %599, %595
  br label %604

604:                                              ; preds = %603
  br label %605

605:                                              ; preds = %604
  br label %606

606:                                              ; preds = %605
  %607 = load i32, ptr %44, align 4, !tbaa !30
  %608 = load i32, ptr %12, align 4, !tbaa !30
  %609 = icmp eq i32 %607, %608
  br i1 %609, label %614, label %610

610:                                              ; preds = %606
  %611 = call i32 @b2InternalAssertFcn(ptr noundef @.str.7, ptr noundef @.str.6, i32 noundef 1411)
  %612 = icmp ne i32 %611, 0
  br i1 %612, label %613, label %614

613:                                              ; preds = %610
  call void @llvm.trap()
  br label %614

614:                                              ; preds = %613, %610, %606
  br label %615

615:                                              ; preds = %614
  br label %616

616:                                              ; preds = %615
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  store i32 4, ptr %54, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  %617 = load i32, ptr %31, align 4, !tbaa !30
  %618 = icmp sgt i32 %617, 0
  br i1 %618, label %619, label %624

619:                                              ; preds = %616
  %620 = load i32, ptr %31, align 4, !tbaa !30
  %621 = sub nsw i32 %620, 1
  %622 = ashr i32 %621, 2
  %623 = add nsw i32 %622, 1
  br label %625

624:                                              ; preds = %616
  br label %625

625:                                              ; preds = %624, %619
  %626 = phi i32 [ %623, %619 ], [ 0, %624 ]
  store i32 %626, ptr %55, align 4, !tbaa !30
  %627 = load i32, ptr %31, align 4, !tbaa !30
  %628 = load i32, ptr %54, align 4, !tbaa !30
  %629 = load i32, ptr %20, align 4, !tbaa !30
  %630 = mul nsw i32 %628, %629
  %631 = icmp sgt i32 %627, %630
  br i1 %631, label %632, label %637

632:                                              ; preds = %625
  %633 = load i32, ptr %31, align 4, !tbaa !30
  %634 = load i32, ptr %20, align 4, !tbaa !30
  %635 = sdiv i32 %633, %634
  store i32 %635, ptr %54, align 4, !tbaa !30
  %636 = load i32, ptr %20, align 4, !tbaa !30
  store i32 %636, ptr %55, align 4, !tbaa !30
  br label %637

637:                                              ; preds = %632, %625
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  store i32 4, ptr %56, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  %638 = load i32, ptr %12, align 4, !tbaa !30
  %639 = icmp sgt i32 %638, 0
  br i1 %639, label %640, label %645

640:                                              ; preds = %637
  %641 = load i32, ptr %12, align 4, !tbaa !30
  %642 = sub nsw i32 %641, 1
  %643 = ashr i32 %642, 2
  %644 = add nsw i32 %643, 1
  br label %646

645:                                              ; preds = %637
  br label %646

646:                                              ; preds = %645, %640
  %647 = phi i32 [ %644, %640 ], [ 0, %645 ]
  store i32 %647, ptr %57, align 4, !tbaa !30
  %648 = load i32, ptr %12, align 4, !tbaa !30
  %649 = load i32, ptr %56, align 4, !tbaa !30
  %650 = load i32, ptr %20, align 4, !tbaa !30
  %651 = mul nsw i32 %649, %650
  %652 = icmp sgt i32 %648, %651
  br i1 %652, label %653, label %658

653:                                              ; preds = %646
  %654 = load i32, ptr %12, align 4, !tbaa !30
  %655 = load i32, ptr %20, align 4, !tbaa !30
  %656 = sdiv i32 %654, %655
  store i32 %656, ptr %56, align 4, !tbaa !30
  %657 = load i32, ptr %20, align 4, !tbaa !30
  store i32 %657, ptr %57, align 4, !tbaa !30
  br label %658

658:                                              ; preds = %653, %646
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  store i32 0, ptr %58, align 4, !tbaa !30
  %659 = load i32, ptr %58, align 4, !tbaa !30
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %58, align 4, !tbaa !30
  %661 = load i32, ptr %58, align 4, !tbaa !30
  %662 = add nsw i32 %661, 1
  store i32 %662, ptr %58, align 4, !tbaa !30
  %663 = load i32, ptr %58, align 4, !tbaa !30
  %664 = add nsw i32 %663, 1
  store i32 %664, ptr %58, align 4, !tbaa !30
  %665 = load i32, ptr %13, align 4, !tbaa !30
  %666 = load i32, ptr %58, align 4, !tbaa !30
  %667 = add nsw i32 %666, %665
  store i32 %667, ptr %58, align 4, !tbaa !30
  %668 = load i32, ptr %13, align 4, !tbaa !30
  %669 = load i32, ptr %58, align 4, !tbaa !30
  %670 = add nsw i32 %669, %668
  store i32 %670, ptr %58, align 4, !tbaa !30
  %671 = load i32, ptr %58, align 4, !tbaa !30
  %672 = add nsw i32 %671, 1
  store i32 %672, ptr %58, align 4, !tbaa !30
  %673 = load i32, ptr %13, align 4, !tbaa !30
  %674 = load i32, ptr %58, align 4, !tbaa !30
  %675 = add nsw i32 %674, %673
  store i32 %675, ptr %58, align 4, !tbaa !30
  %676 = load i32, ptr %13, align 4, !tbaa !30
  %677 = load i32, ptr %58, align 4, !tbaa !30
  %678 = add nsw i32 %677, %676
  store i32 %678, ptr %58, align 4, !tbaa !30
  %679 = load i32, ptr %58, align 4, !tbaa !30
  %680 = add nsw i32 %679, 1
  store i32 %680, ptr %58, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %681 = load ptr, ptr %3, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.b2World, ptr %681, i32 0, i32 0
  %683 = load i32, ptr %58, align 4, !tbaa !30
  %684 = sext i32 %683 to i64
  %685 = mul i64 %684, 32
  %686 = trunc i64 %685 to i32
  %687 = call ptr @b2AllocateArenaItem(ptr noundef %682, i32 noundef %686, ptr noundef @.str.8)
  store ptr %687, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %688 = load ptr, ptr %3, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.b2World, ptr %688, i32 0, i32 0
  %690 = load i32, ptr %22, align 4, !tbaa !30
  %691 = sext i32 %690 to i64
  %692 = mul i64 %691, 12
  %693 = trunc i64 %692 to i32
  %694 = call ptr @b2AllocateArenaItem(ptr noundef %689, i32 noundef %693, ptr noundef @.str.9)
  store ptr %694, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %695 = load ptr, ptr %3, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.b2World, ptr %695, i32 0, i32 0
  %697 = load i32, ptr %55, align 4, !tbaa !30
  %698 = sext i32 %697 to i64
  %699 = mul i64 %698, 12
  %700 = trunc i64 %699 to i32
  %701 = call ptr @b2AllocateArenaItem(ptr noundef %696, i32 noundef %700, ptr noundef @.str.10)
  store ptr %701, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #8
  %702 = load ptr, ptr %3, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.b2World, ptr %702, i32 0, i32 0
  %704 = load i32, ptr %57, align 4, !tbaa !30
  %705 = sext i32 %704 to i64
  %706 = mul i64 %705, 12
  %707 = trunc i64 %706 to i32
  %708 = call ptr @b2AllocateArenaItem(ptr noundef %703, i32 noundef %707, ptr noundef @.str.11)
  store ptr %708, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #8
  %709 = load ptr, ptr %3, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.b2World, ptr %709, i32 0, i32 0
  %711 = load i32, ptr %30, align 4, !tbaa !30
  %712 = sext i32 %711 to i64
  %713 = mul i64 %712, 12
  %714 = trunc i64 %713 to i32
  %715 = call ptr @b2AllocateArenaItem(ptr noundef %710, i32 noundef %714, ptr noundef @.str.12)
  store ptr %715, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  store ptr null, ptr %64, align 8, !tbaa !5
  %716 = load ptr, ptr %3, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.b2World, ptr %716, i32 0, i32 32
  %718 = load i32, ptr %717, align 8, !tbaa !57
  %719 = icmp ne i32 %718, -1
  br i1 %719, label %720, label %741

720:                                              ; preds = %658
  %721 = load ptr, ptr %3, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.b2World, ptr %721, i32 0, i32 51
  %723 = load ptr, ptr %722, align 8, !tbaa !58
  %724 = load ptr, ptr %3, align 8, !tbaa !5
  %725 = load ptr, ptr %3, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.b2World, ptr %725, i32 0, i32 53
  %727 = load ptr, ptr %726, align 8, !tbaa !33
  %728 = call ptr %723(ptr noundef @b2SplitIslandTask, i32 noundef 1, i32 noundef 1, ptr noundef %724, ptr noundef %727)
  store ptr %728, ptr %64, align 8, !tbaa !5
  %729 = load ptr, ptr %3, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.b2World, ptr %729, i32 0, i32 58
  %731 = load i32, ptr %730, align 8, !tbaa !59
  %732 = add nsw i32 %731, 1
  store i32 %732, ptr %730, align 8, !tbaa !59
  %733 = load ptr, ptr %64, align 8, !tbaa !5
  %734 = icmp eq ptr %733, null
  %735 = zext i1 %734 to i64
  %736 = select i1 %734, i32 0, i32 1
  %737 = load ptr, ptr %3, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.b2World, ptr %737, i32 0, i32 57
  %739 = load i32, ptr %738, align 4, !tbaa !34
  %740 = add nsw i32 %739, %736
  store i32 %740, ptr %738, align 4, !tbaa !34
  br label %741

741:                                              ; preds = %720, %658
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  store i32 0, ptr %65, align 4, !tbaa !30
  br label %742

742:                                              ; preds = %765, %741
  %743 = load i32, ptr %65, align 4, !tbaa !30
  %744 = load i32, ptr %22, align 4, !tbaa !30
  %745 = icmp slt i32 %743, %744
  br i1 %745, label %747, label %746

746:                                              ; preds = %742
  store i32 24, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #8
  br label %768

747:                                              ; preds = %742
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #8
  %748 = load ptr, ptr %60, align 8, !tbaa !5
  %749 = load i32, ptr %65, align 4, !tbaa !30
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds %struct.b2SolverBlock, ptr %748, i64 %750
  store ptr %751, ptr %66, align 8, !tbaa !5
  %752 = load i32, ptr %65, align 4, !tbaa !30
  %753 = load i32, ptr %21, align 4, !tbaa !30
  %754 = mul nsw i32 %752, %753
  %755 = load ptr, ptr %66, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.b2SolverBlock, ptr %755, i32 0, i32 0
  store i32 %754, ptr %756, align 4, !tbaa !60
  %757 = load i32, ptr %21, align 4, !tbaa !30
  %758 = trunc i32 %757 to i16
  %759 = load ptr, ptr %66, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.b2SolverBlock, ptr %759, i32 0, i32 1
  store i16 %758, ptr %760, align 4, !tbaa !62
  %761 = load ptr, ptr %66, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.b2SolverBlock, ptr %761, i32 0, i32 2
  store i16 0, ptr %762, align 2, !tbaa !63
  %763 = load ptr, ptr %66, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.b2SolverBlock, ptr %763, i32 0, i32 3
  call void @b2AtomicStoreInt(ptr noundef %764, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  br label %765

765:                                              ; preds = %747
  %766 = load i32, ptr %65, align 4, !tbaa !30
  %767 = add nsw i32 %766, 1
  store i32 %767, ptr %65, align 4, !tbaa !30
  br label %742, !llvm.loop !64

768:                                              ; preds = %746
  %769 = load i32, ptr %7, align 4, !tbaa !30
  %770 = load i32, ptr %22, align 4, !tbaa !30
  %771 = sub nsw i32 %770, 1
  %772 = load i32, ptr %21, align 4, !tbaa !30
  %773 = mul nsw i32 %771, %772
  %774 = sub nsw i32 %769, %773
  %775 = trunc i32 %774 to i16
  %776 = load ptr, ptr %60, align 8, !tbaa !5
  %777 = load i32, ptr %22, align 4, !tbaa !30
  %778 = sub nsw i32 %777, 1
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds %struct.b2SolverBlock, ptr %776, i64 %779
  %781 = getelementptr inbounds %struct.b2SolverBlock, ptr %780, i32 0, i32 1
  store i16 %775, ptr %781, align 4, !tbaa !62
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  store i32 0, ptr %67, align 4, !tbaa !30
  br label %782

782:                                              ; preds = %805, %768
  %783 = load i32, ptr %67, align 4, !tbaa !30
  %784 = load i32, ptr %57, align 4, !tbaa !30
  %785 = icmp slt i32 %783, %784
  br i1 %785, label %787, label %786

786:                                              ; preds = %782
  store i32 27, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %808

787:                                              ; preds = %782
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  %788 = load ptr, ptr %62, align 8, !tbaa !5
  %789 = load i32, ptr %67, align 4, !tbaa !30
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds %struct.b2SolverBlock, ptr %788, i64 %790
  store ptr %791, ptr %68, align 8, !tbaa !5
  %792 = load i32, ptr %67, align 4, !tbaa !30
  %793 = load i32, ptr %56, align 4, !tbaa !30
  %794 = mul nsw i32 %792, %793
  %795 = load ptr, ptr %68, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct.b2SolverBlock, ptr %795, i32 0, i32 0
  store i32 %794, ptr %796, align 4, !tbaa !60
  %797 = load i32, ptr %56, align 4, !tbaa !30
  %798 = trunc i32 %797 to i16
  %799 = load ptr, ptr %68, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct.b2SolverBlock, ptr %799, i32 0, i32 1
  store i16 %798, ptr %800, align 4, !tbaa !62
  %801 = load ptr, ptr %68, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.b2SolverBlock, ptr %801, i32 0, i32 2
  store i16 1, ptr %802, align 2, !tbaa !63
  %803 = load ptr, ptr %68, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.b2SolverBlock, ptr %803, i32 0, i32 3
  call void @b2AtomicStoreInt(ptr noundef %804, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  br label %805

805:                                              ; preds = %787
  %806 = load i32, ptr %67, align 4, !tbaa !30
  %807 = add nsw i32 %806, 1
  store i32 %807, ptr %67, align 4, !tbaa !30
  br label %782, !llvm.loop !65

808:                                              ; preds = %786
  %809 = load i32, ptr %57, align 4, !tbaa !30
  %810 = icmp sgt i32 %809, 0
  br i1 %810, label %811, label %825

811:                                              ; preds = %808
  %812 = load i32, ptr %12, align 4, !tbaa !30
  %813 = load i32, ptr %57, align 4, !tbaa !30
  %814 = sub nsw i32 %813, 1
  %815 = load i32, ptr %56, align 4, !tbaa !30
  %816 = mul nsw i32 %814, %815
  %817 = sub nsw i32 %812, %816
  %818 = trunc i32 %817 to i16
  %819 = load ptr, ptr %62, align 8, !tbaa !5
  %820 = load i32, ptr %57, align 4, !tbaa !30
  %821 = sub nsw i32 %820, 1
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds %struct.b2SolverBlock, ptr %819, i64 %822
  %824 = getelementptr inbounds %struct.b2SolverBlock, ptr %823, i32 0, i32 1
  store i16 %818, ptr %824, align 4, !tbaa !62
  br label %825

825:                                              ; preds = %811, %808
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  store i32 0, ptr %69, align 4, !tbaa !30
  br label %826

826:                                              ; preds = %849, %825
  %827 = load i32, ptr %69, align 4, !tbaa !30
  %828 = load i32, ptr %55, align 4, !tbaa !30
  %829 = icmp slt i32 %827, %828
  br i1 %829, label %831, label %830

830:                                              ; preds = %826
  store i32 30, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br label %852

831:                                              ; preds = %826
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #8
  %832 = load ptr, ptr %61, align 8, !tbaa !5
  %833 = load i32, ptr %69, align 4, !tbaa !30
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds %struct.b2SolverBlock, ptr %832, i64 %834
  store ptr %835, ptr %70, align 8, !tbaa !5
  %836 = load i32, ptr %69, align 4, !tbaa !30
  %837 = load i32, ptr %54, align 4, !tbaa !30
  %838 = mul nsw i32 %836, %837
  %839 = load ptr, ptr %70, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.b2SolverBlock, ptr %839, i32 0, i32 0
  store i32 %838, ptr %840, align 4, !tbaa !60
  %841 = load i32, ptr %54, align 4, !tbaa !30
  %842 = trunc i32 %841 to i16
  %843 = load ptr, ptr %70, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.b2SolverBlock, ptr %843, i32 0, i32 1
  store i16 %842, ptr %844, align 4, !tbaa !62
  %845 = load ptr, ptr %70, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.b2SolverBlock, ptr %845, i32 0, i32 2
  store i16 2, ptr %846, align 2, !tbaa !63
  %847 = load ptr, ptr %70, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.b2SolverBlock, ptr %847, i32 0, i32 3
  call void @b2AtomicStoreInt(ptr noundef %848, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #8
  br label %849

849:                                              ; preds = %831
  %850 = load i32, ptr %69, align 4, !tbaa !30
  %851 = add nsw i32 %850, 1
  store i32 %851, ptr %69, align 4, !tbaa !30
  br label %826, !llvm.loop !66

852:                                              ; preds = %830
  %853 = load i32, ptr %55, align 4, !tbaa !30
  %854 = icmp sgt i32 %853, 0
  br i1 %854, label %855, label %869

855:                                              ; preds = %852
  %856 = load i32, ptr %31, align 4, !tbaa !30
  %857 = load i32, ptr %55, align 4, !tbaa !30
  %858 = sub nsw i32 %857, 1
  %859 = load i32, ptr %54, align 4, !tbaa !30
  %860 = mul nsw i32 %858, %859
  %861 = sub nsw i32 %856, %860
  %862 = trunc i32 %861 to i16
  %863 = load ptr, ptr %61, align 8, !tbaa !5
  %864 = load i32, ptr %55, align 4, !tbaa !30
  %865 = sub nsw i32 %864, 1
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds %struct.b2SolverBlock, ptr %863, i64 %866
  %868 = getelementptr inbounds %struct.b2SolverBlock, ptr %867, i32 0, i32 1
  store i16 %862, ptr %868, align 4, !tbaa !62
  br label %869

869:                                              ; preds = %855, %852
  call void @llvm.lifetime.start.p0(i64 96, ptr %71) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %870 = load ptr, ptr %63, align 8, !tbaa !5
  store ptr %870, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #8
  store i32 0, ptr %73, align 4, !tbaa !30
  br label %871

871:                                              ; preds = %999, %869
  %872 = load i32, ptr %73, align 4, !tbaa !30
  %873 = load i32, ptr %13, align 4, !tbaa !30
  %874 = icmp slt i32 %872, %873
  br i1 %874, label %876, label %875

875:                                              ; preds = %871
  store i32 33, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #8
  br label %1002

876:                                              ; preds = %871
  %877 = load ptr, ptr %72, align 8, !tbaa !5
  %878 = load i32, ptr %73, align 4, !tbaa !30
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds [12 x ptr], ptr %71, i64 0, i64 %879
  store ptr %877, ptr %880, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #8
  %881 = load i32, ptr %73, align 4, !tbaa !30
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %882
  %884 = load i32, ptr %883, align 4, !tbaa !30
  store i32 %884, ptr %74, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  %885 = load i32, ptr %73, align 4, !tbaa !30
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds [12 x i32], ptr %28, i64 0, i64 %886
  %888 = load i32, ptr %887, align 4, !tbaa !30
  store i32 %888, ptr %75, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  store i32 0, ptr %76, align 4, !tbaa !30
  br label %889

889:                                              ; preds = %912, %876
  %890 = load i32, ptr %76, align 4, !tbaa !30
  %891 = load i32, ptr %74, align 4, !tbaa !30
  %892 = icmp slt i32 %890, %891
  br i1 %892, label %894, label %893

893:                                              ; preds = %889
  store i32 36, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  br label %915

894:                                              ; preds = %889
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #8
  %895 = load ptr, ptr %72, align 8, !tbaa !5
  %896 = load i32, ptr %76, align 4, !tbaa !30
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds %struct.b2SolverBlock, ptr %895, i64 %897
  store ptr %898, ptr %77, align 8, !tbaa !5
  %899 = load i32, ptr %76, align 4, !tbaa !30
  %900 = load i32, ptr %75, align 4, !tbaa !30
  %901 = mul nsw i32 %899, %900
  %902 = load ptr, ptr %77, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.b2SolverBlock, ptr %902, i32 0, i32 0
  store i32 %901, ptr %903, align 4, !tbaa !60
  %904 = load i32, ptr %75, align 4, !tbaa !30
  %905 = trunc i32 %904 to i16
  %906 = load ptr, ptr %77, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.b2SolverBlock, ptr %906, i32 0, i32 1
  store i16 %905, ptr %907, align 4, !tbaa !62
  %908 = load ptr, ptr %77, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.b2SolverBlock, ptr %908, i32 0, i32 2
  store i16 3, ptr %909, align 2, !tbaa !63
  %910 = load ptr, ptr %77, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.b2SolverBlock, ptr %910, i32 0, i32 3
  call void @b2AtomicStoreInt(ptr noundef %911, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  br label %912

912:                                              ; preds = %894
  %913 = load i32, ptr %76, align 4, !tbaa !30
  %914 = add nsw i32 %913, 1
  store i32 %914, ptr %76, align 4, !tbaa !30
  br label %889, !llvm.loop !67

915:                                              ; preds = %893
  %916 = load i32, ptr %74, align 4, !tbaa !30
  %917 = icmp sgt i32 %916, 0
  br i1 %917, label %918, label %939

918:                                              ; preds = %915
  %919 = load i32, ptr %73, align 4, !tbaa !30
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds [12 x i32], ptr %27, i64 0, i64 %920
  %922 = load i32, ptr %921, align 4, !tbaa !30
  %923 = load i32, ptr %74, align 4, !tbaa !30
  %924 = sub nsw i32 %923, 1
  %925 = load i32, ptr %75, align 4, !tbaa !30
  %926 = mul nsw i32 %924, %925
  %927 = sub nsw i32 %922, %926
  %928 = trunc i32 %927 to i16
  %929 = load ptr, ptr %72, align 8, !tbaa !5
  %930 = load i32, ptr %74, align 4, !tbaa !30
  %931 = sub nsw i32 %930, 1
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds %struct.b2SolverBlock, ptr %929, i64 %932
  %934 = getelementptr inbounds %struct.b2SolverBlock, ptr %933, i32 0, i32 1
  store i16 %928, ptr %934, align 4, !tbaa !62
  %935 = load i32, ptr %74, align 4, !tbaa !30
  %936 = load ptr, ptr %72, align 8, !tbaa !5
  %937 = sext i32 %935 to i64
  %938 = getelementptr inbounds %struct.b2SolverBlock, ptr %936, i64 %937
  store ptr %938, ptr %72, align 8, !tbaa !5
  br label %939

939:                                              ; preds = %918, %915
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #8
  %940 = load i32, ptr %73, align 4, !tbaa !30
  %941 = sext i32 %940 to i64
  %942 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %941
  %943 = load i32, ptr %942, align 4, !tbaa !30
  store i32 %943, ptr %78, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  %944 = load i32, ptr %73, align 4, !tbaa !30
  %945 = sext i32 %944 to i64
  %946 = getelementptr inbounds [12 x i32], ptr %25, i64 0, i64 %945
  %947 = load i32, ptr %946, align 4, !tbaa !30
  store i32 %947, ptr %79, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #8
  store i32 0, ptr %80, align 4, !tbaa !30
  br label %948

948:                                              ; preds = %971, %939
  %949 = load i32, ptr %80, align 4, !tbaa !30
  %950 = load i32, ptr %78, align 4, !tbaa !30
  %951 = icmp slt i32 %949, %950
  br i1 %951, label %953, label %952

952:                                              ; preds = %948
  store i32 39, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #8
  br label %974

953:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #8
  %954 = load ptr, ptr %72, align 8, !tbaa !5
  %955 = load i32, ptr %80, align 4, !tbaa !30
  %956 = sext i32 %955 to i64
  %957 = getelementptr inbounds %struct.b2SolverBlock, ptr %954, i64 %956
  store ptr %957, ptr %81, align 8, !tbaa !5
  %958 = load i32, ptr %80, align 4, !tbaa !30
  %959 = load i32, ptr %79, align 4, !tbaa !30
  %960 = mul nsw i32 %958, %959
  %961 = load ptr, ptr %81, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.b2SolverBlock, ptr %961, i32 0, i32 0
  store i32 %960, ptr %962, align 4, !tbaa !60
  %963 = load i32, ptr %79, align 4, !tbaa !30
  %964 = trunc i32 %963 to i16
  %965 = load ptr, ptr %81, align 8, !tbaa !5
  %966 = getelementptr inbounds %struct.b2SolverBlock, ptr %965, i32 0, i32 1
  store i16 %964, ptr %966, align 4, !tbaa !62
  %967 = load ptr, ptr %81, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct.b2SolverBlock, ptr %967, i32 0, i32 2
  store i16 4, ptr %968, align 2, !tbaa !63
  %969 = load ptr, ptr %81, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.b2SolverBlock, ptr %969, i32 0, i32 3
  call void @b2AtomicStoreInt(ptr noundef %970, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #8
  br label %971

971:                                              ; preds = %953
  %972 = load i32, ptr %80, align 4, !tbaa !30
  %973 = add nsw i32 %972, 1
  store i32 %973, ptr %80, align 4, !tbaa !30
  br label %948, !llvm.loop !68

974:                                              ; preds = %952
  %975 = load i32, ptr %78, align 4, !tbaa !30
  %976 = icmp sgt i32 %975, 0
  br i1 %976, label %977, label %998

977:                                              ; preds = %974
  %978 = load i32, ptr %73, align 4, !tbaa !30
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds [12 x i32], ptr %24, i64 0, i64 %979
  %981 = load i32, ptr %980, align 4, !tbaa !30
  %982 = load i32, ptr %78, align 4, !tbaa !30
  %983 = sub nsw i32 %982, 1
  %984 = load i32, ptr %79, align 4, !tbaa !30
  %985 = mul nsw i32 %983, %984
  %986 = sub nsw i32 %981, %985
  %987 = trunc i32 %986 to i16
  %988 = load ptr, ptr %72, align 8, !tbaa !5
  %989 = load i32, ptr %78, align 4, !tbaa !30
  %990 = sub nsw i32 %989, 1
  %991 = sext i32 %990 to i64
  %992 = getelementptr inbounds %struct.b2SolverBlock, ptr %988, i64 %991
  %993 = getelementptr inbounds %struct.b2SolverBlock, ptr %992, i32 0, i32 1
  store i16 %987, ptr %993, align 4, !tbaa !62
  %994 = load i32, ptr %78, align 4, !tbaa !30
  %995 = load ptr, ptr %72, align 8, !tbaa !5
  %996 = sext i32 %994 to i64
  %997 = getelementptr inbounds %struct.b2SolverBlock, ptr %995, i64 %996
  store ptr %997, ptr %72, align 8, !tbaa !5
  br label %998

998:                                              ; preds = %977, %974
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #8
  br label %999

999:                                              ; preds = %998
  %1000 = load i32, ptr %73, align 4, !tbaa !30
  %1001 = add nsw i32 %1000, 1
  store i32 %1001, ptr %73, align 4, !tbaa !30
  br label %871, !llvm.loop !69

1002:                                             ; preds = %875
  br label %1003

1003:                                             ; preds = %1002
  %1004 = load ptr, ptr %72, align 8, !tbaa !5
  %1005 = load ptr, ptr %63, align 8, !tbaa !5
  %1006 = ptrtoint ptr %1004 to i64
  %1007 = ptrtoint ptr %1005 to i64
  %1008 = sub i64 %1006, %1007
  %1009 = sdiv exact i64 %1008, 12
  %1010 = load i32, ptr %30, align 4, !tbaa !30
  %1011 = sext i32 %1010 to i64
  %1012 = icmp eq i64 %1009, %1011
  br i1 %1012, label %1017, label %1013

1013:                                             ; preds = %1003
  %1014 = call i32 @b2InternalAssertFcn(ptr noundef @.str.13, ptr noundef @.str.6, i32 noundef 1566)
  %1015 = icmp ne i32 %1014, 0
  br i1 %1015, label %1016, label %1017

1016:                                             ; preds = %1013
  call void @llvm.trap()
  br label %1017

1017:                                             ; preds = %1016, %1013, %1003
  br label %1018

1018:                                             ; preds = %1017
  br label %1019

1019:                                             ; preds = %1018
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #8
  %1020 = load ptr, ptr %59, align 8, !tbaa !5
  store ptr %1020, ptr %82, align 8, !tbaa !5
  %1021 = load ptr, ptr %82, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.b2SolverStage, ptr %1021, i32 0, i32 0
  store i32 0, ptr %1022, align 8, !tbaa !70
  %1023 = load ptr, ptr %62, align 8, !tbaa !5
  %1024 = load ptr, ptr %82, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.b2SolverStage, ptr %1024, i32 0, i32 1
  store ptr %1023, ptr %1025, align 8, !tbaa !72
  %1026 = load i32, ptr %57, align 4, !tbaa !30
  %1027 = load ptr, ptr %82, align 8, !tbaa !5
  %1028 = getelementptr inbounds %struct.b2SolverStage, ptr %1027, i32 0, i32 2
  store i32 %1026, ptr %1028, align 8, !tbaa !73
  %1029 = load ptr, ptr %82, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.b2SolverStage, ptr %1029, i32 0, i32 3
  store i32 -1, ptr %1030, align 4, !tbaa !74
  %1031 = load ptr, ptr %82, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.b2SolverStage, ptr %1031, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1032, i32 noundef 0)
  %1033 = load ptr, ptr %82, align 8, !tbaa !5
  %1034 = getelementptr inbounds %struct.b2SolverStage, ptr %1033, i64 1
  store ptr %1034, ptr %82, align 8, !tbaa !5
  %1035 = load ptr, ptr %82, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.b2SolverStage, ptr %1035, i32 0, i32 0
  store i32 1, ptr %1036, align 8, !tbaa !70
  %1037 = load ptr, ptr %61, align 8, !tbaa !5
  %1038 = load ptr, ptr %82, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.b2SolverStage, ptr %1038, i32 0, i32 1
  store ptr %1037, ptr %1039, align 8, !tbaa !72
  %1040 = load i32, ptr %55, align 4, !tbaa !30
  %1041 = load ptr, ptr %82, align 8, !tbaa !5
  %1042 = getelementptr inbounds %struct.b2SolverStage, ptr %1041, i32 0, i32 2
  store i32 %1040, ptr %1042, align 8, !tbaa !73
  %1043 = load ptr, ptr %82, align 8, !tbaa !5
  %1044 = getelementptr inbounds %struct.b2SolverStage, ptr %1043, i32 0, i32 3
  store i32 -1, ptr %1044, align 4, !tbaa !74
  %1045 = load ptr, ptr %82, align 8, !tbaa !5
  %1046 = getelementptr inbounds %struct.b2SolverStage, ptr %1045, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1046, i32 noundef 0)
  %1047 = load ptr, ptr %82, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.b2SolverStage, ptr %1047, i64 1
  store ptr %1048, ptr %82, align 8, !tbaa !5
  %1049 = load ptr, ptr %82, align 8, !tbaa !5
  %1050 = getelementptr inbounds %struct.b2SolverStage, ptr %1049, i32 0, i32 0
  store i32 2, ptr %1050, align 8, !tbaa !70
  %1051 = load ptr, ptr %60, align 8, !tbaa !5
  %1052 = load ptr, ptr %82, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct.b2SolverStage, ptr %1052, i32 0, i32 1
  store ptr %1051, ptr %1053, align 8, !tbaa !72
  %1054 = load i32, ptr %22, align 4, !tbaa !30
  %1055 = load ptr, ptr %82, align 8, !tbaa !5
  %1056 = getelementptr inbounds %struct.b2SolverStage, ptr %1055, i32 0, i32 2
  store i32 %1054, ptr %1056, align 8, !tbaa !73
  %1057 = load ptr, ptr %82, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.b2SolverStage, ptr %1057, i32 0, i32 3
  store i32 -1, ptr %1058, align 4, !tbaa !74
  %1059 = load ptr, ptr %82, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.b2SolverStage, ptr %1059, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1060, i32 noundef 0)
  %1061 = load ptr, ptr %82, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.b2SolverStage, ptr %1061, i64 1
  store ptr %1062, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  store i32 0, ptr %83, align 4, !tbaa !30
  br label %1063

1063:                                             ; preds = %1098, %1019
  %1064 = load i32, ptr %83, align 4, !tbaa !30
  %1065 = load i32, ptr %13, align 4, !tbaa !30
  %1066 = icmp slt i32 %1064, %1065
  br i1 %1066, label %1068, label %1067

1067:                                             ; preds = %1063
  store i32 44, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br label %1101

1068:                                             ; preds = %1063
  %1069 = load ptr, ptr %82, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.b2SolverStage, ptr %1069, i32 0, i32 0
  store i32 3, ptr %1070, align 8, !tbaa !70
  %1071 = load i32, ptr %83, align 4, !tbaa !30
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds [12 x ptr], ptr %71, i64 0, i64 %1072
  %1074 = load ptr, ptr %1073, align 8, !tbaa !5
  %1075 = load ptr, ptr %82, align 8, !tbaa !5
  %1076 = getelementptr inbounds %struct.b2SolverStage, ptr %1075, i32 0, i32 1
  store ptr %1074, ptr %1076, align 8, !tbaa !72
  %1077 = load i32, ptr %83, align 4, !tbaa !30
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %1078
  %1080 = load i32, ptr %1079, align 4, !tbaa !30
  %1081 = load i32, ptr %83, align 4, !tbaa !30
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %1082
  %1084 = load i32, ptr %1083, align 4, !tbaa !30
  %1085 = add nsw i32 %1080, %1084
  %1086 = load ptr, ptr %82, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.b2SolverStage, ptr %1086, i32 0, i32 2
  store i32 %1085, ptr %1087, align 8, !tbaa !73
  %1088 = load i32, ptr %83, align 4, !tbaa !30
  %1089 = sext i32 %1088 to i64
  %1090 = getelementptr inbounds [12 x i32], ptr %23, i64 0, i64 %1089
  %1091 = load i32, ptr %1090, align 4, !tbaa !30
  %1092 = load ptr, ptr %82, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.b2SolverStage, ptr %1092, i32 0, i32 3
  store i32 %1091, ptr %1093, align 4, !tbaa !74
  %1094 = load ptr, ptr %82, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.b2SolverStage, ptr %1094, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1095, i32 noundef 0)
  %1096 = load ptr, ptr %82, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.b2SolverStage, ptr %1096, i64 1
  store ptr %1097, ptr %82, align 8, !tbaa !5
  br label %1098

1098:                                             ; preds = %1068
  %1099 = load i32, ptr %83, align 4, !tbaa !30
  %1100 = add nsw i32 %1099, 1
  store i32 %1100, ptr %83, align 4, !tbaa !30
  br label %1063, !llvm.loop !75

1101:                                             ; preds = %1067
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  store i32 0, ptr %84, align 4, !tbaa !30
  br label %1102

1102:                                             ; preds = %1137, %1101
  %1103 = load i32, ptr %84, align 4, !tbaa !30
  %1104 = load i32, ptr %13, align 4, !tbaa !30
  %1105 = icmp slt i32 %1103, %1104
  br i1 %1105, label %1107, label %1106

1106:                                             ; preds = %1102
  store i32 47, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  br label %1140

1107:                                             ; preds = %1102
  %1108 = load ptr, ptr %82, align 8, !tbaa !5
  %1109 = getelementptr inbounds %struct.b2SolverStage, ptr %1108, i32 0, i32 0
  store i32 4, ptr %1109, align 8, !tbaa !70
  %1110 = load i32, ptr %84, align 4, !tbaa !30
  %1111 = sext i32 %1110 to i64
  %1112 = getelementptr inbounds [12 x ptr], ptr %71, i64 0, i64 %1111
  %1113 = load ptr, ptr %1112, align 8, !tbaa !5
  %1114 = load ptr, ptr %82, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct.b2SolverStage, ptr %1114, i32 0, i32 1
  store ptr %1113, ptr %1115, align 8, !tbaa !72
  %1116 = load i32, ptr %84, align 4, !tbaa !30
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %1117
  %1119 = load i32, ptr %1118, align 4, !tbaa !30
  %1120 = load i32, ptr %84, align 4, !tbaa !30
  %1121 = sext i32 %1120 to i64
  %1122 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %1121
  %1123 = load i32, ptr %1122, align 4, !tbaa !30
  %1124 = add nsw i32 %1119, %1123
  %1125 = load ptr, ptr %82, align 8, !tbaa !5
  %1126 = getelementptr inbounds %struct.b2SolverStage, ptr %1125, i32 0, i32 2
  store i32 %1124, ptr %1126, align 8, !tbaa !73
  %1127 = load i32, ptr %84, align 4, !tbaa !30
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds [12 x i32], ptr %23, i64 0, i64 %1128
  %1130 = load i32, ptr %1129, align 4, !tbaa !30
  %1131 = load ptr, ptr %82, align 8, !tbaa !5
  %1132 = getelementptr inbounds %struct.b2SolverStage, ptr %1131, i32 0, i32 3
  store i32 %1130, ptr %1132, align 4, !tbaa !74
  %1133 = load ptr, ptr %82, align 8, !tbaa !5
  %1134 = getelementptr inbounds %struct.b2SolverStage, ptr %1133, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1134, i32 noundef 0)
  %1135 = load ptr, ptr %82, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.b2SolverStage, ptr %1135, i64 1
  store ptr %1136, ptr %82, align 8, !tbaa !5
  br label %1137

1137:                                             ; preds = %1107
  %1138 = load i32, ptr %84, align 4, !tbaa !30
  %1139 = add nsw i32 %1138, 1
  store i32 %1139, ptr %84, align 4, !tbaa !30
  br label %1102, !llvm.loop !76

1140:                                             ; preds = %1106
  %1141 = load ptr, ptr %82, align 8, !tbaa !5
  %1142 = getelementptr inbounds %struct.b2SolverStage, ptr %1141, i32 0, i32 0
  store i32 5, ptr %1142, align 8, !tbaa !70
  %1143 = load ptr, ptr %60, align 8, !tbaa !5
  %1144 = load ptr, ptr %82, align 8, !tbaa !5
  %1145 = getelementptr inbounds %struct.b2SolverStage, ptr %1144, i32 0, i32 1
  store ptr %1143, ptr %1145, align 8, !tbaa !72
  %1146 = load i32, ptr %22, align 4, !tbaa !30
  %1147 = load ptr, ptr %82, align 8, !tbaa !5
  %1148 = getelementptr inbounds %struct.b2SolverStage, ptr %1147, i32 0, i32 2
  store i32 %1146, ptr %1148, align 8, !tbaa !73
  %1149 = load ptr, ptr %82, align 8, !tbaa !5
  %1150 = getelementptr inbounds %struct.b2SolverStage, ptr %1149, i32 0, i32 3
  store i32 -1, ptr %1150, align 4, !tbaa !74
  %1151 = load ptr, ptr %82, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct.b2SolverStage, ptr %1151, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1152, i32 noundef 0)
  %1153 = load ptr, ptr %82, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.b2SolverStage, ptr %1153, i64 1
  store ptr %1154, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  store i32 0, ptr %85, align 4, !tbaa !30
  br label %1155

1155:                                             ; preds = %1190, %1140
  %1156 = load i32, ptr %85, align 4, !tbaa !30
  %1157 = load i32, ptr %13, align 4, !tbaa !30
  %1158 = icmp slt i32 %1156, %1157
  br i1 %1158, label %1160, label %1159

1159:                                             ; preds = %1155
  store i32 50, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  br label %1193

1160:                                             ; preds = %1155
  %1161 = load ptr, ptr %82, align 8, !tbaa !5
  %1162 = getelementptr inbounds %struct.b2SolverStage, ptr %1161, i32 0, i32 0
  store i32 6, ptr %1162, align 8, !tbaa !70
  %1163 = load i32, ptr %85, align 4, !tbaa !30
  %1164 = sext i32 %1163 to i64
  %1165 = getelementptr inbounds [12 x ptr], ptr %71, i64 0, i64 %1164
  %1166 = load ptr, ptr %1165, align 8, !tbaa !5
  %1167 = load ptr, ptr %82, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.b2SolverStage, ptr %1167, i32 0, i32 1
  store ptr %1166, ptr %1168, align 8, !tbaa !72
  %1169 = load i32, ptr %85, align 4, !tbaa !30
  %1170 = sext i32 %1169 to i64
  %1171 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %1170
  %1172 = load i32, ptr %1171, align 4, !tbaa !30
  %1173 = load i32, ptr %85, align 4, !tbaa !30
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %1174
  %1176 = load i32, ptr %1175, align 4, !tbaa !30
  %1177 = add nsw i32 %1172, %1176
  %1178 = load ptr, ptr %82, align 8, !tbaa !5
  %1179 = getelementptr inbounds %struct.b2SolverStage, ptr %1178, i32 0, i32 2
  store i32 %1177, ptr %1179, align 8, !tbaa !73
  %1180 = load i32, ptr %85, align 4, !tbaa !30
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds [12 x i32], ptr %23, i64 0, i64 %1181
  %1183 = load i32, ptr %1182, align 4, !tbaa !30
  %1184 = load ptr, ptr %82, align 8, !tbaa !5
  %1185 = getelementptr inbounds %struct.b2SolverStage, ptr %1184, i32 0, i32 3
  store i32 %1183, ptr %1185, align 4, !tbaa !74
  %1186 = load ptr, ptr %82, align 8, !tbaa !5
  %1187 = getelementptr inbounds %struct.b2SolverStage, ptr %1186, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1187, i32 noundef 0)
  %1188 = load ptr, ptr %82, align 8, !tbaa !5
  %1189 = getelementptr inbounds %struct.b2SolverStage, ptr %1188, i64 1
  store ptr %1189, ptr %82, align 8, !tbaa !5
  br label %1190

1190:                                             ; preds = %1160
  %1191 = load i32, ptr %85, align 4, !tbaa !30
  %1192 = add nsw i32 %1191, 1
  store i32 %1192, ptr %85, align 4, !tbaa !30
  br label %1155, !llvm.loop !77

1193:                                             ; preds = %1159
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #8
  store i32 0, ptr %86, align 4, !tbaa !30
  br label %1194

1194:                                             ; preds = %1229, %1193
  %1195 = load i32, ptr %86, align 4, !tbaa !30
  %1196 = load i32, ptr %13, align 4, !tbaa !30
  %1197 = icmp slt i32 %1195, %1196
  br i1 %1197, label %1199, label %1198

1198:                                             ; preds = %1194
  store i32 53, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #8
  br label %1232

1199:                                             ; preds = %1194
  %1200 = load ptr, ptr %82, align 8, !tbaa !5
  %1201 = getelementptr inbounds %struct.b2SolverStage, ptr %1200, i32 0, i32 0
  store i32 7, ptr %1201, align 8, !tbaa !70
  %1202 = load i32, ptr %86, align 4, !tbaa !30
  %1203 = sext i32 %1202 to i64
  %1204 = getelementptr inbounds [12 x ptr], ptr %71, i64 0, i64 %1203
  %1205 = load ptr, ptr %1204, align 8, !tbaa !5
  %1206 = load ptr, ptr %82, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.b2SolverStage, ptr %1206, i32 0, i32 1
  store ptr %1205, ptr %1207, align 8, !tbaa !72
  %1208 = load i32, ptr %86, align 4, !tbaa !30
  %1209 = sext i32 %1208 to i64
  %1210 = getelementptr inbounds [12 x i32], ptr %29, i64 0, i64 %1209
  %1211 = load i32, ptr %1210, align 4, !tbaa !30
  %1212 = load i32, ptr %86, align 4, !tbaa !30
  %1213 = sext i32 %1212 to i64
  %1214 = getelementptr inbounds [12 x i32], ptr %26, i64 0, i64 %1213
  %1215 = load i32, ptr %1214, align 4, !tbaa !30
  %1216 = add nsw i32 %1211, %1215
  %1217 = load ptr, ptr %82, align 8, !tbaa !5
  %1218 = getelementptr inbounds %struct.b2SolverStage, ptr %1217, i32 0, i32 2
  store i32 %1216, ptr %1218, align 8, !tbaa !73
  %1219 = load i32, ptr %86, align 4, !tbaa !30
  %1220 = sext i32 %1219 to i64
  %1221 = getelementptr inbounds [12 x i32], ptr %23, i64 0, i64 %1220
  %1222 = load i32, ptr %1221, align 4, !tbaa !30
  %1223 = load ptr, ptr %82, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct.b2SolverStage, ptr %1223, i32 0, i32 3
  store i32 %1222, ptr %1224, align 4, !tbaa !74
  %1225 = load ptr, ptr %82, align 8, !tbaa !5
  %1226 = getelementptr inbounds %struct.b2SolverStage, ptr %1225, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1226, i32 noundef 0)
  %1227 = load ptr, ptr %82, align 8, !tbaa !5
  %1228 = getelementptr inbounds %struct.b2SolverStage, ptr %1227, i64 1
  store ptr %1228, ptr %82, align 8, !tbaa !5
  br label %1229

1229:                                             ; preds = %1199
  %1230 = load i32, ptr %86, align 4, !tbaa !30
  %1231 = add nsw i32 %1230, 1
  store i32 %1231, ptr %86, align 4, !tbaa !30
  br label %1194, !llvm.loop !78

1232:                                             ; preds = %1198
  %1233 = load ptr, ptr %82, align 8, !tbaa !5
  %1234 = getelementptr inbounds %struct.b2SolverStage, ptr %1233, i32 0, i32 0
  store i32 8, ptr %1234, align 8, !tbaa !70
  %1235 = load ptr, ptr %61, align 8, !tbaa !5
  %1236 = load ptr, ptr %82, align 8, !tbaa !5
  %1237 = getelementptr inbounds %struct.b2SolverStage, ptr %1236, i32 0, i32 1
  store ptr %1235, ptr %1237, align 8, !tbaa !72
  %1238 = load i32, ptr %55, align 4, !tbaa !30
  %1239 = load ptr, ptr %82, align 8, !tbaa !5
  %1240 = getelementptr inbounds %struct.b2SolverStage, ptr %1239, i32 0, i32 2
  store i32 %1238, ptr %1240, align 8, !tbaa !73
  %1241 = load ptr, ptr %82, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct.b2SolverStage, ptr %1241, i32 0, i32 3
  store i32 -1, ptr %1242, align 4, !tbaa !74
  %1243 = load ptr, ptr %82, align 8, !tbaa !5
  %1244 = getelementptr inbounds %struct.b2SolverStage, ptr %1243, i32 0, i32 4
  call void @b2AtomicStoreInt(ptr noundef %1244, i32 noundef 0)
  %1245 = load ptr, ptr %82, align 8, !tbaa !5
  %1246 = getelementptr inbounds %struct.b2SolverStage, ptr %1245, i64 1
  store ptr %1246, ptr %82, align 8, !tbaa !5
  br label %1247

1247:                                             ; preds = %1232
  %1248 = load ptr, ptr %82, align 8, !tbaa !5
  %1249 = load ptr, ptr %59, align 8, !tbaa !5
  %1250 = ptrtoint ptr %1248 to i64
  %1251 = ptrtoint ptr %1249 to i64
  %1252 = sub i64 %1250, %1251
  %1253 = sdiv exact i64 %1252, 32
  %1254 = trunc i64 %1253 to i32
  %1255 = load i32, ptr %58, align 4, !tbaa !30
  %1256 = icmp eq i32 %1254, %1255
  br i1 %1256, label %1261, label %1257

1257:                                             ; preds = %1247
  %1258 = call i32 @b2InternalAssertFcn(ptr noundef @.str.14, ptr noundef @.str.6, i32 noundef 1655)
  %1259 = icmp ne i32 %1258, 0
  br i1 %1259, label %1260, label %1261

1260:                                             ; preds = %1257
  call void @llvm.trap()
  br label %1261

1261:                                             ; preds = %1260, %1257, %1247
  br label %1262

1262:                                             ; preds = %1261
  br label %1263

1263:                                             ; preds = %1262
  br label %1264

1264:                                             ; preds = %1263
  %1265 = load i32, ptr %18, align 4, !tbaa !30
  %1266 = icmp sle i32 %1265, 64
  br i1 %1266, label %1271, label %1267

1267:                                             ; preds = %1264
  %1268 = call i32 @b2InternalAssertFcn(ptr noundef @.str.15, ptr noundef @.str.6, i32 noundef 1657)
  %1269 = icmp ne i32 %1268, 0
  br i1 %1269, label %1270, label %1271

1270:                                             ; preds = %1267
  call void @llvm.trap()
  br label %1271

1271:                                             ; preds = %1270, %1267, %1264
  br label %1272

1272:                                             ; preds = %1271
  br label %1273

1273:                                             ; preds = %1272
  call void @llvm.lifetime.start.p0(i64 1536, ptr %87) #8
  %1274 = load ptr, ptr %10, align 8, !tbaa !5
  %1275 = load ptr, ptr %4, align 8, !tbaa !5
  %1276 = getelementptr inbounds %struct.b2StepContext, ptr %1275, i32 0, i32 11
  store ptr %1274, ptr %1276, align 8, !tbaa !79
  %1277 = load ptr, ptr %38, align 8, !tbaa !5
  %1278 = load ptr, ptr %4, align 8, !tbaa !5
  %1279 = getelementptr inbounds %struct.b2StepContext, ptr %1278, i32 0, i32 18
  store ptr %1277, ptr %1279, align 8, !tbaa !80
  %1280 = load ptr, ptr %37, align 8, !tbaa !5
  %1281 = load ptr, ptr %4, align 8, !tbaa !5
  %1282 = getelementptr inbounds %struct.b2StepContext, ptr %1281, i32 0, i32 19
  store ptr %1280, ptr %1282, align 8, !tbaa !81
  %1283 = load ptr, ptr %40, align 8, !tbaa !5
  %1284 = load ptr, ptr %4, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.b2StepContext, ptr %1284, i32 0, i32 20
  store ptr %1283, ptr %1285, align 8, !tbaa !82
  %1286 = load i32, ptr %13, align 4, !tbaa !30
  %1287 = load ptr, ptr %4, align 8, !tbaa !5
  %1288 = getelementptr inbounds %struct.b2StepContext, ptr %1287, i32 0, i32 21
  store i32 %1286, ptr %1288, align 8, !tbaa !83
  %1289 = load i32, ptr %18, align 4, !tbaa !30
  %1290 = load ptr, ptr %4, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct.b2StepContext, ptr %1290, i32 0, i32 22
  store i32 %1289, ptr %1291, align 4, !tbaa !84
  %1292 = load i32, ptr %58, align 4, !tbaa !30
  %1293 = load ptr, ptr %4, align 8, !tbaa !5
  %1294 = getelementptr inbounds %struct.b2StepContext, ptr %1293, i32 0, i32 24
  store i32 %1292, ptr %1294, align 8, !tbaa !85
  %1295 = load ptr, ptr %59, align 8, !tbaa !5
  %1296 = load ptr, ptr %4, align 8, !tbaa !5
  %1297 = getelementptr inbounds %struct.b2StepContext, ptr %1296, i32 0, i32 23
  store ptr %1295, ptr %1297, align 8, !tbaa !86
  %1298 = load ptr, ptr %4, align 8, !tbaa !5
  %1299 = getelementptr inbounds %struct.b2StepContext, ptr %1298, i32 0, i32 27
  call void @b2AtomicStoreU32(ptr noundef %1299, i32 noundef 0)
  %1300 = call float @b2GetMillisecondsAndReset(ptr noundef %9)
  %1301 = load ptr, ptr %3, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.b2World, ptr %1301, i32 0, i32 45
  %1303 = getelementptr inbounds %struct.b2Profile, ptr %1302, i32 0, i32 5
  store float %1300, ptr %1303, align 4, !tbaa !87
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %1304 = call i64 @b2GetTicks()
  store i64 %1304, ptr %88, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #8
  store i32 0, ptr %89, align 4, !tbaa !30
  br label %1305

1305:                                             ; preds = %1352, %1273
  %1306 = load i32, ptr %89, align 4, !tbaa !30
  %1307 = load i32, ptr %18, align 4, !tbaa !30
  %1308 = icmp slt i32 %1306, %1307
  br i1 %1308, label %1310, label %1309

1309:                                             ; preds = %1305
  store i32 60, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #8
  br label %1355

1310:                                             ; preds = %1305
  %1311 = load ptr, ptr %4, align 8, !tbaa !5
  %1312 = load i32, ptr %89, align 4, !tbaa !30
  %1313 = sext i32 %1312 to i64
  %1314 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %87, i64 0, i64 %1313
  %1315 = getelementptr inbounds %struct.b2WorkerContext, ptr %1314, i32 0, i32 0
  store ptr %1311, ptr %1315, align 8, !tbaa !88
  %1316 = load i32, ptr %89, align 4, !tbaa !30
  %1317 = load i32, ptr %89, align 4, !tbaa !30
  %1318 = sext i32 %1317 to i64
  %1319 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %87, i64 0, i64 %1318
  %1320 = getelementptr inbounds %struct.b2WorkerContext, ptr %1319, i32 0, i32 1
  store i32 %1316, ptr %1320, align 8, !tbaa !90
  %1321 = load ptr, ptr %3, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.b2World, ptr %1321, i32 0, i32 51
  %1323 = load ptr, ptr %1322, align 8, !tbaa !58
  %1324 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %87, i64 0, i64 0
  %1325 = load i32, ptr %89, align 4, !tbaa !30
  %1326 = sext i32 %1325 to i64
  %1327 = getelementptr inbounds %struct.b2WorkerContext, ptr %1324, i64 %1326
  %1328 = load ptr, ptr %3, align 8, !tbaa !5
  %1329 = getelementptr inbounds %struct.b2World, ptr %1328, i32 0, i32 53
  %1330 = load ptr, ptr %1329, align 8, !tbaa !33
  %1331 = call ptr %1323(ptr noundef @b2SolverTask, i32 noundef 1, i32 noundef 1, ptr noundef %1327, ptr noundef %1330)
  %1332 = load i32, ptr %89, align 4, !tbaa !30
  %1333 = sext i32 %1332 to i64
  %1334 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %87, i64 0, i64 %1333
  %1335 = getelementptr inbounds %struct.b2WorkerContext, ptr %1334, i32 0, i32 2
  store ptr %1331, ptr %1335, align 8, !tbaa !91
  %1336 = load ptr, ptr %3, align 8, !tbaa !5
  %1337 = getelementptr inbounds %struct.b2World, ptr %1336, i32 0, i32 58
  %1338 = load i32, ptr %1337, align 8, !tbaa !59
  %1339 = add nsw i32 %1338, 1
  store i32 %1339, ptr %1337, align 8, !tbaa !59
  %1340 = load i32, ptr %89, align 4, !tbaa !30
  %1341 = sext i32 %1340 to i64
  %1342 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %87, i64 0, i64 %1341
  %1343 = getelementptr inbounds %struct.b2WorkerContext, ptr %1342, i32 0, i32 2
  %1344 = load ptr, ptr %1343, align 8, !tbaa !91
  %1345 = icmp eq ptr %1344, null
  %1346 = zext i1 %1345 to i64
  %1347 = select i1 %1345, i32 0, i32 1
  %1348 = load ptr, ptr %3, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.b2World, ptr %1348, i32 0, i32 57
  %1350 = load i32, ptr %1349, align 4, !tbaa !34
  %1351 = add nsw i32 %1350, %1347
  store i32 %1351, ptr %1349, align 4, !tbaa !34
  br label %1352

1352:                                             ; preds = %1310
  %1353 = load i32, ptr %89, align 4, !tbaa !30
  %1354 = add nsw i32 %1353, 1
  store i32 %1354, ptr %89, align 4, !tbaa !30
  br label %1305, !llvm.loop !92

1355:                                             ; preds = %1309
  %1356 = load ptr, ptr %64, align 8, !tbaa !5
  %1357 = icmp ne ptr %1356, null
  br i1 %1357, label %1358, label %1370

1358:                                             ; preds = %1355
  %1359 = load ptr, ptr %3, align 8, !tbaa !5
  %1360 = getelementptr inbounds %struct.b2World, ptr %1359, i32 0, i32 52
  %1361 = load ptr, ptr %1360, align 8, !tbaa !32
  %1362 = load ptr, ptr %64, align 8, !tbaa !5
  %1363 = load ptr, ptr %3, align 8, !tbaa !5
  %1364 = getelementptr inbounds %struct.b2World, ptr %1363, i32 0, i32 53
  %1365 = load ptr, ptr %1364, align 8, !tbaa !33
  call void %1361(ptr noundef %1362, ptr noundef %1365)
  %1366 = load ptr, ptr %3, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.b2World, ptr %1366, i32 0, i32 57
  %1368 = load i32, ptr %1367, align 4, !tbaa !34
  %1369 = sub nsw i32 %1368, 1
  store i32 %1369, ptr %1367, align 4, !tbaa !34
  br label %1370

1370:                                             ; preds = %1358, %1355
  %1371 = load ptr, ptr %3, align 8, !tbaa !5
  %1372 = getelementptr inbounds %struct.b2World, ptr %1371, i32 0, i32 32
  store i32 -1, ptr %1372, align 8, !tbaa !57
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #8
  store i32 0, ptr %90, align 4, !tbaa !30
  br label %1373

1373:                                             ; preds = %1402, %1370
  %1374 = load i32, ptr %90, align 4, !tbaa !30
  %1375 = load i32, ptr %18, align 4, !tbaa !30
  %1376 = icmp slt i32 %1374, %1375
  br i1 %1376, label %1378, label %1377

1377:                                             ; preds = %1373
  store i32 63, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #8
  br label %1405

1378:                                             ; preds = %1373
  %1379 = load i32, ptr %90, align 4, !tbaa !30
  %1380 = sext i32 %1379 to i64
  %1381 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %87, i64 0, i64 %1380
  %1382 = getelementptr inbounds %struct.b2WorkerContext, ptr %1381, i32 0, i32 2
  %1383 = load ptr, ptr %1382, align 8, !tbaa !91
  %1384 = icmp ne ptr %1383, null
  br i1 %1384, label %1385, label %1401

1385:                                             ; preds = %1378
  %1386 = load ptr, ptr %3, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.b2World, ptr %1386, i32 0, i32 52
  %1388 = load ptr, ptr %1387, align 8, !tbaa !32
  %1389 = load i32, ptr %90, align 4, !tbaa !30
  %1390 = sext i32 %1389 to i64
  %1391 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %87, i64 0, i64 %1390
  %1392 = getelementptr inbounds %struct.b2WorkerContext, ptr %1391, i32 0, i32 2
  %1393 = load ptr, ptr %1392, align 8, !tbaa !91
  %1394 = load ptr, ptr %3, align 8, !tbaa !5
  %1395 = getelementptr inbounds %struct.b2World, ptr %1394, i32 0, i32 53
  %1396 = load ptr, ptr %1395, align 8, !tbaa !33
  call void %1388(ptr noundef %1393, ptr noundef %1396)
  %1397 = load ptr, ptr %3, align 8, !tbaa !5
  %1398 = getelementptr inbounds %struct.b2World, ptr %1397, i32 0, i32 57
  %1399 = load i32, ptr %1398, align 4, !tbaa !34
  %1400 = sub nsw i32 %1399, 1
  store i32 %1400, ptr %1398, align 4, !tbaa !34
  br label %1401

1401:                                             ; preds = %1385, %1378
  br label %1402

1402:                                             ; preds = %1401
  %1403 = load i32, ptr %90, align 4, !tbaa !30
  %1404 = add nsw i32 %1403, 1
  store i32 %1404, ptr %90, align 4, !tbaa !30
  br label %1373, !llvm.loop !93

1405:                                             ; preds = %1377
  %1406 = call float @b2GetMillisecondsAndReset(ptr noundef %88)
  %1407 = load ptr, ptr %3, align 8, !tbaa !5
  %1408 = getelementptr inbounds %struct.b2World, ptr %1407, i32 0, i32 45
  %1409 = getelementptr inbounds %struct.b2Profile, ptr %1408, i32 0, i32 6
  store float %1406, ptr %1409, align 4, !tbaa !94
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #8
  %1410 = call i64 @b2GetTicks()
  store i64 %1410, ptr %91, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #8
  %1411 = load ptr, ptr %6, align 8, !tbaa !5
  %1412 = getelementptr inbounds %struct.b2SolverSet, ptr %1411, i32 0, i32 4
  %1413 = getelementptr inbounds %struct.b2IslandSimArray, ptr %1412, i32 0, i32 1
  %1414 = load i32, ptr %1413, align 8, !tbaa !95
  store i32 %1414, ptr %92, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #8
  store i32 0, ptr %93, align 4, !tbaa !30
  br label %1415

1415:                                             ; preds = %1440, %1405
  %1416 = load i32, ptr %93, align 4, !tbaa !30
  %1417 = load ptr, ptr %3, align 8, !tbaa !5
  %1418 = getelementptr inbounds %struct.b2World, ptr %1417, i32 0, i32 50
  %1419 = load i32, ptr %1418, align 8, !tbaa !48
  %1420 = icmp slt i32 %1416, %1419
  br i1 %1420, label %1422, label %1421

1421:                                             ; preds = %1415
  store i32 66, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #8
  br label %1443

1422:                                             ; preds = %1415
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %1423 = load ptr, ptr %3, align 8, !tbaa !5
  %1424 = getelementptr inbounds %struct.b2World, ptr %1423, i32 0, i32 18
  %1425 = getelementptr inbounds %struct.b2TaskContextArray, ptr %1424, i32 0, i32 0
  %1426 = load ptr, ptr %1425, align 8, !tbaa !96
  %1427 = load i32, ptr %93, align 4, !tbaa !30
  %1428 = sext i32 %1427 to i64
  %1429 = getelementptr inbounds %struct.b2TaskContext, ptr %1426, i64 %1428
  store ptr %1429, ptr %94, align 8, !tbaa !5
  %1430 = load ptr, ptr %94, align 8, !tbaa !5
  %1431 = getelementptr inbounds %struct.b2TaskContext, ptr %1430, i32 0, i32 1
  %1432 = load i32, ptr %7, align 4, !tbaa !30
  call void @b2SetBitCountAndClear(ptr noundef %1431, i32 noundef %1432)
  %1433 = load ptr, ptr %94, align 8, !tbaa !5
  %1434 = getelementptr inbounds %struct.b2TaskContext, ptr %1433, i32 0, i32 2
  %1435 = load i32, ptr %92, align 4, !tbaa !30
  call void @b2SetBitCountAndClear(ptr noundef %1434, i32 noundef %1435)
  %1436 = load ptr, ptr %94, align 8, !tbaa !5
  %1437 = getelementptr inbounds %struct.b2TaskContext, ptr %1436, i32 0, i32 4
  store i32 -1, ptr %1437, align 4, !tbaa !97
  %1438 = load ptr, ptr %94, align 8, !tbaa !5
  %1439 = getelementptr inbounds %struct.b2TaskContext, ptr %1438, i32 0, i32 3
  store float 0.000000e+00, ptr %1439, align 8, !tbaa !99
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  br label %1440

1440:                                             ; preds = %1422
  %1441 = load i32, ptr %93, align 4, !tbaa !30
  %1442 = add nsw i32 %1441, 1
  store i32 %1442, ptr %93, align 4, !tbaa !30
  br label %1415, !llvm.loop !100

1443:                                             ; preds = %1421
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #8
  %1444 = load ptr, ptr %3, align 8, !tbaa !5
  %1445 = getelementptr inbounds %struct.b2World, ptr %1444, i32 0, i32 51
  %1446 = load ptr, ptr %1445, align 8, !tbaa !58
  %1447 = load i32, ptr %7, align 4, !tbaa !30
  %1448 = load ptr, ptr %4, align 8, !tbaa !5
  %1449 = load ptr, ptr %3, align 8, !tbaa !5
  %1450 = getelementptr inbounds %struct.b2World, ptr %1449, i32 0, i32 53
  %1451 = load ptr, ptr %1450, align 8, !tbaa !33
  %1452 = call ptr %1446(ptr noundef @b2FinalizeBodiesTask, i32 noundef %1447, i32 noundef 64, ptr noundef %1448, ptr noundef %1451)
  store ptr %1452, ptr %95, align 8, !tbaa !5
  %1453 = load ptr, ptr %3, align 8, !tbaa !5
  %1454 = getelementptr inbounds %struct.b2World, ptr %1453, i32 0, i32 58
  %1455 = load i32, ptr %1454, align 8, !tbaa !59
  %1456 = add nsw i32 %1455, 1
  store i32 %1456, ptr %1454, align 8, !tbaa !59
  %1457 = load ptr, ptr %95, align 8, !tbaa !5
  %1458 = icmp ne ptr %1457, null
  br i1 %1458, label %1459, label %1467

1459:                                             ; preds = %1443
  %1460 = load ptr, ptr %3, align 8, !tbaa !5
  %1461 = getelementptr inbounds %struct.b2World, ptr %1460, i32 0, i32 52
  %1462 = load ptr, ptr %1461, align 8, !tbaa !32
  %1463 = load ptr, ptr %95, align 8, !tbaa !5
  %1464 = load ptr, ptr %3, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct.b2World, ptr %1464, i32 0, i32 53
  %1466 = load ptr, ptr %1465, align 8, !tbaa !33
  call void %1462(ptr noundef %1463, ptr noundef %1466)
  br label %1467

1467:                                             ; preds = %1459, %1443
  %1468 = load ptr, ptr %3, align 8, !tbaa !5
  %1469 = getelementptr inbounds %struct.b2World, ptr %1468, i32 0, i32 0
  %1470 = load ptr, ptr %63, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1469, ptr noundef %1470)
  %1471 = load ptr, ptr %3, align 8, !tbaa !5
  %1472 = getelementptr inbounds %struct.b2World, ptr %1471, i32 0, i32 0
  %1473 = load ptr, ptr %62, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1472, ptr noundef %1473)
  %1474 = load ptr, ptr %3, align 8, !tbaa !5
  %1475 = getelementptr inbounds %struct.b2World, ptr %1474, i32 0, i32 0
  %1476 = load ptr, ptr %61, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1475, ptr noundef %1476)
  %1477 = load ptr, ptr %3, align 8, !tbaa !5
  %1478 = getelementptr inbounds %struct.b2World, ptr %1477, i32 0, i32 0
  %1479 = load ptr, ptr %60, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1478, ptr noundef %1479)
  %1480 = load ptr, ptr %3, align 8, !tbaa !5
  %1481 = getelementptr inbounds %struct.b2World, ptr %1480, i32 0, i32 0
  %1482 = load ptr, ptr %59, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1481, ptr noundef %1482)
  %1483 = load ptr, ptr %3, align 8, !tbaa !5
  %1484 = getelementptr inbounds %struct.b2World, ptr %1483, i32 0, i32 0
  %1485 = load ptr, ptr %42, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1484, ptr noundef %1485)
  %1486 = load ptr, ptr %3, align 8, !tbaa !5
  %1487 = getelementptr inbounds %struct.b2World, ptr %1486, i32 0, i32 0
  %1488 = load ptr, ptr %40, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1487, ptr noundef %1488)
  %1489 = load ptr, ptr %3, align 8, !tbaa !5
  %1490 = getelementptr inbounds %struct.b2World, ptr %1489, i32 0, i32 0
  %1491 = load ptr, ptr %38, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1490, ptr noundef %1491)
  %1492 = load ptr, ptr %3, align 8, !tbaa !5
  %1493 = getelementptr inbounds %struct.b2World, ptr %1492, i32 0, i32 0
  %1494 = load ptr, ptr %37, align 8, !tbaa !5
  call void @b2FreeArenaItem(ptr noundef %1493, ptr noundef %1494)
  %1495 = load i64, ptr %91, align 8, !tbaa !26
  %1496 = call float @b2GetMilliseconds(i64 noundef %1495)
  %1497 = load ptr, ptr %3, align 8, !tbaa !5
  %1498 = getelementptr inbounds %struct.b2World, ptr %1497, i32 0, i32 45
  %1499 = getelementptr inbounds %struct.b2Profile, ptr %1498, i32 0, i32 16
  store float %1496, ptr %1499, align 4, !tbaa !101
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 1536, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 96, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #8
  %1500 = call i64 @b2GetTicks()
  store i64 %1500, ptr %96, align 8, !tbaa !26
  br label %1501

1501:                                             ; preds = %1467
  %1502 = load ptr, ptr %3, align 8, !tbaa !5
  %1503 = getelementptr inbounds %struct.b2World, ptr %1502, i32 0, i32 26
  %1504 = getelementptr inbounds %struct.b2ContactHitEventArray, ptr %1503, i32 0, i32 1
  %1505 = load i32, ptr %1504, align 8, !tbaa !102
  %1506 = icmp eq i32 %1505, 0
  br i1 %1506, label %1511, label %1507

1507:                                             ; preds = %1501
  %1508 = call i32 @b2InternalAssertFcn(ptr noundef @.str.16, ptr noundef @.str.6, i32 noundef 1751)
  %1509 = icmp ne i32 %1508, 0
  br i1 %1509, label %1510, label %1511

1510:                                             ; preds = %1507
  call void @llvm.trap()
  br label %1511

1511:                                             ; preds = %1510, %1507, %1501
  br label %1512

1512:                                             ; preds = %1511
  br label %1513

1513:                                             ; preds = %1512
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #8
  %1514 = load ptr, ptr %3, align 8, !tbaa !5
  %1515 = getelementptr inbounds %struct.b2World, ptr %1514, i32 0, i32 34
  %1516 = load float, ptr %1515, align 4, !tbaa !103
  store float %1516, ptr %97, align 4, !tbaa !104
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #8
  %1517 = load ptr, ptr %3, align 8, !tbaa !5
  %1518 = getelementptr inbounds %struct.b2World, ptr %1517, i32 0, i32 2
  %1519 = getelementptr inbounds %struct.b2ConstraintGraph, ptr %1518, i32 0, i32 0
  %1520 = getelementptr inbounds [12 x %struct.b2GraphColor], ptr %1519, i64 0, i64 0
  store ptr %1520, ptr %98, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #8
  store i32 0, ptr %99, align 4, !tbaa !30
  br label %1521

1521:                                             ; preds = %1657, %1513
  %1522 = load i32, ptr %99, align 4, !tbaa !30
  %1523 = icmp slt i32 %1522, 12
  br i1 %1523, label %1525, label %1524

1524:                                             ; preds = %1521
  store i32 71, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #8
  br label %1660

1525:                                             ; preds = %1521
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #8
  %1526 = load ptr, ptr %98, align 8, !tbaa !5
  %1527 = load i32, ptr %99, align 4, !tbaa !30
  %1528 = sext i32 %1527 to i64
  %1529 = getelementptr inbounds %struct.b2GraphColor, ptr %1526, i64 %1528
  store ptr %1529, ptr %100, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #8
  %1530 = load ptr, ptr %100, align 8, !tbaa !5
  %1531 = getelementptr inbounds %struct.b2GraphColor, ptr %1530, i32 0, i32 1
  %1532 = getelementptr inbounds %struct.b2ContactSimArray, ptr %1531, i32 0, i32 1
  %1533 = load i32, ptr %1532, align 8, !tbaa !43
  store i32 %1533, ptr %101, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #8
  %1534 = load ptr, ptr %100, align 8, !tbaa !5
  %1535 = getelementptr inbounds %struct.b2GraphColor, ptr %1534, i32 0, i32 1
  %1536 = getelementptr inbounds %struct.b2ContactSimArray, ptr %1535, i32 0, i32 0
  %1537 = load ptr, ptr %1536, align 8, !tbaa !51
  store ptr %1537, ptr %102, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #8
  store i32 0, ptr %103, align 4, !tbaa !30
  br label %1538

1538:                                             ; preds = %1653, %1525
  %1539 = load i32, ptr %103, align 4, !tbaa !30
  %1540 = load i32, ptr %101, align 4, !tbaa !30
  %1541 = icmp slt i32 %1539, %1540
  br i1 %1541, label %1543, label %1542

1542:                                             ; preds = %1538
  store i32 74, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #8
  br label %1656

1543:                                             ; preds = %1538
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #8
  %1544 = load ptr, ptr %102, align 8, !tbaa !5
  %1545 = load i32, ptr %103, align 4, !tbaa !30
  %1546 = sext i32 %1545 to i64
  %1547 = getelementptr inbounds %struct.b2ContactSim, ptr %1544, i64 %1546
  store ptr %1547, ptr %104, align 8, !tbaa !5
  %1548 = load ptr, ptr %104, align 8, !tbaa !5
  %1549 = getelementptr inbounds %struct.b2ContactSim, ptr %1548, i32 0, i32 14
  %1550 = load i32, ptr %1549, align 4, !tbaa !105
  %1551 = and i32 %1550, 1048576
  %1552 = icmp eq i32 %1551, 0
  br i1 %1552, label %1553, label %1554

1553:                                             ; preds = %1543
  store i32 76, ptr %8, align 4
  br label %1650

1554:                                             ; preds = %1543
  call void @llvm.lifetime.start.p0(i64 36, ptr %105) #8
  call void @llvm.memset.p0.i64(ptr align 4 %105, i8 0, i64 36, i1 false)
  %1555 = load float, ptr %97, align 4, !tbaa !104
  %1556 = getelementptr inbounds %struct.b2ContactHitEvent, ptr %105, i32 0, i32 4
  store float %1555, ptr %1556, align 4, !tbaa !109
  call void @llvm.lifetime.start.p0(i64 1, ptr %106) #8
  store i8 0, ptr %106, align 1, !tbaa !112
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #8
  %1557 = load ptr, ptr %104, align 8, !tbaa !5
  %1558 = getelementptr inbounds %struct.b2ContactSim, ptr %1557, i32 0, i32 9
  %1559 = getelementptr inbounds %struct.b2Manifold, ptr %1558, i32 0, i32 3
  %1560 = load i32, ptr %1559, align 4, !tbaa !113
  store i32 %1560, ptr %107, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #8
  store i32 0, ptr %108, align 4, !tbaa !30
  br label %1561

1561:                                             ; preds = %1594, %1554
  %1562 = load i32, ptr %108, align 4, !tbaa !30
  %1563 = load i32, ptr %107, align 4, !tbaa !30
  %1564 = icmp slt i32 %1562, %1563
  br i1 %1564, label %1566, label %1565

1565:                                             ; preds = %1561
  store i32 77, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #8
  br label %1597

1566:                                             ; preds = %1561
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #8
  %1567 = load ptr, ptr %104, align 8, !tbaa !5
  %1568 = getelementptr inbounds %struct.b2ContactSim, ptr %1567, i32 0, i32 9
  %1569 = getelementptr inbounds %struct.b2Manifold, ptr %1568, i32 0, i32 2
  %1570 = getelementptr inbounds [2 x %struct.b2ManifoldPoint], ptr %1569, i64 0, i64 0
  %1571 = load i32, ptr %108, align 4, !tbaa !30
  %1572 = sext i32 %1571 to i64
  %1573 = getelementptr inbounds %struct.b2ManifoldPoint, ptr %1570, i64 %1572
  store ptr %1573, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %110) #8
  %1574 = load ptr, ptr %109, align 8, !tbaa !5
  %1575 = getelementptr inbounds %struct.b2ManifoldPoint, ptr %1574, i32 0, i32 7
  %1576 = load float, ptr %1575, align 4, !tbaa !114
  %1577 = fneg float %1576
  store float %1577, ptr %110, align 4, !tbaa !104
  %1578 = load float, ptr %110, align 4, !tbaa !104
  %1579 = getelementptr inbounds %struct.b2ContactHitEvent, ptr %105, i32 0, i32 4
  %1580 = load float, ptr %1579, align 4, !tbaa !109
  %1581 = fcmp ogt float %1578, %1580
  br i1 %1581, label %1582, label %1593

1582:                                             ; preds = %1566
  %1583 = load ptr, ptr %109, align 8, !tbaa !5
  %1584 = getelementptr inbounds %struct.b2ManifoldPoint, ptr %1583, i32 0, i32 6
  %1585 = load float, ptr %1584, align 4, !tbaa !116
  %1586 = fcmp ogt float %1585, 0.000000e+00
  br i1 %1586, label %1587, label %1593

1587:                                             ; preds = %1582
  %1588 = load float, ptr %110, align 4, !tbaa !104
  %1589 = getelementptr inbounds %struct.b2ContactHitEvent, ptr %105, i32 0, i32 4
  store float %1588, ptr %1589, align 4, !tbaa !109
  %1590 = getelementptr inbounds %struct.b2ContactHitEvent, ptr %105, i32 0, i32 2
  %1591 = load ptr, ptr %109, align 8, !tbaa !5
  %1592 = getelementptr inbounds %struct.b2ManifoldPoint, ptr %1591, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1590, ptr align 4 %1592, i64 8, i1 false), !tbaa.struct !117
  store i8 1, ptr %106, align 1, !tbaa !112
  br label %1593

1593:                                             ; preds = %1587, %1582, %1566
  call void @llvm.lifetime.end.p0(i64 4, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #8
  br label %1594

1594:                                             ; preds = %1593
  %1595 = load i32, ptr %108, align 4, !tbaa !30
  %1596 = add nsw i32 %1595, 1
  store i32 %1596, ptr %108, align 4, !tbaa !30
  br label %1561, !llvm.loop !118

1597:                                             ; preds = %1565
  %1598 = load i8, ptr %106, align 1, !tbaa !112, !range !119, !noundef !120
  %1599 = trunc i8 %1598 to i1
  %1600 = zext i1 %1599 to i32
  %1601 = icmp eq i32 %1600, 1
  br i1 %1601, label %1602, label %1649

1602:                                             ; preds = %1597
  %1603 = getelementptr inbounds %struct.b2ContactHitEvent, ptr %105, i32 0, i32 3
  %1604 = load ptr, ptr %104, align 8, !tbaa !5
  %1605 = getelementptr inbounds %struct.b2ContactSim, ptr %1604, i32 0, i32 9
  %1606 = getelementptr inbounds %struct.b2Manifold, ptr %1605, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1603, ptr align 4 %1606, i64 8, i1 false), !tbaa.struct !117
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #8
  %1607 = load ptr, ptr %3, align 8, !tbaa !5
  %1608 = getelementptr inbounds %struct.b2World, ptr %1607, i32 0, i32 15
  %1609 = load ptr, ptr %104, align 8, !tbaa !5
  %1610 = getelementptr inbounds %struct.b2ContactSim, ptr %1609, i32 0, i32 3
  %1611 = load i32, ptr %1610, align 4, !tbaa !121
  %1612 = call ptr @b2ShapeArray_Get(ptr noundef %1608, i32 noundef %1611)
  store ptr %1612, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #8
  %1613 = load ptr, ptr %3, align 8, !tbaa !5
  %1614 = getelementptr inbounds %struct.b2World, ptr %1613, i32 0, i32 15
  %1615 = load ptr, ptr %104, align 8, !tbaa !5
  %1616 = getelementptr inbounds %struct.b2ContactSim, ptr %1615, i32 0, i32 4
  %1617 = load i32, ptr %1616, align 4, !tbaa !122
  %1618 = call ptr @b2ShapeArray_Get(ptr noundef %1614, i32 noundef %1617)
  store ptr %1618, ptr %112, align 8, !tbaa !5
  %1619 = getelementptr inbounds %struct.b2ContactHitEvent, ptr %105, i32 0, i32 0
  %1620 = getelementptr inbounds %struct.b2ShapeId, ptr %113, i32 0, i32 0
  %1621 = load ptr, ptr %111, align 8, !tbaa !5
  %1622 = getelementptr inbounds %struct.b2Shape, ptr %1621, i32 0, i32 0
  %1623 = load i32, ptr %1622, align 8, !tbaa !123
  %1624 = add nsw i32 %1623, 1
  store i32 %1624, ptr %1620, align 4, !tbaa !127
  %1625 = getelementptr inbounds %struct.b2ShapeId, ptr %113, i32 0, i32 1
  %1626 = load ptr, ptr %3, align 8, !tbaa !5
  %1627 = getelementptr inbounds %struct.b2World, ptr %1626, i32 0, i32 59
  %1628 = load i16, ptr %1627, align 4, !tbaa !128
  store i16 %1628, ptr %1625, align 4, !tbaa !129
  %1629 = getelementptr inbounds %struct.b2ShapeId, ptr %113, i32 0, i32 2
  %1630 = load ptr, ptr %111, align 8, !tbaa !5
  %1631 = getelementptr inbounds %struct.b2Shape, ptr %1630, i32 0, i32 20
  %1632 = load i16, ptr %1631, align 4, !tbaa !130
  store i16 %1632, ptr %1629, align 2, !tbaa !131
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1619, ptr align 4 %113, i64 8, i1 false), !tbaa.struct !132
  %1633 = getelementptr inbounds %struct.b2ContactHitEvent, ptr %105, i32 0, i32 1
  %1634 = getelementptr inbounds %struct.b2ShapeId, ptr %114, i32 0, i32 0
  %1635 = load ptr, ptr %112, align 8, !tbaa !5
  %1636 = getelementptr inbounds %struct.b2Shape, ptr %1635, i32 0, i32 0
  %1637 = load i32, ptr %1636, align 8, !tbaa !123
  %1638 = add nsw i32 %1637, 1
  store i32 %1638, ptr %1634, align 4, !tbaa !127
  %1639 = getelementptr inbounds %struct.b2ShapeId, ptr %114, i32 0, i32 1
  %1640 = load ptr, ptr %3, align 8, !tbaa !5
  %1641 = getelementptr inbounds %struct.b2World, ptr %1640, i32 0, i32 59
  %1642 = load i16, ptr %1641, align 4, !tbaa !128
  store i16 %1642, ptr %1639, align 4, !tbaa !129
  %1643 = getelementptr inbounds %struct.b2ShapeId, ptr %114, i32 0, i32 2
  %1644 = load ptr, ptr %112, align 8, !tbaa !5
  %1645 = getelementptr inbounds %struct.b2Shape, ptr %1644, i32 0, i32 20
  %1646 = load i16, ptr %1645, align 4, !tbaa !130
  store i16 %1646, ptr %1643, align 2, !tbaa !131
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1633, ptr align 4 %114, i64 8, i1 false), !tbaa.struct !132
  %1647 = load ptr, ptr %3, align 8, !tbaa !5
  %1648 = getelementptr inbounds %struct.b2World, ptr %1647, i32 0, i32 26
  call void @b2ContactHitEventArray_Push(ptr noundef %1648, ptr noundef byval(%struct.b2ContactHitEvent) align 8 %105)
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  br label %1649

1649:                                             ; preds = %1602, %1597
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %106) #8
  call void @llvm.lifetime.end.p0(i64 36, ptr %105) #8
  store i32 0, ptr %8, align 4
  br label %1650

1650:                                             ; preds = %1649, %1553
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #8
  %1651 = load i32, ptr %8, align 4
  switch i32 %1651, label %2198 [
    i32 0, label %1652
    i32 76, label %1653
  ]

1652:                                             ; preds = %1650
  br label %1653

1653:                                             ; preds = %1652, %1650
  %1654 = load i32, ptr %103, align 4, !tbaa !30
  %1655 = add nsw i32 %1654, 1
  store i32 %1655, ptr %103, align 4, !tbaa !30
  br label %1538, !llvm.loop !134

1656:                                             ; preds = %1542
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #8
  br label %1657

1657:                                             ; preds = %1656
  %1658 = load i32, ptr %99, align 4, !tbaa !30
  %1659 = add nsw i32 %1658, 1
  store i32 %1659, ptr %99, align 4, !tbaa !30
  br label %1521, !llvm.loop !135

1660:                                             ; preds = %1524
  %1661 = load i64, ptr %96, align 8, !tbaa !26
  %1662 = call float @b2GetMilliseconds(i64 noundef %1661)
  %1663 = load ptr, ptr %3, align 8, !tbaa !5
  %1664 = getelementptr inbounds %struct.b2World, ptr %1663, i32 0, i32 45
  %1665 = getelementptr inbounds %struct.b2Profile, ptr %1664, i32 0, i32 17
  store float %1662, ptr %1665, align 4, !tbaa !136
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #8
  %1666 = call i64 @b2GetTicks()
  store i64 %1666, ptr %115, align 8, !tbaa !26
  %1667 = load ptr, ptr %3, align 8, !tbaa !5
  %1668 = getelementptr inbounds %struct.b2World, ptr %1667, i32 0, i32 54
  %1669 = load ptr, ptr %1668, align 8, !tbaa !31
  %1670 = icmp ne ptr %1669, null
  br i1 %1670, label %1671, label %1687

1671:                                             ; preds = %1660
  %1672 = load ptr, ptr %3, align 8, !tbaa !5
  %1673 = getelementptr inbounds %struct.b2World, ptr %1672, i32 0, i32 52
  %1674 = load ptr, ptr %1673, align 8, !tbaa !32
  %1675 = load ptr, ptr %3, align 8, !tbaa !5
  %1676 = getelementptr inbounds %struct.b2World, ptr %1675, i32 0, i32 54
  %1677 = load ptr, ptr %1676, align 8, !tbaa !31
  %1678 = load ptr, ptr %3, align 8, !tbaa !5
  %1679 = getelementptr inbounds %struct.b2World, ptr %1678, i32 0, i32 53
  %1680 = load ptr, ptr %1679, align 8, !tbaa !33
  call void %1674(ptr noundef %1677, ptr noundef %1680)
  %1681 = load ptr, ptr %3, align 8, !tbaa !5
  %1682 = getelementptr inbounds %struct.b2World, ptr %1681, i32 0, i32 54
  store ptr null, ptr %1682, align 8, !tbaa !31
  %1683 = load ptr, ptr %3, align 8, !tbaa !5
  %1684 = getelementptr inbounds %struct.b2World, ptr %1683, i32 0, i32 57
  %1685 = load i32, ptr %1684, align 4, !tbaa !34
  %1686 = sub nsw i32 %1685, 1
  store i32 %1686, ptr %1684, align 4, !tbaa !34
  br label %1687

1687:                                             ; preds = %1671, %1660
  %1688 = load ptr, ptr %3, align 8, !tbaa !5
  %1689 = getelementptr inbounds %struct.b2World, ptr %1688, i32 0, i32 1
  call void @b2ValidateNoEnlarged(ptr noundef %1689)
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #8
  %1690 = load ptr, ptr %3, align 8, !tbaa !5
  %1691 = getelementptr inbounds %struct.b2World, ptr %1690, i32 0, i32 18
  %1692 = getelementptr inbounds %struct.b2TaskContextArray, ptr %1691, i32 0, i32 0
  %1693 = load ptr, ptr %1692, align 8, !tbaa !96
  %1694 = getelementptr inbounds %struct.b2TaskContext, ptr %1693, i64 0
  %1695 = getelementptr inbounds %struct.b2TaskContext, ptr %1694, i32 0, i32 1
  store ptr %1695, ptr %116, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %117) #8
  store i32 1, ptr %117, align 4, !tbaa !30
  br label %1696

1696:                                             ; preds = %1713, %1687
  %1697 = load i32, ptr %117, align 4, !tbaa !30
  %1698 = load ptr, ptr %3, align 8, !tbaa !5
  %1699 = getelementptr inbounds %struct.b2World, ptr %1698, i32 0, i32 50
  %1700 = load i32, ptr %1699, align 8, !tbaa !48
  %1701 = icmp slt i32 %1697, %1700
  br i1 %1701, label %1703, label %1702

1702:                                             ; preds = %1696
  store i32 80, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %117) #8
  br label %1716

1703:                                             ; preds = %1696
  %1704 = load ptr, ptr %116, align 8, !tbaa !5
  %1705 = load ptr, ptr %3, align 8, !tbaa !5
  %1706 = getelementptr inbounds %struct.b2World, ptr %1705, i32 0, i32 18
  %1707 = getelementptr inbounds %struct.b2TaskContextArray, ptr %1706, i32 0, i32 0
  %1708 = load ptr, ptr %1707, align 8, !tbaa !96
  %1709 = load i32, ptr %117, align 4, !tbaa !30
  %1710 = sext i32 %1709 to i64
  %1711 = getelementptr inbounds %struct.b2TaskContext, ptr %1708, i64 %1710
  %1712 = getelementptr inbounds %struct.b2TaskContext, ptr %1711, i32 0, i32 1
  call void @b2InPlaceUnion(ptr noundef %1704, ptr noundef %1712)
  br label %1713

1713:                                             ; preds = %1703
  %1714 = load i32, ptr %117, align 4, !tbaa !30
  %1715 = add nsw i32 %1714, 1
  store i32 %1715, ptr %117, align 4, !tbaa !30
  br label %1696, !llvm.loop !137

1716:                                             ; preds = %1702
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #8
  %1717 = load ptr, ptr %3, align 8, !tbaa !5
  %1718 = getelementptr inbounds %struct.b2World, ptr %1717, i32 0, i32 1
  store ptr %1718, ptr %118, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %119) #8
  %1719 = load ptr, ptr %116, align 8, !tbaa !5
  %1720 = getelementptr inbounds %struct.b2BitSet, ptr %1719, i32 0, i32 2
  %1721 = load i32, ptr %1720, align 4, !tbaa !138
  store i32 %1721, ptr %119, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #8
  %1722 = load ptr, ptr %116, align 8, !tbaa !5
  %1723 = getelementptr inbounds %struct.b2BitSet, ptr %1722, i32 0, i32 0
  %1724 = load ptr, ptr %1723, align 8, !tbaa !139
  store ptr %1724, ptr %120, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #8
  %1725 = load ptr, ptr %3, align 8, !tbaa !5
  %1726 = getelementptr inbounds %struct.b2World, ptr %1725, i32 0, i32 4
  %1727 = getelementptr inbounds %struct.b2BodyArray, ptr %1726, i32 0, i32 0
  %1728 = load ptr, ptr %1727, align 8, !tbaa !140
  store ptr %1728, ptr %121, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #8
  %1729 = load ptr, ptr %6, align 8, !tbaa !5
  %1730 = getelementptr inbounds %struct.b2SolverSet, ptr %1729, i32 0, i32 0
  %1731 = getelementptr inbounds %struct.b2BodySimArray, ptr %1730, i32 0, i32 0
  %1732 = load ptr, ptr %1731, align 8, !tbaa !39
  store ptr %1732, ptr %122, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #8
  %1733 = load ptr, ptr %3, align 8, !tbaa !5
  %1734 = getelementptr inbounds %struct.b2World, ptr %1733, i32 0, i32 15
  %1735 = getelementptr inbounds %struct.b2ShapeArray, ptr %1734, i32 0, i32 0
  %1736 = load ptr, ptr %1735, align 8, !tbaa !141
  store ptr %1736, ptr %123, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #8
  store i32 0, ptr %124, align 4, !tbaa !30
  br label %1737

1737:                                             ; preds = %1834, %1716
  %1738 = load i32, ptr %124, align 4, !tbaa !30
  %1739 = load i32, ptr %119, align 4, !tbaa !30
  %1740 = icmp ult i32 %1738, %1739
  br i1 %1740, label %1742, label %1741

1741:                                             ; preds = %1737
  store i32 83, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #8
  br label %1837

1742:                                             ; preds = %1737
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #8
  %1743 = load ptr, ptr %120, align 8, !tbaa !5
  %1744 = load i32, ptr %124, align 4, !tbaa !30
  %1745 = zext i32 %1744 to i64
  %1746 = getelementptr inbounds i64, ptr %1743, i64 %1745
  %1747 = load i64, ptr %1746, align 8, !tbaa !26
  store i64 %1747, ptr %125, align 8, !tbaa !26
  br label %1748

1748:                                             ; preds = %1828, %1742
  %1749 = load i64, ptr %125, align 8, !tbaa !26
  %1750 = icmp ne i64 %1749, 0
  br i1 %1750, label %1751, label %1833

1751:                                             ; preds = %1748
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #8
  %1752 = load i64, ptr %125, align 8, !tbaa !26
  %1753 = call i32 @b2CTZ64(i64 noundef %1752)
  store i32 %1753, ptr %126, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #8
  %1754 = load i32, ptr %124, align 4, !tbaa !30
  %1755 = mul i32 64, %1754
  %1756 = load i32, ptr %126, align 4, !tbaa !30
  %1757 = add i32 %1755, %1756
  store i32 %1757, ptr %127, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #8
  %1758 = load ptr, ptr %122, align 8, !tbaa !5
  %1759 = load i32, ptr %127, align 4, !tbaa !30
  %1760 = zext i32 %1759 to i64
  %1761 = getelementptr inbounds %struct.b2BodySim, ptr %1758, i64 %1760
  store ptr %1761, ptr %128, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #8
  %1762 = load ptr, ptr %121, align 8, !tbaa !5
  %1763 = load ptr, ptr %128, align 8, !tbaa !5
  %1764 = getelementptr inbounds %struct.b2BodySim, ptr %1763, i32 0, i32 14
  %1765 = load i32, ptr %1764, align 4, !tbaa !142
  %1766 = sext i32 %1765 to i64
  %1767 = getelementptr inbounds %struct.b2Body, ptr %1762, i64 %1766
  store ptr %1767, ptr %129, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #8
  %1768 = load ptr, ptr %129, align 8, !tbaa !5
  %1769 = getelementptr inbounds %struct.b2Body, ptr %1768, i32 0, i32 6
  %1770 = load i32, ptr %1769, align 8, !tbaa !146
  store i32 %1770, ptr %130, align 4, !tbaa !30
  %1771 = load ptr, ptr %128, align 8, !tbaa !5
  %1772 = getelementptr inbounds %struct.b2BodySim, ptr %1771, i32 0, i32 16
  %1773 = load i8, ptr %1772, align 1, !tbaa !148, !range !119, !noundef !120
  %1774 = trunc i8 %1773 to i1
  br i1 %1774, label %1775, label %1797

1775:                                             ; preds = %1751
  %1776 = load ptr, ptr %128, align 8, !tbaa !5
  %1777 = getelementptr inbounds %struct.b2BodySim, ptr %1776, i32 0, i32 15
  %1778 = load i8, ptr %1777, align 4, !tbaa !149, !range !119, !noundef !120
  %1779 = trunc i8 %1778 to i1
  br i1 %1779, label %1780, label %1797

1780:                                             ; preds = %1775
  br label %1781

1781:                                             ; preds = %1784, %1780
  %1782 = load i32, ptr %130, align 4, !tbaa !30
  %1783 = icmp ne i32 %1782, -1
  br i1 %1783, label %1784, label %1796

1784:                                             ; preds = %1781
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #8
  %1785 = load ptr, ptr %123, align 8, !tbaa !5
  %1786 = load i32, ptr %130, align 4, !tbaa !30
  %1787 = sext i32 %1786 to i64
  %1788 = getelementptr inbounds %struct.b2Shape, ptr %1785, i64 %1787
  store ptr %1788, ptr %131, align 8, !tbaa !5
  %1789 = load ptr, ptr %118, align 8, !tbaa !5
  %1790 = load ptr, ptr %131, align 8, !tbaa !5
  %1791 = getelementptr inbounds %struct.b2Shape, ptr %1790, i32 0, i32 15
  %1792 = load i32, ptr %1791, align 8, !tbaa !150
  call void @b2BufferMove(ptr noundef %1789, i32 noundef %1792)
  %1793 = load ptr, ptr %131, align 8, !tbaa !5
  %1794 = getelementptr inbounds %struct.b2Shape, ptr %1793, i32 0, i32 3
  %1795 = load i32, ptr %1794, align 4, !tbaa !151
  store i32 %1795, ptr %130, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  br label %1781, !llvm.loop !152

1796:                                             ; preds = %1781
  br label %1828

1797:                                             ; preds = %1775, %1751
  br label %1798

1798:                                             ; preds = %1823, %1797
  %1799 = load i32, ptr %130, align 4, !tbaa !30
  %1800 = icmp ne i32 %1799, -1
  br i1 %1800, label %1801, label %1827

1801:                                             ; preds = %1798
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #8
  %1802 = load ptr, ptr %123, align 8, !tbaa !5
  %1803 = load i32, ptr %130, align 4, !tbaa !30
  %1804 = sext i32 %1803 to i64
  %1805 = getelementptr inbounds %struct.b2Shape, ptr %1802, i64 %1804
  store ptr %1805, ptr %132, align 8, !tbaa !5
  %1806 = load ptr, ptr %132, align 8, !tbaa !5
  %1807 = getelementptr inbounds %struct.b2Shape, ptr %1806, i32 0, i32 25
  %1808 = load i8, ptr %1807, align 2, !tbaa !153, !range !119, !noundef !120
  %1809 = trunc i8 %1808 to i1
  br i1 %1809, label %1810, label %1823

1810:                                             ; preds = %1801
  %1811 = load ptr, ptr %118, align 8, !tbaa !5
  %1812 = load ptr, ptr %132, align 8, !tbaa !5
  %1813 = getelementptr inbounds %struct.b2Shape, ptr %1812, i32 0, i32 15
  %1814 = load i32, ptr %1813, align 8, !tbaa !150
  %1815 = load ptr, ptr %132, align 8, !tbaa !5
  %1816 = getelementptr inbounds %struct.b2Shape, ptr %1815, i32 0, i32 13
  %1817 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %1816, i32 0, i32 0
  %1818 = load <2 x float>, ptr %1817, align 8
  %1819 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %1816, i32 0, i32 1
  %1820 = load <2 x float>, ptr %1819, align 8
  call void @b2BroadPhase_EnlargeProxy(ptr noundef %1811, i32 noundef %1814, <2 x float> %1818, <2 x float> %1820)
  %1821 = load ptr, ptr %132, align 8, !tbaa !5
  %1822 = getelementptr inbounds %struct.b2Shape, ptr %1821, i32 0, i32 25
  store i8 0, ptr %1822, align 2, !tbaa !153
  br label %1823

1823:                                             ; preds = %1810, %1801
  %1824 = load ptr, ptr %132, align 8, !tbaa !5
  %1825 = getelementptr inbounds %struct.b2Shape, ptr %1824, i32 0, i32 3
  %1826 = load i32, ptr %1825, align 4, !tbaa !151
  store i32 %1826, ptr %130, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #8
  br label %1798, !llvm.loop !154

1827:                                             ; preds = %1798
  br label %1828

1828:                                             ; preds = %1827, %1796
  %1829 = load i64, ptr %125, align 8, !tbaa !26
  %1830 = load i64, ptr %125, align 8, !tbaa !26
  %1831 = sub i64 %1830, 1
  %1832 = and i64 %1829, %1831
  store i64 %1832, ptr %125, align 8, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #8
  br label %1748, !llvm.loop !155

1833:                                             ; preds = %1748
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #8
  br label %1834

1834:                                             ; preds = %1833
  %1835 = load i32, ptr %124, align 4, !tbaa !30
  %1836 = add i32 %1835, 1
  store i32 %1836, ptr %124, align 4, !tbaa !30
  br label %1737, !llvm.loop !156

1837:                                             ; preds = %1741
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #8
  %1838 = load ptr, ptr %3, align 8, !tbaa !5
  %1839 = getelementptr inbounds %struct.b2World, ptr %1838, i32 0, i32 1
  call void @b2ValidateBroadphase(ptr noundef %1839)
  %1840 = load i64, ptr %115, align 8, !tbaa !26
  %1841 = call float @b2GetMilliseconds(i64 noundef %1840)
  %1842 = load ptr, ptr %3, align 8, !tbaa !5
  %1843 = getelementptr inbounds %struct.b2World, ptr %1842, i32 0, i32 45
  %1844 = getelementptr inbounds %struct.b2Profile, ptr %1843, i32 0, i32 18
  store float %1841, ptr %1844, align 4, !tbaa !157
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %133) #8
  %1845 = load ptr, ptr %4, align 8, !tbaa !5
  %1846 = getelementptr inbounds %struct.b2StepContext, ptr %1845, i32 0, i32 17
  %1847 = call i32 @b2AtomicLoadInt(ptr noundef %1846)
  store i32 %1847, ptr %133, align 4, !tbaa !30
  %1848 = load i32, ptr %133, align 4, !tbaa !30
  %1849 = icmp sgt i32 %1848, 0
  br i1 %1849, label %1850, label %2027

1850:                                             ; preds = %1837
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #8
  %1851 = call i64 @b2GetTicks()
  store i64 %1851, ptr %134, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %135) #8
  store i32 8, ptr %135, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #8
  %1852 = load ptr, ptr %3, align 8, !tbaa !5
  %1853 = getelementptr inbounds %struct.b2World, ptr %1852, i32 0, i32 51
  %1854 = load ptr, ptr %1853, align 8, !tbaa !58
  %1855 = load i32, ptr %133, align 4, !tbaa !30
  %1856 = load i32, ptr %135, align 4, !tbaa !30
  %1857 = load ptr, ptr %4, align 8, !tbaa !5
  %1858 = load ptr, ptr %3, align 8, !tbaa !5
  %1859 = getelementptr inbounds %struct.b2World, ptr %1858, i32 0, i32 53
  %1860 = load ptr, ptr %1859, align 8, !tbaa !33
  %1861 = call ptr %1854(ptr noundef @b2BulletBodyTask, i32 noundef %1855, i32 noundef %1856, ptr noundef %1857, ptr noundef %1860)
  store ptr %1861, ptr %136, align 8, !tbaa !5
  %1862 = load ptr, ptr %3, align 8, !tbaa !5
  %1863 = getelementptr inbounds %struct.b2World, ptr %1862, i32 0, i32 58
  %1864 = load i32, ptr %1863, align 8, !tbaa !59
  %1865 = add nsw i32 %1864, 1
  store i32 %1865, ptr %1863, align 8, !tbaa !59
  %1866 = load ptr, ptr %136, align 8, !tbaa !5
  %1867 = icmp ne ptr %1866, null
  br i1 %1867, label %1868, label %1876

1868:                                             ; preds = %1850
  %1869 = load ptr, ptr %3, align 8, !tbaa !5
  %1870 = getelementptr inbounds %struct.b2World, ptr %1869, i32 0, i32 52
  %1871 = load ptr, ptr %1870, align 8, !tbaa !32
  %1872 = load ptr, ptr %136, align 8, !tbaa !5
  %1873 = load ptr, ptr %3, align 8, !tbaa !5
  %1874 = getelementptr inbounds %struct.b2World, ptr %1873, i32 0, i32 53
  %1875 = load ptr, ptr %1874, align 8, !tbaa !33
  call void %1871(ptr noundef %1872, ptr noundef %1875)
  br label %1876

1876:                                             ; preds = %1868, %1850
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #8
  %1877 = load ptr, ptr %3, align 8, !tbaa !5
  %1878 = getelementptr inbounds %struct.b2World, ptr %1877, i32 0, i32 1
  store ptr %1878, ptr %137, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #8
  %1879 = load ptr, ptr %137, align 8, !tbaa !5
  %1880 = getelementptr inbounds %struct.b2BroadPhase, ptr %1879, i32 0, i32 0
  %1881 = getelementptr inbounds [3 x %struct.b2DynamicTree], ptr %1880, i64 0, i64 0
  %1882 = getelementptr inbounds %struct.b2DynamicTree, ptr %1881, i64 2
  store ptr %1882, ptr %138, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #8
  %1883 = load ptr, ptr %3, align 8, !tbaa !5
  %1884 = getelementptr inbounds %struct.b2World, ptr %1883, i32 0, i32 4
  %1885 = getelementptr inbounds %struct.b2BodyArray, ptr %1884, i32 0, i32 0
  %1886 = load ptr, ptr %1885, align 8, !tbaa !140
  store ptr %1886, ptr %139, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #8
  %1887 = load ptr, ptr %6, align 8, !tbaa !5
  %1888 = getelementptr inbounds %struct.b2SolverSet, ptr %1887, i32 0, i32 0
  %1889 = getelementptr inbounds %struct.b2BodySimArray, ptr %1888, i32 0, i32 0
  %1890 = load ptr, ptr %1889, align 8, !tbaa !39
  store ptr %1890, ptr %140, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #8
  %1891 = load ptr, ptr %3, align 8, !tbaa !5
  %1892 = getelementptr inbounds %struct.b2World, ptr %1891, i32 0, i32 15
  %1893 = getelementptr inbounds %struct.b2ShapeArray, ptr %1892, i32 0, i32 0
  %1894 = load ptr, ptr %1893, align 8, !tbaa !141
  store ptr %1894, ptr %141, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #8
  %1895 = load ptr, ptr %4, align 8, !tbaa !5
  %1896 = getelementptr inbounds %struct.b2StepContext, ptr %1895, i32 0, i32 16
  %1897 = load ptr, ptr %1896, align 8, !tbaa !35
  store ptr %1897, ptr %142, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %143) #8
  store i32 0, ptr %143, align 4, !tbaa !30
  br label %1898

1898:                                             ; preds = %2018, %1876
  %1899 = load i32, ptr %143, align 4, !tbaa !30
  %1900 = load i32, ptr %133, align 4, !tbaa !30
  %1901 = icmp slt i32 %1899, %1900
  br i1 %1901, label %1903, label %1902

1902:                                             ; preds = %1898
  store i32 92, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #8
  br label %2021

1903:                                             ; preds = %1898
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #8
  %1904 = load ptr, ptr %140, align 8, !tbaa !5
  %1905 = load ptr, ptr %142, align 8, !tbaa !5
  %1906 = load i32, ptr %143, align 4, !tbaa !30
  %1907 = sext i32 %1906 to i64
  %1908 = getelementptr inbounds i32, ptr %1905, i64 %1907
  %1909 = load i32, ptr %1908, align 4, !tbaa !30
  %1910 = sext i32 %1909 to i64
  %1911 = getelementptr inbounds %struct.b2BodySim, ptr %1904, i64 %1910
  store ptr %1911, ptr %144, align 8, !tbaa !5
  %1912 = load ptr, ptr %144, align 8, !tbaa !5
  %1913 = getelementptr inbounds %struct.b2BodySim, ptr %1912, i32 0, i32 19
  %1914 = load i8, ptr %1913, align 4, !tbaa !158, !range !119, !noundef !120
  %1915 = trunc i8 %1914 to i1
  %1916 = zext i1 %1915 to i32
  %1917 = icmp eq i32 %1916, 0
  br i1 %1917, label %1918, label %1919

1918:                                             ; preds = %1903
  store i32 94, ptr %8, align 4
  br label %2015

1919:                                             ; preds = %1903
  %1920 = load ptr, ptr %144, align 8, !tbaa !5
  %1921 = getelementptr inbounds %struct.b2BodySim, ptr %1920, i32 0, i32 19
  store i8 0, ptr %1921, align 4, !tbaa !158
  call void @llvm.lifetime.start.p0(i64 4, ptr %145) #8
  %1922 = load ptr, ptr %144, align 8, !tbaa !5
  %1923 = getelementptr inbounds %struct.b2BodySim, ptr %1922, i32 0, i32 14
  %1924 = load i32, ptr %1923, align 4, !tbaa !142
  store i32 %1924, ptr %145, align 4, !tbaa !30
  br label %1925

1925:                                             ; preds = %1919
  %1926 = load i32, ptr %145, align 4, !tbaa !30
  %1927 = icmp sle i32 0, %1926
  br i1 %1927, label %1928, label %1935

1928:                                             ; preds = %1925
  %1929 = load i32, ptr %145, align 4, !tbaa !30
  %1930 = load ptr, ptr %3, align 8, !tbaa !5
  %1931 = getelementptr inbounds %struct.b2World, ptr %1930, i32 0, i32 4
  %1932 = getelementptr inbounds %struct.b2BodyArray, ptr %1931, i32 0, i32 1
  %1933 = load i32, ptr %1932, align 8, !tbaa !159
  %1934 = icmp slt i32 %1929, %1933
  br i1 %1934, label %1939, label %1935

1935:                                             ; preds = %1928, %1925
  %1936 = call i32 @b2InternalAssertFcn(ptr noundef @.str.17, ptr noundef @.str.6, i32 noundef 1943)
  %1937 = icmp ne i32 %1936, 0
  br i1 %1937, label %1938, label %1939

1938:                                             ; preds = %1935
  call void @llvm.trap()
  br label %1939

1939:                                             ; preds = %1938, %1935, %1928
  br label %1940

1940:                                             ; preds = %1939
  br label %1941

1941:                                             ; preds = %1940
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #8
  %1942 = load ptr, ptr %139, align 8, !tbaa !5
  %1943 = load i32, ptr %145, align 4, !tbaa !30
  %1944 = sext i32 %1943 to i64
  %1945 = getelementptr inbounds %struct.b2Body, ptr %1942, i64 %1944
  store ptr %1945, ptr %146, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %147) #8
  %1946 = load ptr, ptr %146, align 8, !tbaa !5
  %1947 = getelementptr inbounds %struct.b2Body, ptr %1946, i32 0, i32 6
  %1948 = load i32, ptr %1947, align 8, !tbaa !146
  store i32 %1948, ptr %147, align 4, !tbaa !30
  br label %1949

1949:                                             ; preds = %2013, %2011, %1941
  %1950 = load i32, ptr %147, align 4, !tbaa !30
  %1951 = icmp ne i32 %1950, -1
  br i1 %1951, label %1952, label %2014

1952:                                             ; preds = %1949
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #8
  %1953 = load ptr, ptr %141, align 8, !tbaa !5
  %1954 = load i32, ptr %147, align 4, !tbaa !30
  %1955 = sext i32 %1954 to i64
  %1956 = getelementptr inbounds %struct.b2Shape, ptr %1953, i64 %1955
  store ptr %1956, ptr %148, align 8, !tbaa !5
  %1957 = load ptr, ptr %148, align 8, !tbaa !5
  %1958 = getelementptr inbounds %struct.b2Shape, ptr %1957, i32 0, i32 25
  %1959 = load i8, ptr %1958, align 2, !tbaa !153, !range !119, !noundef !120
  %1960 = trunc i8 %1959 to i1
  %1961 = zext i1 %1960 to i32
  %1962 = icmp eq i32 %1961, 0
  br i1 %1962, label %1963, label %1967

1963:                                             ; preds = %1952
  %1964 = load ptr, ptr %148, align 8, !tbaa !5
  %1965 = getelementptr inbounds %struct.b2Shape, ptr %1964, i32 0, i32 3
  %1966 = load i32, ptr %1965, align 4, !tbaa !151
  store i32 %1966, ptr %147, align 4, !tbaa !30
  store i32 97, ptr %8, align 4
  br label %2011, !llvm.loop !160

1967:                                             ; preds = %1952
  %1968 = load ptr, ptr %148, align 8, !tbaa !5
  %1969 = getelementptr inbounds %struct.b2Shape, ptr %1968, i32 0, i32 25
  store i8 0, ptr %1969, align 2, !tbaa !153
  call void @llvm.lifetime.start.p0(i64 4, ptr %149) #8
  %1970 = load ptr, ptr %148, align 8, !tbaa !5
  %1971 = getelementptr inbounds %struct.b2Shape, ptr %1970, i32 0, i32 15
  %1972 = load i32, ptr %1971, align 8, !tbaa !150
  store i32 %1972, ptr %149, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %150) #8
  %1973 = load i32, ptr %149, align 4, !tbaa !30
  %1974 = ashr i32 %1973, 2
  store i32 %1974, ptr %150, align 4, !tbaa !30
  br label %1975

1975:                                             ; preds = %1967
  %1976 = load i32, ptr %149, align 4, !tbaa !30
  %1977 = and i32 %1976, 3
  %1978 = icmp eq i32 %1977, 2
  br i1 %1978, label %1983, label %1979

1979:                                             ; preds = %1975
  %1980 = call i32 @b2InternalAssertFcn(ptr noundef @.str.18, ptr noundef @.str.6, i32 noundef 1961)
  %1981 = icmp ne i32 %1980, 0
  br i1 %1981, label %1982, label %1983

1982:                                             ; preds = %1979
  call void @llvm.trap()
  br label %1983

1983:                                             ; preds = %1982, %1979, %1975
  br label %1984

1984:                                             ; preds = %1983
  br label %1985

1985:                                             ; preds = %1984
  br label %1986

1986:                                             ; preds = %1985
  %1987 = load ptr, ptr %137, align 8, !tbaa !5
  %1988 = getelementptr inbounds %struct.b2BroadPhase, ptr %1987, i32 0, i32 2
  %1989 = load i32, ptr %149, align 4, !tbaa !30
  %1990 = add nsw i32 %1989, 1
  %1991 = sext i32 %1990 to i64
  %1992 = call zeroext i1 @b2ContainsKey(ptr noundef %1988, i64 noundef %1991)
  br i1 %1992, label %1997, label %1993

1993:                                             ; preds = %1986
  %1994 = call i32 @b2InternalAssertFcn(ptr noundef @.str.19, ptr noundef @.str.6, i32 noundef 1964)
  %1995 = icmp ne i32 %1994, 0
  br i1 %1995, label %1996, label %1997

1996:                                             ; preds = %1993
  call void @llvm.trap()
  br label %1997

1997:                                             ; preds = %1996, %1993, %1986
  br label %1998

1998:                                             ; preds = %1997
  br label %1999

1999:                                             ; preds = %1998
  %2000 = load ptr, ptr %138, align 8, !tbaa !5
  %2001 = load i32, ptr %150, align 4, !tbaa !30
  %2002 = load ptr, ptr %148, align 8, !tbaa !5
  %2003 = getelementptr inbounds %struct.b2Shape, ptr %2002, i32 0, i32 13
  %2004 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %2003, i32 0, i32 0
  %2005 = load <2 x float>, ptr %2004, align 8
  %2006 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %2003, i32 0, i32 1
  %2007 = load <2 x float>, ptr %2006, align 8
  call void @b2DynamicTree_EnlargeProxy(ptr noundef %2000, i32 noundef %2001, <2 x float> %2005, <2 x float> %2007)
  %2008 = load ptr, ptr %148, align 8, !tbaa !5
  %2009 = getelementptr inbounds %struct.b2Shape, ptr %2008, i32 0, i32 3
  %2010 = load i32, ptr %2009, align 4, !tbaa !151
  store i32 %2010, ptr %147, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %150) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %149) #8
  store i32 0, ptr %8, align 4
  br label %2011

2011:                                             ; preds = %1999, %1963
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #8
  %2012 = load i32, ptr %8, align 4
  switch i32 %2012, label %2198 [
    i32 0, label %2013
    i32 97, label %1949
  ]

2013:                                             ; preds = %2011
  br label %1949, !llvm.loop !160

2014:                                             ; preds = %1949
  call void @llvm.lifetime.end.p0(i64 4, ptr %147) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #8
  store i32 0, ptr %8, align 4
  br label %2015

2015:                                             ; preds = %2014, %1918
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #8
  %2016 = load i32, ptr %8, align 4
  switch i32 %2016, label %2198 [
    i32 0, label %2017
    i32 94, label %2018
  ]

2017:                                             ; preds = %2015
  br label %2018

2018:                                             ; preds = %2017, %2015
  %2019 = load i32, ptr %143, align 4, !tbaa !30
  %2020 = add nsw i32 %2019, 1
  store i32 %2020, ptr %143, align 4, !tbaa !30
  br label %1898, !llvm.loop !161

2021:                                             ; preds = %1902
  %2022 = load i64, ptr %134, align 8, !tbaa !26
  %2023 = call float @b2GetMilliseconds(i64 noundef %2022)
  %2024 = load ptr, ptr %3, align 8, !tbaa !5
  %2025 = getelementptr inbounds %struct.b2World, ptr %2024, i32 0, i32 45
  %2026 = getelementptr inbounds %struct.b2Profile, ptr %2025, i32 0, i32 19
  store float %2023, ptr %2026, align 4, !tbaa !162
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %135) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #8
  br label %2027

2027:                                             ; preds = %2021, %1837
  %2028 = load ptr, ptr %3, align 8, !tbaa !5
  %2029 = getelementptr inbounds %struct.b2World, ptr %2028, i32 0, i32 0
  %2030 = load ptr, ptr %4, align 8, !tbaa !5
  %2031 = getelementptr inbounds %struct.b2StepContext, ptr %2030, i32 0, i32 16
  %2032 = load ptr, ptr %2031, align 8, !tbaa !35
  call void @b2FreeArenaItem(ptr noundef %2029, ptr noundef %2032)
  %2033 = load ptr, ptr %4, align 8, !tbaa !5
  %2034 = getelementptr inbounds %struct.b2StepContext, ptr %2033, i32 0, i32 16
  store ptr null, ptr %2034, align 8, !tbaa !35
  %2035 = load ptr, ptr %4, align 8, !tbaa !5
  %2036 = getelementptr inbounds %struct.b2StepContext, ptr %2035, i32 0, i32 17
  call void @b2AtomicStoreInt(ptr noundef %2036, i32 noundef 0)
  %2037 = load ptr, ptr %3, align 8, !tbaa !5
  %2038 = getelementptr inbounds %struct.b2World, ptr %2037, i32 0, i32 60
  %2039 = load i8, ptr %2038, align 2, !tbaa !163, !range !119, !noundef !120
  %2040 = trunc i8 %2039 to i1
  %2041 = zext i1 %2040 to i32
  %2042 = icmp eq i32 %2041, 1
  br i1 %2042, label %2043, label %2194

2043:                                             ; preds = %2027
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #8
  %2044 = call i64 @b2GetTicks()
  store i64 %2044, ptr %151, align 8, !tbaa !26
  br label %2045

2045:                                             ; preds = %2043
  %2046 = load ptr, ptr %3, align 8, !tbaa !5
  %2047 = getelementptr inbounds %struct.b2World, ptr %2046, i32 0, i32 32
  %2048 = load i32, ptr %2047, align 8, !tbaa !57
  %2049 = icmp eq i32 %2048, -1
  br i1 %2049, label %2054, label %2050

2050:                                             ; preds = %2045
  %2051 = call i32 @b2InternalAssertFcn(ptr noundef @.str.20, ptr noundef @.str.6, i32 noundef 1990)
  %2052 = icmp ne i32 %2051, 0
  br i1 %2052, label %2053, label %2054

2053:                                             ; preds = %2050
  call void @llvm.trap()
  br label %2054

2054:                                             ; preds = %2053, %2050, %2045
  br label %2055

2055:                                             ; preds = %2054
  br label %2056

2056:                                             ; preds = %2055
  call void @llvm.lifetime.start.p0(i64 4, ptr %152) #8
  store float 0.000000e+00, ptr %152, align 4, !tbaa !104
  call void @llvm.lifetime.start.p0(i64 4, ptr %153) #8
  store i32 0, ptr %153, align 4, !tbaa !30
  br label %2057

2057:                                             ; preds = %2122, %2056
  %2058 = load i32, ptr %153, align 4, !tbaa !30
  %2059 = load ptr, ptr %3, align 8, !tbaa !5
  %2060 = getelementptr inbounds %struct.b2World, ptr %2059, i32 0, i32 50
  %2061 = load i32, ptr %2060, align 8, !tbaa !48
  %2062 = icmp slt i32 %2058, %2061
  br i1 %2062, label %2064, label %2063

2063:                                             ; preds = %2057
  store i32 105, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %153) #8
  br label %2125

2064:                                             ; preds = %2057
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #8
  %2065 = load ptr, ptr %3, align 8, !tbaa !5
  %2066 = getelementptr inbounds %struct.b2World, ptr %2065, i32 0, i32 18
  %2067 = getelementptr inbounds %struct.b2TaskContextArray, ptr %2066, i32 0, i32 0
  %2068 = load ptr, ptr %2067, align 8, !tbaa !96
  %2069 = load i32, ptr %153, align 4, !tbaa !30
  %2070 = sext i32 %2069 to i64
  %2071 = getelementptr inbounds %struct.b2TaskContext, ptr %2068, i64 %2070
  store ptr %2071, ptr %154, align 8, !tbaa !5
  %2072 = load ptr, ptr %154, align 8, !tbaa !5
  %2073 = getelementptr inbounds %struct.b2TaskContext, ptr %2072, i32 0, i32 4
  %2074 = load i32, ptr %2073, align 4, !tbaa !97
  %2075 = icmp ne i32 %2074, -1
  br i1 %2075, label %2076, label %2118

2076:                                             ; preds = %2064
  %2077 = load ptr, ptr %154, align 8, !tbaa !5
  %2078 = getelementptr inbounds %struct.b2TaskContext, ptr %2077, i32 0, i32 3
  %2079 = load float, ptr %2078, align 8, !tbaa !99
  %2080 = load float, ptr %152, align 4, !tbaa !104
  %2081 = fcmp oge float %2079, %2080
  br i1 %2081, label %2082, label %2118

2082:                                             ; preds = %2076
  br label %2083

2083:                                             ; preds = %2082
  %2084 = load ptr, ptr %154, align 8, !tbaa !5
  %2085 = getelementptr inbounds %struct.b2TaskContext, ptr %2084, i32 0, i32 3
  %2086 = load float, ptr %2085, align 8, !tbaa !99
  %2087 = fcmp ogt float %2086, 0.000000e+00
  br i1 %2087, label %2092, label %2088

2088:                                             ; preds = %2083
  %2089 = call i32 @b2InternalAssertFcn(ptr noundef @.str.21, ptr noundef @.str.6, i32 noundef 1997)
  %2090 = icmp ne i32 %2089, 0
  br i1 %2090, label %2091, label %2092

2091:                                             ; preds = %2088
  call void @llvm.trap()
  br label %2092

2092:                                             ; preds = %2091, %2088, %2083
  br label %2093

2093:                                             ; preds = %2092
  br label %2094

2094:                                             ; preds = %2093
  %2095 = load ptr, ptr %154, align 8, !tbaa !5
  %2096 = getelementptr inbounds %struct.b2TaskContext, ptr %2095, i32 0, i32 3
  %2097 = load float, ptr %2096, align 8, !tbaa !99
  %2098 = load float, ptr %152, align 4, !tbaa !104
  %2099 = fcmp oeq float %2097, %2098
  br i1 %2099, label %2100, label %2109

2100:                                             ; preds = %2094
  %2101 = load ptr, ptr %154, align 8, !tbaa !5
  %2102 = getelementptr inbounds %struct.b2TaskContext, ptr %2101, i32 0, i32 4
  %2103 = load i32, ptr %2102, align 4, !tbaa !97
  %2104 = load ptr, ptr %3, align 8, !tbaa !5
  %2105 = getelementptr inbounds %struct.b2World, ptr %2104, i32 0, i32 32
  %2106 = load i32, ptr %2105, align 8, !tbaa !57
  %2107 = icmp slt i32 %2103, %2106
  br i1 %2107, label %2108, label %2109

2108:                                             ; preds = %2100
  store i32 107, ptr %8, align 4
  br label %2119

2109:                                             ; preds = %2100, %2094
  %2110 = load ptr, ptr %154, align 8, !tbaa !5
  %2111 = getelementptr inbounds %struct.b2TaskContext, ptr %2110, i32 0, i32 4
  %2112 = load i32, ptr %2111, align 4, !tbaa !97
  %2113 = load ptr, ptr %3, align 8, !tbaa !5
  %2114 = getelementptr inbounds %struct.b2World, ptr %2113, i32 0, i32 32
  store i32 %2112, ptr %2114, align 8, !tbaa !57
  %2115 = load ptr, ptr %154, align 8, !tbaa !5
  %2116 = getelementptr inbounds %struct.b2TaskContext, ptr %2115, i32 0, i32 3
  %2117 = load float, ptr %2116, align 8, !tbaa !99
  store float %2117, ptr %152, align 4, !tbaa !104
  br label %2118

2118:                                             ; preds = %2109, %2076, %2064
  store i32 0, ptr %8, align 4
  br label %2119

2119:                                             ; preds = %2118, %2108
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #8
  %2120 = load i32, ptr %8, align 4
  switch i32 %2120, label %2198 [
    i32 0, label %2121
    i32 107, label %2122
  ]

2121:                                             ; preds = %2119
  br label %2122

2122:                                             ; preds = %2121, %2119
  %2123 = load i32, ptr %153, align 4, !tbaa !30
  %2124 = add nsw i32 %2123, 1
  store i32 %2124, ptr %153, align 4, !tbaa !30
  br label %2057, !llvm.loop !164

2125:                                             ; preds = %2063
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #8
  %2126 = load ptr, ptr %3, align 8, !tbaa !5
  %2127 = getelementptr inbounds %struct.b2World, ptr %2126, i32 0, i32 18
  %2128 = getelementptr inbounds %struct.b2TaskContextArray, ptr %2127, i32 0, i32 0
  %2129 = load ptr, ptr %2128, align 8, !tbaa !96
  %2130 = getelementptr inbounds %struct.b2TaskContext, ptr %2129, i64 0
  %2131 = getelementptr inbounds %struct.b2TaskContext, ptr %2130, i32 0, i32 2
  store ptr %2131, ptr %155, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #8
  store i32 1, ptr %156, align 4, !tbaa !30
  br label %2132

2132:                                             ; preds = %2149, %2125
  %2133 = load i32, ptr %156, align 4, !tbaa !30
  %2134 = load ptr, ptr %3, align 8, !tbaa !5
  %2135 = getelementptr inbounds %struct.b2World, ptr %2134, i32 0, i32 50
  %2136 = load i32, ptr %2135, align 8, !tbaa !48
  %2137 = icmp slt i32 %2133, %2136
  br i1 %2137, label %2139, label %2138

2138:                                             ; preds = %2132
  store i32 110, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #8
  br label %2152

2139:                                             ; preds = %2132
  %2140 = load ptr, ptr %155, align 8, !tbaa !5
  %2141 = load ptr, ptr %3, align 8, !tbaa !5
  %2142 = getelementptr inbounds %struct.b2World, ptr %2141, i32 0, i32 18
  %2143 = getelementptr inbounds %struct.b2TaskContextArray, ptr %2142, i32 0, i32 0
  %2144 = load ptr, ptr %2143, align 8, !tbaa !96
  %2145 = load i32, ptr %156, align 4, !tbaa !30
  %2146 = sext i32 %2145 to i64
  %2147 = getelementptr inbounds %struct.b2TaskContext, ptr %2144, i64 %2146
  %2148 = getelementptr inbounds %struct.b2TaskContext, ptr %2147, i32 0, i32 2
  call void @b2InPlaceUnion(ptr noundef %2140, ptr noundef %2148)
  br label %2149

2149:                                             ; preds = %2139
  %2150 = load i32, ptr %156, align 4, !tbaa !30
  %2151 = add nsw i32 %2150, 1
  store i32 %2151, ptr %156, align 4, !tbaa !30
  br label %2132, !llvm.loop !165

2152:                                             ; preds = %2138
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #8
  %2153 = load ptr, ptr %6, align 8, !tbaa !5
  %2154 = getelementptr inbounds %struct.b2SolverSet, ptr %2153, i32 0, i32 4
  %2155 = getelementptr inbounds %struct.b2IslandSimArray, ptr %2154, i32 0, i32 0
  %2156 = load ptr, ptr %2155, align 8, !tbaa !166
  store ptr %2156, ptr %157, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %158) #8
  %2157 = load ptr, ptr %6, align 8, !tbaa !5
  %2158 = getelementptr inbounds %struct.b2SolverSet, ptr %2157, i32 0, i32 4
  %2159 = getelementptr inbounds %struct.b2IslandSimArray, ptr %2158, i32 0, i32 1
  %2160 = load i32, ptr %2159, align 8, !tbaa !95
  store i32 %2160, ptr %158, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr %159) #8
  %2161 = load i32, ptr %158, align 4, !tbaa !30
  %2162 = sub nsw i32 %2161, 1
  store i32 %2162, ptr %159, align 4, !tbaa !30
  br label %2163

2163:                                             ; preds = %2184, %2152
  %2164 = load i32, ptr %159, align 4, !tbaa !30
  %2165 = icmp sge i32 %2164, 0
  br i1 %2165, label %2167, label %2166

2166:                                             ; preds = %2163
  store i32 113, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #8
  br label %2187

2167:                                             ; preds = %2163
  %2168 = load ptr, ptr %155, align 8, !tbaa !5
  %2169 = load i32, ptr %159, align 4, !tbaa !30
  %2170 = call zeroext i1 @b2GetBit(ptr noundef %2168, i32 noundef %2169)
  %2171 = zext i1 %2170 to i32
  %2172 = icmp eq i32 %2171, 1
  br i1 %2172, label %2173, label %2174

2173:                                             ; preds = %2167
  br label %2184

2174:                                             ; preds = %2167
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #8
  %2175 = load ptr, ptr %157, align 8, !tbaa !5
  %2176 = load i32, ptr %159, align 4, !tbaa !30
  %2177 = sext i32 %2176 to i64
  %2178 = getelementptr inbounds %struct.b2IslandSim, ptr %2175, i64 %2177
  store ptr %2178, ptr %160, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %161) #8
  %2179 = load ptr, ptr %160, align 8, !tbaa !5
  %2180 = getelementptr inbounds %struct.b2IslandSim, ptr %2179, i32 0, i32 0
  %2181 = load i32, ptr %2180, align 4, !tbaa !167
  store i32 %2181, ptr %161, align 4, !tbaa !30
  %2182 = load ptr, ptr %3, align 8, !tbaa !5
  %2183 = load i32, ptr %161, align 4, !tbaa !30
  call void @b2TrySleepIsland(ptr noundef %2182, i32 noundef %2183)
  call void @llvm.lifetime.end.p0(i64 4, ptr %161) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #8
  br label %2184

2184:                                             ; preds = %2174, %2173
  %2185 = load i32, ptr %159, align 4, !tbaa !30
  %2186 = sub nsw i32 %2185, 1
  store i32 %2186, ptr %159, align 4, !tbaa !30
  br label %2163, !llvm.loop !169

2187:                                             ; preds = %2166
  %2188 = load ptr, ptr %3, align 8, !tbaa !5
  call void @b2ValidateSolverSets(ptr noundef %2188)
  %2189 = load i64, ptr %151, align 8, !tbaa !26
  %2190 = call float @b2GetMilliseconds(i64 noundef %2189)
  %2191 = load ptr, ptr %3, align 8, !tbaa !5
  %2192 = getelementptr inbounds %struct.b2World, ptr %2191, i32 0, i32 45
  %2193 = getelementptr inbounds %struct.b2Profile, ptr %2192, i32 0, i32 20
  store float %2190, ptr %2193, align 4, !tbaa !170
  call void @llvm.lifetime.end.p0(i64 4, ptr %158) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %152) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #8
  br label %2194

2194:                                             ; preds = %2187, %2027
  call void @llvm.lifetime.end.p0(i64 4, ptr %133) #8
  store i32 0, ptr %8, align 4
  br label %2195

2195:                                             ; preds = %2194, %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #8
  %2196 = load i32, ptr %8, align 4
  switch i32 %2196, label %2198 [
    i32 0, label %2197
    i32 1, label %2197
  ]

2197:                                             ; preds = %2195, %2195
  ret void

2198:                                             ; preds = %2195, %2119, %2015, %2011, %1650
  unreachable
}

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

declare i64 @b2GetTicks() #2

declare void @b2MergeAwakeIslands(ptr noundef) #2

declare float @b2GetMilliseconds(i64 noundef) #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @b2SolverSetArray_Get(ptr noundef, i32 noundef) #3

declare void @b2ValidateNoEnlarged(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2AtomicStoreInt(ptr noundef, i32 noundef) #3

declare ptr @b2AllocateArenaItem(ptr noundef, i32 noundef, ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2BodyMoveEventArray_Resize(ptr noundef, i32 noundef) #3

declare i32 @b2GetContactConstraintSIMDByteCount() #2

declare i32 @b2InternalAssertFcn(ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: cold noreturn nounwind memory(inaccessiblemem: write)
declare void @llvm.trap() #4

declare void @b2SplitIslandTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2AtomicStoreU32(ptr noundef, i32 noundef) #3

declare float @b2GetMillisecondsAndReset(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @b2SolverTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #5

declare void @b2SetBitCountAndClear(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @b2FinalizeBodiesTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #0

declare void @b2FreeArenaItem(ptr noundef, ptr noundef) #2

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @b2ShapeArray_Get(ptr noundef, i32 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2ContactHitEventArray_Push(ptr noundef, ptr noundef byval(%struct.b2ContactHitEvent) align 8) #3

declare void @b2InPlaceUnion(ptr noundef, ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @b2CTZ64(i64 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2BufferMove(ptr noundef, i32 noundef) #3

declare void @b2BroadPhase_EnlargeProxy(ptr noundef, i32 noundef, <2 x float>, <2 x float>) #2

declare void @b2ValidateBroadphase(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @b2AtomicLoadInt(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @b2BulletBodyTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #5

declare zeroext i1 @b2ContainsKey(ptr noundef, i64 noundef) #2

declare void @b2DynamicTree_EnlargeProxy(ptr noundef, i32 noundef, <2 x float>, <2 x float>) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @b2GetBit(ptr noundef, i32 noundef) #3

declare void @b2TrySleepIsland(ptr noundef, i32 noundef) #2

declare void @b2ValidateSolverSets(ptr noundef) #2

attributes #0 = { nounwind 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 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 = { cold noreturn nounwind memory(inaccessiblemem: write) }
attributes #5 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { 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/C++ TBAA"}
!9 = !{!10, !20, i64 1536}
!10 = !{!"b2World", !11, i64 0, !14, i64 40, !17, i64 336, !18, i64 1008, !13, i64 1032, !18, i64 1048, !13, i64 1072, !18, i64 1088, !13, i64 1112, !18, i64 1128, !13, i64 1152, !18, i64 1168, !13, i64 1192, !18, i64 1208, !18, i64 1232, !13, i64 1256, !13, i64 1272, !13, i64 1288, !13, i64 1304, !13, i64 1320, !13, i64 1336, !13, i64 1352, !13, i64 1368, !7, i64 1384, !7, i64 1416, !12, i64 1448, !13, i64 1456, !19, i64 1472, !19, i64 1488, !19, i64 1504, !19, i64 1520, !20, i64 1536, !12, i64 1544, !21, i64 1548, !22, i64 1556, !22, i64 1560, !22, i64 1564, !22, i64 1568, !22, i64 1572, !22, i64 1576, !22, i64 1580, !22, i64 1584, !6, i64 1592, !6, i64 1600, !23, i64 1608, !24, i64 1612, !6, i64 1704, !6, i64 1712, !6, i64 1720, !6, i64 1728, !12, i64 1736, !6, i64 1744, !6, i64 1752, !6, i64 1760, !6, i64 1768, !6, i64 1776, !22, i64 1784, !12, i64 1788, !12, i64 1792, !23, i64 1796, !25, i64 1798, !25, i64 1799, !25, i64 1800, !25, i64 1801, !25, i64 1802, !25, i64 1803}
!11 = !{!"b2ArenaAllocator", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !13, i64 24}
!12 = !{!"int", !7, i64 0}
!13 = !{!"", !6, i64 0, !12, i64 8, !12, i64 12}
!14 = !{!"b2BroadPhase", !7, i64 0, !12, i64 216, !15, i64 224, !13, i64 240, !6, i64 256, !6, i64 264, !12, i64 272, !16, i64 276, !15, i64 280}
!15 = !{!"b2HashSet", !6, i64 0, !12, i64 8, !12, i64 12}
!16 = !{!"b2AtomicInt", !12, i64 0}
!17 = !{!"b2ConstraintGraph", !7, i64 0}
!18 = !{!"b2IdPool", !13, i64 0, !12, i64 16}
!19 = !{!"b2BitSet", !6, i64 0, !12, i64 8, !12, i64 12}
!20 = !{!"long", !7, i64 0}
!21 = !{!"b2Vec2", !22, i64 0, !22, i64 4}
!22 = !{!"float", !7, i64 0}
!23 = !{!"short", !7, i64 0}
!24 = !{!"b2Profile", !22, i64 0, !22, i64 4, !22, i64 8, !22, i64 12, !22, i64 16, !22, i64 20, !22, i64 24, !22, i64 28, !22, i64 32, !22, i64 36, !22, i64 40, !22, i64 44, !22, i64 48, !22, i64 52, !22, i64 56, !22, i64 60, !22, i64 64, !22, i64 68, !22, i64 72, !22, i64 76, !22, i64 80, !22, i64 84}
!25 = !{!"_Bool", !7, i64 0}
!26 = !{!20, !20, i64 0}
!27 = !{!10, !22, i64 1628}
!28 = !{!29, !12, i64 8}
!29 = !{!"b2SolverSet", !13, i64 0, !13, i64 16, !13, i64 32, !13, i64 48, !13, i64 64, !12, i64 80}
!30 = !{!12, !12, i64 0}
!31 = !{!10, !6, i64 1768}
!32 = !{!10, !6, i64 1752}
!33 = !{!10, !6, i64 1760}
!34 = !{!10, !12, i64 1788}
!35 = !{!36, !6, i64 112}
!36 = !{!"b2StepContext", !22, i64 0, !22, i64 4, !22, i64 8, !22, i64 12, !12, i64 16, !37, i64 20, !37, i64 32, !37, i64 44, !22, i64 56, !22, i64 60, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !12, i64 104, !6, i64 112, !16, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !12, i64 152, !12, i64 156, !6, i64 160, !12, i64 168, !25, i64 172, !7, i64 173, !38, i64 240, !7, i64 244}
!37 = !{!"b2Softness", !22, i64 0, !22, i64 4, !22, i64 8}
!38 = !{!"b2AtomicU32", !12, i64 0}
!39 = !{!29, !6, i64 0}
!40 = !{!36, !6, i64 88}
!41 = !{!29, !6, i64 16}
!42 = !{!36, !6, i64 80}
!43 = !{!44, !12, i64 24}
!44 = !{!"b2GraphColor", !19, i64 0, !13, i64 16, !13, i64 32, !7, i64 48}
!45 = !{!44, !12, i64 40}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = !{!10, !12, i64 1736}
!49 = distinct !{!49, !47}
!50 = !{!7, !7, i64 0}
!51 = !{!44, !6, i64 16}
!52 = distinct !{!52, !47}
!53 = distinct !{!53, !47}
!54 = !{!44, !6, i64 32}
!55 = distinct !{!55, !47}
!56 = distinct !{!56, !47}
!57 = !{!10, !12, i64 1544}
!58 = !{!10, !6, i64 1744}
!59 = !{!10, !12, i64 1792}
!60 = !{!61, !12, i64 0}
!61 = !{!"b2SolverBlock", !12, i64 0, !23, i64 4, !23, i64 6, !16, i64 8}
!62 = !{!61, !23, i64 4}
!63 = !{!61, !23, i64 6}
!64 = distinct !{!64, !47}
!65 = distinct !{!65, !47}
!66 = distinct !{!66, !47}
!67 = distinct !{!67, !47}
!68 = distinct !{!68, !47}
!69 = distinct !{!69, !47}
!70 = !{!71, !12, i64 0}
!71 = !{!"b2SolverStage", !12, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !16, i64 24}
!72 = !{!71, !6, i64 8}
!73 = !{!71, !12, i64 16}
!74 = !{!71, !12, i64 20}
!75 = distinct !{!75, !47}
!76 = distinct !{!76, !47}
!77 = distinct !{!77, !47}
!78 = distinct !{!78, !47}
!79 = !{!36, !6, i64 72}
!80 = !{!36, !6, i64 128}
!81 = !{!36, !6, i64 136}
!82 = !{!36, !6, i64 144}
!83 = !{!36, !12, i64 152}
!84 = !{!36, !12, i64 156}
!85 = !{!36, !12, i64 168}
!86 = !{!36, !6, i64 160}
!87 = !{!10, !22, i64 1632}
!88 = !{!89, !6, i64 0}
!89 = !{!"b2WorkerContext", !6, i64 0, !12, i64 8, !6, i64 16}
!90 = !{!89, !12, i64 8}
!91 = !{!89, !6, i64 16}
!92 = distinct !{!92, !47}
!93 = distinct !{!93, !47}
!94 = !{!10, !22, i64 1636}
!95 = !{!29, !12, i64 72}
!96 = !{!10, !6, i64 1304}
!97 = !{!98, !12, i64 52}
!98 = !{!"b2TaskContext", !19, i64 0, !19, i64 16, !19, i64 32, !22, i64 48, !12, i64 52}
!99 = !{!98, !22, i64 48}
!100 = distinct !{!100, !47}
!101 = !{!10, !22, i64 1676}
!102 = !{!10, !12, i64 1464}
!103 = !{!10, !22, i64 1556}
!104 = !{!22, !22, i64 0}
!105 = !{!106, !12, i64 164}
!106 = !{!"b2ContactSim", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !22, i64 20, !22, i64 24, !22, i64 28, !22, i64 32, !107, i64 36, !22, i64 148, !22, i64 152, !22, i64 156, !22, i64 160, !12, i64 164, !108, i64 168}
!107 = !{!"b2Manifold", !21, i64 0, !22, i64 8, !7, i64 12, !12, i64 108}
!108 = !{!"b2SimplexCache", !23, i64 0, !7, i64 2, !7, i64 5}
!109 = !{!110, !22, i64 32}
!110 = !{!"b2ContactHitEvent", !111, i64 0, !111, i64 8, !21, i64 16, !21, i64 24, !22, i64 32}
!111 = !{!"b2ShapeId", !12, i64 0, !23, i64 4, !23, i64 6}
!112 = !{!25, !25, i64 0}
!113 = !{!106, !12, i64 144}
!114 = !{!115, !22, i64 40}
!115 = !{!"b2ManifoldPoint", !21, i64 0, !21, i64 8, !21, i64 16, !22, i64 24, !22, i64 28, !22, i64 32, !22, i64 36, !22, i64 40, !23, i64 44, !25, i64 46}
!116 = !{!115, !22, i64 36}
!117 = !{i64 0, i64 4, !104, i64 4, i64 4, !104}
!118 = distinct !{!118, !47}
!119 = !{i8 0, i8 2}
!120 = !{}
!121 = !{!106, !12, i64 12}
!122 = !{!106, !12, i64 16}
!123 = !{!124, !12, i64 0}
!124 = !{!"b2Shape", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !22, i64 24, !22, i64 28, !22, i64 32, !22, i64 36, !22, i64 40, !12, i64 44, !125, i64 48, !125, i64 64, !21, i64 80, !12, i64 88, !126, i64 96, !6, i64 120, !12, i64 128, !7, i64 132, !23, i64 276, !25, i64 278, !25, i64 279, !25, i64 280, !25, i64 281, !25, i64 282}
!125 = !{!"b2AABB", !21, i64 0, !21, i64 8}
!126 = !{!"b2Filter", !20, i64 0, !20, i64 8, !12, i64 16}
!127 = !{!111, !12, i64 0}
!128 = !{!10, !23, i64 1796}
!129 = !{!111, !23, i64 4}
!130 = !{!124, !23, i64 276}
!131 = !{!111, !23, i64 6}
!132 = !{i64 0, i64 4, !30, i64 4, i64 2, !133, i64 6, i64 2, !133}
!133 = !{!23, !23, i64 0}
!134 = distinct !{!134, !47}
!135 = distinct !{!135, !47}
!136 = !{!10, !22, i64 1680}
!137 = distinct !{!137, !47}
!138 = !{!19, !12, i64 12}
!139 = !{!19, !6, i64 0}
!140 = !{!10, !6, i64 1032}
!141 = !{!10, !6, i64 1256}
!142 = !{!143, !12, i64 88}
!143 = !{!"b2BodySim", !144, i64 0, !21, i64 16, !145, i64 24, !21, i64 32, !21, i64 40, !21, i64 48, !22, i64 56, !22, i64 60, !22, i64 64, !22, i64 68, !22, i64 72, !22, i64 76, !22, i64 80, !22, i64 84, !12, i64 88, !25, i64 92, !25, i64 93, !25, i64 94, !25, i64 95, !25, i64 96}
!144 = !{!"b2Transform", !21, i64 0, !145, i64 8}
!145 = !{!"b2Rot", !22, i64 0, !22, i64 4}
!146 = !{!147, !12, i64 56}
!147 = !{!"b2Body", !7, i64 0, !6, i64 32, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !22, i64 88, !22, i64 92, !22, i64 96, !22, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !23, i64 116, !25, i64 118, !25, i64 119, !25, i64 120, !25, i64 121}
!148 = !{!143, !25, i64 93}
!149 = !{!143, !25, i64 92}
!150 = !{!124, !12, i64 88}
!151 = !{!124, !12, i64 12}
!152 = distinct !{!152, !47}
!153 = !{!124, !25, i64 282}
!154 = distinct !{!154, !47}
!155 = distinct !{!155, !47}
!156 = distinct !{!156, !47}
!157 = !{!10, !22, i64 1684}
!158 = !{!143, !25, i64 96}
!159 = !{!10, !12, i64 1040}
!160 = distinct !{!160, !47}
!161 = distinct !{!161, !47}
!162 = !{!10, !22, i64 1688}
!163 = !{!10, !25, i64 1798}
!164 = distinct !{!164, !47}
!165 = distinct !{!165, !47}
!166 = !{!29, !6, i64 64}
!167 = !{!168, !12, i64 0}
!168 = !{!"b2IslandSim", !12, i64 0}
!169 = distinct !{!169, !47}
!170 = !{!10, !22, i64 1692}


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

%struct.b2WorkerContext = type { ptr, i32, ptr }
%struct.b2ContactHitEvent = type { %struct.b2ShapeId, %struct.b2ShapeId, %struct.b2Vec2, %struct.b2Vec2, float }
%struct.b2ShapeId = type { i32, i16, i16 }
%struct.b2Vec2 = type { float, float }
%struct.b2GraphColor = type { %struct.b2BitSet, %struct.b2ContactSimArray, %struct.b2JointSimArray, %union.anon }
%struct.b2BitSet = type { ptr, i32, i32 }
%struct.b2ContactSimArray = type { ptr, i32, i32 }
%struct.b2JointSimArray = type { ptr, i32, i32 }
%union.anon = type { ptr }
%struct.b2ContactSim = type { i32, i32, i32, i32, i32, float, float, float, float, %struct.b2Manifold, float, float, float, float, i32, %struct.b2SimplexCache }
%struct.b2Manifold = type { %struct.b2Vec2, float, [2 x %struct.b2ManifoldPoint], i32 }
%struct.b2ManifoldPoint = type { %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, float, i16, i8 }
%struct.b2SimplexCache = type { i16, [3 x i8], [3 x i8] }
%struct.b2JointSim = type { i32, i32, i32, i32, %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, %union.anon.0 }
%union.anon.0 = type { %struct.b2PrismaticJoint }
%struct.b2PrismaticJoint = type { %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, float, float, float, float, float, float, float, i32, i32, %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, float, float, %struct.b2Softness, i8, i8, i8 }
%struct.b2Softness = type { float, float, float }
%struct.b2SolverBlock = type { i32, i16, i16, %struct.b2AtomicInt }
%struct.b2AtomicInt = type { i32 }
%struct.b2TaskContext = type { %struct.b2BitSet, %struct.b2BitSet, %struct.b2BitSet, float, i32 }
%struct.b2BodySim = type { %struct.b2Transform, %struct.b2Vec2, %struct.b2Rot, %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, float, float, float, float, float, float, float, float, i32, i8, i8, i8, i8, i8 }
%struct.b2Transform = type { %struct.b2Vec2, %struct.b2Rot }
%struct.b2Rot = type { float, float }
%struct.b2Body = type { [32 x i8], ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, i32, i32, i32, i16, i8, i8, i8, i8 }
%struct.b2Shape = type { i32, i32, i32, i32, i32, i32, float, float, float, float, float, i32, %struct.b2AABB, %struct.b2AABB, %struct.b2Vec2, i32, %struct.b2Filter, ptr, i32, %union.anon.1, i16, i8, i8, i8, i8, i8 }
%struct.b2AABB = type { %struct.b2Vec2, %struct.b2Vec2 }
%struct.b2Filter = type { i64, i64, i32 }
%union.anon.1 = type { %struct.b2Polygon }
%struct.b2Polygon = type { [8 x %struct.b2Vec2], [8 x %struct.b2Vec2], %struct.b2Vec2, float, i32 }
%struct.b2IslandSim = type { i32 }

@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [35 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @b2Solve(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca i64, align 8
  %4 = alloca [12 x i32], align 16
  %5 = alloca [12 x i32], align 16
  %6 = alloca [12 x i32], align 16
  %7 = alloca [12 x i32], align 16
  %8 = alloca [12 x i32], align 16
  %9 = alloca [12 x i32], align 16
  %10 = alloca [12 x i32], align 16
  %11 = alloca [12 x ptr], align 16
  %12 = alloca [64 x %struct.b2WorkerContext], align 16
  %13 = alloca i64, align 8
  %14 = alloca %struct.b2ContactHitEvent, align 8
  %15 = getelementptr inbounds i8, ptr %0, i64 1536
  %16 = load i64, ptr %15, align 8, !tbaa !5
  %17 = add i64 %16, 1
  store i64 %17, ptr %15, align 8, !tbaa !5
  %18 = tail call i64 @b2GetTicks() #7
  tail call void @b2MergeAwakeIslands(ptr noundef %0) #7
  %19 = tail call float @b2GetMilliseconds(i64 noundef %18) #7
  %20 = getelementptr inbounds i8, ptr %0, i64 1628
  store float %19, ptr %20, align 4, !tbaa !25
  %21 = getelementptr inbounds i8, ptr %0, i64 1072
  %22 = tail call ptr @b2SolverSetArray_Get(ptr noundef nonnull %21, i32 noundef 2)
  %23 = getelementptr inbounds i8, ptr %22, i64 8
  %24 = load i32, ptr %23, align 8, !tbaa !26
  %25 = icmp eq i32 %24, 0
  br i1 %25, label %26, label %39

26:                                               ; preds = %2
  %27 = getelementptr inbounds i8, ptr %0, i64 1768
  %28 = load ptr, ptr %27, align 8, !tbaa !28
  %.not785 = icmp eq ptr %28, null
  br i1 %.not785, label %37, label %29

29:                                               ; preds = %26
  %30 = getelementptr inbounds i8, ptr %0, i64 1752
  %31 = load ptr, ptr %30, align 8, !tbaa !29
  %32 = getelementptr inbounds i8, ptr %0, i64 1760
  %33 = load ptr, ptr %32, align 8, !tbaa !30
  tail call void %31(ptr noundef nonnull %28, ptr noundef %33) #7
  store ptr null, ptr %27, align 8, !tbaa !28
  %34 = getelementptr inbounds i8, ptr %0, i64 1788
  %35 = load i32, ptr %34, align 4, !tbaa !31
  %36 = add nsw i32 %35, -1
  store i32 %36, ptr %34, align 4, !tbaa !31
  br label %37

37:                                               ; preds = %29, %26
  %38 = getelementptr inbounds i8, ptr %0, i64 40
  tail call void @b2ValidateNoEnlarged(ptr noundef nonnull %38) #7
  br label %855

39:                                               ; preds = %2
  %40 = getelementptr inbounds i8, ptr %1, i64 120
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %40, i32 noundef 0)
  %41 = shl i32 %24, 2
  %42 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %41, ptr noundef nonnull @.str) #7
  %43 = getelementptr inbounds i8, ptr %1, i64 112
  store ptr %42, ptr %43, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #7
  %44 = tail call i64 @b2GetTicks() #7
  store i64 %44, ptr %3, align 8, !tbaa !36
  %45 = getelementptr inbounds i8, ptr %0, i64 336
  %46 = load ptr, ptr %22, align 8, !tbaa !37
  %47 = getelementptr inbounds i8, ptr %1, i64 88
  store ptr %46, ptr %47, align 8, !tbaa !38
  %48 = getelementptr inbounds i8, ptr %22, i64 16
  %49 = load ptr, ptr %48, align 8, !tbaa !39
  %50 = getelementptr inbounds i8, ptr %1, i64 80
  store ptr %49, ptr %50, align 8, !tbaa !40
  %51 = getelementptr inbounds i8, ptr %0, i64 376
  %52 = load i32, ptr %51, align 8, !tbaa !41
  %53 = getelementptr inbounds i8, ptr %0, i64 432
  %54 = load i32, ptr %53, align 8, !tbaa !41
  %55 = add nsw i32 %54, %52
  %56 = getelementptr inbounds i8, ptr %0, i64 488
  %57 = load i32, ptr %56, align 8, !tbaa !41
  %58 = add nsw i32 %57, %55
  %59 = getelementptr inbounds i8, ptr %0, i64 544
  %60 = load i32, ptr %59, align 8, !tbaa !41
  %61 = add nsw i32 %60, %58
  %62 = getelementptr inbounds i8, ptr %0, i64 600
  %63 = load i32, ptr %62, align 8, !tbaa !41
  %64 = add nsw i32 %63, %61
  %65 = getelementptr inbounds i8, ptr %0, i64 656
  %66 = load i32, ptr %65, align 8, !tbaa !41
  %67 = add nsw i32 %66, %64
  %68 = getelementptr inbounds i8, ptr %0, i64 712
  %69 = load i32, ptr %68, align 8, !tbaa !41
  %70 = add nsw i32 %69, %67
  %71 = getelementptr inbounds i8, ptr %0, i64 768
  %72 = load i32, ptr %71, align 8, !tbaa !41
  %73 = add nsw i32 %72, %70
  %74 = getelementptr inbounds i8, ptr %0, i64 824
  %75 = load i32, ptr %74, align 8, !tbaa !41
  %76 = add nsw i32 %75, %73
  %77 = getelementptr inbounds i8, ptr %0, i64 880
  %78 = load i32, ptr %77, align 8, !tbaa !41
  %79 = add nsw i32 %78, %76
  %80 = getelementptr inbounds i8, ptr %0, i64 936
  %81 = load i32, ptr %80, align 8, !tbaa !41
  %82 = add nsw i32 %81, %79
  %83 = getelementptr inbounds i8, ptr %0, i64 1336
  tail call void @b2BodyMoveEventArray_Resize(ptr noundef nonnull %83, i32 noundef %24)
  %84 = getelementptr inbounds i8, ptr %0, i64 1736
  %85 = load i32, ptr %84, align 8, !tbaa !43
  %86 = shl nsw i32 %85, 2
  %87 = shl nsw i32 %85, 7
  %88 = icmp sgt i32 %24, %87
  br i1 %88, label %89, label %91

89:                                               ; preds = %39
  %90 = sdiv i32 %24, %86
  br label %95

91:                                               ; preds = %39
  %92 = add nsw i32 %24, -1
  %93 = ashr i32 %92, 5
  %94 = add nsw i32 %93, 1
  br label %95

95:                                               ; preds = %91, %89
  %.0690 = phi i32 [ %86, %89 ], [ %94, %91 ]
  %.0689 = phi i32 [ %90, %89 ], [ 32, %91 ]
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %10) #7
  %96 = shl nsw i32 %85, 4
  br label %111

97:                                               ; preds = %160
  %98 = shl i32 %.1696, 5
  %99 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %98, ptr noundef nonnull @.str.1) #7
  %100 = shl i32 %82, 3
  %101 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %100, ptr noundef nonnull @.str.2) #7
  %102 = tail call i32 @b2GetContactConstraintSIMDByteCount() #7
  %103 = mul nsw i32 %102, %.1696
  %104 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %103, ptr noundef nonnull @.str.3) #7
  %105 = getelementptr inbounds i8, ptr %0, i64 976
  %106 = load i32, ptr %105, align 8, !tbaa !44
  %107 = mul i32 %106, 160
  %108 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %107, ptr noundef nonnull @.str.4) #7
  %109 = getelementptr inbounds i8, ptr %0, i64 1000
  store ptr %108, ptr %109, align 8, !tbaa !45
  %110 = icmp sgt i32 %.1698, 0
  br i1 %110, label %.lr.ph809.preheader, label %._crit_edge810

.lr.ph809.preheader:                              ; preds = %97
  %wide.trip.count950 = zext nneg i32 %.1698 to i64
  br label %.lr.ph809

111:                                              ; preds = %95, %160
  %indvars.iv = phi i64 [ 0, %95 ], [ %indvars.iv.next, %160 ]
  %.0693795 = phi i32 [ 0, %95 ], [ %.1694, %160 ]
  %.0695794 = phi i32 [ 0, %95 ], [ %.1696, %160 ]
  %.0697793 = phi i32 [ 0, %95 ], [ %.1698, %160 ]
  %112 = getelementptr inbounds %struct.b2GraphColor, ptr %45, i64 %indvars.iv
  %113 = getelementptr inbounds i8, ptr %112, i64 24
  %114 = load i32, ptr %113, align 8, !tbaa !44
  %115 = getelementptr inbounds i8, ptr %112, i64 40
  %116 = load i32, ptr %115, align 8, !tbaa !41
  %117 = add nsw i32 %116, %114
  %118 = icmp sgt i32 %117, 0
  br i1 %118, label %119, label %160

119:                                              ; preds = %111
  %120 = sext i32 %.0697793 to i64
  %121 = getelementptr inbounds [12 x i32], ptr %4, i64 0, i64 %120
  %122 = trunc nuw nsw i64 %indvars.iv to i32
  store i32 %122, ptr %121, align 4, !tbaa !46
  %123 = icmp sgt i32 %114, 0
  %124 = add nsw i32 %114, -1
  %125 = ashr i32 %124, 2
  %126 = add nsw i32 %125, 1
  %127 = select i1 %123, i32 %126, i32 0
  %128 = getelementptr inbounds [12 x i32], ptr %5, i64 0, i64 %120
  store i32 %127, ptr %128, align 4, !tbaa !46
  %129 = icmp sgt i32 %127, %96
  %130 = getelementptr inbounds [12 x i32], ptr %6, i64 0, i64 %120
  br i1 %129, label %131, label %133

131:                                              ; preds = %119
  %132 = sdiv i32 %127, %86
  store i32 %132, ptr %130, align 4, !tbaa !46
  br label %140

133:                                              ; preds = %119
  %134 = icmp sgt i32 %127, 0
  br i1 %134, label %135, label %139

135:                                              ; preds = %133
  store i32 4, ptr %130, align 4, !tbaa !46
  %136 = add nsw i32 %127, -1
  %137 = lshr i32 %136, 2
  %138 = add nuw nsw i32 %137, 1
  br label %140

139:                                              ; preds = %133
  store i32 0, ptr %130, align 4, !tbaa !46
  br label %140

140:                                              ; preds = %135, %139, %131
  %.sink = phi i32 [ %138, %135 ], [ 0, %139 ], [ %86, %131 ]
  %141 = getelementptr inbounds [12 x i32], ptr %7, i64 0, i64 %120
  store i32 %.sink, ptr %141, align 4, !tbaa !46
  %142 = getelementptr inbounds [12 x i32], ptr %8, i64 0, i64 %120
  store i32 %116, ptr %142, align 4, !tbaa !46
  %143 = icmp sgt i32 %116, %96
  %144 = getelementptr inbounds [12 x i32], ptr %9, i64 0, i64 %120
  br i1 %143, label %145, label %147

145:                                              ; preds = %140
  %146 = sdiv i32 %116, %86
  store i32 %146, ptr %144, align 4, !tbaa !46
  br label %154

147:                                              ; preds = %140
  %148 = icmp sgt i32 %116, 0
  br i1 %148, label %149, label %153

149:                                              ; preds = %147
  store i32 4, ptr %144, align 4, !tbaa !46
  %150 = add nsw i32 %116, -1
  %151 = lshr i32 %150, 2
  %152 = add nuw nsw i32 %151, 1
  br label %154

153:                                              ; preds = %147
  store i32 0, ptr %144, align 4, !tbaa !46
  br label %154

154:                                              ; preds = %149, %153, %145
  %.sink1074 = phi i32 [ %152, %149 ], [ 0, %153 ], [ %86, %145 ]
  %155 = getelementptr inbounds [12 x i32], ptr %10, i64 0, i64 %120
  store i32 %.sink1074, ptr %155, align 4, !tbaa !46
  %156 = add i32 %.sink, %.0693795
  %157 = add i32 %156, %.sink1074
  %158 = add nsw i32 %127, %.0695794
  %159 = add nsw i32 %.0697793, 1
  br label %160

160:                                              ; preds = %154, %111
  %.1698 = phi i32 [ %159, %154 ], [ %.0697793, %111 ]
  %.1696 = phi i32 [ %158, %154 ], [ %.0695794, %111 ]
  %.1694 = phi i32 [ %157, %154 ], [ %.0693795, %111 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 11
  br i1 %exitcond.not, label %97, label %111, !llvm.loop !47

._crit_edge810:                                   ; preds = %._crit_edge804, %97
  %.0704.lcssa = phi i32 [ 0, %97 ], [ %233, %._crit_edge804 ]
  %.0702.lcssa = phi i32 [ 0, %97 ], [ %.1703, %._crit_edge804 ]
  %161 = icmp eq i32 %.0702.lcssa, %.1696
  br i1 %161, label %245, label %242

.lr.ph809:                                        ; preds = %.lr.ph809.preheader, %._crit_edge804
  %indvars.iv947 = phi i64 [ 0, %.lr.ph809.preheader ], [ %indvars.iv.next948, %._crit_edge804 ]
  %.0702807 = phi i32 [ 0, %.lr.ph809.preheader ], [ %.1703, %._crit_edge804 ]
  %.0704806 = phi i32 [ 0, %.lr.ph809.preheader ], [ %233, %._crit_edge804 ]
  %162 = getelementptr inbounds [12 x i32], ptr %4, i64 0, i64 %indvars.iv947
  %163 = load i32, ptr %162, align 4, !tbaa !46
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds %struct.b2GraphColor, ptr %45, i64 %164
  %166 = getelementptr i8, ptr %165, i64 16
  %167 = getelementptr inbounds i8, ptr %165, i64 24
  %168 = load i32, ptr %167, align 8, !tbaa !44
  %169 = icmp eq i32 %168, 0
  br i1 %169, label %170, label %172

170:                                              ; preds = %.lr.ph809
  %171 = getelementptr inbounds i8, ptr %165, i64 48
  store ptr null, ptr %171, align 8, !tbaa !45
  br label %215

172:                                              ; preds = %.lr.ph809
  %173 = mul nsw i32 %.0702807, %102
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i8, ptr %104, i64 %174
  %176 = getelementptr inbounds i8, ptr %165, i64 48
  store ptr %175, ptr %176, align 8, !tbaa !45
  %177 = icmp sgt i32 %168, 0
  br i1 %177, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %172
  %178 = shl nsw i32 %.0702807, 2
  %179 = sext i32 %178 to i64
  %wide.trip.count = zext nneg i32 %168 to i64
  %invariant.gep = getelementptr ptr, ptr %99, i64 %179
  %min.iters.check1098 = icmp ult i32 %168, 8
  br i1 %min.iters.check1098, label %scalar.ph1097.preheader, label %vector.memcheck1091

scalar.ph1097.preheader:                          ; preds = %middle.block1096, %vector.memcheck1091, %.lr.ph
  %indvars.iv935.ph = phi i64 [ 0, %vector.memcheck1091 ], [ 0, %.lr.ph ], [ %n.vec1101, %middle.block1096 ]
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph1097.prol.loopexit, label %scalar.ph1097.prol

scalar.ph1097.prol:                               ; preds = %scalar.ph1097.preheader, %scalar.ph1097.prol
  %indvars.iv935.prol = phi i64 [ %indvars.iv.next936.prol, %scalar.ph1097.prol ], [ %indvars.iv935.ph, %scalar.ph1097.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph1097.prol ], [ 0, %scalar.ph1097.preheader ]
  %180 = load ptr, ptr %166, align 8, !tbaa !49
  %181 = getelementptr inbounds %struct.b2ContactSim, ptr %180, i64 %indvars.iv935.prol
  %gep.prol = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv935.prol
  store ptr %181, ptr %gep.prol, align 8, !tbaa !50
  %indvars.iv.next936.prol = add nuw nsw i64 %indvars.iv935.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph1097.prol.loopexit, label %scalar.ph1097.prol, !llvm.loop !51

scalar.ph1097.prol.loopexit:                      ; preds = %scalar.ph1097.prol, %scalar.ph1097.preheader
  %indvars.iv935.unr = phi i64 [ %indvars.iv935.ph, %scalar.ph1097.preheader ], [ %indvars.iv.next936.prol, %scalar.ph1097.prol ]
  %182 = sub nsw i64 %indvars.iv935.ph, %wide.trip.count
  %183 = icmp ugt i64 %182, -4
  br i1 %183, label %._crit_edge, label %scalar.ph1097

vector.memcheck1091:                              ; preds = %.lr.ph
  %184 = add nsw i64 %179, %wide.trip.count
  %185 = shl nsw i64 %184, 3
  %scevgep1092 = getelementptr i8, ptr %99, i64 %185
  %bound01093 = icmp ult ptr %invariant.gep, %167
  %bound11094 = icmp ult ptr %166, %scevgep1092
  %found.conflict1095 = and i1 %bound01093, %bound11094
  br i1 %found.conflict1095, label %scalar.ph1097.preheader, label %vector.ph1099

vector.ph1099:                                    ; preds = %vector.memcheck1091
  %n.vec1101 = and i64 %wide.trip.count, 2147483644
  %186 = load ptr, ptr %166, align 8, !tbaa !49, !alias.scope !53
  %broadcast.splatinsert1109 = insertelement <2 x ptr> poison, ptr %186, i64 0
  %broadcast.splat1110 = shufflevector <2 x ptr> %broadcast.splatinsert1109, <2 x ptr> poison, <2 x i32> zeroinitializer
  br label %vector.body1103

vector.body1103:                                  ; preds = %vector.body1103, %vector.ph1099
  %index1104 = phi i64 [ 0, %vector.ph1099 ], [ %index.next1111, %vector.body1103 ]
  %vec.ind1105 = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph1099 ], [ %vec.ind.next1108, %vector.body1103 ]
  %step.add1106 = add <2 x i64> %vec.ind1105, <i64 2, i64 2>
  %187 = getelementptr inbounds %struct.b2ContactSim, <2 x ptr> %broadcast.splat1110, <2 x i64> %vec.ind1105
  %188 = getelementptr inbounds %struct.b2ContactSim, <2 x ptr> %broadcast.splat1110, <2 x i64> %step.add1106
  %189 = getelementptr ptr, ptr %invariant.gep, i64 %index1104
  %190 = getelementptr i8, ptr %189, i64 16
  store <2 x ptr> %187, ptr %189, align 8, !tbaa !50, !alias.scope !56, !noalias !53
  store <2 x ptr> %188, ptr %190, align 8, !tbaa !50, !alias.scope !56, !noalias !53
  %index.next1111 = add nuw i64 %index1104, 4
  %vec.ind.next1108 = add <2 x i64> %vec.ind1105, <i64 4, i64 4>
  %191 = icmp eq i64 %index.next1111, %n.vec1101
  br i1 %191, label %middle.block1096, label %vector.body1103, !llvm.loop !58

middle.block1096:                                 ; preds = %vector.body1103
  %cmp.n1112 = icmp eq i64 %n.vec1101, %wide.trip.count
  br i1 %cmp.n1112, label %._crit_edge, label %scalar.ph1097.preheader

._crit_edge:                                      ; preds = %scalar.ph1097.prol.loopexit, %scalar.ph1097, %middle.block1096, %172
  %192 = add nsw i32 %168, -1
  %193 = ashr i32 %192, 2
  %194 = add nsw i32 %193, 1
  %195 = shl nsw i32 %194, 2
  %196 = icmp slt i32 %168, %195
  br i1 %196, label %.lr.ph799, label %._crit_edge800

.lr.ph799:                                        ; preds = %._crit_edge
  %197 = shl nsw i32 %.0702807, 2
  %198 = add i32 %168, %197
  %199 = sext i32 %198 to i64
  %200 = shl nsw i64 %199, 3
  %scevgep = getelementptr i8, ptr %99, i64 %200
  %201 = or i32 %192, 3
  %202 = sub i32 %201, %168
  %203 = zext i32 %202 to i64
  %204 = shl nuw nsw i64 %203, 3
  %205 = add nuw nsw i64 %204, 8
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(1) %scevgep, i8 0, i64 %205, i1 false), !tbaa !50
  br label %._crit_edge800

scalar.ph1097:                                    ; preds = %scalar.ph1097.prol.loopexit, %scalar.ph1097
  %indvars.iv935 = phi i64 [ %indvars.iv.next936.3, %scalar.ph1097 ], [ %indvars.iv935.unr, %scalar.ph1097.prol.loopexit ]
  %206 = load ptr, ptr %166, align 8, !tbaa !49
  %207 = getelementptr inbounds %struct.b2ContactSim, ptr %206, i64 %indvars.iv935
  %gep = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv935
  store ptr %207, ptr %gep, align 8, !tbaa !50
  %indvars.iv.next936 = add nuw nsw i64 %indvars.iv935, 1
  %208 = load ptr, ptr %166, align 8, !tbaa !49
  %209 = getelementptr inbounds %struct.b2ContactSim, ptr %208, i64 %indvars.iv.next936
  %gep.1 = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv.next936
  store ptr %209, ptr %gep.1, align 8, !tbaa !50
  %indvars.iv.next936.1 = add nuw nsw i64 %indvars.iv935, 2
  %210 = load ptr, ptr %166, align 8, !tbaa !49
  %211 = getelementptr inbounds %struct.b2ContactSim, ptr %210, i64 %indvars.iv.next936.1
  %gep.2 = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv.next936.1
  store ptr %211, ptr %gep.2, align 8, !tbaa !50
  %indvars.iv.next936.2 = add nuw nsw i64 %indvars.iv935, 3
  %212 = load ptr, ptr %166, align 8, !tbaa !49
  %213 = getelementptr inbounds %struct.b2ContactSim, ptr %212, i64 %indvars.iv.next936.2
  %gep.3 = getelementptr ptr, ptr %invariant.gep, i64 %indvars.iv.next936.2
  store ptr %213, ptr %gep.3, align 8, !tbaa !50
  %indvars.iv.next936.3 = add nuw nsw i64 %indvars.iv935, 4
  %exitcond938.not.3 = icmp eq i64 %indvars.iv.next936.3, %wide.trip.count
  br i1 %exitcond938.not.3, label %._crit_edge, label %scalar.ph1097, !llvm.loop !61

._crit_edge800:                                   ; preds = %.lr.ph799, %._crit_edge
  %214 = add nsw i32 %194, %.0702807
  br label %215

215:                                              ; preds = %._crit_edge800, %170
  %.1703 = phi i32 [ %.0702807, %170 ], [ %214, %._crit_edge800 ]
  %216 = getelementptr i8, ptr %165, i64 32
  %217 = getelementptr inbounds i8, ptr %165, i64 40
  %218 = load i32, ptr %217, align 8, !tbaa !41
  %219 = icmp sgt i32 %218, 0
  br i1 %219, label %.lr.ph803.preheader, label %._crit_edge804

.lr.ph803.preheader:                              ; preds = %215
  %220 = sext i32 %.0704806 to i64
  %wide.trip.count945 = zext nneg i32 %218 to i64
  %invariant.gep1071 = getelementptr ptr, ptr %101, i64 %220
  %min.iters.check = icmp ult i32 %218, 8
  br i1 %min.iters.check, label %.lr.ph803.preheader1123, label %vector.memcheck

.lr.ph803.preheader1123:                          ; preds = %middle.block, %vector.memcheck, %.lr.ph803.preheader
  %indvars.iv942.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph803.preheader ], [ %n.vec, %middle.block ]
  %xtraiter1125 = and i64 %wide.trip.count945, 3
  %lcmp.mod1126.not = icmp eq i64 %xtraiter1125, 0
  br i1 %lcmp.mod1126.not, label %.lr.ph803.prol.loopexit, label %.lr.ph803.prol

.lr.ph803.prol:                                   ; preds = %.lr.ph803.preheader1123, %.lr.ph803.prol
  %indvars.iv942.prol = phi i64 [ %indvars.iv.next943.prol, %.lr.ph803.prol ], [ %indvars.iv942.ph, %.lr.ph803.preheader1123 ]
  %prol.iter1127 = phi i64 [ %prol.iter1127.next, %.lr.ph803.prol ], [ 0, %.lr.ph803.preheader1123 ]
  %221 = load ptr, ptr %216, align 8, !tbaa !62
  %222 = getelementptr inbounds %struct.b2JointSim, ptr %221, i64 %indvars.iv942.prol
  %gep1072.prol = getelementptr ptr, ptr %invariant.gep1071, i64 %indvars.iv942.prol
  store ptr %222, ptr %gep1072.prol, align 8, !tbaa !50
  %indvars.iv.next943.prol = add nuw nsw i64 %indvars.iv942.prol, 1
  %prol.iter1127.next = add i64 %prol.iter1127, 1
  %prol.iter1127.cmp.not = icmp eq i64 %prol.iter1127.next, %xtraiter1125
  br i1 %prol.iter1127.cmp.not, label %.lr.ph803.prol.loopexit, label %.lr.ph803.prol, !llvm.loop !63

.lr.ph803.prol.loopexit:                          ; preds = %.lr.ph803.prol, %.lr.ph803.preheader1123
  %indvars.iv942.unr = phi i64 [ %indvars.iv942.ph, %.lr.ph803.preheader1123 ], [ %indvars.iv.next943.prol, %.lr.ph803.prol ]
  %223 = sub nsw i64 %indvars.iv942.ph, %wide.trip.count945
  %224 = icmp ugt i64 %223, -4
  br i1 %224, label %._crit_edge804, label %.lr.ph803

vector.memcheck:                                  ; preds = %.lr.ph803.preheader
  %225 = add nsw i64 %220, %wide.trip.count945
  %226 = shl nsw i64 %225, 3
  %scevgep1087 = getelementptr i8, ptr %101, i64 %226
  %bound0 = icmp ult ptr %invariant.gep1071, %217
  %bound1 = icmp ult ptr %216, %scevgep1087
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph803.preheader1123, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count945, 2147483644
  %227 = load ptr, ptr %216, align 8, !tbaa !62, !alias.scope !64
  %broadcast.splatinsert1089 = insertelement <2 x ptr> poison, ptr %227, i64 0
  %broadcast.splat1090 = shufflevector <2 x ptr> %broadcast.splatinsert1089, <2 x ptr> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <2 x i64> [ <i64 0, i64 1>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <2 x i64> %vec.ind, <i64 2, i64 2>
  %228 = getelementptr inbounds %struct.b2JointSim, <2 x ptr> %broadcast.splat1090, <2 x i64> %vec.ind
  %229 = getelementptr inbounds %struct.b2JointSim, <2 x ptr> %broadcast.splat1090, <2 x i64> %step.add
  %230 = getelementptr ptr, ptr %invariant.gep1071, i64 %index
  %231 = getelementptr i8, ptr %230, i64 16
  store <2 x ptr> %228, ptr %230, align 8, !tbaa !50, !alias.scope !67, !noalias !64
  store <2 x ptr> %229, ptr %231, align 8, !tbaa !50, !alias.scope !67, !noalias !64
  %index.next = add nuw i64 %index, 4
  %vec.ind.next = add <2 x i64> %vec.ind, <i64 4, i64 4>
  %232 = icmp eq i64 %index.next, %n.vec
  br i1 %232, label %middle.block, label %vector.body, !llvm.loop !69

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count945
  br i1 %cmp.n, label %._crit_edge804, label %.lr.ph803.preheader1123

._crit_edge804:                                   ; preds = %.lr.ph803.prol.loopexit, %.lr.ph803, %middle.block, %215
  %233 = add nsw i32 %218, %.0704806
  %indvars.iv.next948 = add nuw nsw i64 %indvars.iv947, 1
  %exitcond951.not = icmp eq i64 %indvars.iv.next948, %wide.trip.count950
  br i1 %exitcond951.not, label %._crit_edge810, label %.lr.ph809, !llvm.loop !70

.lr.ph803:                                        ; preds = %.lr.ph803.prol.loopexit, %.lr.ph803
  %indvars.iv942 = phi i64 [ %indvars.iv.next943.3, %.lr.ph803 ], [ %indvars.iv942.unr, %.lr.ph803.prol.loopexit ]
  %234 = load ptr, ptr %216, align 8, !tbaa !62
  %235 = getelementptr inbounds %struct.b2JointSim, ptr %234, i64 %indvars.iv942
  %gep1072 = getelementptr ptr, ptr %invariant.gep1071, i64 %indvars.iv942
  store ptr %235, ptr %gep1072, align 8, !tbaa !50
  %indvars.iv.next943 = add nuw nsw i64 %indvars.iv942, 1
  %236 = load ptr, ptr %216, align 8, !tbaa !62
  %237 = getelementptr inbounds %struct.b2JointSim, ptr %236, i64 %indvars.iv.next943
  %gep1072.1 = getelementptr ptr, ptr %invariant.gep1071, i64 %indvars.iv.next943
  store ptr %237, ptr %gep1072.1, align 8, !tbaa !50
  %indvars.iv.next943.1 = add nuw nsw i64 %indvars.iv942, 2
  %238 = load ptr, ptr %216, align 8, !tbaa !62
  %239 = getelementptr inbounds %struct.b2JointSim, ptr %238, i64 %indvars.iv.next943.1
  %gep1072.2 = getelementptr ptr, ptr %invariant.gep1071, i64 %indvars.iv.next943.1
  store ptr %239, ptr %gep1072.2, align 8, !tbaa !50
  %indvars.iv.next943.2 = add nuw nsw i64 %indvars.iv942, 3
  %240 = load ptr, ptr %216, align 8, !tbaa !62
  %241 = getelementptr inbounds %struct.b2JointSim, ptr %240, i64 %indvars.iv.next943.2
  %gep1072.3 = getelementptr ptr, ptr %invariant.gep1071, i64 %indvars.iv.next943.2
  store ptr %241, ptr %gep1072.3, align 8, !tbaa !50
  %indvars.iv.next943.3 = add nuw nsw i64 %indvars.iv942, 4
  %exitcond946.not.3 = icmp eq i64 %indvars.iv.next943.3, %wide.trip.count945
  br i1 %exitcond946.not.3, label %._crit_edge804, label %.lr.ph803, !llvm.loop !71

242:                                              ; preds = %._crit_edge810
  %243 = tail call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, i32 noundef 1410) #7
  %.not = icmp eq i32 %243, 0
  br i1 %.not, label %245, label %244

244:                                              ; preds = %242
  tail call void @llvm.trap()
  unreachable

245:                                              ; preds = %._crit_edge810, %242
  %246 = icmp eq i32 %.0704.lcssa, %82
  br i1 %246, label %250, label %247

247:                                              ; preds = %245
  %248 = tail call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.6, i32 noundef 1411) #7
  %.not763 = icmp eq i32 %248, 0
  br i1 %.not763, label %250, label %249

249:                                              ; preds = %247
  tail call void @llvm.trap()
  unreachable

250:                                              ; preds = %247, %245
  %251 = icmp sgt i32 %.1696, 0
  %252 = add nsw i32 %.1696, -1
  %253 = ashr i32 %252, 2
  %254 = add nsw i32 %253, 1
  %255 = select i1 %251, i32 %254, i32 0
  %256 = icmp sgt i32 %.1696, %96
  br i1 %256, label %257, label %259

257:                                              ; preds = %250
  %258 = sdiv i32 %.1696, %86
  br label %259

259:                                              ; preds = %257, %250
  %.0711 = phi i32 [ %86, %257 ], [ %255, %250 ]
  %.0710 = phi i32 [ %258, %257 ], [ 4, %250 ]
  %260 = icmp sgt i32 %82, 0
  %261 = add nsw i32 %82, -1
  %262 = ashr i32 %261, 2
  %263 = add nsw i32 %262, 1
  %264 = select i1 %260, i32 %263, i32 0
  %265 = icmp sgt i32 %82, %96
  br i1 %265, label %266, label %268

266:                                              ; preds = %259
  %267 = sdiv i32 %82, %86
  br label %268

268:                                              ; preds = %266, %259
  %.0713 = phi i32 [ %86, %266 ], [ %264, %259 ]
  %.0712 = phi i32 [ %267, %266 ], [ 4, %259 ]
  %269 = shl i32 %.1698, 2
  %270 = add i32 %269, 5
  %271 = shl i32 %270, 5
  %272 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %271, ptr noundef nonnull @.str.8) #7
  %273 = mul i32 %.0690, 12
  %274 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %273, ptr noundef nonnull @.str.9) #7
  %275 = mul i32 %.0711, 12
  %276 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %275, ptr noundef nonnull @.str.10) #7
  %277 = mul i32 %.0713, 12
  %278 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %277, ptr noundef nonnull @.str.11) #7
  %279 = sext i32 %.1694 to i64
  %280 = mul i32 %.1694, 12
  %281 = tail call ptr @b2AllocateArenaItem(ptr noundef nonnull %0, i32 noundef %280, ptr noundef nonnull @.str.12) #7
  %282 = getelementptr inbounds i8, ptr %0, i64 1544
  %283 = load i32, ptr %282, align 8, !tbaa !72
  %.not765 = icmp eq i32 %283, -1
  br i1 %.not765, label %296, label %284

284:                                              ; preds = %268
  %285 = getelementptr inbounds i8, ptr %0, i64 1744
  %286 = load ptr, ptr %285, align 8, !tbaa !73
  %287 = getelementptr inbounds i8, ptr %0, i64 1760
  %288 = load ptr, ptr %287, align 8, !tbaa !30
  %289 = tail call ptr %286(ptr noundef nonnull @b2SplitIslandTask, i32 noundef 1, i32 noundef 1, ptr noundef nonnull %0, ptr noundef %288) #7
  %290 = icmp ne ptr %289, null
  %291 = zext i1 %290 to i32
  %292 = getelementptr inbounds i8, ptr %0, i64 1788
  %293 = load <2 x i32>, ptr %292, align 4, !tbaa !46
  %294 = insertelement <2 x i32> <i32 poison, i32 1>, i32 %291, i64 0
  %295 = add nsw <2 x i32> %293, %294
  store <2 x i32> %295, ptr %292, align 4, !tbaa !46
  br label %296

296:                                              ; preds = %284, %268
  %.0714 = phi ptr [ %289, %284 ], [ null, %268 ]
  %297 = icmp sgt i32 %.0690, 0
  br i1 %297, label %.lr.ph814, label %._crit_edge815

.lr.ph814:                                        ; preds = %296
  %298 = trunc i32 %.0689 to i16
  %wide.trip.count955 = zext nneg i32 %.0690 to i64
  br label %307

._crit_edge815:                                   ; preds = %307, %296
  %299 = add nsw i32 %.0690, -1
  %300 = mul nsw i32 %299, %.0689
  %301 = sub nsw i32 %24, %300
  %302 = trunc i32 %301 to i16
  %303 = sext i32 %299 to i64
  %304 = getelementptr inbounds %struct.b2SolverBlock, ptr %274, i64 %303, i32 1
  store i16 %302, ptr %304, align 4, !tbaa !74
  %305 = icmp sgt i32 %.0713, 0
  br i1 %305, label %.lr.ph818, label %._crit_edge819.thread

.lr.ph818:                                        ; preds = %._crit_edge815
  %306 = trunc i32 %.0712 to i16
  %wide.trip.count960 = zext nneg i32 %.0713 to i64
  br label %314

307:                                              ; preds = %.lr.ph814, %307
  %indvars.iv952 = phi i64 [ 0, %.lr.ph814 ], [ %indvars.iv.next953, %307 ]
  %308 = getelementptr inbounds %struct.b2SolverBlock, ptr %274, i64 %indvars.iv952
  %309 = trunc i64 %indvars.iv952 to i32
  %310 = mul i32 %.0689, %309
  store i32 %310, ptr %308, align 4, !tbaa !76
  %311 = getelementptr inbounds i8, ptr %308, i64 4
  store i16 %298, ptr %311, align 4, !tbaa !74
  %312 = getelementptr inbounds i8, ptr %308, i64 6
  store i16 0, ptr %312, align 2, !tbaa !77
  %313 = getelementptr inbounds i8, ptr %308, i64 8
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %313, i32 noundef 0)
  %indvars.iv.next953 = add nuw nsw i64 %indvars.iv952, 1
  %exitcond956.not = icmp eq i64 %indvars.iv.next953, %wide.trip.count955
  br i1 %exitcond956.not, label %._crit_edge815, label %307, !llvm.loop !78

._crit_edge819:                                   ; preds = %314
  br i1 %305, label %321, label %._crit_edge819.thread

314:                                              ; preds = %.lr.ph818, %314
  %indvars.iv957 = phi i64 [ 0, %.lr.ph818 ], [ %indvars.iv.next958, %314 ]
  %315 = getelementptr inbounds %struct.b2SolverBlock, ptr %278, i64 %indvars.iv957
  %316 = trunc i64 %indvars.iv957 to i32
  %317 = mul i32 %.0712, %316
  store i32 %317, ptr %315, align 4, !tbaa !76
  %318 = getelementptr inbounds i8, ptr %315, i64 4
  store i16 %306, ptr %318, align 4, !tbaa !74
  %319 = getelementptr inbounds i8, ptr %315, i64 6
  store i16 1, ptr %319, align 2, !tbaa !77
  %320 = getelementptr inbounds i8, ptr %315, i64 8
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %320, i32 noundef 0)
  %indvars.iv.next958 = add nuw nsw i64 %indvars.iv957, 1
  %exitcond961.not = icmp eq i64 %indvars.iv.next958, %wide.trip.count960
  br i1 %exitcond961.not, label %._crit_edge819, label %314, !llvm.loop !79

321:                                              ; preds = %._crit_edge819
  %322 = add nsw i32 %.0713, -1
  %323 = mul nsw i32 %322, %.0712
  %324 = sub nsw i32 %82, %323
  %325 = trunc i32 %324 to i16
  %326 = zext nneg i32 %322 to i64
  %327 = getelementptr inbounds %struct.b2SolverBlock, ptr %278, i64 %326, i32 1
  store i16 %325, ptr %327, align 4, !tbaa !74
  br label %._crit_edge819.thread

._crit_edge819.thread:                            ; preds = %._crit_edge815, %321, %._crit_edge819
  %328 = icmp sgt i32 %.0711, 0
  br i1 %328, label %.lr.ph822, label %._crit_edge823.thread

.lr.ph822:                                        ; preds = %._crit_edge819.thread
  %329 = trunc i32 %.0710 to i16
  %wide.trip.count965 = zext nneg i32 %.0711 to i64
  br label %330

._crit_edge823:                                   ; preds = %330
  br i1 %328, label %337, label %._crit_edge823.thread

330:                                              ; preds = %.lr.ph822, %330
  %indvars.iv962 = phi i64 [ 0, %.lr.ph822 ], [ %indvars.iv.next963, %330 ]
  %331 = getelementptr inbounds %struct.b2SolverBlock, ptr %276, i64 %indvars.iv962
  %332 = trunc i64 %indvars.iv962 to i32
  %333 = mul i32 %.0710, %332
  store i32 %333, ptr %331, align 4, !tbaa !76
  %334 = getelementptr inbounds i8, ptr %331, i64 4
  store i16 %329, ptr %334, align 4, !tbaa !74
  %335 = getelementptr inbounds i8, ptr %331, i64 6
  store i16 2, ptr %335, align 2, !tbaa !77
  %336 = getelementptr inbounds i8, ptr %331, i64 8
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %336, i32 noundef 0)
  %indvars.iv.next963 = add nuw nsw i64 %indvars.iv962, 1
  %exitcond966.not = icmp eq i64 %indvars.iv.next963, %wide.trip.count965
  br i1 %exitcond966.not, label %._crit_edge823, label %330, !llvm.loop !80

337:                                              ; preds = %._crit_edge823
  %338 = add nsw i32 %.0711, -1
  %339 = mul nsw i32 %338, %.0710
  %340 = sub nsw i32 %.1696, %339
  %341 = trunc i32 %340 to i16
  %342 = zext nneg i32 %338 to i64
  %343 = getelementptr inbounds %struct.b2SolverBlock, ptr %276, i64 %342, i32 1
  store i16 %341, ptr %343, align 4, !tbaa !74
  br label %._crit_edge823.thread

._crit_edge823.thread:                            ; preds = %._crit_edge819.thread, %337, %._crit_edge823
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %11) #7
  br i1 %110, label %.lr.ph835.preheader, label %._crit_edge836

.lr.ph835.preheader:                              ; preds = %._crit_edge823.thread
  %wide.trip.count980 = zext nneg i32 %.1698 to i64
  br label %.lr.ph835

._crit_edge836:                                   ; preds = %._crit_edge831.thread, %._crit_edge823.thread
  %.0720.lcssa = phi ptr [ %281, %._crit_edge823.thread ], [ %.2722, %._crit_edge831.thread ]
  %344 = ptrtoint ptr %.0720.lcssa to i64
  %345 = ptrtoint ptr %281 to i64
  %346 = sub i64 %344, %345
  %347 = sdiv exact i64 %346, 12
  %348 = icmp eq i64 %347, %279
  br i1 %348, label %401, label %398

.lr.ph835:                                        ; preds = %.lr.ph835.preheader, %._crit_edge831.thread
  %indvars.iv977 = phi i64 [ 0, %.lr.ph835.preheader ], [ %indvars.iv.next978, %._crit_edge831.thread ]
  %.0720833 = phi ptr [ %281, %.lr.ph835.preheader ], [ %.2722, %._crit_edge831.thread ]
  %349 = getelementptr inbounds [12 x ptr], ptr %11, i64 0, i64 %indvars.iv977
  store ptr %.0720833, ptr %349, align 8, !tbaa !50
  %350 = getelementptr inbounds [12 x i32], ptr %10, i64 0, i64 %indvars.iv977
  %351 = load i32, ptr %350, align 4, !tbaa !46
  %352 = getelementptr inbounds [12 x i32], ptr %9, i64 0, i64 %indvars.iv977
  %353 = load i32, ptr %352, align 4, !tbaa !46
  %354 = icmp sgt i32 %351, 0
  br i1 %354, label %.lr.ph826, label %._crit_edge827.thread

.lr.ph826:                                        ; preds = %.lr.ph835
  %355 = trunc i32 %353 to i16
  %wide.trip.count970 = zext nneg i32 %351 to i64
  br label %356

._crit_edge827:                                   ; preds = %356
  br i1 %354, label %363, label %._crit_edge827.thread

356:                                              ; preds = %.lr.ph826, %356
  %indvars.iv967 = phi i64 [ 0, %.lr.ph826 ], [ %indvars.iv.next968, %356 ]
  %357 = getelementptr inbounds %struct.b2SolverBlock, ptr %.0720833, i64 %indvars.iv967
  %358 = trunc i64 %indvars.iv967 to i32
  %359 = mul i32 %353, %358
  store i32 %359, ptr %357, align 4, !tbaa !76
  %360 = getelementptr inbounds i8, ptr %357, i64 4
  store i16 %355, ptr %360, align 4, !tbaa !74
  %361 = getelementptr inbounds i8, ptr %357, i64 6
  store i16 3, ptr %361, align 2, !tbaa !77
  %362 = getelementptr inbounds i8, ptr %357, i64 8
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %362, i32 noundef 0)
  %indvars.iv.next968 = add nuw nsw i64 %indvars.iv967, 1
  %exitcond971.not = icmp eq i64 %indvars.iv.next968, %wide.trip.count970
  br i1 %exitcond971.not, label %._crit_edge827, label %356, !llvm.loop !81

363:                                              ; preds = %._crit_edge827
  %364 = getelementptr inbounds [12 x i32], ptr %8, i64 0, i64 %indvars.iv977
  %365 = load i32, ptr %364, align 4, !tbaa !46
  %366 = add nsw i32 %351, -1
  %367 = mul nsw i32 %366, %353
  %368 = sub nsw i32 %365, %367
  %369 = trunc i32 %368 to i16
  %370 = zext nneg i32 %366 to i64
  %371 = getelementptr inbounds %struct.b2SolverBlock, ptr %.0720833, i64 %370, i32 1
  store i16 %369, ptr %371, align 4, !tbaa !74
  %372 = zext nneg i32 %351 to i64
  %373 = getelementptr inbounds %struct.b2SolverBlock, ptr %.0720833, i64 %372
  br label %._crit_edge827.thread

._crit_edge827.thread:                            ; preds = %.lr.ph835, %363, %._crit_edge827
  %.1721 = phi ptr [ %373, %363 ], [ %.0720833, %._crit_edge827 ], [ %.0720833, %.lr.ph835 ]
  %374 = getelementptr inbounds [12 x i32], ptr %7, i64 0, i64 %indvars.iv977
  %375 = load i32, ptr %374, align 4, !tbaa !46
  %376 = getelementptr inbounds [12 x i32], ptr %6, i64 0, i64 %indvars.iv977
  %377 = load i32, ptr %376, align 4, !tbaa !46
  %378 = icmp sgt i32 %375, 0
  br i1 %378, label %.lr.ph830, label %._crit_edge831.thread

.lr.ph830:                                        ; preds = %._crit_edge827.thread
  %379 = trunc i32 %377 to i16
  %wide.trip.count975 = zext nneg i32 %375 to i64
  br label %380

._crit_edge831:                                   ; preds = %380
  br i1 %378, label %387, label %._crit_edge831.thread

380:                                              ; preds = %.lr.ph830, %380
  %indvars.iv972 = phi i64 [ 0, %.lr.ph830 ], [ %indvars.iv.next973, %380 ]
  %381 = getelementptr inbounds %struct.b2SolverBlock, ptr %.1721, i64 %indvars.iv972
  %382 = trunc i64 %indvars.iv972 to i32
  %383 = mul i32 %377, %382
  store i32 %383, ptr %381, align 4, !tbaa !76
  %384 = getelementptr inbounds i8, ptr %381, i64 4
  store i16 %379, ptr %384, align 4, !tbaa !74
  %385 = getelementptr inbounds i8, ptr %381, i64 6
  store i16 4, ptr %385, align 2, !tbaa !77
  %386 = getelementptr inbounds i8, ptr %381, i64 8
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %386, i32 noundef 0)
  %indvars.iv.next973 = add nuw nsw i64 %indvars.iv972, 1
  %exitcond976.not = icmp eq i64 %indvars.iv.next973, %wide.trip.count975
  br i1 %exitcond976.not, label %._crit_edge831, label %380, !llvm.loop !82

387:                                              ; preds = %._crit_edge831
  %388 = getelementptr inbounds [12 x i32], ptr %5, i64 0, i64 %indvars.iv977
  %389 = load i32, ptr %388, align 4, !tbaa !46
  %390 = add nsw i32 %375, -1
  %391 = mul nsw i32 %390, %377
  %392 = sub nsw i32 %389, %391
  %393 = trunc i32 %392 to i16
  %394 = zext nneg i32 %390 to i64
  %395 = getelementptr inbounds %struct.b2SolverBlock, ptr %.1721, i64 %394, i32 1
  store i16 %393, ptr %395, align 4, !tbaa !74
  %396 = zext nneg i32 %375 to i64
  %397 = getelementptr inbounds %struct.b2SolverBlock, ptr %.1721, i64 %396
  br label %._crit_edge831.thread

._crit_edge831.thread:                            ; preds = %._crit_edge827.thread, %387, %._crit_edge831
  %.2722 = phi ptr [ %397, %387 ], [ %.1721, %._crit_edge831 ], [ %.1721, %._crit_edge827.thread ]
  %indvars.iv.next978 = add nuw nsw i64 %indvars.iv977, 1
  %exitcond981.not = icmp eq i64 %indvars.iv.next978, %wide.trip.count980
  br i1 %exitcond981.not, label %._crit_edge836, label %.lr.ph835, !llvm.loop !83

398:                                              ; preds = %._crit_edge836
  %399 = tail call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.6, i32 noundef 1566) #7
  %.not766 = icmp eq i32 %399, 0
  br i1 %.not766, label %401, label %400

400:                                              ; preds = %398
  tail call void @llvm.trap()
  unreachable

401:                                              ; preds = %398, %._crit_edge836
  store i32 0, ptr %272, align 8, !tbaa !84
  %402 = getelementptr inbounds i8, ptr %272, i64 8
  store ptr %278, ptr %402, align 8, !tbaa !86
  %403 = getelementptr inbounds i8, ptr %272, i64 16
  store i32 %.0713, ptr %403, align 8, !tbaa !87
  %404 = getelementptr inbounds i8, ptr %272, i64 20
  store i32 -1, ptr %404, align 4, !tbaa !88
  %405 = getelementptr inbounds i8, ptr %272, i64 24
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %405, i32 noundef 0)
  %406 = getelementptr inbounds i8, ptr %272, i64 32
  store i32 1, ptr %406, align 8, !tbaa !84
  %407 = getelementptr inbounds i8, ptr %272, i64 40
  store ptr %276, ptr %407, align 8, !tbaa !86
  %408 = getelementptr inbounds i8, ptr %272, i64 48
  store i32 %.0711, ptr %408, align 8, !tbaa !87
  %409 = getelementptr inbounds i8, ptr %272, i64 52
  store i32 -1, ptr %409, align 4, !tbaa !88
  %410 = getelementptr inbounds i8, ptr %272, i64 56
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %410, i32 noundef 0)
  %411 = getelementptr inbounds i8, ptr %272, i64 64
  store i32 2, ptr %411, align 8, !tbaa !84
  %412 = getelementptr inbounds i8, ptr %272, i64 72
  store ptr %274, ptr %412, align 8, !tbaa !86
  %413 = getelementptr inbounds i8, ptr %272, i64 80
  store i32 %.0690, ptr %413, align 8, !tbaa !87
  %414 = getelementptr inbounds i8, ptr %272, i64 84
  store i32 -1, ptr %414, align 4, !tbaa !88
  %415 = getelementptr inbounds i8, ptr %272, i64 88
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %415, i32 noundef 0)
  %416 = getelementptr inbounds i8, ptr %272, i64 96
  br i1 %110, label %.lr.ph841.preheader, label %._crit_edge846

.lr.ph841.preheader:                              ; preds = %401
  %wide.trip.count985 = zext nneg i32 %.1698 to i64
  br label %.lr.ph841

.preheader789:                                    ; preds = %.lr.ph841
  br i1 %110, label %.lr.ph845.preheader, label %._crit_edge846

.lr.ph845.preheader:                              ; preds = %.preheader789
  %wide.trip.count990 = zext nneg i32 %.1698 to i64
  br label %.lr.ph845

.lr.ph841:                                        ; preds = %.lr.ph841.preheader, %.lr.ph841
  %indvars.iv982 = phi i64 [ 0, %.lr.ph841.preheader ], [ %indvars.iv.next983, %.lr.ph841 ]
  %.0728839 = phi ptr [ %416, %.lr.ph841.preheader ], [ %430, %.lr.ph841 ]
  store i32 3, ptr %.0728839, align 8, !tbaa !84
  %417 = getelementptr inbounds [12 x ptr], ptr %11, i64 0, i64 %indvars.iv982
  %418 = load ptr, ptr %417, align 8, !tbaa !50
  %419 = getelementptr inbounds i8, ptr %.0728839, i64 8
  store ptr %418, ptr %419, align 8, !tbaa !86
  %420 = getelementptr inbounds [12 x i32], ptr %10, i64 0, i64 %indvars.iv982
  %421 = load i32, ptr %420, align 4, !tbaa !46
  %422 = getelementptr inbounds [12 x i32], ptr %7, i64 0, i64 %indvars.iv982
  %423 = load i32, ptr %422, align 4, !tbaa !46
  %424 = add nsw i32 %423, %421
  %425 = getelementptr inbounds i8, ptr %.0728839, i64 16
  store i32 %424, ptr %425, align 8, !tbaa !87
  %426 = getelementptr inbounds [12 x i32], ptr %4, i64 0, i64 %indvars.iv982
  %427 = load i32, ptr %426, align 4, !tbaa !46
  %428 = getelementptr inbounds i8, ptr %.0728839, i64 20
  store i32 %427, ptr %428, align 4, !tbaa !88
  %429 = getelementptr inbounds i8, ptr %.0728839, i64 24
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %429, i32 noundef 0)
  %430 = getelementptr inbounds i8, ptr %.0728839, i64 32
  %indvars.iv.next983 = add nuw nsw i64 %indvars.iv982, 1
  %exitcond986.not = icmp eq i64 %indvars.iv.next983, %wide.trip.count985
  br i1 %exitcond986.not, label %.preheader789, label %.lr.ph841, !llvm.loop !89

._crit_edge846:                                   ; preds = %.lr.ph845, %401, %.preheader789
  %.1729.lcssa = phi ptr [ %430, %.preheader789 ], [ %416, %401 ], [ %448, %.lr.ph845 ]
  store i32 5, ptr %.1729.lcssa, align 8, !tbaa !84
  %431 = getelementptr inbounds i8, ptr %.1729.lcssa, i64 8
  store ptr %274, ptr %431, align 8, !tbaa !86
  %432 = getelementptr inbounds i8, ptr %.1729.lcssa, i64 16
  store i32 %.0690, ptr %432, align 8, !tbaa !87
  %433 = getelementptr inbounds i8, ptr %.1729.lcssa, i64 20
  store i32 -1, ptr %433, align 4, !tbaa !88
  %434 = getelementptr inbounds i8, ptr %.1729.lcssa, i64 24
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %434, i32 noundef 0)
  %.2730848 = getelementptr inbounds i8, ptr %.1729.lcssa, i64 32
  br i1 %110, label %.lr.ph853.preheader, label %._crit_edge858

.lr.ph853.preheader:                              ; preds = %._crit_edge846
  %wide.trip.count995 = zext nneg i32 %.1698 to i64
  br label %.lr.ph853

.lr.ph845:                                        ; preds = %.lr.ph845.preheader, %.lr.ph845
  %indvars.iv987 = phi i64 [ 0, %.lr.ph845.preheader ], [ %indvars.iv.next988, %.lr.ph845 ]
  %.1729844 = phi ptr [ %430, %.lr.ph845.preheader ], [ %448, %.lr.ph845 ]
  store i32 4, ptr %.1729844, align 8, !tbaa !84
  %435 = getelementptr inbounds [12 x ptr], ptr %11, i64 0, i64 %indvars.iv987
  %436 = load ptr, ptr %435, align 8, !tbaa !50
  %437 = getelementptr inbounds i8, ptr %.1729844, i64 8
  store ptr %436, ptr %437, align 8, !tbaa !86
  %438 = getelementptr inbounds [12 x i32], ptr %10, i64 0, i64 %indvars.iv987
  %439 = load i32, ptr %438, align 4, !tbaa !46
  %440 = getelementptr inbounds [12 x i32], ptr %7, i64 0, i64 %indvars.iv987
  %441 = load i32, ptr %440, align 4, !tbaa !46
  %442 = add nsw i32 %441, %439
  %443 = getelementptr inbounds i8, ptr %.1729844, i64 16
  store i32 %442, ptr %443, align 8, !tbaa !87
  %444 = getelementptr inbounds [12 x i32], ptr %4, i64 0, i64 %indvars.iv987
  %445 = load i32, ptr %444, align 4, !tbaa !46
  %446 = getelementptr inbounds i8, ptr %.1729844, i64 20
  store i32 %445, ptr %446, align 4, !tbaa !88
  %447 = getelementptr inbounds i8, ptr %.1729844, i64 24
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %447, i32 noundef 0)
  %448 = getelementptr inbounds i8, ptr %.1729844, i64 32
  %indvars.iv.next988 = add nuw nsw i64 %indvars.iv987, 1
  %exitcond991.not = icmp eq i64 %indvars.iv.next988, %wide.trip.count990
  br i1 %exitcond991.not, label %._crit_edge846, label %.lr.ph845, !llvm.loop !90

.preheader788:                                    ; preds = %.lr.ph853
  br i1 %110, label %.lr.ph857.preheader, label %._crit_edge858

.lr.ph857.preheader:                              ; preds = %.preheader788
  %wide.trip.count1000 = zext nneg i32 %.1698 to i64
  br label %.lr.ph857

.lr.ph853:                                        ; preds = %.lr.ph853.preheader, %.lr.ph853
  %indvars.iv992 = phi i64 [ 0, %.lr.ph853.preheader ], [ %indvars.iv.next993, %.lr.ph853 ]
  %.2730851 = phi ptr [ %.2730848, %.lr.ph853.preheader ], [ %.2730, %.lr.ph853 ]
  %.1729.pn850 = phi ptr [ %.1729.lcssa, %.lr.ph853.preheader ], [ %.2730851, %.lr.ph853 ]
  store i32 6, ptr %.2730851, align 8, !tbaa !84
  %449 = getelementptr inbounds [12 x ptr], ptr %11, i64 0, i64 %indvars.iv992
  %450 = load ptr, ptr %449, align 8, !tbaa !50
  %451 = getelementptr inbounds i8, ptr %.1729.pn850, i64 40
  store ptr %450, ptr %451, align 8, !tbaa !86
  %452 = getelementptr inbounds [12 x i32], ptr %10, i64 0, i64 %indvars.iv992
  %453 = load i32, ptr %452, align 4, !tbaa !46
  %454 = getelementptr inbounds [12 x i32], ptr %7, i64 0, i64 %indvars.iv992
  %455 = load i32, ptr %454, align 4, !tbaa !46
  %456 = add nsw i32 %455, %453
  %457 = getelementptr inbounds i8, ptr %.1729.pn850, i64 48
  store i32 %456, ptr %457, align 8, !tbaa !87
  %458 = getelementptr inbounds [12 x i32], ptr %4, i64 0, i64 %indvars.iv992
  %459 = load i32, ptr %458, align 4, !tbaa !46
  %460 = getelementptr inbounds i8, ptr %.1729.pn850, i64 52
  store i32 %459, ptr %460, align 4, !tbaa !88
  %461 = getelementptr inbounds i8, ptr %.1729.pn850, i64 56
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %461, i32 noundef 0)
  %indvars.iv.next993 = add nuw nsw i64 %indvars.iv992, 1
  %.2730 = getelementptr inbounds i8, ptr %.2730851, i64 32
  %exitcond996.not = icmp eq i64 %indvars.iv.next993, %wide.trip.count995
  br i1 %exitcond996.not, label %.preheader788, label %.lr.ph853, !llvm.loop !91

._crit_edge858:                                   ; preds = %.lr.ph857, %._crit_edge846, %.preheader788
  %.3.lcssa = phi ptr [ %.2730, %.preheader788 ], [ %.2730848, %._crit_edge846 ], [ %486, %.lr.ph857 ]
  store i32 8, ptr %.3.lcssa, align 8, !tbaa !84
  %462 = getelementptr inbounds i8, ptr %.3.lcssa, i64 8
  store ptr %276, ptr %462, align 8, !tbaa !86
  %463 = getelementptr inbounds i8, ptr %.3.lcssa, i64 16
  store i32 %.0711, ptr %463, align 8, !tbaa !87
  %464 = getelementptr inbounds i8, ptr %.3.lcssa, i64 20
  store i32 -1, ptr %464, align 4, !tbaa !88
  %465 = getelementptr inbounds i8, ptr %.3.lcssa, i64 24
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %465, i32 noundef 0)
  %466 = getelementptr inbounds i8, ptr %.3.lcssa, i64 32
  %467 = ptrtoint ptr %466 to i64
  %468 = ptrtoint ptr %272 to i64
  %469 = sub i64 %467, %468
  %470 = lshr exact i64 %469, 5
  %471 = trunc i64 %470 to i32
  %472 = icmp eq i32 %270, %471
  br i1 %472, label %490, label %487

.lr.ph857:                                        ; preds = %.lr.ph857.preheader, %.lr.ph857
  %indvars.iv997 = phi i64 [ 0, %.lr.ph857.preheader ], [ %indvars.iv.next998, %.lr.ph857 ]
  %.3856 = phi ptr [ %.2730, %.lr.ph857.preheader ], [ %486, %.lr.ph857 ]
  store i32 7, ptr %.3856, align 8, !tbaa !84
  %473 = getelementptr inbounds [12 x ptr], ptr %11, i64 0, i64 %indvars.iv997
  %474 = load ptr, ptr %473, align 8, !tbaa !50
  %475 = getelementptr inbounds i8, ptr %.3856, i64 8
  store ptr %474, ptr %475, align 8, !tbaa !86
  %476 = getelementptr inbounds [12 x i32], ptr %10, i64 0, i64 %indvars.iv997
  %477 = load i32, ptr %476, align 4, !tbaa !46
  %478 = getelementptr inbounds [12 x i32], ptr %7, i64 0, i64 %indvars.iv997
  %479 = load i32, ptr %478, align 4, !tbaa !46
  %480 = add nsw i32 %479, %477
  %481 = getelementptr inbounds i8, ptr %.3856, i64 16
  store i32 %480, ptr %481, align 8, !tbaa !87
  %482 = getelementptr inbounds [12 x i32], ptr %4, i64 0, i64 %indvars.iv997
  %483 = load i32, ptr %482, align 4, !tbaa !46
  %484 = getelementptr inbounds i8, ptr %.3856, i64 20
  store i32 %483, ptr %484, align 4, !tbaa !88
  %485 = getelementptr inbounds i8, ptr %.3856, i64 24
  tail call void @b2AtomicStoreInt(ptr noundef nonnull %485, i32 noundef 0)
  %486 = getelementptr inbounds i8, ptr %.3856, i64 32
  %indvars.iv.next998 = add nuw nsw i64 %indvars.iv997, 1
  %exitcond1001.not = icmp eq i64 %indvars.iv.next998, %wide.trip.count1000
  br i1 %exitcond1001.not, label %._crit_edge858, label %.lr.ph857, !llvm.loop !92

487:                                              ; preds = %._crit_edge858
  %488 = tail call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.6, i32 noundef 1655) #7
  %.not767 = icmp eq i32 %488, 0
  br i1 %.not767, label %490, label %489

489:                                              ; preds = %487
  tail call void @llvm.trap()
  unreachable

490:                                              ; preds = %._crit_edge858, %487
  %491 = icmp slt i32 %85, 65
  br i1 %491, label %495, label %492

492:                                              ; preds = %490
  %493 = tail call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.6, i32 noundef 1657) #7
  %.not768 = icmp eq i32 %493, 0
  br i1 %.not768, label %495, label %494

494:                                              ; preds = %492
  tail call void @llvm.trap()
  unreachable

495:                                              ; preds = %492, %490
  call void @llvm.lifetime.start.p0(i64 1536, ptr nonnull %12) #7
  %496 = getelementptr inbounds i8, ptr %1, i64 72
  store ptr %45, ptr %496, align 8, !tbaa !93
  %497 = getelementptr inbounds i8, ptr %1, i64 128
  store ptr %101, ptr %497, align 8, !tbaa !94
  %498 = getelementptr inbounds i8, ptr %1, i64 136
  store ptr %99, ptr %498, align 8, !tbaa !95
  %499 = getelementptr inbounds i8, ptr %1, i64 144
  store ptr %104, ptr %499, align 8, !tbaa !96
  %500 = getelementptr inbounds i8, ptr %1, i64 152
  store i32 %.1698, ptr %500, align 8, !tbaa !97
  %501 = getelementptr inbounds i8, ptr %1, i64 156
  store i32 %85, ptr %501, align 4, !tbaa !98
  %502 = getelementptr inbounds i8, ptr %1, i64 168
  store i32 %270, ptr %502, align 8, !tbaa !99
  %503 = getelementptr inbounds i8, ptr %1, i64 160
  store ptr %272, ptr %503, align 8, !tbaa !100
  %504 = getelementptr inbounds i8, ptr %1, i64 240
  tail call void @b2AtomicStoreU32(ptr noundef nonnull %504, i32 noundef 0)
  %505 = call float @b2GetMillisecondsAndReset(ptr noundef nonnull %3) #7
  %506 = getelementptr inbounds i8, ptr %0, i64 1632
  store float %505, ptr %506, align 4, !tbaa !101
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %507 = call i64 @b2GetTicks() #7
  store i64 %507, ptr %13, align 8, !tbaa !36
  %508 = icmp sgt i32 %85, 0
  br i1 %508, label %.lr.ph862, label %._crit_edge863

.lr.ph862:                                        ; preds = %495
  %509 = getelementptr inbounds i8, ptr %0, i64 1744
  %510 = getelementptr inbounds i8, ptr %0, i64 1760
  %511 = getelementptr inbounds i8, ptr %0, i64 1788
  %wide.trip.count1005 = zext nneg i32 %85 to i64
  br label %512

._crit_edge863:                                   ; preds = %512, %495
  %.not769 = icmp eq ptr %.0714, null
  br i1 %.not769, label %533, label %525

512:                                              ; preds = %.lr.ph862, %512
  %indvars.iv1002 = phi i64 [ 0, %.lr.ph862 ], [ %indvars.iv.next1003, %512 ]
  %513 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %12, i64 0, i64 %indvars.iv1002
  store ptr %1, ptr %513, align 8, !tbaa !102
  %514 = getelementptr inbounds i8, ptr %513, i64 8
  %515 = trunc nuw nsw i64 %indvars.iv1002 to i32
  store i32 %515, ptr %514, align 8, !tbaa !104
  %516 = load ptr, ptr %509, align 8, !tbaa !73
  %517 = load ptr, ptr %510, align 8, !tbaa !30
  %518 = call ptr %516(ptr noundef nonnull @b2SolverTask, i32 noundef 1, i32 noundef 1, ptr noundef nonnull %513, ptr noundef %517) #7
  %519 = getelementptr inbounds i8, ptr %513, i64 16
  store ptr %518, ptr %519, align 8, !tbaa !105
  %520 = icmp ne ptr %518, null
  %521 = zext i1 %520 to i32
  %522 = load <2 x i32>, ptr %511, align 4, !tbaa !46
  %523 = insertelement <2 x i32> <i32 poison, i32 1>, i32 %521, i64 0
  %524 = add nsw <2 x i32> %522, %523
  store <2 x i32> %524, ptr %511, align 4, !tbaa !46
  %indvars.iv.next1003 = add nuw nsw i64 %indvars.iv1002, 1
  %exitcond1006.not = icmp eq i64 %indvars.iv.next1003, %wide.trip.count1005
  br i1 %exitcond1006.not, label %._crit_edge863, label %512, !llvm.loop !106

525:                                              ; preds = %._crit_edge863
  %526 = getelementptr inbounds i8, ptr %0, i64 1752
  %527 = load ptr, ptr %526, align 8, !tbaa !29
  %528 = getelementptr inbounds i8, ptr %0, i64 1760
  %529 = load ptr, ptr %528, align 8, !tbaa !30
  call void %527(ptr noundef nonnull %.0714, ptr noundef %529) #7
  %530 = getelementptr inbounds i8, ptr %0, i64 1788
  %531 = load i32, ptr %530, align 4, !tbaa !31
  %532 = add nsw i32 %531, -1
  store i32 %532, ptr %530, align 4, !tbaa !31
  br label %533

533:                                              ; preds = %525, %._crit_edge863
  store i32 -1, ptr %282, align 8, !tbaa !72
  br i1 %508, label %.lr.ph866, label %._crit_edge867

.lr.ph866:                                        ; preds = %533
  %534 = getelementptr inbounds i8, ptr %0, i64 1752
  %535 = getelementptr inbounds i8, ptr %0, i64 1760
  %536 = getelementptr inbounds i8, ptr %0, i64 1788
  %wide.trip.count1010 = zext nneg i32 %85 to i64
  br label %546

._crit_edge867:                                   ; preds = %554, %533
  %537 = call float @b2GetMillisecondsAndReset(ptr noundef nonnull %13) #7
  %538 = getelementptr inbounds i8, ptr %0, i64 1636
  store float %537, ptr %538, align 4, !tbaa !107
  %539 = call i64 @b2GetTicks() #7
  %540 = getelementptr inbounds i8, ptr %22, i64 64
  %541 = getelementptr inbounds i8, ptr %22, i64 72
  %542 = load i32, ptr %541, align 8, !tbaa !108
  %543 = load i32, ptr %84, align 8, !tbaa !43
  %544 = icmp sgt i32 %543, 0
  br i1 %544, label %.lr.ph870, label %._crit_edge871

.lr.ph870:                                        ; preds = %._crit_edge867
  %545 = getelementptr inbounds i8, ptr %0, i64 1304
  br label %563

546:                                              ; preds = %.lr.ph866, %554
  %indvars.iv1007 = phi i64 [ 0, %.lr.ph866 ], [ %indvars.iv.next1008, %554 ]
  %547 = getelementptr inbounds [64 x %struct.b2WorkerContext], ptr %12, i64 0, i64 %indvars.iv1007, i32 2
  %548 = load ptr, ptr %547, align 8, !tbaa !105
  %.not784 = icmp eq ptr %548, null
  br i1 %.not784, label %554, label %549

549:                                              ; preds = %546
  %550 = load ptr, ptr %534, align 8, !tbaa !29
  %551 = load ptr, ptr %535, align 8, !tbaa !30
  call void %550(ptr noundef nonnull %548, ptr noundef %551) #7
  %552 = load i32, ptr %536, align 4, !tbaa !31
  %553 = add nsw i32 %552, -1
  store i32 %553, ptr %536, align 4, !tbaa !31
  br label %554

554:                                              ; preds = %546, %549
  %indvars.iv.next1008 = add nuw nsw i64 %indvars.iv1007, 1
  %exitcond1011.not = icmp eq i64 %indvars.iv.next1008, %wide.trip.count1010
  br i1 %exitcond1011.not, label %._crit_edge867, label %546, !llvm.loop !109

._crit_edge871:                                   ; preds = %563, %._crit_edge867
  %555 = getelementptr inbounds i8, ptr %0, i64 1744
  %556 = load ptr, ptr %555, align 8, !tbaa !73
  %557 = getelementptr inbounds i8, ptr %0, i64 1760
  %558 = load ptr, ptr %557, align 8, !tbaa !30
  %559 = call ptr %556(ptr noundef nonnull @b2FinalizeBodiesTask, i32 noundef %24, i32 noundef 64, ptr noundef %1, ptr noundef %558) #7
  %560 = getelementptr inbounds i8, ptr %0, i64 1792
  %561 = load i32, ptr %560, align 8, !tbaa !110
  %562 = add nsw i32 %561, 1
  store i32 %562, ptr %560, align 8, !tbaa !110
  %.not770 = icmp eq ptr %559, null
  br i1 %.not770, label %577, label %573

563:                                              ; preds = %.lr.ph870, %563
  %indvars.iv1012 = phi i64 [ 0, %.lr.ph870 ], [ %indvars.iv.next1013, %563 ]
  %564 = load ptr, ptr %545, align 8, !tbaa !111
  %565 = getelementptr inbounds %struct.b2TaskContext, ptr %564, i64 %indvars.iv1012
  %566 = getelementptr inbounds i8, ptr %565, i64 16
  call void @b2SetBitCountAndClear(ptr noundef nonnull %566, i32 noundef %24) #7
  %567 = getelementptr inbounds i8, ptr %565, i64 32
  call void @b2SetBitCountAndClear(ptr noundef nonnull %567, i32 noundef %542) #7
  %568 = getelementptr inbounds i8, ptr %565, i64 52
  store i32 -1, ptr %568, align 4, !tbaa !112
  %569 = getelementptr inbounds i8, ptr %565, i64 48
  store float 0.000000e+00, ptr %569, align 8, !tbaa !114
  %indvars.iv.next1013 = add nuw nsw i64 %indvars.iv1012, 1
  %570 = load i32, ptr %84, align 8, !tbaa !43
  %571 = sext i32 %570 to i64
  %572 = icmp slt i64 %indvars.iv.next1013, %571
  br i1 %572, label %563, label %._crit_edge871, !llvm.loop !115

573:                                              ; preds = %._crit_edge871
  %574 = getelementptr inbounds i8, ptr %0, i64 1752
  %575 = load ptr, ptr %574, align 8, !tbaa !29
  %576 = load ptr, ptr %557, align 8, !tbaa !30
  call void %575(ptr noundef nonnull %559, ptr noundef %576) #7
  br label %577

577:                                              ; preds = %573, %._crit_edge871
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %281) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %278) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %276) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %274) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef nonnull %272) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %108) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %104) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %101) #7
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %99) #7
  %578 = call float @b2GetMilliseconds(i64 noundef %539) #7
  %579 = getelementptr inbounds i8, ptr %0, i64 1676
  store float %578, ptr %579, align 4, !tbaa !116
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 1536, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  %580 = call i64 @b2GetTicks() #7
  %581 = getelementptr inbounds i8, ptr %0, i64 1456
  %582 = getelementptr inbounds i8, ptr %0, i64 1464
  %583 = load i32, ptr %582, align 8, !tbaa !117
  %584 = icmp eq i32 %583, 0
  br i1 %584, label %588, label %585

585:                                              ; preds = %577
  %586 = call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.6, i32 noundef 1751) #7
  %.not771 = icmp eq i32 %586, 0
  br i1 %.not771, label %588, label %587

587:                                              ; preds = %585
  call void @llvm.trap()
  unreachable

588:                                              ; preds = %585, %577
  %589 = getelementptr inbounds i8, ptr %0, i64 1556
  %590 = load float, ptr %589, align 4, !tbaa !118
  %591 = getelementptr inbounds i8, ptr %14, i64 32
  %592 = getelementptr inbounds i8, ptr %14, i64 16
  %593 = getelementptr inbounds i8, ptr %14, i64 24
  %594 = getelementptr inbounds i8, ptr %0, i64 1256
  %595 = getelementptr inbounds i8, ptr %0, i64 1796
  %.sroa.2102.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 4
  %.sroa.3103.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 6
  %596 = getelementptr inbounds i8, ptr %14, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 12
  %.sroa.3.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 14
  br label %603

597:                                              ; preds = %._crit_edge881
  %598 = call float @b2GetMilliseconds(i64 noundef %580) #7
  %599 = getelementptr inbounds i8, ptr %0, i64 1680
  store float %598, ptr %599, align 4, !tbaa !119
  %600 = call i64 @b2GetTicks() #7
  %601 = getelementptr inbounds i8, ptr %0, i64 1768
  %602 = load ptr, ptr %601, align 8, !tbaa !28
  %.not772 = icmp eq ptr %602, null
  br i1 %.not772, label %656, label %649

603:                                              ; preds = %588, %._crit_edge881
  %indvars.iv1024 = phi i64 [ 0, %588 ], [ %indvars.iv.next1025, %._crit_edge881 ]
  %604 = getelementptr inbounds %struct.b2GraphColor, ptr %45, i64 %indvars.iv1024, i32 1
  %605 = getelementptr inbounds i8, ptr %604, i64 8
  %606 = load i32, ptr %605, align 8, !tbaa !44
  %607 = load ptr, ptr %604, align 8, !tbaa !49
  %608 = icmp sgt i32 %606, 0
  br i1 %608, label %.lr.ph880.preheader, label %._crit_edge881

.lr.ph880.preheader:                              ; preds = %603
  %wide.trip.count1022 = zext nneg i32 %606 to i64
  br label %.lr.ph880

._crit_edge881:                                   ; preds = %648, %603
  %indvars.iv.next1025 = add nuw nsw i64 %indvars.iv1024, 1
  %exitcond1027.not = icmp eq i64 %indvars.iv.next1025, 12
  br i1 %exitcond1027.not, label %597, label %603, !llvm.loop !120

.lr.ph880:                                        ; preds = %.lr.ph880.preheader, %648
  %indvars.iv1019 = phi i64 [ 0, %.lr.ph880.preheader ], [ %indvars.iv.next1020, %648 ]
  %609 = getelementptr inbounds %struct.b2ContactSim, ptr %607, i64 %indvars.iv1019
  %610 = getelementptr inbounds i8, ptr %609, i64 164
  %611 = load i32, ptr %610, align 4, !tbaa !121
  %612 = and i32 %611, 1048576
  %613 = icmp eq i32 %612, 0
  br i1 %613, label %648, label %614

614:                                              ; preds = %.lr.ph880
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %14) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(36) %14, i8 0, i64 32, i1 false)
  store float %590, ptr %591, align 8, !tbaa !125
  %615 = getelementptr inbounds i8, ptr %609, i64 36
  %616 = getelementptr inbounds i8, ptr %609, i64 144
  %617 = load i32, ptr %616, align 4, !tbaa !128
  %618 = icmp sgt i32 %617, 0
  br i1 %618, label %.lr.ph875, label %.critedge

.lr.ph875:                                        ; preds = %614
  %619 = getelementptr inbounds i8, ptr %609, i64 48
  %wide.trip.count1017 = zext nneg i32 %617 to i64
  br label %.outer

.outer:                                           ; preds = %.thread, %.lr.ph875
  %indvars.iv1015.ph = phi i64 [ %indvars.iv.next10161056, %.thread ], [ 0, %.lr.ph875 ]
  %.0741873.ph = phi i1 [ true, %.thread ], [ false, %.lr.ph875 ]
  %.ph = phi float [ %624, %.thread ], [ %590, %.lr.ph875 ]
  br label %620

._crit_edge876:                                   ; preds = %630
  br i1 %.0741873.ph, label %._crit_edge876.thread, label %.critedge

620:                                              ; preds = %.outer, %630
  %indvars.iv1015 = phi i64 [ %indvars.iv.next1016, %630 ], [ %indvars.iv1015.ph, %.outer ]
  %621 = getelementptr inbounds %struct.b2ManifoldPoint, ptr %619, i64 %indvars.iv1015
  %622 = getelementptr inbounds i8, ptr %621, i64 40
  %623 = load float, ptr %622, align 4, !tbaa !129
  %624 = fneg float %623
  %625 = fcmp olt float %.ph, %624
  br i1 %625, label %626, label %630

626:                                              ; preds = %620
  %627 = getelementptr inbounds i8, ptr %621, i64 36
  %628 = load float, ptr %627, align 4, !tbaa !131
  %629 = fcmp ogt float %628, 0.000000e+00
  br i1 %629, label %.thread, label %630

630:                                              ; preds = %626, %620
  %indvars.iv.next1016 = add nuw nsw i64 %indvars.iv1015, 1
  %exitcond1018.not = icmp eq i64 %indvars.iv.next1016, %wide.trip.count1017
  br i1 %exitcond1018.not, label %._crit_edge876, label %620, !llvm.loop !132

.thread:                                          ; preds = %626
  store float %624, ptr %591, align 8, !tbaa !125
  %631 = load i64, ptr %621, align 4
  store i64 %631, ptr %592, align 8
  %indvars.iv.next10161056 = add nuw nsw i64 %indvars.iv1015, 1
  %exitcond1018.not1057 = icmp eq i64 %indvars.iv.next10161056, %wide.trip.count1017
  br i1 %exitcond1018.not1057, label %._crit_edge876.thread, label %.outer, !llvm.loop !132

._crit_edge876.thread:                            ; preds = %.thread, %._crit_edge876
  %632 = load i64, ptr %615, align 4
  store i64 %632, ptr %593, align 8
  %633 = getelementptr inbounds i8, ptr %609, i64 12
  %634 = load i32, ptr %633, align 4, !tbaa !133
  %635 = call ptr @b2ShapeArray_Get(ptr noundef nonnull %594, i32 noundef %634)
  %636 = getelementptr inbounds i8, ptr %609, i64 16
  %637 = load i32, ptr %636, align 4, !tbaa !134
  %638 = call ptr @b2ShapeArray_Get(ptr noundef nonnull %594, i32 noundef %637)
  %639 = load i32, ptr %635, align 8, !tbaa !135
  %640 = add nsw i32 %639, 1
  %641 = load i16, ptr %595, align 4, !tbaa !139
  %642 = getelementptr inbounds i8, ptr %635, i64 276
  %643 = load i16, ptr %642, align 4, !tbaa !140
  store i32 %640, ptr %14, align 8, !tbaa !46
  store i16 %641, ptr %.sroa.2102.0..sroa_idx, align 4, !tbaa !141
  store i16 %643, ptr %.sroa.3103.0..sroa_idx, align 2, !tbaa !141
  %644 = load i32, ptr %638, align 8, !tbaa !135
  %645 = add nsw i32 %644, 1
  %646 = getelementptr inbounds i8, ptr %638, i64 276
  %647 = load i16, ptr %646, align 4, !tbaa !140
  store i32 %645, ptr %596, align 8, !tbaa !46
  store i16 %641, ptr %.sroa.2.0..sroa_idx, align 4, !tbaa !141
  store i16 %647, ptr %.sroa.3.0..sroa_idx, align 2, !tbaa !141
  call void @b2ContactHitEventArray_Push(ptr noundef nonnull %581, ptr noundef nonnull byval(%struct.b2ContactHitEvent) align 8 %14)
  br label %.critedge

.critedge:                                        ; preds = %614, %._crit_edge876.thread, %._crit_edge876
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %14) #7
  br label %648

648:                                              ; preds = %.lr.ph880, %.critedge
  %indvars.iv.next1020 = add nuw nsw i64 %indvars.iv1019, 1
  %exitcond1023.not = icmp eq i64 %indvars.iv.next1020, %wide.trip.count1022
  br i1 %exitcond1023.not, label %._crit_edge881, label %.lr.ph880, !llvm.loop !142

649:                                              ; preds = %597
  %650 = getelementptr inbounds i8, ptr %0, i64 1752
  %651 = load ptr, ptr %650, align 8, !tbaa !29
  %652 = load ptr, ptr %557, align 8, !tbaa !30
  call void %651(ptr noundef nonnull %602, ptr noundef %652) #7
  store ptr null, ptr %601, align 8, !tbaa !28
  %653 = getelementptr inbounds i8, ptr %0, i64 1788
  %654 = load i32, ptr %653, align 4, !tbaa !31
  %655 = add nsw i32 %654, -1
  store i32 %655, ptr %653, align 4, !tbaa !31
  br label %656

656:                                              ; preds = %649, %597
  %657 = getelementptr inbounds i8, ptr %0, i64 40
  call void @b2ValidateNoEnlarged(ptr noundef nonnull %657) #7
  %658 = getelementptr inbounds i8, ptr %0, i64 1304
  %659 = load ptr, ptr %658, align 8, !tbaa !111
  %660 = getelementptr inbounds i8, ptr %659, i64 16
  %661 = load i32, ptr %84, align 8, !tbaa !43
  %662 = icmp sgt i32 %661, 1
  br i1 %662, label %.lr.ph885, label %._crit_edge886

._crit_edge886:                                   ; preds = %.lr.ph885, %656
  %663 = getelementptr inbounds i8, ptr %659, i64 28
  %664 = load i32, ptr %663, align 4, !tbaa !143
  %665 = load ptr, ptr %660, align 8, !tbaa !144
  %666 = getelementptr inbounds i8, ptr %0, i64 1032
  %667 = load ptr, ptr %666, align 8, !tbaa !145
  %668 = load ptr, ptr %22, align 8, !tbaa !37
  %669 = load ptr, ptr %594, align 8, !tbaa !146
  %.not926 = icmp eq i32 %664, 0
  br i1 %.not926, label %._crit_edge902, label %.lr.ph901.preheader

.lr.ph901.preheader:                              ; preds = %._crit_edge886
  %wide.trip.count1034 = zext i32 %664 to i64
  br label %.lr.ph901

.lr.ph885:                                        ; preds = %656, %.lr.ph885
  %indvars.iv1028 = phi i64 [ %indvars.iv.next1029, %.lr.ph885 ], [ 1, %656 ]
  %670 = load ptr, ptr %658, align 8, !tbaa !111
  %671 = getelementptr inbounds %struct.b2TaskContext, ptr %670, i64 %indvars.iv1028, i32 1
  call void @b2InPlaceUnion(ptr noundef nonnull %660, ptr noundef nonnull %671) #7
  %indvars.iv.next1029 = add nuw nsw i64 %indvars.iv1028, 1
  %672 = load i32, ptr %84, align 8, !tbaa !43
  %673 = sext i32 %672 to i64
  %674 = icmp slt i64 %indvars.iv.next1029, %673
  br i1 %674, label %.lr.ph885, label %._crit_edge886, !llvm.loop !147

._crit_edge902:                                   ; preds = %._crit_edge898, %._crit_edge886
  call void @b2ValidateBroadphase(ptr noundef nonnull %657) #7
  %675 = call float @b2GetMilliseconds(i64 noundef %600) #7
  %676 = getelementptr inbounds i8, ptr %0, i64 1684
  store float %675, ptr %676, align 4, !tbaa !148
  %677 = call i32 @b2AtomicLoadInt(ptr noundef nonnull %40)
  %678 = icmp sgt i32 %677, 0
  br i1 %678, label %724, label %792

.lr.ph901:                                        ; preds = %.lr.ph901.preheader, %._crit_edge898
  %indvars.iv1031 = phi i64 [ 0, %.lr.ph901.preheader ], [ %indvars.iv.next1032, %._crit_edge898 ]
  %679 = getelementptr inbounds i64, ptr %665, i64 %indvars.iv1031
  %680 = load i64, ptr %679, align 8, !tbaa !36
  %.not781894 = icmp eq i64 %680, 0
  br i1 %.not781894, label %._crit_edge898, label %.lr.ph897

.lr.ph897:                                        ; preds = %.lr.ph901
  %681 = trunc nuw i64 %indvars.iv1031 to i32
  %682 = shl i32 %681, 6
  br label %683

683:                                              ; preds = %.lr.ph897, %.loopexit786
  %.0726895 = phi i64 [ %680, %.lr.ph897 ], [ %723, %.loopexit786 ]
  %684 = call i32 @b2CTZ64(i64 noundef %.0726895)
  %685 = add i32 %684, %682
  %686 = zext i32 %685 to i64
  %687 = getelementptr inbounds %struct.b2BodySim, ptr %668, i64 %686
  %688 = getelementptr inbounds i8, ptr %687, i64 88
  %689 = load i32, ptr %688, align 4, !tbaa !149
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds %struct.b2Body, ptr %667, i64 %690, i32 6
  %692 = load i32, ptr %691, align 8, !tbaa !153
  %693 = getelementptr inbounds i8, ptr %687, i64 93
  %694 = load i8, ptr %693, align 1, !tbaa !155, !range !156, !noundef !157
  %695 = trunc nuw i8 %694 to i1
  br i1 %695, label %696, label %706

696:                                              ; preds = %683
  %697 = getelementptr inbounds i8, ptr %687, i64 92
  %698 = load i8, ptr %697, align 4, !tbaa !158, !range !156, !noundef !157
  %699 = trunc nuw i8 %698 to i1
  br i1 %699, label %.preheader, label %706

.preheader:                                       ; preds = %696
  %.not783891 = icmp eq i32 %692, -1
  br i1 %.not783891, label %.loopexit786, label %.lr.ph893

.lr.ph893:                                        ; preds = %.preheader, %.lr.ph893
  %.0718892 = phi i32 [ %705, %.lr.ph893 ], [ %692, %.preheader ]
  %700 = sext i32 %.0718892 to i64
  %701 = getelementptr inbounds %struct.b2Shape, ptr %669, i64 %700
  %702 = getelementptr inbounds i8, ptr %701, i64 88
  %703 = load i32, ptr %702, align 8, !tbaa !159
  call void @b2BufferMove(ptr noundef nonnull %657, i32 noundef %703)
  %704 = getelementptr inbounds i8, ptr %701, i64 12
  %705 = load i32, ptr %704, align 4, !tbaa !160
  %.not783 = icmp eq i32 %705, -1
  br i1 %.not783, label %.loopexit786, label %.lr.ph893, !llvm.loop !161

706:                                              ; preds = %696, %683
  %.not782887 = icmp eq i32 %692, -1
  br i1 %.not782887, label %.loopexit786, label %.lr.ph890

.lr.ph890:                                        ; preds = %706, %719
  %.1719888 = phi i32 [ %721, %719 ], [ %692, %706 ]
  %707 = sext i32 %.1719888 to i64
  %708 = getelementptr inbounds %struct.b2Shape, ptr %669, i64 %707
  %709 = getelementptr inbounds i8, ptr %708, i64 282
  %710 = load i8, ptr %709, align 2, !tbaa !162, !range !156, !noundef !157
  %711 = trunc nuw i8 %710 to i1
  br i1 %711, label %712, label %719

712:                                              ; preds = %.lr.ph890
  %713 = getelementptr inbounds i8, ptr %708, i64 88
  %714 = load i32, ptr %713, align 8, !tbaa !159
  %715 = getelementptr inbounds i8, ptr %708, i64 64
  %716 = load <2 x float>, ptr %715, align 8
  %717 = getelementptr inbounds i8, ptr %708, i64 72
  %718 = load <2 x float>, ptr %717, align 8
  call void @b2BroadPhase_EnlargeProxy(ptr noundef nonnull %657, i32 noundef %714, <2 x float> %716, <2 x float> %718) #7
  store i8 0, ptr %709, align 2, !tbaa !162
  br label %719

719:                                              ; preds = %712, %.lr.ph890
  %720 = getelementptr inbounds i8, ptr %708, i64 12
  %721 = load i32, ptr %720, align 4, !tbaa !160
  %.not782 = icmp eq i32 %721, -1
  br i1 %.not782, label %.loopexit786, label %.lr.ph890, !llvm.loop !163

.loopexit786:                                     ; preds = %719, %.lr.ph893, %706, %.preheader
  %722 = add i64 %.0726895, -1
  %723 = and i64 %722, %.0726895
  %.not781 = icmp eq i64 %723, 0
  br i1 %.not781, label %._crit_edge898, label %683, !llvm.loop !164

._crit_edge898:                                   ; preds = %.loopexit786, %.lr.ph901
  %indvars.iv.next1032 = add nuw nsw i64 %indvars.iv1031, 1
  %exitcond1035.not = icmp eq i64 %indvars.iv.next1032, %wide.trip.count1034
  br i1 %exitcond1035.not, label %._crit_edge902, label %.lr.ph901, !llvm.loop !165

724:                                              ; preds = %._crit_edge902
  %725 = call i64 @b2GetTicks() #7
  %726 = load ptr, ptr %555, align 8, !tbaa !73
  %727 = load ptr, ptr %557, align 8, !tbaa !30
  %728 = call ptr %726(ptr noundef nonnull @b2BulletBodyTask, i32 noundef %677, i32 noundef 8, ptr noundef %1, ptr noundef %727) #7
  %729 = load i32, ptr %560, align 8, !tbaa !110
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %560, align 8, !tbaa !110
  %.not773 = icmp eq ptr %728, null
  br i1 %.not773, label %.lr.ph910, label %731

731:                                              ; preds = %724
  %732 = getelementptr inbounds i8, ptr %0, i64 1752
  %733 = load ptr, ptr %732, align 8, !tbaa !29
  %734 = load ptr, ptr %557, align 8, !tbaa !30
  call void %733(ptr noundef nonnull %728, ptr noundef %734) #7
  br label %.lr.ph910

.lr.ph910:                                        ; preds = %724, %731
  %735 = getelementptr inbounds i8, ptr %0, i64 184
  %736 = load ptr, ptr %666, align 8, !tbaa !145
  %737 = load ptr, ptr %22, align 8, !tbaa !37
  %738 = load ptr, ptr %594, align 8, !tbaa !146
  %739 = load ptr, ptr %43, align 8, !tbaa !32
  %740 = getelementptr inbounds i8, ptr %0, i64 1040
  %741 = getelementptr inbounds i8, ptr %0, i64 264
  %wide.trip.count1039 = zext nneg i32 %677 to i64
  br label %744

._crit_edge911:                                   ; preds = %.loopexit
  %742 = call float @b2GetMilliseconds(i64 noundef %725) #7
  %743 = getelementptr inbounds i8, ptr %0, i64 1688
  store float %742, ptr %743, align 4, !tbaa !166
  br label %792

744:                                              ; preds = %.lr.ph910, %.loopexit
  %indvars.iv1036 = phi i64 [ 0, %.lr.ph910 ], [ %indvars.iv.next1037, %.loopexit ]
  %745 = getelementptr inbounds i32, ptr %739, i64 %indvars.iv1036
  %746 = load i32, ptr %745, align 4, !tbaa !46
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds %struct.b2BodySim, ptr %737, i64 %747
  %749 = getelementptr inbounds i8, ptr %748, i64 96
  %750 = load i8, ptr %749, align 4, !tbaa !167, !range !156, !noundef !157
  %751 = icmp eq i8 %750, 0
  br i1 %751, label %.loopexit, label %752

752:                                              ; preds = %744
  store i8 0, ptr %749, align 4, !tbaa !167
  %753 = getelementptr inbounds i8, ptr %748, i64 88
  %754 = load i32, ptr %753, align 4, !tbaa !149
  %755 = icmp sgt i32 %754, -1
  br i1 %755, label %756, label %759

756:                                              ; preds = %752
  %757 = load i32, ptr %740, align 8, !tbaa !168
  %758 = icmp slt i32 %754, %757
  br i1 %758, label %762, label %759

759:                                              ; preds = %756, %752
  %760 = call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.6, i32 noundef 1943) #7
  %.not777 = icmp eq i32 %760, 0
  br i1 %.not777, label %762, label %761

761:                                              ; preds = %759
  call void @llvm.trap()
  unreachable

762:                                              ; preds = %759, %756
  %763 = sext i32 %754 to i64
  %764 = getelementptr inbounds %struct.b2Body, ptr %736, i64 %763, i32 6
  %.0700903 = load i32, ptr %764, align 4, !tbaa !46
  %.not778904 = icmp eq i32 %.0700903, -1
  br i1 %.not778904, label %.loopexit, label %.lr.ph907

.lr.ph907:                                        ; preds = %762, %791
  %.0700905 = phi i32 [ %.0700, %791 ], [ %.0700903, %762 ]
  %765 = sext i32 %.0700905 to i64
  %766 = getelementptr inbounds %struct.b2Shape, ptr %738, i64 %765
  %767 = getelementptr inbounds i8, ptr %766, i64 282
  %768 = load i8, ptr %767, align 2, !tbaa !162, !range !156, !noundef !157
  %769 = icmp eq i8 %768, 0
  br i1 %769, label %791, label %770, !llvm.loop !169

770:                                              ; preds = %.lr.ph907
  store i8 0, ptr %767, align 2, !tbaa !162
  %771 = getelementptr inbounds i8, ptr %766, i64 88
  %772 = load i32, ptr %771, align 8, !tbaa !159
  %773 = ashr i32 %772, 2
  %774 = and i32 %772, 3
  %775 = icmp eq i32 %774, 2
  br i1 %775, label %779, label %776

776:                                              ; preds = %770
  %777 = call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.6, i32 noundef 1961) #7
  %.not779 = icmp eq i32 %777, 0
  br i1 %.not779, label %779, label %778

778:                                              ; preds = %776
  call void @llvm.trap()
  unreachable

779:                                              ; preds = %770, %776
  %780 = add nsw i32 %772, 1
  %781 = sext i32 %780 to i64
  %782 = call zeroext i1 @b2ContainsKey(ptr noundef nonnull %741, i64 noundef %781) #7
  br i1 %782, label %786, label %783

783:                                              ; preds = %779
  %784 = call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.6, i32 noundef 1964) #7
  %.not780 = icmp eq i32 %784, 0
  br i1 %.not780, label %786, label %785

785:                                              ; preds = %783
  call void @llvm.trap()
  unreachable

786:                                              ; preds = %783, %779
  %787 = getelementptr inbounds i8, ptr %766, i64 64
  %788 = load <2 x float>, ptr %787, align 8
  %789 = getelementptr inbounds i8, ptr %766, i64 72
  %790 = load <2 x float>, ptr %789, align 8
  call void @b2DynamicTree_EnlargeProxy(ptr noundef nonnull %735, i32 noundef %773, <2 x float> %788, <2 x float> %790) #7
  br label %791

791:                                              ; preds = %.lr.ph907, %786
  %.1701.in = getelementptr inbounds i8, ptr %766, i64 12
  %.0700 = load i32, ptr %.1701.in, align 4, !tbaa !46
  %.not778 = icmp eq i32 %.0700, -1
  br i1 %.not778, label %.loopexit, label %.lr.ph907

.loopexit:                                        ; preds = %791, %762, %744
  %indvars.iv.next1037 = add nuw nsw i64 %indvars.iv1036, 1
  %exitcond1040.not = icmp eq i64 %indvars.iv.next1037, %wide.trip.count1039
  br i1 %exitcond1040.not, label %._crit_edge911, label %744, !llvm.loop !170

792:                                              ; preds = %._crit_edge911, %._crit_edge902
  %793 = load ptr, ptr %43, align 8, !tbaa !32
  call void @b2FreeArenaItem(ptr noundef nonnull %0, ptr noundef %793) #7
  store ptr null, ptr %43, align 8, !tbaa !32
  call void @b2AtomicStoreInt(ptr noundef nonnull %40, i32 noundef 0)
  %794 = getelementptr inbounds i8, ptr %0, i64 1798
  %795 = load i8, ptr %794, align 2, !tbaa !171, !range !156, !noundef !157
  %796 = trunc nuw i8 %795 to i1
  br i1 %796, label %797, label %855

797:                                              ; preds = %792
  %798 = call i64 @b2GetTicks() #7
  %799 = load i32, ptr %282, align 8, !tbaa !72
  %800 = icmp eq i32 %799, -1
  br i1 %800, label %804, label %801

801:                                              ; preds = %797
  %802 = call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.6, i32 noundef 1990) #7
  %.not774 = icmp eq i32 %802, 0
  br i1 %.not774, label %804, label %803

803:                                              ; preds = %801
  call void @llvm.trap()
  unreachable

804:                                              ; preds = %801, %797
  %805 = load i32, ptr %84, align 8, !tbaa !43
  %806 = icmp sgt i32 %805, 0
  br i1 %806, label %.lr.ph915, label %._crit_edge916.thread

._crit_edge916.thread:                            ; preds = %804
  %807 = load ptr, ptr %658, align 8, !tbaa !111
  %808 = getelementptr inbounds i8, ptr %807, i64 32
  br label %._crit_edge920

._crit_edge916:                                   ; preds = %832
  %809 = icmp sgt i32 %833, 1
  %810 = load ptr, ptr %658, align 8, !tbaa !111
  %811 = getelementptr inbounds i8, ptr %810, i64 32
  br i1 %809, label %.lr.ph919, label %._crit_edge920

.lr.ph915:                                        ; preds = %804, %832
  %indvars.iv1041 = phi i64 [ %indvars.iv.next1042, %832 ], [ 0, %804 ]
  %.0692912 = phi float [ %.2, %832 ], [ 0.000000e+00, %804 ]
  %812 = load ptr, ptr %658, align 8, !tbaa !111
  %813 = getelementptr inbounds %struct.b2TaskContext, ptr %812, i64 %indvars.iv1041
  %814 = getelementptr inbounds i8, ptr %813, i64 52
  %815 = load i32, ptr %814, align 4, !tbaa !112
  %.not775 = icmp eq i32 %815, -1
  br i1 %.not775, label %832, label %816

816:                                              ; preds = %.lr.ph915
  %817 = getelementptr inbounds i8, ptr %813, i64 48
  %818 = load float, ptr %817, align 8, !tbaa !114
  %819 = fcmp ult float %818, %.0692912
  br i1 %819, label %832, label %820

820:                                              ; preds = %816
  %821 = fcmp ogt float %818, 0.000000e+00
  br i1 %821, label %825, label %822

822:                                              ; preds = %820
  %823 = call i32 @b2InternalAssertFcn(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.6, i32 noundef 1997) #7
  %.not776 = icmp eq i32 %823, 0
  br i1 %.not776, label %._crit_edge1050, label %824

._crit_edge1050:                                  ; preds = %822
  %.pre = load float, ptr %817, align 8, !tbaa !114
  %.pre1051.pre = load i32, ptr %814, align 4, !tbaa !112
  br label %825

824:                                              ; preds = %822
  call void @llvm.trap()
  unreachable

825:                                              ; preds = %._crit_edge1050, %820
  %.pre1051 = phi i32 [ %.pre1051.pre, %._crit_edge1050 ], [ %815, %820 ]
  %826 = phi float [ %.pre, %._crit_edge1050 ], [ %818, %820 ]
  %827 = fcmp oeq float %826, %.0692912
  br i1 %827, label %828, label %831

828:                                              ; preds = %825
  %829 = load i32, ptr %282, align 8, !tbaa !72
  %830 = icmp slt i32 %.pre1051, %829
  br i1 %830, label %832, label %831

831:                                              ; preds = %828, %825
  store i32 %.pre1051, ptr %282, align 8, !tbaa !72
  br label %832

832:                                              ; preds = %.lr.ph915, %816, %831, %828
  %.2 = phi float [ %.0692912, %828 ], [ %826, %831 ], [ %.0692912, %816 ], [ %.0692912, %.lr.ph915 ]
  %indvars.iv.next1042 = add nuw nsw i64 %indvars.iv1041, 1
  %833 = load i32, ptr %84, align 8, !tbaa !43
  %834 = sext i32 %833 to i64
  %835 = icmp slt i64 %indvars.iv.next1042, %834
  br i1 %835, label %.lr.ph915, label %._crit_edge916, !llvm.loop !172

._crit_edge920:                                   ; preds = %.lr.ph919, %._crit_edge916.thread, %._crit_edge916
  %836 = phi ptr [ %808, %._crit_edge916.thread ], [ %811, %._crit_edge916 ], [ %811, %.lr.ph919 ]
  %837 = load ptr, ptr %540, align 8, !tbaa !173
  %838 = load i32, ptr %541, align 8, !tbaa !108
  %839 = icmp sgt i32 %838, 0
  br i1 %839, label %.lr.ph924.preheader, label %._crit_edge925

.lr.ph924.preheader:                              ; preds = %._crit_edge920
  %840 = zext nneg i32 %838 to i64
  br label %.lr.ph924

.lr.ph919:                                        ; preds = %._crit_edge916, %.lr.ph919
  %indvars.iv1044 = phi i64 [ %indvars.iv.next1045, %.lr.ph919 ], [ 1, %._crit_edge916 ]
  %841 = load ptr, ptr %658, align 8, !tbaa !111
  %842 = getelementptr inbounds %struct.b2TaskContext, ptr %841, i64 %indvars.iv1044, i32 2
  call void @b2InPlaceUnion(ptr noundef nonnull %811, ptr noundef nonnull %842) #7
  %indvars.iv.next1045 = add nuw nsw i64 %indvars.iv1044, 1
  %843 = load i32, ptr %84, align 8, !tbaa !43
  %844 = sext i32 %843 to i64
  %845 = icmp slt i64 %indvars.iv.next1045, %844
  br i1 %845, label %.lr.ph919, label %._crit_edge920, !llvm.loop !174

._crit_edge925:                                   ; preds = %853, %._crit_edge920
  call void @b2ValidateSolverSets(ptr noundef %0) #7
  %846 = call float @b2GetMilliseconds(i64 noundef %798) #7
  %847 = getelementptr inbounds i8, ptr %0, i64 1692
  store float %846, ptr %847, align 4, !tbaa !175
  br label %855

.lr.ph924:                                        ; preds = %.lr.ph924.preheader, %853
  %indvars.iv1047 = phi i64 [ %840, %.lr.ph924.preheader ], [ %indvars.iv.next1048, %853 ]
  %indvars.iv.next1048 = add nsw i64 %indvars.iv1047, -1
  %848 = trunc nuw nsw i64 %indvars.iv.next1048 to i32
  %849 = call zeroext i1 @b2GetBit(ptr noundef nonnull %836, i32 noundef %848)
  br i1 %849, label %853, label %850

850:                                              ; preds = %.lr.ph924
  %851 = getelementptr inbounds %struct.b2IslandSim, ptr %837, i64 %indvars.iv.next1048
  %852 = load i32, ptr %851, align 4, !tbaa !176
  call void @b2TrySleepIsland(ptr noundef %0, i32 noundef %852) #7
  br label %853

853:                                              ; preds = %.lr.ph924, %850
  %854 = icmp ugt i64 %indvars.iv1047, 1
  br i1 %854, label %.lr.ph924, label %._crit_edge925, !llvm.loop !178

855:                                              ; preds = %792, %._crit_edge925, %37
  ret void
}

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

declare i64 @b2GetTicks() local_unnamed_addr #2

declare void @b2MergeAwakeIslands(ptr noundef) local_unnamed_addr #2

declare float @b2GetMilliseconds(i64 noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @b2SolverSetArray_Get(ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @b2ValidateNoEnlarged(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2AtomicStoreInt(ptr noundef, i32 noundef) local_unnamed_addr #3

declare ptr @b2AllocateArenaItem(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2BodyMoveEventArray_Resize(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @b2GetContactConstraintSIMDByteCount() local_unnamed_addr #2

declare i32 @b2InternalAssertFcn(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: cold noreturn nounwind memory(inaccessiblemem: write)
declare void @llvm.trap() #4

declare void @b2SplitIslandTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2AtomicStoreU32(ptr noundef, i32 noundef) local_unnamed_addr #3

declare float @b2GetMillisecondsAndReset(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @b2SolverTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #5

declare void @b2SetBitCountAndClear(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @b2FinalizeBodiesTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #0

declare void @b2FreeArenaItem(ptr noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @b2ShapeArray_Get(ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2ContactHitEventArray_Push(ptr noundef, ptr noundef byval(%struct.b2ContactHitEvent) align 8) local_unnamed_addr #3

declare void @b2InPlaceUnion(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @b2CTZ64(i64 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @b2BufferMove(ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @b2BroadPhase_EnlargeProxy(ptr noundef, i32 noundef, <2 x float>, <2 x float>) local_unnamed_addr #2

declare void @b2ValidateBroadphase(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @b2AtomicLoadInt(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden void @b2BulletBodyTask(i32 noundef, i32 noundef, i32 noundef, ptr noundef) #5

declare zeroext i1 @b2ContainsKey(ptr noundef, i64 noundef) local_unnamed_addr #2

declare void @b2DynamicTree_EnlargeProxy(ptr noundef, i32 noundef, <2 x float>, <2 x float>) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i1 @b2GetBit(ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @b2TrySleepIsland(ptr noundef, i32 noundef) local_unnamed_addr #2

declare void @b2ValidateSolverSets(ptr noundef) local_unnamed_addr #2

attributes #0 = { nounwind 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 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 = { cold noreturn nounwind memory(inaccessiblemem: write) }
attributes #5 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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, !19, i64 1536}
!6 = !{!"b2World", !7, i64 0, !13, i64 40, !16, i64 336, !17, i64 1008, !12, i64 1032, !17, i64 1048, !12, i64 1072, !17, i64 1088, !12, i64 1112, !17, i64 1128, !12, i64 1152, !17, i64 1168, !12, i64 1192, !17, i64 1208, !17, i64 1232, !12, i64 1256, !12, i64 1272, !12, i64 1288, !12, i64 1304, !12, i64 1320, !12, i64 1336, !12, i64 1352, !12, i64 1368, !9, i64 1384, !9, i64 1416, !11, i64 1448, !12, i64 1456, !18, i64 1472, !18, i64 1488, !18, i64 1504, !18, i64 1520, !19, i64 1536, !11, i64 1544, !20, i64 1548, !21, i64 1556, !21, i64 1560, !21, i64 1564, !21, i64 1568, !21, i64 1572, !21, i64 1576, !21, i64 1580, !21, i64 1584, !8, i64 1592, !8, i64 1600, !22, i64 1608, !23, i64 1612, !8, i64 1704, !8, i64 1712, !8, i64 1720, !8, i64 1728, !11, i64 1736, !8, i64 1744, !8, i64 1752, !8, i64 1760, !8, i64 1768, !8, i64 1776, !21, i64 1784, !11, i64 1788, !11, i64 1792, !22, i64 1796, !24, i64 1798, !24, i64 1799, !24, i64 1800, !24, i64 1801, !24, i64 1802, !24, i64 1803}
!7 = !{!"b2ArenaAllocator", !8, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !12, i64 24}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"", !8, i64 0, !11, i64 8, !11, i64 12}
!13 = !{!"b2BroadPhase", !9, i64 0, !11, i64 216, !14, i64 224, !12, i64 240, !8, i64 256, !8, i64 264, !11, i64 272, !15, i64 276, !14, i64 280}
!14 = !{!"b2HashSet", !8, i64 0, !11, i64 8, !11, i64 12}
!15 = !{!"b2AtomicInt", !11, i64 0}
!16 = !{!"b2ConstraintGraph", !9, i64 0}
!17 = !{!"b2IdPool", !12, i64 0, !11, i64 16}
!18 = !{!"b2BitSet", !8, i64 0, !11, i64 8, !11, i64 12}
!19 = !{!"long", !9, i64 0}
!20 = !{!"b2Vec2", !21, i64 0, !21, i64 4}
!21 = !{!"float", !9, i64 0}
!22 = !{!"short", !9, i64 0}
!23 = !{!"b2Profile", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !21, i64 16, !21, i64 20, !21, i64 24, !21, i64 28, !21, i64 32, !21, i64 36, !21, i64 40, !21, i64 44, !21, i64 48, !21, i64 52, !21, i64 56, !21, i64 60, !21, i64 64, !21, i64 68, !21, i64 72, !21, i64 76, !21, i64 80, !21, i64 84}
!24 = !{!"_Bool", !9, i64 0}
!25 = !{!6, !21, i64 1628}
!26 = !{!27, !11, i64 8}
!27 = !{!"b2SolverSet", !12, i64 0, !12, i64 16, !12, i64 32, !12, i64 48, !12, i64 64, !11, i64 80}
!28 = !{!6, !8, i64 1768}
!29 = !{!6, !8, i64 1752}
!30 = !{!6, !8, i64 1760}
!31 = !{!6, !11, i64 1788}
!32 = !{!33, !8, i64 112}
!33 = !{!"b2StepContext", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !11, i64 16, !34, i64 20, !34, i64 32, !34, i64 44, !21, i64 56, !21, i64 60, !8, i64 64, !8, i64 72, !8, i64 80, !8, i64 88, !8, i64 96, !11, i64 104, !8, i64 112, !15, i64 120, !8, i64 128, !8, i64 136, !8, i64 144, !11, i64 152, !11, i64 156, !8, i64 160, !11, i64 168, !24, i64 172, !9, i64 173, !35, i64 240, !9, i64 244}
!34 = !{!"b2Softness", !21, i64 0, !21, i64 4, !21, i64 8}
!35 = !{!"b2AtomicU32", !11, i64 0}
!36 = !{!19, !19, i64 0}
!37 = !{!27, !8, i64 0}
!38 = !{!33, !8, i64 88}
!39 = !{!27, !8, i64 16}
!40 = !{!33, !8, i64 80}
!41 = !{!42, !11, i64 40}
!42 = !{!"b2GraphColor", !18, i64 0, !12, i64 16, !12, i64 32, !9, i64 48}
!43 = !{!6, !11, i64 1736}
!44 = !{!42, !11, i64 24}
!45 = !{!9, !9, i64 0}
!46 = !{!11, !11, i64 0}
!47 = distinct !{!47, !48}
!48 = !{!"llvm.loop.mustprogress"}
!49 = !{!42, !8, i64 16}
!50 = !{!8, !8, i64 0}
!51 = distinct !{!51, !52}
!52 = !{!"llvm.loop.unroll.disable"}
!53 = !{!54}
!54 = distinct !{!54, !55}
!55 = distinct !{!55, !"LVerDomain"}
!56 = !{!57}
!57 = distinct !{!57, !55}
!58 = distinct !{!58, !48, !59, !60}
!59 = !{!"llvm.loop.isvectorized", i32 1}
!60 = !{!"llvm.loop.unroll.runtime.disable"}
!61 = distinct !{!61, !48, !59}
!62 = !{!42, !8, i64 32}
!63 = distinct !{!63, !52}
!64 = !{!65}
!65 = distinct !{!65, !66}
!66 = distinct !{!66, !"LVerDomain"}
!67 = !{!68}
!68 = distinct !{!68, !66}
!69 = distinct !{!69, !48, !59, !60}
!70 = distinct !{!70, !48}
!71 = distinct !{!71, !48, !59}
!72 = !{!6, !11, i64 1544}
!73 = !{!6, !8, i64 1744}
!74 = !{!75, !22, i64 4}
!75 = !{!"b2SolverBlock", !11, i64 0, !22, i64 4, !22, i64 6, !15, i64 8}
!76 = !{!75, !11, i64 0}
!77 = !{!75, !22, i64 6}
!78 = distinct !{!78, !48}
!79 = distinct !{!79, !48}
!80 = distinct !{!80, !48}
!81 = distinct !{!81, !48}
!82 = distinct !{!82, !48}
!83 = distinct !{!83, !48}
!84 = !{!85, !11, i64 0}
!85 = !{!"b2SolverStage", !11, i64 0, !8, i64 8, !11, i64 16, !11, i64 20, !15, i64 24}
!86 = !{!85, !8, i64 8}
!87 = !{!85, !11, i64 16}
!88 = !{!85, !11, i64 20}
!89 = distinct !{!89, !48}
!90 = distinct !{!90, !48}
!91 = distinct !{!91, !48}
!92 = distinct !{!92, !48}
!93 = !{!33, !8, i64 72}
!94 = !{!33, !8, i64 128}
!95 = !{!33, !8, i64 136}
!96 = !{!33, !8, i64 144}
!97 = !{!33, !11, i64 152}
!98 = !{!33, !11, i64 156}
!99 = !{!33, !11, i64 168}
!100 = !{!33, !8, i64 160}
!101 = !{!6, !21, i64 1632}
!102 = !{!103, !8, i64 0}
!103 = !{!"b2WorkerContext", !8, i64 0, !11, i64 8, !8, i64 16}
!104 = !{!103, !11, i64 8}
!105 = !{!103, !8, i64 16}
!106 = distinct !{!106, !48}
!107 = !{!6, !21, i64 1636}
!108 = !{!27, !11, i64 72}
!109 = distinct !{!109, !48}
!110 = !{!6, !11, i64 1792}
!111 = !{!6, !8, i64 1304}
!112 = !{!113, !11, i64 52}
!113 = !{!"b2TaskContext", !18, i64 0, !18, i64 16, !18, i64 32, !21, i64 48, !11, i64 52}
!114 = !{!113, !21, i64 48}
!115 = distinct !{!115, !48}
!116 = !{!6, !21, i64 1676}
!117 = !{!6, !11, i64 1464}
!118 = !{!6, !21, i64 1556}
!119 = !{!6, !21, i64 1680}
!120 = distinct !{!120, !48}
!121 = !{!122, !11, i64 164}
!122 = !{!"b2ContactSim", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !21, i64 20, !21, i64 24, !21, i64 28, !21, i64 32, !123, i64 36, !21, i64 148, !21, i64 152, !21, i64 156, !21, i64 160, !11, i64 164, !124, i64 168}
!123 = !{!"b2Manifold", !20, i64 0, !21, i64 8, !9, i64 12, !11, i64 108}
!124 = !{!"b2SimplexCache", !22, i64 0, !9, i64 2, !9, i64 5}
!125 = !{!126, !21, i64 32}
!126 = !{!"b2ContactHitEvent", !127, i64 0, !127, i64 8, !20, i64 16, !20, i64 24, !21, i64 32}
!127 = !{!"b2ShapeId", !11, i64 0, !22, i64 4, !22, i64 6}
!128 = !{!122, !11, i64 144}
!129 = !{!130, !21, i64 40}
!130 = !{!"b2ManifoldPoint", !20, i64 0, !20, i64 8, !20, i64 16, !21, i64 24, !21, i64 28, !21, i64 32, !21, i64 36, !21, i64 40, !22, i64 44, !24, i64 46}
!131 = !{!130, !21, i64 36}
!132 = distinct !{!132, !48}
!133 = !{!122, !11, i64 12}
!134 = !{!122, !11, i64 16}
!135 = !{!136, !11, i64 0}
!136 = !{!"b2Shape", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !21, i64 24, !21, i64 28, !21, i64 32, !21, i64 36, !21, i64 40, !11, i64 44, !137, i64 48, !137, i64 64, !20, i64 80, !11, i64 88, !138, i64 96, !8, i64 120, !11, i64 128, !9, i64 132, !22, i64 276, !24, i64 278, !24, i64 279, !24, i64 280, !24, i64 281, !24, i64 282}
!137 = !{!"b2AABB", !20, i64 0, !20, i64 8}
!138 = !{!"b2Filter", !19, i64 0, !19, i64 8, !11, i64 16}
!139 = !{!6, !22, i64 1796}
!140 = !{!136, !22, i64 276}
!141 = !{!22, !22, i64 0}
!142 = distinct !{!142, !48}
!143 = !{!18, !11, i64 12}
!144 = !{!18, !8, i64 0}
!145 = !{!6, !8, i64 1032}
!146 = !{!6, !8, i64 1256}
!147 = distinct !{!147, !48}
!148 = !{!6, !21, i64 1684}
!149 = !{!150, !11, i64 88}
!150 = !{!"b2BodySim", !151, i64 0, !20, i64 16, !152, i64 24, !20, i64 32, !20, i64 40, !20, i64 48, !21, i64 56, !21, i64 60, !21, i64 64, !21, i64 68, !21, i64 72, !21, i64 76, !21, i64 80, !21, i64 84, !11, i64 88, !24, i64 92, !24, i64 93, !24, i64 94, !24, i64 95, !24, i64 96}
!151 = !{!"b2Transform", !20, i64 0, !152, i64 8}
!152 = !{!"b2Rot", !21, i64 0, !21, i64 4}
!153 = !{!154, !11, i64 56}
!154 = !{!"b2Body", !9, i64 0, !8, i64 32, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !21, i64 88, !21, i64 92, !21, i64 96, !21, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !22, i64 116, !24, i64 118, !24, i64 119, !24, i64 120, !24, i64 121}
!155 = !{!150, !24, i64 93}
!156 = !{i8 0, i8 2}
!157 = !{}
!158 = !{!150, !24, i64 92}
!159 = !{!136, !11, i64 88}
!160 = !{!136, !11, i64 12}
!161 = distinct !{!161, !48}
!162 = !{!136, !24, i64 282}
!163 = distinct !{!163, !48}
!164 = distinct !{!164, !48}
!165 = distinct !{!165, !48}
!166 = !{!6, !21, i64 1688}
!167 = !{!150, !24, i64 96}
!168 = !{!6, !11, i64 1040}
!169 = distinct !{!169, !48}
!170 = distinct !{!170, !48}
!171 = !{!6, !24, i64 1798}
!172 = distinct !{!172, !48}
!173 = !{!27, !8, i64 64}
!174 = distinct !{!174, !48}
!175 = !{!6, !21, i64 1692}
!176 = !{!177, !11, i64 0}
!177 = !{!"b2IslandSim", !11, i64 0}
!178 = distinct !{!178, !48}


; Effective O3 passes: AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass