; LLVM IR from mtsamis/box2d-optimized :: testbed/test.ll (ZN4Test4StepER8Settings)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%class.DebugDraw = type { %class.b2Draw.base, i8, ptr, ptr, ptr }
%class.b2Draw.base = type <{ ptr, i32 }>
%struct.b2Profile = type { float, float, float, float, float }
%struct.b2Color = type { float, float, float, float }
%struct.b2Vec2 = type { float, float }
%class.b2CircleShape = type { %class.b2Shape, %struct.b2Vec2 }
%class.b2Shape = type { ptr, i32, float }
%class.QueryCallback2 = type { %class.b2QueryCallback, ptr, ptr, %struct.b2Vec2 }
%class.b2QueryCallback = type { ptr }
%struct.b2AABB = type { %struct.b2Vec2, %struct.b2Vec2 }
%struct.b2Transform = type { %struct.b2Vec2, %struct.b2Rot }
%struct.b2Rot = type { float, float }
%struct.Settings = type <{ i32, i32, i32, float, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [3 x i8] }>
%class.Test = type { %class.b2ContactListener, ptr, %struct.b2AABB, [2048 x %struct.ContactPoint], i32, %class.DestructionListener, i32, ptr, ptr, ptr, ptr, i8, %struct.b2Vec2, %struct.b2Vec2, %struct.b2Vec2, i8, %struct.b2Vec2, i32, i32, %struct.b2Profile, %struct.b2Profile }
%class.b2ContactListener = type { ptr }
%struct.ContactPoint = type { ptr, ptr, %struct.b2Vec2, %struct.b2Vec2, i32, float, float, float }
%class.DestructionListener = type { %class.b2DestructionListener, ptr }
%class.b2DestructionListener = type { ptr }

@g_debugDraw = external global %class.DebugDraw, align 8
@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [48 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6b2AABBC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

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

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

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

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

declare void @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef, ptr noundef, ...) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZmiRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #5

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) #5

declare void @_ZN7b2World9QueryAABBEP15b2QueryCallbackRK6b2AABB(ptr noundef nonnull align 8 dereferenceable(103352), ptr noundef, ptr noundef nonnull align 4 dereferenceable(16)) #4

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZmlfRK6b2Vec2(float noundef, ptr noundef nonnull align 4 dereferenceable(8)) #5

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7b2ShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Test4StepER8Settings(ptr noundef nonnull align 8 dereferenceable(98488) %0, ptr noundef nonnull align 4 dereferenceable(45) %1) unnamed_addr #7 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca float, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca %struct.b2Profile, align 4
  %15 = alloca float, align 4
  %16 = alloca %struct.b2Color, align 4
  %17 = alloca float, align 4
  %18 = alloca %struct.b2Vec2, align 4
  %19 = alloca %struct.b2Vec2, align 4
  %20 = alloca %struct.b2Vec2, align 4
  %21 = alloca %struct.b2Vec2, align 4
  %22 = alloca %struct.b2Vec2, align 4
  %23 = alloca %struct.b2Vec2, align 4
  %24 = alloca %class.b2CircleShape, align 8
  %25 = alloca %class.QueryCallback2, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca %struct.b2AABB, align 4
  %29 = alloca %struct.b2Transform, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca %struct.b2Color, align 4
  %35 = alloca %struct.b2Color, align 4
  %36 = alloca %struct.b2Vec2, align 4
  %37 = alloca %struct.b2Vec2, align 4
  %38 = alloca %struct.b2Vec2, align 4
  %39 = alloca %struct.b2Color, align 4
  %40 = alloca %struct.b2Vec2, align 4
  %41 = alloca %struct.b2Vec2, align 4
  %42 = alloca %struct.b2Vec2, align 4
  %43 = alloca %struct.b2Color, align 4
  %44 = alloca %struct.b2Vec2, align 4
  %45 = alloca %struct.b2Vec2, align 4
  %46 = alloca %struct.b2Vec2, align 4
  %47 = alloca %struct.b2Vec2, align 4
  %48 = alloca %struct.b2Color, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %49 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #10
  %50 = load ptr, ptr %4, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.Settings, ptr %50, i32 0, i32 3
  %52 = load float, ptr %51, align 4, !tbaa !9
  %53 = fcmp ogt float %52, 0.000000e+00
  br i1 %53, label %54, label %59

54:                                               ; preds = %2
  %55 = load ptr, ptr %4, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.Settings, ptr %55, i32 0, i32 3
  %57 = load float, ptr %56, align 4, !tbaa !9
  %58 = fdiv float 1.000000e+00, %57
  br label %60

59:                                               ; preds = %2
  br label %60

60:                                               ; preds = %59, %54
  %61 = phi float [ %58, %54 ], [ 0.000000e+00, %59 ]
  store float %61, ptr %5, align 4, !tbaa !14
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.Settings, ptr %62, i32 0, i32 22
  %64 = load i8, ptr %63, align 1, !tbaa !15, !range !16, !noundef !17
  %65 = trunc i8 %64 to i1
  br i1 %65, label %66, label %83

66:                                               ; preds = %60
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.Settings, ptr %67, i32 0, i32 23
  %69 = load i8, ptr %68, align 4, !tbaa !18, !range !16, !noundef !17
  %70 = trunc i8 %69 to i1
  br i1 %70, label %71, label %74

71:                                               ; preds = %66
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.Settings, ptr %72, i32 0, i32 23
  store i8 0, ptr %73, align 4, !tbaa !18
  br label %75

74:                                               ; preds = %66
  store float 0.000000e+00, ptr %5, align 4, !tbaa !14
  br label %75

75:                                               ; preds = %74, %71
  %76 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %77 = load i32, ptr %76, align 8, !tbaa !19
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %77, ptr noundef @.str)
  %78 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %79 = load i32, ptr %78, align 4, !tbaa !27
  %80 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %81 = load i32, ptr %80, align 8, !tbaa !19
  %82 = add nsw i32 %81, %79
  store i32 %82, ptr %80, align 8, !tbaa !19
  br label %83

83:                                               ; preds = %75, %60
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  store i32 0, ptr %6, align 4, !tbaa !28
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.Settings, ptr %84, i32 0, i32 7
  %86 = load i8, ptr %85, align 4, !tbaa !29, !range !16, !noundef !17
  %87 = trunc i8 %86 to i1
  %88 = zext i1 %87 to i32
  %89 = mul nsw i32 %88, 1
  %90 = load i32, ptr %6, align 4, !tbaa !28
  %91 = add i32 %90, %89
  store i32 %91, ptr %6, align 4, !tbaa !28
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.Settings, ptr %92, i32 0, i32 8
  %94 = load i8, ptr %93, align 1, !tbaa !30, !range !16, !noundef !17
  %95 = trunc i8 %94 to i1
  %96 = zext i1 %95 to i32
  %97 = mul nsw i32 %96, 2
  %98 = load i32, ptr %6, align 4, !tbaa !28
  %99 = add i32 %98, %97
  store i32 %99, ptr %6, align 4, !tbaa !28
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.Settings, ptr %100, i32 0, i32 9
  %102 = load i8, ptr %101, align 2, !tbaa !31, !range !16, !noundef !17
  %103 = trunc i8 %102 to i1
  %104 = zext i1 %103 to i32
  %105 = mul nsw i32 %104, 32
  %106 = load i32, ptr %6, align 4, !tbaa !28
  %107 = add i32 %106, %105
  store i32 %107, ptr %6, align 4, !tbaa !28
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.Settings, ptr %108, i32 0, i32 10
  %110 = load i8, ptr %109, align 1, !tbaa !32, !range !16, !noundef !17
  %111 = trunc i8 %110 to i1
  %112 = zext i1 %111 to i32
  %113 = mul nsw i32 %112, 4
  %114 = load i32, ptr %6, align 4, !tbaa !28
  %115 = add i32 %114, %113
  store i32 %115, ptr %6, align 4, !tbaa !28
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.Settings, ptr %116, i32 0, i32 15
  %118 = load i8, ptr %117, align 4, !tbaa !33, !range !16, !noundef !17
  %119 = trunc i8 %118 to i1
  %120 = zext i1 %119 to i32
  %121 = mul nsw i32 %120, 16
  %122 = load i32, ptr %6, align 4, !tbaa !28
  %123 = add i32 %122, %121
  store i32 %123, ptr %6, align 4, !tbaa !28
  %124 = load i32, ptr %6, align 4, !tbaa !28
  call void @_ZN6b2Draw8SetFlagsEj(ptr noundef nonnull align 8 dereferenceable(12) @g_debugDraw, i32 noundef %124)
  %125 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %126 = load ptr, ptr %125, align 8, !tbaa !34
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.Settings, ptr %127, i32 0, i32 21
  %129 = load i8, ptr %128, align 2, !tbaa !35, !range !16, !noundef !17
  %130 = trunc i8 %129 to i1
  call void @_ZN7b2World16SetAllowSleepingEb(ptr noundef nonnull align 8 dereferenceable(103352) %126, i1 noundef zeroext %130)
  %131 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %132 = load ptr, ptr %131, align 8, !tbaa !34
  %133 = load ptr, ptr %4, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.Settings, ptr %133, i32 0, i32 18
  %135 = load i8, ptr %134, align 1, !tbaa !36, !range !16, !noundef !17
  %136 = trunc i8 %135 to i1
  call void @_ZN7b2World15SetWarmStartingEb(ptr noundef nonnull align 8 dereferenceable(103352) %132, i1 noundef zeroext %136)
  %137 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %138 = load ptr, ptr %137, align 8, !tbaa !34
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.Settings, ptr %139, i32 0, i32 19
  %141 = load i8, ptr %140, align 4, !tbaa !37, !range !16, !noundef !17
  %142 = trunc i8 %141 to i1
  call void @_ZN7b2World20SetContinuousPhysicsEb(ptr noundef nonnull align 8 dereferenceable(103352) %138, i1 noundef zeroext %142)
  %143 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %144 = load ptr, ptr %143, align 8, !tbaa !34
  %145 = load ptr, ptr %4, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.Settings, ptr %145, i32 0, i32 20
  %147 = load i8, ptr %146, align 1, !tbaa !38, !range !16, !noundef !17
  %148 = trunc i8 %147 to i1
  call void @_ZN7b2World14SetSubSteppingEb(ptr noundef nonnull align 8 dereferenceable(103352) %144, i1 noundef zeroext %148)
  %149 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 4
  store i32 0, ptr %149, align 8, !tbaa !39
  %150 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %151 = load ptr, ptr %150, align 8, !tbaa !34
  %152 = load float, ptr %5, align 4, !tbaa !14
  %153 = load ptr, ptr %4, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.Settings, ptr %153, i32 0, i32 4
  %155 = load i32, ptr %154, align 4, !tbaa !40
  %156 = load ptr, ptr %4, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.Settings, ptr %156, i32 0, i32 5
  %158 = load i32, ptr %157, align 4, !tbaa !41
  %159 = load ptr, ptr %4, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.Settings, ptr %159, i32 0, i32 6
  %161 = load i32, ptr %160, align 4, !tbaa !42
  call void @_ZN7b2World4StepEfiii(ptr noundef nonnull align 8 dereferenceable(103352) %151, float noundef %152, i32 noundef %155, i32 noundef %158, i32 noundef %161)
  %162 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %163 = load ptr, ptr %162, align 8, !tbaa !34
  call void @_ZN7b2World9DebugDrawEv(ptr noundef nonnull align 8 dereferenceable(103352) %163)
  call void @_ZN9DebugDraw5FlushEv(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw)
  %164 = load float, ptr %5, align 4, !tbaa !14
  %165 = fcmp ogt float %164, 0.000000e+00
  br i1 %165, label %166, label %170

