aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/ARM/ARMConstantIslandPass.cpp29
-rw-r--r--test/CodeGen/Thumb2/constant-islands.ll1400
2 files changed, 1425 insertions, 4 deletions
diff --git a/lib/Target/ARM/ARMConstantIslandPass.cpp b/lib/Target/ARM/ARMConstantIslandPass.cpp
index e2ff4905e2..26cf8622f3 100644
--- a/lib/Target/ARM/ARMConstantIslandPass.cpp
+++ b/lib/Target/ARM/ARMConstantIslandPass.cpp
@@ -309,6 +309,7 @@ namespace {
bool FixUpConditionalBr(ImmBranch &Br);
bool FixUpUnconditionalBr(ImmBranch &Br);
bool UndoLRSpillRestore();
+ bool mayOptimizeThumb2Instruction(const MachineInstr *MI) const;
bool OptimizeThumb2Instructions();
bool OptimizeThumb2Branches();
bool ReorderThumb2JumpTables();
@@ -347,10 +348,8 @@ void ARMConstantIslands::verify() {
for (unsigned i = 0, e = CPUsers.size(); i != e; ++i) {
CPUser &U = CPUsers[i];
unsigned UserOffset = GetUserOffset(U);
- unsigned CPEOffset = GetOffsetOf(U.CPEMI);
- unsigned Disp = UserOffset < CPEOffset ? CPEOffset - UserOffset :
- UserOffset - CPEOffset;
- assert(Disp <= U.getMaxDisp() || "Constant pool entry out of range!");
+ assert(CPEIsInRange(U.MI, UserOffset, U.CPEMI, U.getMaxDisp(), U.NegOk) &&
+ "Constant pool entry out of range!");
}
#endif
}
@@ -807,6 +806,9 @@ void ARMConstantIslands::ComputeBlockSize(MachineBasicBlock *MBB) {
// The actual size may be smaller, but still a multiple of the instr size.
if (I->isInlineAsm())
BBI.Unalign = isThumb ? 1 : 2;
+ // Also consider instructions that may be shrunk later.
+ else if (isThumb && mayOptimizeThumb2Instruction(I))
+ BBI.Unalign = 1;
}
// tBR_JTr contains a .align 2 directive.
@@ -1676,6 +1678,25 @@ bool ARMConstantIslands::UndoLRSpillRestore() {
return MadeChange;
}
+// mayOptimizeThumb2Instruction - Returns true if OptimizeThumb2Instructions
+// below may shrink MI.
+bool
+ARMConstantIslands::mayOptimizeThumb2Instruction(const MachineInstr *MI) const {
+ switch(MI->getOpcode()) {
+ // OptimizeThumb2Instructions.
+ case ARM::t2LEApcrel:
+ case ARM::t2LDRpci:
+ // OptimizeThumb2Branches.
+ case ARM::t2B:
+ case ARM::t2Bcc:
+ case ARM::tBcc:
+ // OptimizeThumb2JumpTables.
+ case ARM::t2BR_JT:
+ return true;
+ }
+ return false;
+}
+
bool ARMConstantIslands::OptimizeThumb2Instructions() {
bool MadeChange = false;
diff --git a/test/CodeGen/Thumb2/constant-islands.ll b/test/CodeGen/Thumb2/constant-islands.ll
new file mode 100644
index 0000000000..19d23851da
--- /dev/null
+++ b/test/CodeGen/Thumb2/constant-islands.ll
@@ -0,0 +1,1400 @@
+; RUN: llc < %s -march=arm -mcpu=cortex-a8 -O0 -filetype=obj -o %t.o
+; RUN: llc < %s -march=thumb -mcpu=cortex-a8 -O0 -filetype=obj -o %t.o
+; RUN: llc < %s -march=arm -mcpu=cortex-a8 -O2 -filetype=obj -o %t.o
+; RUN: llc < %s -march=thumb -mcpu=cortex-a8 -O2 -filetype=obj -o %t.o
+target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
+target triple = "thumbv7-apple-ios"
+
+; This function comes from the Bullet test. It is quite big, and exercises the
+; constant island pass a bit. It has caused failures, including
+; <rdar://problem/10670199>
+;
+; It is unlikely that this code will continue to create the exact conditions
+; that broke the arm constant island pass in the past, but it is still useful to
+; force the pass to split basic blocks etc.
+;
+; The run lines above force the integrated assembler to be enabled so it can
+; catch any illegal displacements. Other than that, we depend on the constant
+; island pass assertions.
+
+%class.btVector3 = type { [4 x float] }
+%class.btTransform = type { %class.btMatrix3x3, %class.btVector3 }
+%class.btMatrix3x3 = type { [3 x %class.btVector3] }
+%class.btCapsuleShape = type { %class.btConvexInternalShape, i32 }
+%class.btConvexInternalShape = type { %class.btConvexShape, %class.btVector3, %class.btVector3, float, float }
+%class.btConvexShape = type { %class.btCollisionShape }
+%class.btCollisionShape = type { i32 (...)**, i32, i8* }
+%class.RagDoll = type { i32 (...)**, %class.btDynamicsWorld*, [11 x %class.btCollisionShape*], [11 x %class.btRigidBody*], [10 x %class.btTypedConstraint*] }
+%class.btDynamicsWorld = type { %class.btCollisionWorld, void (%class.btDynamicsWorld*, float)*, void (%class.btDynamicsWorld*, float)*, i8*, %struct.btContactSolverInfo }
+%class.btCollisionWorld = type { i32 (...)**, %class.btAlignedObjectArray, %class.btDispatcher*, %struct.btDispatcherInfo, %class.btStackAlloc*, %class.btBroadphaseInterface*, %class.btIDebugDraw*, i8 }
+%class.btAlignedObjectArray = type { %class.btAlignedAllocator, i32, i32, %class.btCollisionObject**, i8 }
+%class.btAlignedAllocator = type { i8 }
+%class.btCollisionObject = type { i32 (...)**, %class.btTransform, %class.btTransform, %class.btVector3, %class.btVector3, %class.btVector3, i8, float, %struct.btBroadphaseProxy*, %class.btCollisionShape*, %class.btCollisionShape*, i32, i32, i32, i32, float, float, float, i8*, i32, float, float, float, i8, [7 x i8] }
+%struct.btBroadphaseProxy = type { i8*, i16, i16, i8*, i32, %class.btVector3, %class.btVector3 }
+%class.btDispatcher = type { i32 (...)** }
+%struct.btDispatcherInfo = type { float, i32, i32, float, i8, %class.btIDebugDraw*, i8, i8, i8, float, i8, float, %class.btStackAlloc* }
+%class.btIDebugDraw = type { i32 (...)** }
+%class.btStackAlloc = type opaque
+%class.btBroadphaseInterface = type { i32 (...)** }
+%struct.btContactSolverInfo = type { %struct.btContactSolverInfoData }
+%struct.btContactSolverInfoData = type { float, float, float, float, float, i32, float, float, float, float, float, i32, float, float, float, i32, i32 }
+%class.btRigidBody = type { %class.btCollisionObject, %class.btMatrix3x3, %class.btVector3, %class.btVector3, float, %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, float, float, i8, float, float, float, float, float, float, %class.btMotionState*, %class.btAlignedObjectArray.22, i32, i32, i32 }
+%class.btMotionState = type { i32 (...)** }
+%class.btAlignedObjectArray.22 = type { %class.btAlignedAllocator.23, i32, i32, %class.btTypedConstraint**, i8 }
+%class.btAlignedAllocator.23 = type { i8 }
+%class.btTypedConstraint = type { i32 (...)**, %struct.btTypedObject, i32, i32, i8, %class.btRigidBody*, %class.btRigidBody*, float, float, %class.btVector3, %class.btVector3, %class.btVector3 }
+%struct.btTypedObject = type { i32 }
+%class.btHingeConstraint = type { %class.btTypedConstraint, [3 x %class.btJacobianEntry], [3 x %class.btJacobianEntry], %class.btTransform, %class.btTransform, float, float, float, float, float, float, float, float, float, float, float, float, float, i8, i8, i8, i8, i8, float }
+%class.btJacobianEntry = type { %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, float }
+%class.btConeTwistConstraint = type { %class.btTypedConstraint, [3 x %class.btJacobianEntry], %class.btTransform, %class.btTransform, float, float, float, float, float, float, float, float, %class.btVector3, %class.btVector3, float, float, float, float, float, float, float, float, i8, i8, i8, i8, float, float, %class.btVector3, i8, i8, %class.btQuaternion, float, %class.btVector3 }
+%class.btQuaternion = type { %class.btQuadWord }
+%class.btQuadWord = type { [4 x float] }
+
+@_ZTV7RagDoll = external unnamed_addr constant [4 x i8*]
+
+declare noalias i8* @_Znwm(i32)
+
+declare i32 @__gxx_personality_sj0(...)
+
+declare void @_ZdlPv(i8*) nounwind
+
+declare %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3*, float*, float*, float*) unnamed_addr inlinehint ssp align 2
+
+declare void @_ZSt9terminatev()
+
+declare %class.btTransform* @_ZN11btTransformC1Ev(%class.btTransform*) unnamed_addr ssp align 2
+
+declare void @_ZN11btTransform11setIdentityEv(%class.btTransform*) ssp align 2
+
+declare void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform*, %class.btVector3*) nounwind inlinehint ssp align 2
+
+declare i8* @_ZN13btConvexShapenwEm(i32) inlinehint ssp align 2
+
+declare void @_ZN13btConvexShapedlEPv(i8*) inlinehint ssp align 2
+
+declare %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape*, float, float)
+
+declare %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform*) nounwind inlinehint ssp align 2
+
+define %class.RagDoll* @_ZN7RagDollC2EP15btDynamicsWorldRK9btVector3f(%class.RagDoll* %this, %class.btDynamicsWorld* %ownerWorld, %class.btVector3* %positionOffset, float %scale) unnamed_addr ssp align 2 {
+entry:
+ %retval = alloca %class.RagDoll*, align 4
+ %this.addr = alloca %class.RagDoll*, align 4
+ %ownerWorld.addr = alloca %class.btDynamicsWorld*, align 4
+ %positionOffset.addr = alloca %class.btVector3*, align 4
+ %scale.addr = alloca float, align 4
+ %exn.slot = alloca i8*
+ %ehselector.slot = alloca i32
+ %offset = alloca %class.btTransform, align 4
+ %transform = alloca %class.btTransform, align 4
+ %ref.tmp = alloca %class.btVector3, align 4
+ %ref.tmp97 = alloca %class.btVector3, align 4
+ %ref.tmp98 = alloca float, align 4
+ %ref.tmp99 = alloca float, align 4
+ %ref.tmp100 = alloca float, align 4
+ %ref.tmp102 = alloca %class.btTransform, align 4
+ %ref.tmp107 = alloca %class.btVector3, align 4
+ %ref.tmp108 = alloca %class.btVector3, align 4
+ %ref.tmp109 = alloca float, align 4
+ %ref.tmp110 = alloca float, align 4
+ %ref.tmp111 = alloca float, align 4
+ %ref.tmp113 = alloca %class.btTransform, align 4
+ %ref.tmp119 = alloca %class.btVector3, align 4
+ %ref.tmp120 = alloca %class.btVector3, align 4
+ %ref.tmp121 = alloca float, align 4
+ %ref.tmp122 = alloca float, align 4
+ %ref.tmp123 = alloca float, align 4
+ %ref.tmp125 = alloca %class.btTransform, align 4
+ %ref.tmp131 = alloca %class.btVector3, align 4
+ %ref.tmp132 = alloca %class.btVector3, align 4
+ %ref.tmp133 = alloca float, align 4
+ %ref.tmp134 = alloca float, align 4
+ %ref.tmp135 = alloca float, align 4
+ %ref.tmp137 = alloca %class.btTransform, align 4
+ %ref.tmp143 = alloca %class.btVector3, align 4
+ %ref.tmp144 = alloca %class.btVector3, align 4
+ %ref.tmp145 = alloca float, align 4
+ %ref.tmp146 = alloca float, align 4
+ %ref.tmp147 = alloca float, align 4
+ %ref.tmp149 = alloca %class.btTransform, align 4
+ %ref.tmp155 = alloca %class.btVector3, align 4
+ %ref.tmp156 = alloca %class.btVector3, align 4
+ %ref.tmp157 = alloca float, align 4
+ %ref.tmp158 = alloca float, align 4
+ %ref.tmp159 = alloca float, align 4
+ %ref.tmp161 = alloca %class.btTransform, align 4
+ %ref.tmp167 = alloca %class.btVector3, align 4
+ %ref.tmp168 = alloca %class.btVector3, align 4
+ %ref.tmp169 = alloca float, align 4
+ %ref.tmp170 = alloca float, align 4
+ %ref.tmp171 = alloca float, align 4
+ %ref.tmp173 = alloca %class.btTransform, align 4
+ %ref.tmp179 = alloca %class.btVector3, align 4
+ %ref.tmp180 = alloca %class.btVector3, align 4
+ %ref.tmp181 = alloca float, align 4
+ %ref.tmp182 = alloca float, align 4
+ %ref.tmp183 = alloca float, align 4
+ %ref.tmp186 = alloca %class.btTransform, align 4
+ %ref.tmp192 = alloca %class.btVector3, align 4
+ %ref.tmp193 = alloca %class.btVector3, align 4
+ %ref.tmp194 = alloca float, align 4
+ %ref.tmp195 = alloca float, align 4
+ %ref.tmp196 = alloca float, align 4
+ %ref.tmp199 = alloca %class.btTransform, align 4
+ %ref.tmp205 = alloca %class.btVector3, align 4
+ %ref.tmp206 = alloca %class.btVector3, align 4
+ %ref.tmp207 = alloca float, align 4
+ %ref.tmp208 = alloca float, align 4
+ %ref.tmp209 = alloca float, align 4
+ %ref.tmp212 = alloca %class.btTransform, align 4
+ %ref.tmp218 = alloca %class.btVector3, align 4
+ %ref.tmp219 = alloca %class.btVector3, align 4
+ %ref.tmp220 = alloca float, align 4
+ %ref.tmp221 = alloca float, align 4
+ %ref.tmp222 = alloca float, align 4
+ %ref.tmp225 = alloca %class.btTransform, align 4
+ %i = alloca i32, align 4
+ %hingeC = alloca %class.btHingeConstraint*, align 4
+ %coneC = alloca %class.btConeTwistConstraint*, align 4
+ %localA = alloca %class.btTransform, align 4
+ %localB = alloca %class.btTransform, align 4
+ %ref.tmp240 = alloca %class.btVector3, align 4
+ %ref.tmp241 = alloca %class.btVector3, align 4
+ %ref.tmp242 = alloca float, align 4
+ %ref.tmp243 = alloca float, align 4
+ %ref.tmp244 = alloca float, align 4
+ %ref.tmp247 = alloca %class.btVector3, align 4
+ %ref.tmp248 = alloca %class.btVector3, align 4
+ %ref.tmp249 = alloca float, align 4
+ %ref.tmp250 = alloca float, align 4
+ %ref.tmp251 = alloca float, align 4
+ %ref.tmp266 = alloca %class.btVector3, align 4
+ %ref.tmp267 = alloca %class.btVector3, align 4
+ %ref.tmp268 = alloca float, align 4
+ %ref.tmp269 = alloca float, align 4
+ %ref.tmp270 = alloca float, align 4
+ %ref.tmp273 = alloca %class.btVector3, align 4
+ %ref.tmp274 = alloca %class.btVector3, align 4
+ %ref.tmp275 = alloca float, align 4
+ %ref.tmp276 = alloca float, align 4
+ %ref.tmp277 = alloca float, align 4
+ %ref.tmp295 = alloca %class.btVector3, align 4
+ %ref.tmp296 = alloca %class.btVector3, align 4
+ %ref.tmp297 = alloca float, align 4
+ %ref.tmp298 = alloca float, align 4
+ %ref.tmp299 = alloca float, align 4
+ %ref.tmp302 = alloca %class.btVector3, align 4
+ %ref.tmp303 = alloca %class.btVector3, align 4
+ %ref.tmp304 = alloca float, align 4
+ %ref.tmp305 = alloca float, align 4
+ %ref.tmp306 = alloca float, align 4
+ %ref.tmp324 = alloca %class.btVector3, align 4
+ %ref.tmp325 = alloca %class.btVector3, align 4
+ %ref.tmp326 = alloca float, align 4
+ %ref.tmp327 = alloca float, align 4
+ %ref.tmp328 = alloca float, align 4
+ %ref.tmp331 = alloca %class.btVector3, align 4
+ %ref.tmp332 = alloca %class.btVector3, align 4
+ %ref.tmp333 = alloca float, align 4
+ %ref.tmp334 = alloca float, align 4
+ %ref.tmp335 = alloca float, align 4
+ %ref.tmp353 = alloca %class.btVector3, align 4
+ %ref.tmp354 = alloca %class.btVector3, align 4
+ %ref.tmp355 = alloca float, align 4
+ %ref.tmp356 = alloca float, align 4
+ %ref.tmp357 = alloca float, align 4
+ %ref.tmp360 = alloca %class.btVector3, align 4
+ %ref.tmp361 = alloca %class.btVector3, align 4
+ %ref.tmp362 = alloca float, align 4
+ %ref.tmp363 = alloca float, align 4
+ %ref.tmp364 = alloca float, align 4
+ %ref.tmp382 = alloca %class.btVector3, align 4
+ %ref.tmp383 = alloca %class.btVector3, align 4
+ %ref.tmp384 = alloca float, align 4
+ %ref.tmp385 = alloca float, align 4
+ %ref.tmp386 = alloca float, align 4
+ %ref.tmp389 = alloca %class.btVector3, align 4
+ %ref.tmp390 = alloca %class.btVector3, align 4
+ %ref.tmp391 = alloca float, align 4
+ %ref.tmp392 = alloca float, align 4
+ %ref.tmp393 = alloca float, align 4
+ %ref.tmp411 = alloca %class.btVector3, align 4
+ %ref.tmp412 = alloca %class.btVector3, align 4
+ %ref.tmp413 = alloca float, align 4
+ %ref.tmp414 = alloca float, align 4
+ %ref.tmp415 = alloca float, align 4
+ %ref.tmp418 = alloca %class.btVector3, align 4
+ %ref.tmp419 = alloca %class.btVector3, align 4
+ %ref.tmp420 = alloca float, align 4
+ %ref.tmp421 = alloca float, align 4
+ %ref.tmp422 = alloca float, align 4
+ %ref.tmp440 = alloca %class.btVector3, align 4
+ %ref.tmp441 = alloca %class.btVector3, align 4
+ %ref.tmp442 = alloca float, align 4
+ %ref.tmp443 = alloca float, align 4
+ %ref.tmp444 = alloca float, align 4
+ %ref.tmp447 = alloca %class.btVector3, align 4
+ %ref.tmp448 = alloca %class.btVector3, align 4
+ %ref.tmp449 = alloca float, align 4
+ %ref.tmp450 = alloca float, align 4
+ %ref.tmp451 = alloca float, align 4
+ %ref.tmp469 = alloca %class.btVector3, align 4
+ %ref.tmp470 = alloca %class.btVector3, align 4
+ %ref.tmp471 = alloca float, align 4
+ %ref.tmp472 = alloca float, align 4
+ %ref.tmp473 = alloca float, align 4
+ %ref.tmp476 = alloca %class.btVector3, align 4
+ %ref.tmp477 = alloca %class.btVector3, align 4
+ %ref.tmp478 = alloca float, align 4
+ %ref.tmp479 = alloca float, align 4
+ %ref.tmp480 = alloca float, align 4
+ %ref.tmp498 = alloca %class.btVector3, align 4
+ %ref.tmp499 = alloca %class.btVector3, align 4
+ %ref.tmp500 = alloca float, align 4
+ %ref.tmp501 = alloca float, align 4
+ %ref.tmp502 = alloca float, align 4
+ %ref.tmp505 = alloca %class.btVector3, align 4
+ %ref.tmp506 = alloca %class.btVector3, align 4
+ %ref.tmp507 = alloca float, align 4
+ %ref.tmp508 = alloca float, align 4
+ %ref.tmp509 = alloca float, align 4
+ store %class.RagDoll* %this, %class.RagDoll** %this.addr, align 4
+ store %class.btDynamicsWorld* %ownerWorld, %class.btDynamicsWorld** %ownerWorld.addr, align 4
+ store %class.btVector3* %positionOffset, %class.btVector3** %positionOffset.addr, align 4
+ store float %scale, float* %scale.addr, align 4
+ %this1 = load %class.RagDoll** %this.addr
+ store %class.RagDoll* %this1, %class.RagDoll** %retval
+ %0 = bitcast %class.RagDoll* %this1 to i8***
+ store i8** getelementptr inbounds ([4 x i8*]* @_ZTV7RagDoll, i64 0, i64 2), i8*** %0
+ %m_ownerWorld = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %1 = load %class.btDynamicsWorld** %ownerWorld.addr, align 4
+ store %class.btDynamicsWorld* %1, %class.btDynamicsWorld** %m_ownerWorld, align 4
+ %call = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %2 = bitcast i8* %call to %class.btCapsuleShape*
+ %3 = load float* %scale.addr, align 4
+ %mul = fmul float 0x3FC3333340000000, %3
+ %4 = load float* %scale.addr, align 4
+ %mul2 = fmul float 0x3FC99999A0000000, %4
+ %call3 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %2, float %mul, float %mul2)
+ to label %invoke.cont unwind label %lpad
+
+invoke.cont: ; preds = %entry
+ %5 = bitcast %class.btCapsuleShape* %2 to %class.btCollisionShape*
+ %m_shapes = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes, i32 0, i32 0
+ store %class.btCollisionShape* %5, %class.btCollisionShape** %arrayidx, align 4
+ %call5 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %6 = bitcast i8* %call5 to %class.btCapsuleShape*
+ %7 = load float* %scale.addr, align 4
+ %mul6 = fmul float 0x3FC3333340000000, %7
+ %8 = load float* %scale.addr, align 4
+ %mul7 = fmul float 0x3FD1EB8520000000, %8
+ %call10 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %6, float %mul6, float %mul7)
+ to label %invoke.cont9 unwind label %lpad8
+
+invoke.cont9: ; preds = %invoke.cont
+ %9 = bitcast %class.btCapsuleShape* %6 to %class.btCollisionShape*
+ %m_shapes12 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx13 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes12, i32 0, i32 1
+ store %class.btCollisionShape* %9, %class.btCollisionShape** %arrayidx13, align 4
+ %call14 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %10 = bitcast i8* %call14 to %class.btCapsuleShape*
+ %11 = load float* %scale.addr, align 4
+ %mul15 = fmul float 0x3FB99999A0000000, %11
+ %12 = load float* %scale.addr, align 4
+ %mul16 = fmul float 0x3FA99999A0000000, %12
+ %call19 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %10, float %mul15, float %mul16)
+ to label %invoke.cont18 unwind label %lpad17
+
+invoke.cont18: ; preds = %invoke.cont9
+ %13 = bitcast %class.btCapsuleShape* %10 to %class.btCollisionShape*
+ %m_shapes21 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx22 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes21, i32 0, i32 2
+ store %class.btCollisionShape* %13, %class.btCollisionShape** %arrayidx22, align 4
+ %call23 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %14 = bitcast i8* %call23 to %class.btCapsuleShape*
+ %15 = load float* %scale.addr, align 4
+ %mul24 = fmul float 0x3FB1EB8520000000, %15
+ %16 = load float* %scale.addr, align 4
+ %mul25 = fmul float 0x3FDCCCCCC0000000, %16
+ %call28 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %14, float %mul24, float %mul25)
+ to label %invoke.cont27 unwind label %lpad26
+
+invoke.cont27: ; preds = %invoke.cont18
+ %17 = bitcast %class.btCapsuleShape* %14 to %class.btCollisionShape*
+ %m_shapes30 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx31 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes30, i32 0, i32 3
+ store %class.btCollisionShape* %17, %class.btCollisionShape** %arrayidx31, align 4
+ %call32 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %18 = bitcast i8* %call32 to %class.btCapsuleShape*
+ %19 = load float* %scale.addr, align 4
+ %mul33 = fmul float 0x3FA99999A0000000, %19
+ %20 = load float* %scale.addr, align 4
+ %mul34 = fmul float 0x3FD7AE1480000000, %20
+ %call37 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %18, float %mul33, float %mul34)
+ to label %invoke.cont36 unwind label %lpad35
+
+invoke.cont36: ; preds = %invoke.cont27
+ %21 = bitcast %class.btCapsuleShape* %18 to %class.btCollisionShape*
+ %m_shapes39 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx40 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes39, i32 0, i32 4
+ store %class.btCollisionShape* %21, %class.btCollisionShape** %arrayidx40, align 4
+ %call41 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %22 = bitcast i8* %call41 to %class.btCapsuleShape*
+ %23 = load float* %scale.addr, align 4
+ %mul42 = fmul float 0x3FB1EB8520000000, %23
+ %24 = load float* %scale.addr, align 4
+ %mul43 = fmul float 0x3FDCCCCCC0000000, %24
+ %call46 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %22, float %mul42, float %mul43)
+ to label %invoke.cont45 unwind label %lpad44
+
+invoke.cont45: ; preds = %invoke.cont36
+ %25 = bitcast %class.btCapsuleShape* %22 to %class.btCollisionShape*
+ %m_shapes48 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx49 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes48, i32 0, i32 5
+ store %class.btCollisionShape* %25, %class.btCollisionShape** %arrayidx49, align 4
+ %call50 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %26 = bitcast i8* %call50 to %class.btCapsuleShape*
+ %27 = load float* %scale.addr, align 4
+ %mul51 = fmul float 0x3FA99999A0000000, %27
+ %28 = load float* %scale.addr, align 4
+ %mul52 = fmul float 0x3FD7AE1480000000, %28
+ %call55 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %26, float %mul51, float %mul52)
+ to label %invoke.cont54 unwind label %lpad53
+
+invoke.cont54: ; preds = %invoke.cont45
+ %29 = bitcast %class.btCapsuleShape* %26 to %class.btCollisionShape*
+ %m_shapes57 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx58 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes57, i32 0, i32 6
+ store %class.btCollisionShape* %29, %class.btCollisionShape** %arrayidx58, align 4
+ %call59 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %30 = bitcast i8* %call59 to %class.btCapsuleShape*
+ %31 = load float* %scale.addr, align 4
+ %mul60 = fmul float 0x3FA99999A0000000, %31
+ %32 = load float* %scale.addr, align 4
+ %mul61 = fmul float 0x3FD51EB860000000, %32
+ %call64 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %30, float %mul60, float %mul61)
+ to label %invoke.cont63 unwind label %lpad62
+
+invoke.cont63: ; preds = %invoke.cont54
+ %33 = bitcast %class.btCapsuleShape* %30 to %class.btCollisionShape*
+ %m_shapes66 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx67 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes66, i32 0, i32 7
+ store %class.btCollisionShape* %33, %class.btCollisionShape** %arrayidx67, align 4
+ %call68 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %34 = bitcast i8* %call68 to %class.btCapsuleShape*
+ %35 = load float* %scale.addr, align 4
+ %mul69 = fmul float 0x3FA47AE140000000, %35
+ %36 = load float* %scale.addr, align 4
+ %mul70 = fmul float 2.500000e-01, %36
+ %call73 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %34, float %mul69, float %mul70)
+ to label %invoke.cont72 unwind label %lpad71
+
+invoke.cont72: ; preds = %invoke.cont63
+ %37 = bitcast %class.btCapsuleShape* %34 to %class.btCollisionShape*
+ %m_shapes75 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx76 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes75, i32 0, i32 8
+ store %class.btCollisionShape* %37, %class.btCollisionShape** %arrayidx76, align 4
+ %call77 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %38 = bitcast i8* %call77 to %class.btCapsuleShape*
+ %39 = load float* %scale.addr, align 4
+ %mul78 = fmul float 0x3FA99999A0000000, %39
+ %40 = load float* %scale.addr, align 4
+ %mul79 = fmul float 0x3FD51EB860000000, %40
+ %call82 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %38, float %mul78, float %mul79)
+ to label %invoke.cont81 unwind label %lpad80
+
+invoke.cont81: ; preds = %invoke.cont72
+ %41 = bitcast %class.btCapsuleShape* %38 to %class.btCollisionShape*
+ %m_shapes84 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx85 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes84, i32 0, i32 9
+ store %class.btCollisionShape* %41, %class.btCollisionShape** %arrayidx85, align 4
+ %call86 = call i8* @_ZN13btConvexShapenwEm(i32 56)
+ %42 = bitcast i8* %call86 to %class.btCapsuleShape*
+ %43 = load float* %scale.addr, align 4
+ %mul87 = fmul float 0x3FA47AE140000000, %43
+ %44 = load float* %scale.addr, align 4
+ %mul88 = fmul float 2.500000e-01, %44
+ %call91 = invoke %class.btCapsuleShape* @_ZN14btCapsuleShapeC1Eff(%class.btCapsuleShape* %42, float %mul87, float %mul88)
+ to label %invoke.cont90 unwind label %lpad89
+
+invoke.cont90: ; preds = %invoke.cont81
+ %45 = bitcast %class.btCapsuleShape* %42 to %class.btCollisionShape*
+ %m_shapes93 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx94 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes93, i32 0, i32 10
+ store %class.btCollisionShape* %45, %class.btCollisionShape** %arrayidx94, align 4
+ %call95 = call %class.btTransform* @_ZN11btTransformC1Ev(%class.btTransform* %offset)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %offset)
+ %46 = load %class.btVector3** %positionOffset.addr, align 4
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %offset, %class.btVector3* %46)
+ %call96 = call %class.btTransform* @_ZN11btTransformC1Ev(%class.btTransform* %transform)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0.000000e+00, float* %ref.tmp98, align 4
+ store float 1.000000e+00, float* %ref.tmp99, align 4
+ store float 0.000000e+00, float* %ref.tmp100, align 4
+ %call101 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp97, float* %ref.tmp98, float* %ref.tmp99, float* %ref.tmp100)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp, float* %scale.addr, %class.btVector3* %ref.tmp97)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp102, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes103 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx104 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes103, i32 0, i32 0
+ %47 = load %class.btCollisionShape** %arrayidx104, align 4
+ %call105 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp102, %class.btCollisionShape* %47)
+ %m_bodies = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx106 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies, i32 0, i32 0
+ store %class.btRigidBody* %call105, %class.btRigidBody** %arrayidx106, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0.000000e+00, float* %ref.tmp109, align 4
+ store float 0x3FF3333340000000, float* %ref.tmp110, align 4
+ store float 0.000000e+00, float* %ref.tmp111, align 4
+ %call112 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp108, float* %ref.tmp109, float* %ref.tmp110, float* %ref.tmp111)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp107, float* %scale.addr, %class.btVector3* %ref.tmp108)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp107)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp113, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes114 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx115 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes114, i32 0, i32 1
+ %48 = load %class.btCollisionShape** %arrayidx115, align 4
+ %call116 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp113, %class.btCollisionShape* %48)
+ %m_bodies117 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx118 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies117, i32 0, i32 1
+ store %class.btRigidBody* %call116, %class.btRigidBody** %arrayidx118, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0.000000e+00, float* %ref.tmp121, align 4
+ store float 0x3FF99999A0000000, float* %ref.tmp122, align 4
+ store float 0.000000e+00, float* %ref.tmp123, align 4
+ %call124 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp120, float* %ref.tmp121, float* %ref.tmp122, float* %ref.tmp123)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp119, float* %scale.addr, %class.btVector3* %ref.tmp120)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp119)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp125, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes126 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx127 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes126, i32 0, i32 2
+ %49 = load %class.btCollisionShape** %arrayidx127, align 4
+ %call128 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp125, %class.btCollisionShape* %49)
+ %m_bodies129 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx130 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies129, i32 0, i32 2
+ store %class.btRigidBody* %call128, %class.btRigidBody** %arrayidx130, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0xBFC70A3D80000000, float* %ref.tmp133, align 4
+ store float 0x3FE4CCCCC0000000, float* %ref.tmp134, align 4
+ store float 0.000000e+00, float* %ref.tmp135, align 4
+ %call136 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp132, float* %ref.tmp133, float* %ref.tmp134, float* %ref.tmp135)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp131, float* %scale.addr, %class.btVector3* %ref.tmp132)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp131)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp137, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes138 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx139 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes138, i32 0, i32 3
+ %50 = load %class.btCollisionShape** %arrayidx139, align 4
+ %call140 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp137, %class.btCollisionShape* %50)
+ %m_bodies141 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx142 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies141, i32 0, i32 3
+ store %class.btRigidBody* %call140, %class.btRigidBody** %arrayidx142, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0xBFC70A3D80000000, float* %ref.tmp145, align 4
+ store float 0x3FC99999A0000000, float* %ref.tmp146, align 4
+ store float 0.000000e+00, float* %ref.tmp147, align 4
+ %call148 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp144, float* %ref.tmp145, float* %ref.tmp146, float* %ref.tmp147)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp143, float* %scale.addr, %class.btVector3* %ref.tmp144)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp143)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp149, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes150 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx151 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes150, i32 0, i32 4
+ %51 = load %class.btCollisionShape** %arrayidx151, align 4
+ %call152 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp149, %class.btCollisionShape* %51)
+ %m_bodies153 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx154 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies153, i32 0, i32 4
+ store %class.btRigidBody* %call152, %class.btRigidBody** %arrayidx154, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0x3FC70A3D80000000, float* %ref.tmp157, align 4
+ store float 0x3FE4CCCCC0000000, float* %ref.tmp158, align 4
+ store float 0.000000e+00, float* %ref.tmp159, align 4
+ %call160 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp156, float* %ref.tmp157, float* %ref.tmp158, float* %ref.tmp159)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp155, float* %scale.addr, %class.btVector3* %ref.tmp156)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp155)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp161, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes162 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx163 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes162, i32 0, i32 5
+ %52 = load %class.btCollisionShape** %arrayidx163, align 4
+ %call164 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp161, %class.btCollisionShape* %52)
+ %m_bodies165 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx166 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies165, i32 0, i32 5
+ store %class.btRigidBody* %call164, %class.btRigidBody** %arrayidx166, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0x3FC70A3D80000000, float* %ref.tmp169, align 4
+ store float 0x3FC99999A0000000, float* %ref.tmp170, align 4
+ store float 0.000000e+00, float* %ref.tmp171, align 4
+ %call172 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp168, float* %ref.tmp169, float* %ref.tmp170, float* %ref.tmp171)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp167, float* %scale.addr, %class.btVector3* %ref.tmp168)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp167)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp173, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes174 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx175 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes174, i32 0, i32 6
+ %53 = load %class.btCollisionShape** %arrayidx175, align 4
+ %call176 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp173, %class.btCollisionShape* %53)
+ %m_bodies177 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx178 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies177, i32 0, i32 6
+ store %class.btRigidBody* %call176, %class.btRigidBody** %arrayidx178, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0xBFD6666660000000, float* %ref.tmp181, align 4
+ store float 0x3FF7333340000000, float* %ref.tmp182, align 4
+ store float 0.000000e+00, float* %ref.tmp183, align 4
+ %call184 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp180, float* %ref.tmp181, float* %ref.tmp182, float* %ref.tmp183)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp179, float* %scale.addr, %class.btVector3* %ref.tmp180)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp179)
+ %call185 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %transform)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call185, float 0.000000e+00, float 0.000000e+00, float 0x3FF921FB60000000)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp186, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes187 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx188 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes187, i32 0, i32 7
+ %54 = load %class.btCollisionShape** %arrayidx188, align 4
+ %call189 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp186, %class.btCollisionShape* %54)
+ %m_bodies190 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx191 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies190, i32 0, i32 7
+ store %class.btRigidBody* %call189, %class.btRigidBody** %arrayidx191, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0xBFE6666660000000, float* %ref.tmp194, align 4
+ store float 0x3FF7333340000000, float* %ref.tmp195, align 4
+ store float 0.000000e+00, float* %ref.tmp196, align 4
+ %call197 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp193, float* %ref.tmp194, float* %ref.tmp195, float* %ref.tmp196)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp192, float* %scale.addr, %class.btVector3* %ref.tmp193)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp192)
+ %call198 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %transform)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call198, float 0.000000e+00, float 0.000000e+00, float 0x3FF921FB60000000)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp199, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes200 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx201 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes200, i32 0, i32 8
+ %55 = load %class.btCollisionShape** %arrayidx201, align 4
+ %call202 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp199, %class.btCollisionShape* %55)
+ %m_bodies203 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx204 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies203, i32 0, i32 8
+ store %class.btRigidBody* %call202, %class.btRigidBody** %arrayidx204, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0x3FD6666660000000, float* %ref.tmp207, align 4
+ store float 0x3FF7333340000000, float* %ref.tmp208, align 4
+ store float 0.000000e+00, float* %ref.tmp209, align 4
+ %call210 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp206, float* %ref.tmp207, float* %ref.tmp208, float* %ref.tmp209)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp205, float* %scale.addr, %class.btVector3* %ref.tmp206)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp205)
+ %call211 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %transform)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call211, float 0.000000e+00, float 0.000000e+00, float 0xBFF921FB60000000)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp212, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes213 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx214 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes213, i32 0, i32 9
+ %56 = load %class.btCollisionShape** %arrayidx214, align 4
+ %call215 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp212, %class.btCollisionShape* %56)
+ %m_bodies216 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx217 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies216, i32 0, i32 9
+ store %class.btRigidBody* %call215, %class.btRigidBody** %arrayidx217, align 4
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %transform)
+ store float 0x3FE6666660000000, float* %ref.tmp220, align 4
+ store float 0x3FF7333340000000, float* %ref.tmp221, align 4
+ store float 0.000000e+00, float* %ref.tmp222, align 4
+ %call223 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp219, float* %ref.tmp220, float* %ref.tmp221, float* %ref.tmp222)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp218, float* %scale.addr, %class.btVector3* %ref.tmp219)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %transform, %class.btVector3* %ref.tmp218)
+ %call224 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %transform)
+ call void @_ZN11btMatrix3x311setEuler