166:                                              ; preds = %83
  %167 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 17
  %168 = load i32, ptr %167, align 8, !tbaa !43
  %169 = add nsw i32 %168, 1
  store i32 %169, ptr %167, align 8, !tbaa !43
  br label %170

170:                                              ; preds = %166, %83
  %171 = load ptr, ptr %4, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.Settings, ptr %171, i32 0, i32 16
  %173 = load i8, ptr %172, align 1, !tbaa !44, !range !16, !noundef !17
  %174 = trunc i8 %173 to i1
  br i1 %174, label %175, label %210

175:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  %176 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %177 = load ptr, ptr %176, align 8, !tbaa !34
  %178 = call noundef i32 @_ZNK7b2World12GetBodyCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %177)
  store i32 %178, ptr %7, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  %179 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %180 = load ptr, ptr %179, align 8, !tbaa !34
  %181 = call noundef i32 @_ZNK7b2World15GetContactCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %180)
  store i32 %181, ptr %8, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #10
  %182 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %183 = load ptr, ptr %182, align 8, !tbaa !34
  %184 = call noundef i32 @_ZNK7b2World13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %183)
  store i32 %184, ptr %9, align 4, !tbaa !28
  %185 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %186 = load i32, ptr %185, align 8, !tbaa !19
  %187 = load i32, ptr %7, align 4, !tbaa !28
  %188 = load i32, ptr %8, align 4, !tbaa !28
  %189 = load i32, ptr %9, align 4, !tbaa !28
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %186, ptr noundef @.str.1, i32 noundef %187, i32 noundef %188, i32 noundef %189)
  %190 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %191 = load i32, ptr %190, align 4, !tbaa !27
  %192 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %193 = load i32, ptr %192, align 8, !tbaa !19
  %194 = add nsw i32 %193, %191
  store i32 %194, ptr %192, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #10
  %195 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %196 = load ptr, ptr %195, align 8, !tbaa !34
  %197 = call noundef i32 @_ZNK7b2World13GetProxyCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %196)
  store i32 %197, ptr %10, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #10
  %198 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %199 = load ptr, ptr %198, align 8, !tbaa !34
  %200 = call noundef i32 @_ZNK7b2World13GetTreeHeightEv(ptr noundef nonnull align 8 dereferenceable(103352) %199)
  store i32 %200, ptr %11, align 4, !tbaa !28
  %201 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %202 = load i32, ptr %201, align 8, !tbaa !19
  %203 = load i32, ptr %10, align 4, !tbaa !28
  %204 = load i32, ptr %11, align 4, !tbaa !28
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %202, ptr noundef @.str.2, i32 noundef %203, i32 noundef %204)
  %205 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %206 = load i32, ptr %205, align 4, !tbaa !27
  %207 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %208 = load i32, ptr %207, align 8, !tbaa !19
  %209 = add nsw i32 %208, %206
  store i32 %209, ptr %207, align 8, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  br label %210

210:                                              ; preds = %175, %170
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %211 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %212 = load ptr, ptr %211, align 8, !tbaa !34
  %213 = call noundef nonnull align 4 dereferenceable(20) ptr @_ZNK7b2World10GetProfileEv(ptr noundef nonnull align 8 dereferenceable(103352) %212)
  store ptr %213, ptr %12, align 8, !tbaa !5
  %214 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %215 = getelementptr inbounds %struct.b2Profile, ptr %214, i32 0, i32 0
  %216 = load float, ptr %215, align 8, !tbaa !45
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.b2Profile, ptr %217, i32 0, i32 0
  %219 = load float, ptr %218, align 4, !tbaa !46
  %220 = call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %216, float noundef %219)
  %221 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %222 = getelementptr inbounds %struct.b2Profile, ptr %221, i32 0, i32 0
  store float %220, ptr %222, align 8, !tbaa !45
  %223 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %224 = getelementptr inbounds %struct.b2Profile, ptr %223, i32 0, i32 1
  %225 = load float, ptr %224, align 4, !tbaa !47
  %226 = load ptr, ptr %12, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.b2Profile, ptr %226, i32 0, i32 1
  %228 = load float, ptr %227, align 4, !tbaa !48
  %229 = call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %225, float noundef %228)
  %230 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %231 = getelementptr inbounds %struct.b2Profile, ptr %230, i32 0, i32 1
  store float %229, ptr %231, align 4, !tbaa !47
  %232 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %233 = getelementptr inbounds %struct.b2Profile, ptr %232, i32 0, i32 2
  %234 = load float, ptr %233, align 8, !tbaa !49
  %235 = load ptr, ptr %12, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.b2Profile, ptr %235, i32 0, i32 2
  %237 = load float, ptr %236, align 4, !tbaa !50
  %238 = call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %234, float noundef %237)
  %239 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %240 = getelementptr inbounds %struct.b2Profile, ptr %239, i32 0, i32 2
  store float %238, ptr %240, align 8, !tbaa !49
  %241 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %242 = getelementptr inbounds %struct.b2Profile, ptr %241, i32 0, i32 4
  %243 = load float, ptr %242, align 8, !tbaa !51
  %244 = load ptr, ptr %12, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.b2Profile, ptr %244, i32 0, i32 4
  %246 = load float, ptr %245, align 4, !tbaa !52
  %247 = call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %243, float noundef %246)
  %248 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %249 = getelementptr inbounds %struct.b2Profile, ptr %248, i32 0, i32 4
  store float %247, ptr %249, align 8, !tbaa !51
  %250 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %251 = getelementptr inbounds %struct.b2Profile, ptr %250, i32 0, i32 3
  %252 = load float, ptr %251, align 4, !tbaa !53
  %253 = load ptr, ptr %12, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.b2Profile, ptr %253, i32 0, i32 3
  %255 = load float, ptr %254, align 4, !tbaa !54
  %256 = call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %252, float noundef %255)
  %257 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %258 = getelementptr inbounds %struct.b2Profile, ptr %257, i32 0, i32 3
  store float %256, ptr %258, align 4, !tbaa !53
  %259 = load ptr, ptr %12, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.b2Profile, ptr %259, i32 0, i32 0
  %261 = load float, ptr %260, align 4, !tbaa !46
  %262 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %263 = getelementptr inbounds %struct.b2Profile, ptr %262, i32 0, i32 0
  %264 = load float, ptr %263, align 4, !tbaa !55
  %265 = fadd float %264, %261
  store float %265, ptr %263, align 4, !tbaa !55
  %266 = load ptr, ptr %12, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.b2Profile, ptr %266, i32 0, i32 1
  %268 = load float, ptr %267, align 4, !tbaa !48
  %269 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %270 = getelementptr inbounds %struct.b2Profile, ptr %269, i32 0, i32 1
  %271 = load float, ptr %270, align 4, !tbaa !56
  %272 = fadd float %271, %268
  store float %272, ptr %270, align 4, !tbaa !56
  %273 = load ptr, ptr %12, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.b2Profile, ptr %273, i32 0, i32 2
  %275 = load float, ptr %274, align 4, !tbaa !50
  %276 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %277 = getelementptr inbounds %struct.b2Profile, ptr %276, i32 0, i32 2
  %278 = load float, ptr %277, align 4, !tbaa !57
  %279 = fadd float %278, %275
  store float %279, ptr %277, align 4, !tbaa !57
  %280 = load ptr, ptr %12, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.b2Profile, ptr %280, i32 0, i32 4
  %282 = load float, ptr %281, align 4, !tbaa !52
  %283 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %284 = getelementptr inbounds %struct.b2Profile, ptr %283, i32 0, i32 4
  %285 = load float, ptr %284, align 4, !tbaa !58
  %286 = fadd float %285, %282
  store float %286, ptr %284, align 4, !tbaa !58
  %287 = load ptr, ptr %12, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.b2Profile, ptr %287, i32 0, i32 3
  %289 = load float, ptr %288, align 4, !tbaa !54
  %290 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %291 = getelementptr inbounds %struct.b2Profile, ptr %290, i32 0, i32 3
  %292 = load float, ptr %291, align 4, !tbaa !59
  %293 = fadd float %292, %289
  store float %293, ptr %291, align 4, !tbaa !59
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  %294 = load ptr, ptr %4, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.Settings, ptr %294, i32 0, i32 17
  %296 = load i8, ptr %295, align 2, !tbaa !60, !range !16, !noundef !17
  %297 = trunc i8 %296 to i1
  br i1 %297, label %298, label %431

298:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %299 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %300 = load ptr, ptr %299, align 8, !tbaa !34
  %301 = call noundef nonnull align 4 dereferenceable(20) ptr @_ZNK7b2World10GetProfileEv(ptr noundef nonnull align 8 dereferenceable(103352) %300)
  store ptr %301, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 20, ptr %14) #10
  call void @llvm.memset.p0.i64(ptr align 4 %14, i8 0, i64 20, i1 false)
  %302 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 17
  %303 = load i32, ptr %302, align 8, !tbaa !43
  %304 = icmp sgt i32 %303, 0
  br i1 %304, label %305, label %340

305:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  %306 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 17
  %307 = load i32, ptr %306, align 8, !tbaa !43
  %308 = sitofp i32 %307 to float
  %309 = fdiv float 1.000000e+00, %308
  store float %309, ptr %15, align 4, !tbaa !14
  %310 = load float, ptr %15, align 4, !tbaa !14
  %311 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %312 = getelementptr inbounds %struct.b2Profile, ptr %311, i32 0, i32 0
  %313 = load float, ptr %312, align 4, !tbaa !55
  %314 = fmul float %310, %313
  %315 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 0
  store float %314, ptr %315, align 4, !tbaa !46
  %316 = load float, ptr %15, align 4, !tbaa !14
  %317 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %318 = getelementptr inbounds %struct.b2Profile, ptr %317, i32 0, i32 1
  %319 = load float, ptr %318, align 4, !tbaa !56
  %320 = fmul float %316, %319
  %321 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 1
  store float %320, ptr %321, align 4, !tbaa !48
  %322 = load float, ptr %15, align 4, !tbaa !14
  %323 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %324 = getelementptr inbounds %struct.b2Profile, ptr %323, i32 0, i32 2
  %325 = load float, ptr %324, align 4, !tbaa !57
  %326 = fmul float %322, %325
  %327 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 2
  store float %326, ptr %327, align 4, !tbaa !50
  %328 = load float, ptr %15, align 4, !tbaa !14
  %329 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %330 = getelementptr inbounds %struct.b2Profile, ptr %329, i32 0, i32 4
  %331 = load float, ptr %330, align 4, !tbaa !58
  %332 = fmul float %328, %331
  %333 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 4
  store float %332, ptr %333, align 4, !tbaa !52
  %334 = load float, ptr %15, align 4, !tbaa !14
  %335 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 20
  %336 = getelementptr inbounds %struct.b2Profile, ptr %335, i32 0, i32 3
  %337 = load float, ptr %336, align 4, !tbaa !59
  %338 = fmul float %334, %337
  %339 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 3
  store float %338, ptr %339, align 4, !tbaa !54
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  br label %340

340:                                              ; preds = %305, %298
  %341 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %342 = load i32, ptr %341, align 8, !tbaa !19
  %343 = load ptr, ptr %13, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.b2Profile, ptr %343, i32 0, i32 0
  %345 = load float, ptr %344, align 4, !tbaa !46
  %346 = fpext float %345 to double
  %347 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 0
  %348 = load float, ptr %347, align 4, !tbaa !46
  %349 = fpext float %348 to double
  %350 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %351 = getelementptr inbounds %struct.b2Profile, ptr %350, i32 0, i32 0
  %352 = load float, ptr %351, align 8, !tbaa !45
  %353 = fpext float %352 to double
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %342, ptr noundef @.str.3, double noundef %346, double noundef %349, double noundef %353)
  %354 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %355 = load i32, ptr %354, align 4, !tbaa !27
  %356 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %357 = load i32, ptr %356, align 8, !tbaa !19
  %358 = add nsw i32 %357, %355
  store i32 %358, ptr %356, align 8, !tbaa !19
  %359 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %360 = load i32, ptr %359, align 8, !tbaa !19
  %361 = load ptr, ptr %13, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.b2Profile, ptr %361, i32 0, i32 1
  %363 = load float, ptr %362, align 4, !tbaa !48
  %364 = fpext float %363 to double
  %365 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 1
  %366 = load float, ptr %365, align 4, !tbaa !48
  %367 = fpext float %366 to double
  %368 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %369 = getelementptr inbounds %struct.b2Profile, ptr %368, i32 0, i32 1
  %370 = load float, ptr %369, align 4, !tbaa !47
  %371 = fpext float %370 to double
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %360, ptr noundef @.str.4, double noundef %364, double noundef %367, double noundef %371)
  %372 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %373 = load i32, ptr %372, align 4, !tbaa !27
  %374 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %375 = load i32, ptr %374, align 8, !tbaa !19
  %376 = add nsw i32 %375, %373
  store i32 %376, ptr %374, align 8, !tbaa !19
  %377 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %378 = load i32, ptr %377, align 8, !tbaa !19
  %379 = load ptr, ptr %13, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.b2Profile, ptr %379, i32 0, i32 2
  %381 = load float, ptr %380, align 4, !tbaa !50
  %382 = fpext float %381 to double
  %383 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 2
  %384 = load float, ptr %383, align 4, !tbaa !50
  %385 = fpext float %384 to double
  %386 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %387 = getelementptr inbounds %struct.b2Profile, ptr %386, i32 0, i32 2
  %388 = load float, ptr %387, align 8, !tbaa !49
  %389 = fpext float %388 to double
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %378, ptr noundef @.str.5, double noundef %382, double noundef %385, double noundef %389)
  %390 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %391 = load i32, ptr %390, align 4, !tbaa !27
  %392 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %393 = load i32, ptr %392, align 8, !tbaa !19
  %394 = add nsw i32 %393, %391
  store i32 %394, ptr %392, align 8, !tbaa !19
  %395 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %396 = load i32, ptr %395, align 8, !tbaa !19
  %397 = load ptr, ptr %13, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.b2Profile, ptr %397, i32 0, i32 4
  %399 = load float, ptr %398, align 4, !tbaa !52
  %400 = fpext float %399 to double
  %401 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 4
  %402 = load float, ptr %401, align 4, !tbaa !52
  %403 = fpext float %402 to double
  %404 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %405 = getelementptr inbounds %struct.b2Profile, ptr %404, i32 0, i32 4
  %406 = load float, ptr %405, align 8, !tbaa !51
  %407 = fpext float %406 to double
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %396, ptr noundef @.str.6, double noundef %400, double noundef %403, double noundef %407)
  %408 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %409 = load i32, ptr %408, align 4, !tbaa !27
  %410 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %411 = load i32, ptr %410, align 8, !tbaa !19
  %412 = add nsw i32 %411, %409
  store i32 %412, ptr %410, align 8, !tbaa !19
  %413 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %414 = load i32, ptr %413, align 8, !tbaa !19
  %415 = load ptr, ptr %13, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.b2Profile, ptr %415, i32 0, i32 3
  %417 = load float, ptr %416, align 4, !tbaa !54
  %418 = fpext float %417 to double
  %419 = getelementptr inbounds %struct.b2Profile, ptr %14, i32 0, i32 3
  %420 = load float, ptr %419, align 4, !tbaa !54
  %421 = fpext float %420 to double
  %422 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 19
  %423 = getelementptr inbounds %struct.b2Profile, ptr %422, i32 0, i32 3
  %424 = load float, ptr %423, align 4, !tbaa !53
  %425 = fpext float %424 to double
  call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %414, ptr noundef @.str.7, double noundef %418, double noundef %421, double noundef %425)
  %426 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 18
  %427 = load i32, ptr %426, align 4, !tbaa !27
  %428 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 6
  %429 = load i32, ptr %428, align 8, !tbaa !19
  %430 = add nsw i32 %429, %427
  store i32 %430, ptr %428, align 8, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 20, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  br label %431

431:                                              ; preds = %340, %210
  %432 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 15
  %433 = load i8, ptr %432, align 4, !tbaa !61, !range !16, !noundef !17
  %434 = trunc i8 %433 to i1
  br i1 %434, label %435, label %439

435:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #10
  call void @_ZN7b2ColorC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %16)
  call void @_ZN7b2Color3SetEffff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %436 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 14
  call void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %436, float noundef 4.000000e+00, ptr noundef nonnull align 4 dereferenceable(16) %16)
  call void @_ZN7b2Color3SetEffff(ptr noundef nonnull align 4 dereferenceable(16) %16, float noundef 0x3FE99999A0000000, float noundef 0x3FE99999A0000000, float noundef 0x3FE99999A0000000, float noundef 1.000000e+00)
  %437 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 16
  %438 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 14
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %437, ptr noundef nonnull align 4 dereferenceable(8) %438, ptr noundef nonnull align 4 dereferenceable(16) %16)
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #10
  br label %439

439:                                              ; preds = %435, %431
  %440 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 11
  %441 = load i8, ptr %440, align 8, !tbaa !62, !range !16, !noundef !17
  %442 = trunc i8 %441 to i1
  br i1 %442, label %443, label %494

443:                                              ; preds = %439
  %444 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 10
  %445 = load ptr, ptr %444, align 8, !tbaa !63
  %446 = icmp ne ptr %445, null
  br i1 %446, label %494, label %447

447:                                              ; preds = %443
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  store float 0x3FB99999A0000000, ptr %17, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %448 = load float, ptr %17, align 4, !tbaa !14
  %449 = fdiv float 2.000000e+00, %448
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %450 = load float, ptr %17, align 4, !tbaa !14
  %451 = fdiv float 1.000000e+00, %450
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %452 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 16
  %453 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 12
  %454 = call <2 x float> @_ZmiRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %452, ptr noundef nonnull align 4 dereferenceable(8) %453)
  store <2 x float> %454, ptr %21, align 4
  %455 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %451, ptr noundef nonnull align 4 dereferenceable(8) %21)
  store <2 x float> %455, ptr %20, align 4
  %456 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 13
  %457 = call <2 x float> @_ZmiRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 4 dereferenceable(8) %456)
  store <2 x float> %457, ptr %19, align 4
  %458 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %449, ptr noundef nonnull align 4 dereferenceable(8) %19)
  store <2 x float> %458, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %459 = load float, ptr %5, align 4, !tbaa !14
  %460 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %459, ptr noundef nonnull align 4 dereferenceable(8) %18)
  store <2 x float> %460, ptr %22, align 4
  %461 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 13
  call void @_ZN6b2Vec2pLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %461, ptr noundef nonnull align 4 dereferenceable(8) %22)
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  %462 = load float, ptr %5, align 4, !tbaa !14
  %463 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 13
  %464 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %462, ptr noundef nonnull align 4 dereferenceable(8) %463)
  store <2 x float> %464, ptr %23, align 4
  %465 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 12
  call void @_ZN6b2Vec2pLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %465, ptr noundef nonnull align 4 dereferenceable(8) %23)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #10
  call void @_ZN13b2CircleShapeC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24)
  %466 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 12
  %467 = getelementptr inbounds %class.b2CircleShape, ptr %24, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %467, ptr align 4 %466, i64 8, i1 false), !tbaa.struct !64
  %468 = getelementptr inbounds %class.b2Shape, ptr %24, i32 0, i32 2
  store float 2.000000e+00, ptr %468, align 4, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #10
  %469 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 8
  %470 = load ptr, ptr %469, align 8, !tbaa !68
  %471 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 13
  invoke void @_ZN14QueryCallback2C2EP16b2ParticleSystemPK7b2ShapeRK6b2Vec2(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef %470, ptr noundef %24, ptr noundef nonnull align 4 dereferenceable(8) %471)
          to label %472 unwind label %480

472:                                              ; preds = %447
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #10
  invoke void @_ZN6b2AABBC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %28)
          to label %473 unwind label %484

473:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #10
  invoke void @_ZN11b2TransformC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %29)
          to label %474 unwind label %488

474:                                              ; preds = %473
  invoke void @_ZN11b2Transform11SetIdentityEv(ptr noundef nonnull align 4 dereferenceable(16) %29)
          to label %475 unwind label %488

475:                                              ; preds = %474
  invoke void @_ZNK13b2CircleShape11ComputeAABBEP6b2AABBRK11b2Transform(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef %28, ptr noundef nonnull align 4 dereferenceable(16) %29)
          to label %476 unwind label %488

476:                                              ; preds = %475
  %477 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 7
  %478 = load ptr, ptr %477, align 8, !tbaa !34
  invoke void @_ZN7b2World9QueryAABBEP15b2QueryCallbackRK6b2AABB(ptr noundef nonnull align 8 dereferenceable(103352) %478, ptr noundef %25, ptr noundef nonnull align 4 dereferenceable(16) %28)
          to label %479 unwind label %488

479:                                              ; preds = %476
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  call void @_ZN15b2QueryCallbackD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #10
  call void @_ZN7b2ShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  br label %494

480:                                              ; preds = %447
  %481 = landingpad { ptr, i32 }
          cleanup
  %482 = extractvalue { ptr, i32 } %481, 0
  store ptr %482, ptr %26, align 8
  %483 = extractvalue { ptr, i32 } %481, 1
  store i32 %483, ptr %27, align 4
  br label %493

484:                                              ; preds = %472
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %26, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %27, align 4
  br label %492

488:                                              ; preds = %476, %475, %474, %473
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %26, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #10
  br label %492

492:                                              ; preds = %488, %484
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #10
  call void @_ZN15b2QueryCallbackD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #10
  br label %493

493:                                              ; preds = %492, %480
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #10
  call void @_ZN7b2ShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  br label %586

494:                                              ; preds = %479, %443, %439
  %495 = load ptr, ptr %4, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.Settings, ptr %495, i32 0, i32 11
  %497 = load i8, ptr %496, align 4, !tbaa !69, !range !16, !noundef !17
  %498 = trunc i8 %497 to i1
  br i1 %498, label %499, label %585

499:                                              ; preds = %494
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  store float 0x3FB99999A0000000, ptr %30, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  store float 0x3FD3333340000000, ptr %31, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  store i32 0, ptr %32, align 4, !tbaa !28
  br label %500

500:                                              ; preds = %581, %499
  %501 = load i32, ptr %32, align 4, !tbaa !28
  %502 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 4
  %503 = load i32, ptr %502, align 8, !tbaa !39
  %504 = icmp slt i32 %501, %503
  br i1 %504, label %506, label %505

505:                                              ; preds = %500
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  br label %584

506:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #10
  %507 = getelementptr inbounds %class.Test, ptr %49, i32 0, i32 3
  %508 = getelementptr inbounds [2048 x %struct.ContactPoint], ptr %507, i64 0, i64 0
  %509 = load i32, ptr %32, align 4, !tbaa !28
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds %struct.ContactPoint, ptr %508, i64 %510
  store ptr %511, ptr %33, align 8, !tbaa !5
  %512 = load ptr, ptr %33, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.ContactPoint, ptr %512, i32 0, i32 4
  %514 = load i32, ptr %513, align 8, !tbaa !70
  %515 = icmp eq i32 %514, 1
  br i1 %515, label %516, label %519

516:                                              ; preds = %506
  %517 = load ptr, ptr %33, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.ContactPoint, ptr %517, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #10
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %34, float noundef 0x3FD3333340000000, float noundef 0x3FEE666660000000, float noundef 0x3FD3333340000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %518, float noundef 1.000000e+01, ptr noundef nonnull align 4 dereferenceable(16) %34)
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #10
  br label %528

519:                                              ; preds = %506
  %520 = load ptr, ptr %33, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.ContactPoint, ptr %520, i32 0, i32 4
  %522 = load i32, ptr %521, align 8, !tbaa !70
  %523 = icmp eq i32 %522, 2
  br i1 %523, label %524, label %527

524:                                              ; preds = %519
  %525 = load ptr, ptr %33, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.ContactPoint, ptr %525, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #10
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %35, float noundef 0x3FD3333340000000, float noundef 0x3FD3333340000000, float noundef 0x3FEE666660000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %526, float noundef 5.000000e+00, ptr noundef nonnull align 4 dereferenceable(16) %35)
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #10
  br label %527

527:                                              ; preds = %524, %519
  br label %528

528:                                              ; preds = %527, %516
  %529 = load ptr, ptr %4, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.Settings, ptr %529, i32 0, i32 12
  %531 = load i8, ptr %530, align 1, !tbaa !73, !range !16, !noundef !17
  %532 = trunc i8 %531 to i1
  %533 = zext i1 %532 to i32
  %534 = icmp eq i32 %533, 1
  br i1 %534, label %535, label %542

535:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %536 = load ptr, ptr %33, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.ContactPoint, ptr %536, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 8 %537, i64 8, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #10
  %538 = load ptr, ptr %33, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.ContactPoint, ptr %538, i32 0, i32 2
  %540 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef 0x3FD3333340000000, ptr noundef nonnull align 4 dereferenceable(8) %539)
  store <2 x float> %540, ptr %38, align 4
  %541 = call <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %36, ptr noundef nonnull align 4 dereferenceable(8) %38)
  store <2 x float> %541, ptr %37, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #10
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %39, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %36, ptr noundef nonnull align 4 dereferenceable(8) %37, ptr noundef nonnull align 4 dereferenceable(16) %39)
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %561

542:                                              ; preds = %528
  %543 = load ptr, ptr %4, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.Settings, ptr %543, i32 0, i32 13
  %545 = load i8, ptr %544, align 2, !tbaa !74, !range !16, !noundef !17
  %546 = trunc i8 %545 to i1
  %547 = zext i1 %546 to i32
  %548 = icmp eq i32 %547, 1
  br i1 %548, label %549, label %560

549:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %550 = load ptr, ptr %33, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.ContactPoint, ptr %550, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 8 %551, i64 8, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %552 = load ptr, ptr %33, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.ContactPoint, ptr %552, i32 0, i32 5
  %554 = load float, ptr %553, align 4, !tbaa !75
  %555 = fmul float 0x3FB99999A0000000, %554
  %556 = load ptr, ptr %33, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.ContactPoint, ptr %556, i32 0, i32 2
  %558 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %555, ptr noundef nonnull align 4 dereferenceable(8) %557)
  store <2 x float> %558, ptr %42, align 4
  %559 = call <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %40, ptr noundef nonnull align 4 dereferenceable(8) %42)
  store <2 x float> %559, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #10
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %43, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 0x3FD3333340000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %40, ptr noundef nonnull align 4 dereferenceable(8) %41, ptr noundef nonnull align 4 dereferenceable(16) %43)
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %560

560:                                              ; preds = %549, %542
  br label %561

561:                                              ; preds = %560, %535
  %562 = load ptr, ptr %4, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.Settings, ptr %562, i32 0, i32 14
  %564 = load i8, ptr %563, align 1, !tbaa !76, !range !16, !noundef !17
  %565 = trunc i8 %564 to i1
  %566 = zext i1 %565 to i32
  %567 = icmp eq i32 %566, 1
  br i1 %567, label %568, label %580

568:                                              ; preds = %561
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %569 = load ptr, ptr %33, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.ContactPoint, ptr %569, i32 0, i32 2
  %571 = call <2 x float> @_Z7b2CrossRK6b2Vec2f(ptr noundef nonnull align 4 dereferenceable(8) %570, float noundef 1.000000e+00)
  store <2 x float> %571, ptr %44, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %572 = load ptr, ptr %33, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.ContactPoint, ptr %572, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 8 %573, i64 8, i1 false), !tbaa.struct !64
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  %574 = load ptr, ptr %33, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.ContactPoint, ptr %574, i32 0, i32 6
  %576 = load float, ptr %575, align 8, !tbaa !77
  %577 = fmul float 0x3FB99999A0000000, %576
  %578 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %577, ptr noundef nonnull align 4 dereferenceable(8) %44)
  store <2 x float> %578, ptr %47, align 4
  %579 = call <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %45, ptr noundef nonnull align 4 dereferenceable(8) %47)
  store <2 x float> %579, ptr %46, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #10
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %48, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 0x3FD3333340000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %45, ptr noundef nonnull align 4 dereferenceable(8) %46, ptr noundef nonnull align 4 dereferenceable(16) %48)
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %580

580:                                              ; preds = %568, %561
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #10
  br label %581

581:                                              ; preds = %580
  %582 = load i32, ptr %32, align 4, !tbaa !28
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr %32, align 4, !tbaa !28
  br label %500, !llvm.loop !78

584:                                              ; preds = %505
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  br label %585

585:                                              ; preds = %584, %494
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  ret void

586:                                              ; preds = %493
  %587 = load ptr, ptr %26, align 8
  %588 = load i32, ptr %27, align 4
  %589 = insertvalue { ptr, i32 } poison, ptr %587, 0
  %590 = insertvalue { ptr, i32 } %589, i32 %588, 1
  resume { ptr, i32 } %590
}

declare void @_ZN6b2Draw8SetFlagsEj(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) #4

declare void @_ZN7b2World16SetAllowSleepingEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7b2World15SetWarmStartingEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7b2World20SetContinuousPhysicsEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7b2World14SetSubSteppingEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) #6 align 2

declare void @_ZN7b2World4StepEfiii(ptr noundef nonnull align 8 dereferenceable(103352), float noundef, i32 noundef, i32 noundef, i32 noundef) #4

declare void @_ZN7b2World9DebugDrawEv(ptr noundef nonnull align 8 dereferenceable(103352)) #4

declare void @_ZN9DebugDraw5FlushEv(ptr noundef nonnull align 8 dereferenceable(40)) #4

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

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

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

declare noundef i32 @_ZNK7b2World13GetProxyCountEv(ptr noundef nonnull align 8 dereferenceable(103352)) #4

declare noundef i32 @_ZNK7b2World13GetTreeHeightEv(ptr noundef nonnull align 8 dereferenceable(103352)) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(20) ptr @_ZNK7b2World10GetProfileEv(ptr noundef nonnull align 8 dereferenceable(103352)) #8 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_Z5b2MaxIfET_S0_S0_(float noundef, float noundef) #8

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

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

declare void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 4 dereferenceable(8), float noundef, ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #4

declare void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN14QueryCallback2C2EP16b2ParticleSystemPK7b2ShapeRK6b2Vec2(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #9 align 2

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

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

declare void @_ZNK13b2CircleShape11ComputeAABBEP6b2AABBRK11b2Transform(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #4

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_Z7b2CrossRK6b2Vec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 12}
!10 = !{!"_ZTS8Settings", !11, i64 0, !11, i64 4, !11, i64 8, !12, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !13, i64 28, !13, i64 29, !13, i64 30, !13, i64 31, !13, i64 32, !13, i64 33, !13, i64 34, !13, i64 35, !13, i64 36, !13, i64 37, !13, i64 38, !13, i64 39, !13, i64 40, !13, i64 41, !13, i64 42, !13, i64 43, !13, i64 44}
!11 = !{!"int", !7, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!"bool", !7, i64 0}
!14 = !{!12, !12, i64 0}
!15 = !{!10, !13, i64 43}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!10, !13, i64 44}
!19 = !{!20, !11, i64 98360}
!20 = !{!"_ZTS4Test", !21, i64 0, !6, i64 8, !22, i64 16, !7, i64 32, !11, i64 98336, !24, i64 98344, !11, i64 98360, !6, i64 98368, !6, i64 98376, !6, i64 98384, !6, i64 98392, !13, i64 98400, !23, i64 98404, !23, i64 98412, !23, i64 98420, !13, i64 98428, !23, i64 98432, !11, i64 98440, !11, i64 98444, !26, i64 98448, !26, i64 98468}
!21 = !{!"_ZTS17b2ContactListener"}
!22 = !{!"_ZTS6b2AABB", !23, i64 0, !23, i64 8}
!23 = !{!"_ZTS6b2Vec2", !12, i64 0, !12, i64 4}
!24 = !{!"_ZTS19DestructionListener", !25, i64 0, !6, i64 8}
!25 = !{!"_ZTS21b2DestructionListener"}
!26 = !{!"_ZTS9b2Profile", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16}
!27 = !{!20, !11, i64 98444}
!28 = !{!11, !11, i64 0}
!29 = !{!10, !13, i64 28}
!30 = !{!10, !13, i64 29}
!31 = !{!10, !13, i64 30}
!32 = !{!10, !13, i64 31}
!33 = !{!10, !13, i64 36}
!34 = !{!20, !6, i64 98368}
!35 = !{!10, !13, i64 42}
!36 = !{!10, !13, i64 39}
!37 = !{!10, !13, i64 40}
!38 = !{!10, !13, i64 41}
!39 = !{!20, !11, i64 98336}
!40 = !{!10, !11, i64 16}
!41 = !{!10, !11, i64 20}
!42 = !{!10, !11, i64 24}
!43 = !{!20, !11, i64 98440}
!44 = !{!10, !13, i64 37}
!45 = !{!20, !12, i64 98448}
!46 = !{!26, !12, i64 0}
!47 = !{!20, !12, i64 98452}
!48 = !{!26, !12, i64 4}
!49 = !{!20, !12, i64 98456}
!50 = !{!26, !12, i64 8}
!51 = !{!20, !12, i64 98464}
!52 = !{!26, !12, i64 16}
!53 = !{!20, !12, i64 98460}
!54 = !{!26, !12, i64 12}
!55 = !{!20, !12, i64 98468}
!56 = !{!20, !12, i64 98472}
!57 = !{!20, !12, i64 98476}
!58 = !{!20, !12, i64 98484}
!59 = !{!20, !12, i64 98480}
!60 = !{!10, !13, i64 38}
!61 = !{!20, !13, i64 98428}
!62 = !{!20, !13, i64 98400}
!63 = !{!20, !6, i64 98392}
!64 = !{i64 0, i64 4, !14, i64 4, i64 4, !14}
!65 = !{!66, !12, i64 12}
!66 = !{!"_ZTS7b2Shape", !67, i64 8, !12, i64 12}
!67 = !{!"_ZTSN7b2Shape4TypeE", !7, i64 0}
!68 = !{!20, !6, i64 98376}
!69 = !{!10, !13, i64 32}
!70 = !{!71, !72, i64 32}
!71 = !{!"_ZTS12ContactPoint", !6, i64 0, !6, i64 8, !23, i64 16, !23, i64 24, !72, i64 32, !12, i64 36, !12, i64 40, !12, i64 44}
!72 = !{!"_ZTS12b2PointState", !7, i64 0}
!73 = !{!10, !13, i64 33}
!74 = !{!10, !13, i64 34}
!75 = !{!71, !12, i64 36}
!76 = !{!10, !13, i64 35}
!77 = !{!71, !12, i64 40}
!78 = distinct !{!78, !79}
!79 = !{!"llvm.loop.mustprogress"}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%class.DebugDraw = type { %class.b2Draw.base, i8, ptr, ptr, ptr }
%class.b2Draw.base = type <{ ptr, i32 }>
%struct.b2Color = type { float, float, float, float }
%struct.b2Vec2 = type { float, float }
%class.b2CircleShape = type { %class.b2Shape, %struct.b2Vec2 }
%class.b2Shape = type { ptr, i32, float }
%class.QueryCallback2 = type { %class.b2QueryCallback, ptr, ptr, %struct.b2Vec2 }
%class.b2QueryCallback = type { ptr }
%struct.b2AABB = type { %struct.b2Vec2, %struct.b2Vec2 }
%struct.b2Transform = type { %struct.b2Vec2, %struct.b2Rot }
%struct.b2Rot = type { float, float }
%struct.ContactPoint = type { ptr, ptr, %struct.b2Vec2, %struct.b2Vec2, i32, float, float, float }

@g_debugDraw = external global %class.DebugDraw, align 8
@.str = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [48 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6b2AABBC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

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

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

declare void @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, i32 noundef, ptr noundef, ...) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZmiRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #3

declare void @_ZN7b2World9QueryAABBEP15b2QueryCallbackRK6b2AABB(ptr noundef nonnull align 8 dereferenceable(103352), ptr noundef, ptr noundef nonnull align 4 dereferenceable(16)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_ZmlfRK6b2Vec2(float noundef, ptr noundef nonnull align 4 dereferenceable(8)) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Test4StepER8Settings(ptr noundef nonnull align 8 dereferenceable(98488) %0, ptr nocapture noundef nonnull align 4 dereferenceable(45) %1) unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %struct.b2Color, align 4
  %4 = alloca %struct.b2Vec2, align 8
  %5 = alloca %struct.b2Vec2, align 8
  %6 = alloca %struct.b2Vec2, align 8
  %7 = alloca %struct.b2Vec2, align 8
  %8 = alloca %struct.b2Vec2, align 8
  %9 = alloca %struct.b2Vec2, align 8
  %10 = alloca %class.b2CircleShape, align 8
  %11 = alloca %class.QueryCallback2, align 8
  %12 = alloca %struct.b2AABB, align 4
  %13 = alloca %struct.b2Transform, align 4
  %14 = alloca %struct.b2Color, align 4
  %15 = alloca %struct.b2Color, align 4
  %16 = alloca %struct.b2Vec2, align 8
  %17 = alloca %struct.b2Vec2, align 8
  %18 = alloca %struct.b2Vec2, align 8
  %19 = alloca %struct.b2Color, align 4
  %20 = alloca %struct.b2Vec2, align 8
  %21 = alloca %struct.b2Vec2, align 8
  %22 = alloca %struct.b2Vec2, align 8
  %23 = alloca %struct.b2Color, align 4
  %24 = alloca %struct.b2Vec2, align 8
  %25 = alloca %struct.b2Vec2, align 8
  %26 = alloca %struct.b2Vec2, align 8
  %27 = alloca %struct.b2Vec2, align 8
  %28 = alloca %struct.b2Color, align 4
  %29 = getelementptr inbounds i8, ptr %1, i64 12
  %30 = load float, ptr %29, align 4, !tbaa !5
  %31 = fcmp ogt float %30, 0.000000e+00
  %32 = fdiv float 1.000000e+00, %30
  %33 = select i1 %31, float %32, float 0.000000e+00
  %34 = getelementptr inbounds i8, ptr %1, i64 43
  %35 = load i8, ptr %34, align 1, !tbaa !12, !range !13, !noundef !14
  %36 = trunc nuw i8 %35 to i1
  br i1 %36, label %37, label %49

37:                                               ; preds = %2
  %38 = getelementptr inbounds i8, ptr %1, i64 44
  %39 = load i8, ptr %38, align 4, !tbaa !15, !range !13, !noundef !14
  %40 = trunc nuw i8 %39 to i1
  br i1 %40, label %41, label %42

41:                                               ; preds = %37
  store i8 0, ptr %38, align 4, !tbaa !15
  br label %42

42:                                               ; preds = %37, %41
  %.0 = phi float [ %33, %41 ], [ 0.000000e+00, %37 ]
  %43 = getelementptr inbounds i8, ptr %0, i64 98360
  %44 = load i32, ptr %43, align 8, !tbaa !16
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %44, ptr noundef nonnull @.str)
  %45 = getelementptr inbounds i8, ptr %0, i64 98444
  %46 = load i32, ptr %45, align 4, !tbaa !25
  %47 = load i32, ptr %43, align 8, !tbaa !16
  %48 = add nsw i32 %47, %46
  store i32 %48, ptr %43, align 8, !tbaa !16
  br label %49

49:                                               ; preds = %42, %2
  %.1 = phi float [ %.0, %42 ], [ %33, %2 ]
  %50 = getelementptr inbounds i8, ptr %1, i64 28
  %51 = load i8, ptr %50, align 4, !tbaa !26, !range !13, !noundef !14
  %52 = getelementptr inbounds i8, ptr %1, i64 29
  %53 = load i8, ptr %52, align 1, !tbaa !27, !range !13, !noundef !14
  %54 = shl nuw nsw i8 %53, 1
  %55 = or disjoint i8 %54, %51
  %56 = getelementptr inbounds i8, ptr %1, i64 30
  %57 = load i8, ptr %56, align 2, !tbaa !28, !range !13, !noundef !14
  %58 = shl nuw nsw i8 %57, 5
  %59 = or disjoint i8 %55, %58
  %60 = getelementptr inbounds i8, ptr %1, i64 31
  %61 = load i8, ptr %60, align 1, !tbaa !29, !range !13, !noundef !14
  %62 = shl nuw nsw i8 %61, 2
  %63 = or disjoint i8 %59, %62
  %64 = getelementptr inbounds i8, ptr %1, i64 36
  %65 = load i8, ptr %64, align 4, !tbaa !30, !range !13, !noundef !14
  %66 = shl nuw nsw i8 %65, 4
  %67 = or disjoint i8 %63, %66
  %68 = zext nneg i8 %67 to i32
  tail call void @_ZN6b2Draw8SetFlagsEj(ptr noundef nonnull align 8 dereferenceable(12) @g_debugDraw, i32 noundef %68)
  %69 = getelementptr inbounds i8, ptr %0, i64 98368
  %70 = load ptr, ptr %69, align 8, !tbaa !31
  %71 = getelementptr inbounds i8, ptr %1, i64 42
  %72 = load i8, ptr %71, align 2, !tbaa !32, !range !13, !noundef !14
  %73 = trunc nuw i8 %72 to i1
  tail call void @_ZN7b2World16SetAllowSleepingEb(ptr noundef nonnull align 8 dereferenceable(103352) %70, i1 noundef zeroext %73)
  %74 = load ptr, ptr %69, align 8, !tbaa !31
  %75 = getelementptr inbounds i8, ptr %1, i64 39
  %76 = load i8, ptr %75, align 1, !tbaa !33, !range !13, !noundef !14
  %77 = trunc nuw i8 %76 to i1
  tail call void @_ZN7b2World15SetWarmStartingEb(ptr noundef nonnull align 8 dereferenceable(103352) %74, i1 noundef zeroext %77)
  %78 = load ptr, ptr %69, align 8, !tbaa !31
  %79 = getelementptr inbounds i8, ptr %1, i64 40
  %80 = load i8, ptr %79, align 4, !tbaa !34, !range !13, !noundef !14
  %81 = trunc nuw i8 %80 to i1
  tail call void @_ZN7b2World20SetContinuousPhysicsEb(ptr noundef nonnull align 8 dereferenceable(103352) %78, i1 noundef zeroext %81)
  %82 = load ptr, ptr %69, align 8, !tbaa !31
  %83 = getelementptr inbounds i8, ptr %1, i64 41
  %84 = load i8, ptr %83, align 1, !tbaa !35, !range !13, !noundef !14
  %85 = trunc nuw i8 %84 to i1
  tail call void @_ZN7b2World14SetSubSteppingEb(ptr noundef nonnull align 8 dereferenceable(103352) %82, i1 noundef zeroext %85)
  %86 = getelementptr inbounds i8, ptr %0, i64 98336
  store i32 0, ptr %86, align 8, !tbaa !36
  %87 = load ptr, ptr %69, align 8, !tbaa !31
  %88 = getelementptr inbounds i8, ptr %1, i64 16
  %89 = load i32, ptr %88, align 4, !tbaa !37
  %90 = getelementptr inbounds i8, ptr %1, i64 20
  %91 = load i32, ptr %90, align 4, !tbaa !38
  %92 = getelementptr inbounds i8, ptr %1, i64 24
  %93 = load i32, ptr %92, align 4, !tbaa !39
  tail call void @_ZN7b2World4StepEfiii(ptr noundef nonnull align 8 dereferenceable(103352) %87, float noundef %.1, i32 noundef %89, i32 noundef %91, i32 noundef %93)
  %94 = load ptr, ptr %69, align 8, !tbaa !31
  tail call void @_ZN7b2World9DebugDrawEv(ptr noundef nonnull align 8 dereferenceable(103352) %94)
  tail call void @_ZN9DebugDraw5FlushEv(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw)
  %95 = fcmp ogt float %.1, 0.000000e+00
  br i1 %95, label %96, label %100

96:                                               ; preds = %49
  %97 = getelementptr inbounds i8, ptr %0, i64 98440
  %98 = load i32, ptr %97, align 8, !tbaa !40
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %97, align 8, !tbaa !40
  br label %100

100:                                              ; preds = %96, %49
  %101 = getelementptr inbounds i8, ptr %1, i64 37
  %102 = load i8, ptr %101, align 1, !tbaa !41, !range !13, !noundef !14
  %103 = trunc nuw i8 %102 to i1
  br i1 %103, label %104, label %125

104:                                              ; preds = %100
  %105 = load ptr, ptr %69, align 8, !tbaa !31
  %106 = tail call noundef i32 @_ZNK7b2World12GetBodyCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %105)
  %107 = load ptr, ptr %69, align 8, !tbaa !31
  %108 = tail call noundef i32 @_ZNK7b2World15GetContactCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %107)
  %109 = load ptr, ptr %69, align 8, !tbaa !31
  %110 = tail call noundef i32 @_ZNK7b2World13GetJointCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %109)
  %111 = getelementptr inbounds i8, ptr %0, i64 98360
  %112 = load i32, ptr %111, align 8, !tbaa !16
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %112, ptr noundef nonnull @.str.1, i32 noundef %106, i32 noundef %108, i32 noundef %110)
  %113 = getelementptr inbounds i8, ptr %0, i64 98444
  %114 = load i32, ptr %113, align 4, !tbaa !25
  %115 = load i32, ptr %111, align 8, !tbaa !16
  %116 = add nsw i32 %115, %114
  store i32 %116, ptr %111, align 8, !tbaa !16
  %117 = load ptr, ptr %69, align 8, !tbaa !31
  %118 = tail call noundef i32 @_ZNK7b2World13GetProxyCountEv(ptr noundef nonnull align 8 dereferenceable(103352) %117)
  %119 = load ptr, ptr %69, align 8, !tbaa !31
  %120 = tail call noundef i32 @_ZNK7b2World13GetTreeHeightEv(ptr noundef nonnull align 8 dereferenceable(103352) %119)
  %121 = load i32, ptr %111, align 8, !tbaa !16
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %121, ptr noundef nonnull @.str.2, i32 noundef %118, i32 noundef %120)
  %122 = load i32, ptr %113, align 4, !tbaa !25
  %123 = load i32, ptr %111, align 8, !tbaa !16
  %124 = add nsw i32 %123, %122
  store i32 %124, ptr %111, align 8, !tbaa !16
  br label %125

125:                                              ; preds = %104, %100
  %126 = load ptr, ptr %69, align 8, !tbaa !31
  %127 = tail call noundef nonnull align 4 dereferenceable(20) ptr @_ZNK7b2World10GetProfileEv(ptr noundef nonnull align 8 dereferenceable(103352) %126)
  %128 = getelementptr inbounds i8, ptr %0, i64 98448
  %129 = load float, ptr %128, align 8, !tbaa !42
  %130 = load float, ptr %127, align 4, !tbaa !43
  %131 = tail call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %129, float noundef %130)
  store float %131, ptr %128, align 8, !tbaa !42
  %132 = getelementptr inbounds i8, ptr %0, i64 98452
  %133 = load float, ptr %132, align 4, !tbaa !44
  %134 = getelementptr inbounds i8, ptr %127, i64 4
  %135 = load float, ptr %134, align 4, !tbaa !45
  %136 = tail call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %133, float noundef %135)
  store float %136, ptr %132, align 4, !tbaa !44
  %137 = getelementptr inbounds i8, ptr %0, i64 98456
  %138 = load float, ptr %137, align 8, !tbaa !46
  %139 = getelementptr inbounds i8, ptr %127, i64 8
  %140 = load float, ptr %139, align 4, !tbaa !47
  %141 = tail call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %138, float noundef %140)
  store float %141, ptr %137, align 8, !tbaa !46
  %142 = getelementptr inbounds i8, ptr %0, i64 98464
  %143 = load float, ptr %142, align 8, !tbaa !48
  %144 = getelementptr inbounds i8, ptr %127, i64 16
  %145 = load float, ptr %144, align 4, !tbaa !49
  %146 = tail call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %143, float noundef %145)
  store float %146, ptr %142, align 8, !tbaa !48
  %147 = getelementptr inbounds i8, ptr %0, i64 98460
  %148 = load float, ptr %147, align 4, !tbaa !50
  %149 = getelementptr inbounds i8, ptr %127, i64 12
  %150 = load float, ptr %149, align 4, !tbaa !51
  %151 = tail call noundef float @_Z5b2MaxIfET_S0_S0_(float noundef %148, float noundef %150)
  store float %151, ptr %147, align 4, !tbaa !50
  %152 = getelementptr inbounds i8, ptr %0, i64 98468
  %153 = getelementptr inbounds i8, ptr %0, i64 98472
  %154 = load float, ptr %144, align 4, !tbaa !49
  %155 = getelementptr inbounds i8, ptr %0, i64 98484
  %156 = load float, ptr %155, align 4, !tbaa !52
  %157 = fadd float %154, %156
  store float %157, ptr %155, align 4, !tbaa !52
  %158 = load <4 x float>, ptr %127, align 4, !tbaa !53
  %159 = load <4 x float>, ptr %152, align 4, !tbaa !53
  %160 = fadd <4 x float> %158, %159
  store <4 x float> %160, ptr %152, align 4, !tbaa !53
  %161 = getelementptr inbounds i8, ptr %1, i64 38
  %162 = load i8, ptr %161, align 2, !tbaa !54, !range !13, !noundef !14
  %163 = trunc nuw i8 %162 to i1
  br i1 %163, label %164, label %229

164:                                              ; preds = %125
  %165 = load ptr, ptr %69, align 8, !tbaa !31
  %166 = tail call noundef nonnull align 4 dereferenceable(20) ptr @_ZNK7b2World10GetProfileEv(ptr noundef nonnull align 8 dereferenceable(103352) %165)
  %167 = getelementptr inbounds i8, ptr %0, i64 98440
  %168 = load i32, ptr %167, align 8, !tbaa !40
  %169 = icmp sgt i32 %168, 0
  br i1 %169, label %170, label %181

170:                                              ; preds = %164
  %171 = uitofp nneg i32 %168 to float
  %172 = fdiv float 1.000000e+00, %171
  %173 = load float, ptr %152, align 4, !tbaa !55
  %174 = fmul float %172, %173
  %175 = load <4 x float>, ptr %153, align 8, !tbaa !53
  %176 = insertelement <4 x float> poison, float %172, i64 0
  %177 = shufflevector <4 x float> %176, <4 x float> poison, <4 x i32> zeroinitializer
  %178 = fmul <4 x float> %177, %175
  %179 = fpext float %174 to double
  %180 = fpext <4 x float> %178 to <4 x double>
  br label %181

181:                                              ; preds = %170, %164
  %.sroa.0.0 = phi double [ %179, %170 ], [ 0.000000e+00, %164 ]
  %182 = phi <4 x double> [ %180, %170 ], [ zeroinitializer, %164 ]
  %183 = getelementptr inbounds i8, ptr %0, i64 98360
  %184 = load i32, ptr %183, align 8, !tbaa !16
  %185 = load float, ptr %166, align 4, !tbaa !43
  %186 = fpext float %185 to double
  %187 = load float, ptr %128, align 8, !tbaa !42
  %188 = fpext float %187 to double
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %184, ptr noundef nonnull @.str.3, double noundef %186, double noundef %.sroa.0.0, double noundef %188)
  %189 = getelementptr inbounds i8, ptr %0, i64 98444
  %190 = load i32, ptr %189, align 4, !tbaa !25
  %191 = load i32, ptr %183, align 8, !tbaa !16
  %192 = add nsw i32 %191, %190
  store i32 %192, ptr %183, align 8, !tbaa !16
  %193 = getelementptr inbounds i8, ptr %166, i64 4
  %194 = load float, ptr %193, align 4, !tbaa !45
  %195 = fpext float %194 to double
  %196 = load float, ptr %132, align 4, !tbaa !44
  %197 = fpext float %196 to double
  %198 = extractelement <4 x double> %182, i64 0
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %192, ptr noundef nonnull @.str.4, double noundef %195, double noundef %198, double noundef %197)
  %199 = load i32, ptr %189, align 4, !tbaa !25
  %200 = load i32, ptr %183, align 8, !tbaa !16
  %201 = add nsw i32 %200, %199
  store i32 %201, ptr %183, align 8, !tbaa !16
  %202 = getelementptr inbounds i8, ptr %166, i64 8
  %203 = load float, ptr %202, align 4, !tbaa !47
  %204 = fpext float %203 to double
  %205 = load float, ptr %137, align 8, !tbaa !46
  %206 = fpext float %205 to double
  %207 = extractelement <4 x double> %182, i64 1
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %201, ptr noundef nonnull @.str.5, double noundef %204, double noundef %207, double noundef %206)
  %208 = load i32, ptr %189, align 4, !tbaa !25
  %209 = load i32, ptr %183, align 8, !tbaa !16
  %210 = add nsw i32 %209, %208
  store i32 %210, ptr %183, align 8, !tbaa !16
  %211 = getelementptr inbounds i8, ptr %166, i64 16
  %212 = load float, ptr %211, align 4, !tbaa !49
  %213 = fpext float %212 to double
  %214 = load float, ptr %142, align 8, !tbaa !48
  %215 = fpext float %214 to double
  %216 = extractelement <4 x double> %182, i64 3
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %210, ptr noundef nonnull @.str.6, double noundef %213, double noundef %216, double noundef %215)
  %217 = load i32, ptr %189, align 4, !tbaa !25
  %218 = load i32, ptr %183, align 8, !tbaa !16
  %219 = add nsw i32 %218, %217
  store i32 %219, ptr %183, align 8, !tbaa !16
  %220 = getelementptr inbounds i8, ptr %166, i64 12
  %221 = load float, ptr %220, align 4, !tbaa !51
  %222 = fpext float %221 to double
  %223 = load float, ptr %147, align 4, !tbaa !50
  %224 = fpext float %223 to double
  %225 = extractelement <4 x double> %182, i64 2
  tail call void (ptr, i32, i32, ptr, ...) @_ZN9DebugDraw10DrawStringEiiPKcz(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, i32 noundef 5, i32 noundef %219, ptr noundef nonnull @.str.7, double noundef %222, double noundef %225, double noundef %224)
  %226 = load i32, ptr %189, align 4, !tbaa !25
  %227 = load i32, ptr %183, align 8, !tbaa !16
  %228 = add nsw i32 %227, %226
  store i32 %228, ptr %183, align 8, !tbaa !16
  br label %229

229:                                              ; preds = %181, %125
  %230 = getelementptr inbounds i8, ptr %0, i64 98428
  %231 = load i8, ptr %230, align 4, !tbaa !56, !range !13, !noundef !14
  %232 = trunc nuw i8 %231 to i1
  br i1 %232, label %233, label %236

233:                                              ; preds = %229
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #8
  call void @_ZN7b2ColorC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %3)
  call void @_ZN7b2Color3SetEffff(ptr noundef nonnull align 4 dereferenceable(16) %3, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 1.000000e+00, float noundef 1.000000e+00)
  %234 = getelementptr inbounds i8, ptr %0, i64 98420
  call void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %234, float noundef 4.000000e+00, ptr noundef nonnull align 4 dereferenceable(16) %3)
  call void @_ZN7b2Color3SetEffff(ptr noundef nonnull align 4 dereferenceable(16) %3, float noundef 0x3FE99999A0000000, float noundef 0x3FE99999A0000000, float noundef 0x3FE99999A0000000, float noundef 1.000000e+00)
  %235 = getelementptr inbounds i8, ptr %0, i64 98432
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %235, ptr noundef nonnull align 4 dereferenceable(8) %234, ptr noundef nonnull align 4 dereferenceable(16) %3)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #8
  br label %236

236:                                              ; preds = %233, %229
  %237 = getelementptr inbounds i8, ptr %0, i64 98400
  %238 = load i8, ptr %237, align 8, !tbaa !57, !range !13, !noundef !14
  %239 = trunc nuw i8 %238 to i1
  %240 = getelementptr inbounds i8, ptr %0, i64 98392
  %241 = load ptr, ptr %240, align 8
  %.not = icmp eq ptr %241, null
  %or.cond = select i1 %239, i1 %.not, i1 false
  br i1 %or.cond, label %242, label %272

242:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %243 = getelementptr inbounds i8, ptr %0, i64 98432
  %244 = getelementptr inbounds i8, ptr %0, i64 98404
  %245 = call <2 x float> @_ZmiRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %243, ptr noundef nonnull align 4 dereferenceable(8) %244)
  store <2 x float> %245, ptr %7, align 8
  %246 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef 1.000000e+01, ptr noundef nonnull align 4 dereferenceable(8) %7)
  store <2 x float> %246, ptr %6, align 8
  %247 = getelementptr inbounds i8, ptr %0, i64 98412
  %248 = call <2 x float> @_ZmiRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %6, ptr noundef nonnull align 4 dereferenceable(8) %247)
  store <2 x float> %248, ptr %5, align 8
  %249 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef 2.000000e+01, ptr noundef nonnull align 4 dereferenceable(8) %5)
  store <2 x float> %249, ptr %4, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %250 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %.1, ptr noundef nonnull align 4 dereferenceable(8) %4)
  store <2 x float> %250, ptr %8, align 8
  call void @_ZN6b2Vec2pLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %247, ptr noundef nonnull align 4 dereferenceable(8) %8)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %251 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %.1, ptr noundef nonnull align 4 dereferenceable(8) %247)
  store <2 x float> %251, ptr %9, align 8
  call void @_ZN6b2Vec2pLERKS_(ptr noundef nonnull align 4 dereferenceable(8) %244, ptr noundef nonnull align 4 dereferenceable(8) %9)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #8
  call void @_ZN13b2CircleShapeC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %252 = getelementptr inbounds i8, ptr %10, i64 16
  %253 = load i64, ptr %244, align 4
  store i64 %253, ptr %252, align 8
  %254 = getelementptr inbounds i8, ptr %10, i64 12
  store float 2.000000e+00, ptr %254, align 4, !tbaa !58
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  %255 = getelementptr inbounds i8, ptr %0, i64 98376
  %256 = load ptr, ptr %255, align 8, !tbaa !61
  invoke void @_ZN14QueryCallback2C2EP16b2ParticleSystemPK7b2ShapeRK6b2Vec2(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef %256, ptr noundef nonnull %10, ptr noundef nonnull align 4 dereferenceable(8) %247)
          to label %257 unwind label %264

257:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #8
  invoke void @_ZN6b2AABBC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %12)
          to label %258 unwind label %266

258:                                              ; preds = %257
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #8
  invoke void @_ZN11b2TransformC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %13)
          to label %259 unwind label %268

259:                                              ; preds = %258
  invoke void @_ZN11b2Transform11SetIdentityEv(ptr noundef nonnull align 4 dereferenceable(16) %13)
          to label %260 unwind label %268

260:                                              ; preds = %259
  invoke void @_ZNK13b2CircleShape11ComputeAABBEP6b2AABBRK11b2Transform(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull %12, ptr noundef nonnull align 4 dereferenceable(16) %13)
          to label %261 unwind label %268

261:                                              ; preds = %260
  %262 = load ptr, ptr %69, align 8, !tbaa !31
  invoke void @_ZN7b2World9QueryAABBEP15b2QueryCallbackRK6b2AABB(ptr noundef nonnull align 8 dereferenceable(103352) %262, ptr noundef nonnull %11, ptr noundef nonnull align 4 dereferenceable(16) %12)
          to label %263 unwind label %268

263:                                              ; preds = %261
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  call void @_ZN15b2QueryCallbackD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @_ZN7b2ShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  br label %272

264:                                              ; preds = %242
  %265 = landingpad { ptr, i32 }
          cleanup
  br label %271

266:                                              ; preds = %257
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %270

268:                                              ; preds = %261, %260, %259, %258
  %269 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #8
  br label %270

270:                                              ; preds = %268, %266
  %.pn = phi { ptr, i32 } [ %269, %268 ], [ %267, %266 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  call void @_ZN15b2QueryCallbackD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  br label %271

271:                                              ; preds = %270, %264
  %.pn.pn = phi { ptr, i32 } [ %.pn, %270 ], [ %265, %264 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @_ZN7b2ShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  resume { ptr, i32 } %.pn.pn

272:                                              ; preds = %263, %236
  %273 = getelementptr inbounds i8, ptr %1, i64 32
  %274 = load i8, ptr %273, align 4, !tbaa !62, !range !13, !noundef !14
  %275 = trunc nuw i8 %274 to i1
  %276 = load i32, ptr %86, align 8
  %277 = icmp sgt i32 %276, 0
  %or.cond90 = select i1 %275, i1 %277, i1 false
  br i1 %or.cond90, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %272
  %278 = getelementptr inbounds i8, ptr %0, i64 32
  %279 = getelementptr inbounds i8, ptr %1, i64 33
  %280 = getelementptr inbounds i8, ptr %1, i64 34
  %281 = getelementptr inbounds i8, ptr %1, i64 35
  br label %282

282:                                              ; preds = %.lr.ph, %324
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %324 ]
  %283 = getelementptr inbounds %struct.ContactPoint, ptr %278, i64 %indvars.iv
  %284 = getelementptr inbounds i8, ptr %283, i64 32
  %285 = load i32, ptr %284, align 8, !tbaa !63
  switch i32 %285, label %290 [
    i32 1, label %286
    i32 2, label %288
  ]

286:                                              ; preds = %282
  %287 = getelementptr inbounds i8, ptr %283, i64 24
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #8
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %14, float noundef 0x3FD3333340000000, float noundef 0x3FEE666660000000, float noundef 0x3FD3333340000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %287, float noundef 1.000000e+01, ptr noundef nonnull align 4 dereferenceable(16) %14)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #8
  br label %290

288:                                              ; preds = %282
  %289 = getelementptr inbounds i8, ptr %283, i64 24
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %15, float noundef 0x3FD3333340000000, float noundef 0x3FD3333340000000, float noundef 0x3FEE666660000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %289, float noundef 5.000000e+00, ptr noundef nonnull align 4 dereferenceable(16) %15)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  br label %290

290:                                              ; preds = %282, %288, %286
  %291 = load i8, ptr %279, align 1, !tbaa !66, !range !13, !noundef !14
  %292 = trunc nuw i8 %291 to i1
  br i1 %292, label %293, label %299

293:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %294 = getelementptr inbounds i8, ptr %283, i64 24
  %295 = load i64, ptr %294, align 8
  store i64 %295, ptr %16, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #8
  %296 = getelementptr inbounds i8, ptr %283, i64 16
  %297 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef 0x3FD3333340000000, ptr noundef nonnull align 4 dereferenceable(8) %296)
  store <2 x float> %297, ptr %18, align 8
  %298 = call <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %16, ptr noundef nonnull align 4 dereferenceable(8) %18)
  store <2 x float> %298, ptr %17, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #8
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %19, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %16, ptr noundef nonnull align 4 dereferenceable(8) %17, ptr noundef nonnull align 4 dereferenceable(16) %19)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  br label %311

299:                                              ; preds = %290
  %300 = load i8, ptr %280, align 2, !tbaa !67, !range !13, !noundef !14
  %301 = trunc nuw i8 %300 to i1
  br i1 %301, label %302, label %311

302:                                              ; preds = %299
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %303 = getelementptr inbounds i8, ptr %283, i64 24
  %304 = load i64, ptr %303, align 8
  store i64 %304, ptr %20, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  %305 = getelementptr inbounds i8, ptr %283, i64 36
  %306 = load float, ptr %305, align 4, !tbaa !68
  %307 = fmul float %306, 0x3FB99999A0000000
  %308 = getelementptr inbounds i8, ptr %283, i64 16
  %309 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %307, ptr noundef nonnull align 4 dereferenceable(8) %308)
  store <2 x float> %309, ptr %22, align 8
  %310 = call <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 4 dereferenceable(8) %22)
  store <2 x float> %310, ptr %21, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #8
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %23, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 0x3FD3333340000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %20, ptr noundef nonnull align 4 dereferenceable(8) %21, ptr noundef nonnull align 4 dereferenceable(16) %23)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br label %311

311:                                              ; preds = %299, %302, %293
  %312 = load i8, ptr %281, align 1, !tbaa !69, !range !13, !noundef !14
  %313 = trunc nuw i8 %312 to i1
  br i1 %313, label %314, label %324

314:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  %315 = getelementptr inbounds i8, ptr %283, i64 16
  %316 = call <2 x float> @_Z7b2CrossRK6b2Vec2f(ptr noundef nonnull align 4 dereferenceable(8) %315, float noundef 1.000000e+00)
  store <2 x float> %316, ptr %24, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #8
  %317 = getelementptr inbounds i8, ptr %283, i64 24
  %318 = load i64, ptr %317, align 8
  store i64 %318, ptr %25, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #8
  %319 = getelementptr inbounds i8, ptr %283, i64 40
  %320 = load float, ptr %319, align 8, !tbaa !70
  %321 = fmul float %320, 0x3FB99999A0000000
  %322 = call <2 x float> @_ZmlfRK6b2Vec2(float noundef %321, ptr noundef nonnull align 4 dereferenceable(8) %24)
  store <2 x float> %322, ptr %27, align 8
  %323 = call <2 x float> @_ZplRK6b2Vec2S1_(ptr noundef nonnull align 4 dereferenceable(8) %25, ptr noundef nonnull align 4 dereferenceable(8) %27)
  store <2 x float> %323, ptr %26, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #8
  call void @_ZN7b2ColorC2Effff(ptr noundef nonnull align 4 dereferenceable(16) %28, float noundef 0x3FECCCCCC0000000, float noundef 0x3FECCCCCC0000000, float noundef 0x3FD3333340000000, float noundef 1.000000e+00)
  call void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40) @g_debugDraw, ptr noundef nonnull align 4 dereferenceable(8) %25, ptr noundef nonnull align 4 dereferenceable(8) %26, ptr noundef nonnull align 4 dereferenceable(16) %28)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  br label %324

324:                                              ; preds = %314, %311
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %325 = load i32, ptr %86, align 8, !tbaa !36
  %326 = sext i32 %325 to i64
  %327 = icmp slt i64 %indvars.iv.next, %326
  br i1 %327, label %282, label %.loopexit, !llvm.loop !71

.loopexit:                                        ; preds = %324, %272
  ret void
}

declare void @_ZN6b2Draw8SetFlagsEj(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) local_unnamed_addr #2

declare void @_ZN7b2World16SetAllowSleepingEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7b2World15SetWarmStartingEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7b2World20SetContinuousPhysicsEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7b2World14SetSubSteppingEb(ptr noundef nonnull align 8 dereferenceable(103352), i1 noundef zeroext) local_unnamed_addr #4 align 2

declare void @_ZN7b2World4StepEfiii(ptr noundef nonnull align 8 dereferenceable(103352), float noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @_ZN7b2World9DebugDrawEv(ptr noundef nonnull align 8 dereferenceable(103352)) local_unnamed_addr #2

declare void @_ZN9DebugDraw5FlushEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2

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

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

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

declare noundef i32 @_ZNK7b2World13GetProxyCountEv(ptr noundef nonnull align 8 dereferenceable(103352)) local_unnamed_addr #2

declare noundef i32 @_ZNK7b2World13GetTreeHeightEv(ptr noundef nonnull align 8 dereferenceable(103352)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(20) ptr @_ZNK7b2World10GetProfileEv(ptr noundef nonnull align 8 dereferenceable(103352)) local_unnamed_addr #6 align 2

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

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

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

declare void @_ZN9DebugDraw9DrawPointERK6b2Vec2fRK7b2Color(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 4 dereferenceable(8), float noundef, ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #2

declare void @_ZN9DebugDraw11DrawSegmentERK6b2Vec2S2_RK7b2Color(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN14QueryCallback2C2EP16b2ParticleSystemPK7b2ShapeRK6b2Vec2(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(8)) unnamed_addr #7 align 2

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

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

declare void @_ZNK13b2CircleShape11ComputeAABBEP6b2AABBRK11b2Transform(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local <2 x float> @_Z7b2CrossRK6b2Vec2f(ptr noundef nonnull align 4 dereferenceable(8), float noundef) local_unnamed_addr #3

attributes #0 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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, !10, i64 12}
!6 = !{!"_ZTS8Settings", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !11, i64 28, !11, i64 29, !11, i64 30, !11, i64 31, !11, i64 32, !11, i64 33, !11, i64 34, !11, i64 35, !11, i64 36, !11, i64 37, !11, i64 38, !11, i64 39, !11, i64 40, !11, i64 41, !11, i64 42, !11, i64 43, !11, i64 44}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"float", !8, i64 0}
!11 = !{!"bool", !8, i64 0}
!12 = !{!6, !11, i64 43}
!13 = !{i8 0, i8 2}
!14 = !{}
!15 = !{!6, !11, i64 44}
!16 = !{!17, !7, i64 98360}
!17 = !{!"_ZTS4Test", !18, i64 0, !19, i64 8, !20, i64 16, !8, i64 32, !7, i64 98336, !22, i64 98344, !7, i64 98360, !19, i64 98368, !19, i64 98376, !19, i64 98384, !19, i64 98392, !11, i64 98400, !21, i64 98404, !21, i64 98412, !21, i64 98420, !11, i64 98428, !21, i64 98432, !7, i64 98440, !7, i64 98444, !24, i64 98448, !24, i64 98468}
!18 = !{!"_ZTS17b2ContactListener"}
!19 = !{!"any pointer", !8, i64 0}
!20 = !{!"_ZTS6b2AABB", !21, i64 0, !21, i64 8}
!21 = !{!"_ZTS6b2Vec2", !10, i64 0, !10, i64 4}
!22 = !{!"_ZTS19DestructionListener", !23, i64 0, !19, i64 8}
!23 = !{!"_ZTS21b2DestructionListener"}
!24 = !{!"_ZTS9b2Profile", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16}
!25 = !{!17, !7, i64 98444}
!26 = !{!6, !11, i64 28}
!27 = !{!6, !11, i64 29}
!28 = !{!6, !11, i64 30}
!29 = !{!6, !11, i64 31}
!30 = !{!6, !11, i64 36}
!31 = !{!17, !19, i64 98368}
!32 = !{!6, !11, i64 42}
!33 = !{!6, !11, i64 39}
!34 = !{!6, !11, i64 40}
!35 = !{!6, !11, i64 41}
!36 = !{!17, !7, i64 98336}
!37 = !{!6, !7, i64 16}
!38 = !{!6, !7, i64 20}
!39 = !{!6, !7, i64 24}
!40 = !{!17, !7, i64 98440}
!41 = !{!6, !11, i64 37}
!42 = !{!17, !10, i64 98448}
!43 = !{!24, !10, i64 0}
!44 = !{!17, !10, i64 98452}
!45 = !{!24, !10, i64 4}
!46 = !{!17, !10, i64 98456}
!47 = !{!24, !10, i64 8}
!48 = !{!17, !10, i64 98464}
!49 = !{!24, !10, i64 16}
!50 = !{!17, !10, i64 98460}
!51 = !{!24, !10, i64 12}
!52 = !{!17, !10, i64 98484}
!53 = !{!10, !10, i64 0}
!54 = !{!6, !11, i64 38}
!55 = !{!17, !10, i64 98468}
!56 = !{!17, !11, i64 98428}
!57 = !{!17, !11, i64 98400}
!58 = !{!59, !10, i64 12}
!59 = !{!"_ZTS7b2Shape", !60, i64 8, !10, i64 12}
!60 = !{!"_ZTSN7b2Shape4TypeE", !8, i64 0}
!61 = !{!17, !19, i64 98376}
!62 = !{!6, !11, i64 32}
!63 = !{!64, !65, i64 32}
!64 = !{!"_ZTS12ContactPoint", !19, i64 0, !19, i64 8, !21, i64 16, !21, i64 24, !65, i64 32, !10, i64 36, !10, i64 40, !10, i64 44}
!65 = !{!"_ZTS12b2PointState", !8, i64 0}
!66 = !{!6, !11, i64 33}
!67 = !{!6, !11, i64 34}
!68 = !{!64, !10, i64 36}
!69 = !{!6, !11, i64 35}
!70 = !{!64, !10, i64 40}
!71 = distinct !{!71, !72}
!72 = !{!"llvm.loop.mustprogress"}


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