summaryrefslogtreecommitdiffstats
path: root/test/CodeGen/Thumb2
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/Thumb2')
-rw-r--r--test/CodeGen/Thumb2/2009-07-21-ISelBug.ll2
-rw-r--r--test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll2
-rw-r--r--test/CodeGen/Thumb2/2010-03-15-AsmCCClobber.ll4
-rw-r--r--test/CodeGen/Thumb2/2010-06-14-NEONCoalescer.ll2
-rw-r--r--test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll2
-rw-r--r--test/CodeGen/Thumb2/2011-12-16-T2SizeReduceAssert.ll28
-rw-r--r--test/CodeGen/Thumb2/2012-01-13-CBNZBug.ll103
-rw-r--r--test/CodeGen/Thumb2/aligned-constants.ll26
-rw-r--r--test/CodeGen/Thumb2/aligned-spill.ll95
-rw-r--r--test/CodeGen/Thumb2/constant-islands.ll1400
-rw-r--r--test/CodeGen/Thumb2/crash.ll31
-rw-r--r--test/CodeGen/Thumb2/dg.exp5
-rw-r--r--test/CodeGen/Thumb2/large-call.ll29
-rw-r--r--test/CodeGen/Thumb2/ldr-str-imm12.ll10
-rw-r--r--test/CodeGen/Thumb2/lit.local.cfg6
-rw-r--r--test/CodeGen/Thumb2/lsr-deficiency.ll11
-rw-r--r--test/CodeGen/Thumb2/machine-licm.ll7
-rw-r--r--test/CodeGen/Thumb2/thumb2-cbnz.ll5
-rw-r--r--test/CodeGen/Thumb2/thumb2-clz.ll4
-rw-r--r--test/CodeGen/Thumb2/thumb2-ifcvt2.ll2
-rw-r--r--test/CodeGen/Thumb2/thumb2-ldm.ll2
-rw-r--r--test/CodeGen/Thumb2/thumb2-ldrd.ll5
-rw-r--r--test/CodeGen/Thumb2/thumb2-mls.ll2
-rw-r--r--test/CodeGen/Thumb2/thumb2-mul.ll2
-rw-r--r--test/CodeGen/Thumb2/thumb2-select_xform.ll2
25 files changed, 1746 insertions, 41 deletions
diff --git a/test/CodeGen/Thumb2/2009-07-21-ISelBug.ll b/test/CodeGen/Thumb2/2009-07-21-ISelBug.ll
index 4e1394f..4616dcf 100644
--- a/test/CodeGen/Thumb2/2009-07-21-ISelBug.ll
+++ b/test/CodeGen/Thumb2/2009-07-21-ISelBug.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=thumbv7-apple-darwin9 -mattr=+vfp2,+thumb2 | FileCheck %s
+; RUN: llc < %s -mtriple=thumbv7-apple-ios -mattr=+vfp2,+thumb2 | FileCheck %s
; rdar://7076238
@"\01LC" = external constant [36 x i8], align 1 ; <[36 x i8]*> [#uses=1]
diff --git a/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll b/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll
index 034a28f..524e5a6 100644
--- a/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll
+++ b/test/CodeGen/Thumb2/2009-12-01-LoopIVUsers.ll
@@ -5,7 +5,7 @@ define void @fred(i32 %three_by_three, i8* %in, double %dt1, i32 %x_size, i32 %y
entry:
; -- The loop following the load should only use a single add-literation
; instruction.
-; CHECK: ldr.64
+; CHECK: vldr
; CHECK: adds r{{[0-9]+.*}}#1
; CHECK-NOT: adds
; CHECK: subsections_via_symbols
diff --git a/test/CodeGen/Thumb2/2010-03-15-AsmCCClobber.ll b/test/CodeGen/Thumb2/2010-03-15-AsmCCClobber.ll
index bb734ac..fcf1bae 100644
--- a/test/CodeGen/Thumb2/2010-03-15-AsmCCClobber.ll
+++ b/test/CodeGen/Thumb2/2010-03-15-AsmCCClobber.ll
@@ -21,7 +21,7 @@ target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-
define void @test(%s1* %this, i32 %format, i32 %w, i32 %h, i32 %levels, i32* %s, i8* %data, i32* nocapture %rowbytes, void (i8*, i8*)* %release, i8* %info) nounwind {
entry:
%tmp1 = getelementptr inbounds %s1* %this, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0
- volatile store i32 1, i32* %tmp1, align 4
+ store volatile i32 1, i32* %tmp1, align 4
%tmp12 = getelementptr inbounds %s1* %this, i32 0, i32 1
store i32 %levels, i32* %tmp12, align 4
%tmp13 = getelementptr inbounds %s1* %this, i32 0, i32 3
@@ -46,7 +46,7 @@ entry:
%tmp24 = shl i32 %flags.0, 16
%asmtmp.i.i.i = tail call %0 asm sideeffect "\0A0:\09ldrex $1, [$2]\0A\09orr $1, $1, $3\0A\09strex $0, $1, [$2]\0A\09cmp $0, #0\0A\09bne 0b", "=&r,=&r,r,r,~{memory},~{cc}"(i32* %tmp1, i32 %tmp24) nounwind
%tmp25 = getelementptr inbounds %s1* %this, i32 0, i32 2, i32 0, i32 0
- volatile store i32 1, i32* %tmp25, align 4
+ store volatile i32 1, i32* %tmp25, align 4
%tmp26 = icmp eq i32 %levels, 0
br i1 %tmp26, label %return, label %bb4
diff --git a/test/CodeGen/Thumb2/2010-06-14-NEONCoalescer.ll b/test/CodeGen/Thumb2/2010-06-14-NEONCoalescer.ll
index 01fb0a5..06762ba 100644
--- a/test/CodeGen/Thumb2/2010-06-14-NEONCoalescer.ll
+++ b/test/CodeGen/Thumb2/2010-06-14-NEONCoalescer.ll
@@ -23,7 +23,7 @@ entry:
%4 = insertelement <2 x double> %2, double %V.0.ph, i32 1 ; <<2 x double>> [#uses=2]
; Constant pool load followed by add.
; Then clobber the loaded register, not the sum.
-; CHECK: vldr.64 [[LDR:d.*]],
+; CHECK: vldr [[LDR:d.*]],
; CHECK: LPC0_0:
; CHECK: vadd.f64 [[ADD:d.*]], [[LDR]], [[LDR]]
; CHECK-NOT: vmov.f64 [[ADD]]
diff --git a/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll b/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll
index d2140a1..5cb266b 100644
--- a/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll
+++ b/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll
@@ -1,5 +1,5 @@
; rdar://8465407
-; RUN: llc < %s -mtriple=thumbv7-apple-darwin | FileCheck %s
+; RUN: llc < %s -mtriple=thumbv7-apple-ios | FileCheck %s
%struct.buf = type opaque
diff --git a/test/CodeGen/Thumb2/2011-12-16-T2SizeReduceAssert.ll b/test/CodeGen/Thumb2/2011-12-16-T2SizeReduceAssert.ll
new file mode 100644
index 0000000..dadbdc5
--- /dev/null
+++ b/test/CodeGen/Thumb2/2011-12-16-T2SizeReduceAssert.ll
@@ -0,0 +1,28 @@
+; RUN: llc < %s -mtriple=thumbv7-apple-ios -relocation-model=pic -disable-fp-elim -mcpu=cortex-a8
+
+%struct.LIST_NODE.0.16 = type { %struct.LIST_NODE.0.16*, i8* }
+
+define %struct.LIST_NODE.0.16* @list_AssocListPair(%struct.LIST_NODE.0.16* %List, i8* %Key) nounwind readonly {
+entry:
+ br label %bb3
+
+bb: ; preds = %bb3
+ %Scan.0.idx7.val = load i8** undef, align 4
+ %.idx = getelementptr i8* %Scan.0.idx7.val, i32 4
+ %0 = bitcast i8* %.idx to i8**
+ %.idx.val = load i8** %0, align 4
+ %1 = icmp eq i8* %.idx.val, %Key
+ br i1 %1, label %bb5, label %bb2
+
+bb2: ; preds = %bb
+ %Scan.0.idx8.val = load %struct.LIST_NODE.0.16** undef, align 4
+ br label %bb3
+
+bb3: ; preds = %bb2, %entry
+ %Scan.0 = phi %struct.LIST_NODE.0.16* [ %List, %entry ], [ %Scan.0.idx8.val, %bb2 ]
+ %2 = icmp eq %struct.LIST_NODE.0.16* %Scan.0, null
+ br i1 %2, label %bb5, label %bb
+
+bb5: ; preds = %bb3, %bb
+ ret %struct.LIST_NODE.0.16* null
+}
diff --git a/test/CodeGen/Thumb2/2012-01-13-CBNZBug.ll b/test/CodeGen/Thumb2/2012-01-13-CBNZBug.ll
new file mode 100644
index 0000000..4acdd9e
--- /dev/null
+++ b/test/CodeGen/Thumb2/2012-01-13-CBNZBug.ll
@@ -0,0 +1,103 @@
+; RUN: llc < %s -mtriple=thumbv7-apple-ios -relocation-model=pic -disable-fp-elim -mcpu=cortex-a8 | FileCheck %s
+; rdar://10676853
+
+%struct.Dict_node_struct = type { i8*, %struct.Word_file_struct*, %struct.Exp_struct*, %struct.Dict_node_struct*, %struct.Dict_node_struct* }
+%struct.Word_file_struct = type { [60 x i8], i32, %struct.Word_file_struct* }
+%struct.Exp_struct = type { i8, i8, i8, i8, %union.anon }
+%union.anon = type { %struct.E_list_struct* }
+%struct.E_list_struct = type { %struct.E_list_struct*, %struct.Exp_struct* }
+
+@lookup_list = external hidden unnamed_addr global %struct.Dict_node_struct*, align 4
+
+declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
+
+define hidden fastcc void @rdictionary_lookup(%struct.Dict_node_struct* %dn, i8* nocapture %s) nounwind ssp {
+; CHECK: rdictionary_lookup:
+entry:
+ br label %tailrecurse
+
+tailrecurse: ; preds = %if.then10, %entry
+ %dn.tr = phi %struct.Dict_node_struct* [ %dn, %entry ], [ %9, %if.then10 ]
+ %cmp = icmp eq %struct.Dict_node_struct* %dn.tr, null
+ br i1 %cmp, label %if.end11, label %if.end
+
+if.end: ; preds = %tailrecurse
+ %string = getelementptr inbounds %struct.Dict_node_struct* %dn.tr, i32 0, i32 0
+ %0 = load i8** %string, align 4
+ br label %while.cond.i
+
+while.cond.i: ; preds = %while.body.i, %if.end
+ %1 = phi i8* [ %s, %if.end ], [ %incdec.ptr.i, %while.body.i ]
+ %storemerge.i = phi i8* [ %0, %if.end ], [ %incdec.ptr6.i, %while.body.i ]
+ %2 = load i8* %1, align 1
+ %cmp.i = icmp eq i8 %2, 0
+ %.pre.i = load i8* %storemerge.i, align 1
+ br i1 %cmp.i, label %lor.lhs.false.i, label %land.end.i
+
+land.end.i: ; preds = %while.cond.i
+ %cmp4.i = icmp eq i8 %2, %.pre.i
+ br i1 %cmp4.i, label %while.body.i, label %while.end.i
+
+while.body.i: ; preds = %land.end.i
+ %incdec.ptr.i = getelementptr inbounds i8* %1, i32 1
+ %incdec.ptr6.i = getelementptr inbounds i8* %storemerge.i, i32 1
+ br label %while.cond.i
+
+while.end.i: ; preds = %land.end.i
+ %cmp8.i = icmp eq i8 %2, 42
+ br i1 %cmp8.i, label %if.end3, label %lor.lhs.false.i
+
+lor.lhs.false.i: ; preds = %while.end.i, %while.cond.i
+ %3 = phi i8 [ %2, %while.end.i ], [ 0, %while.cond.i ]
+ %cmp11.i = icmp eq i8 %.pre.i, 42
+ br i1 %cmp11.i, label %if.end3, label %dict_match.exit
+
+dict_match.exit: ; preds = %lor.lhs.false.i
+ %cmp14.i = icmp eq i8 %3, 46
+ %conv16.i = sext i8 %3 to i32
+ %.conv16.i = select i1 %cmp14.i, i32 0, i32 %conv16.i
+ %cmp18.i = icmp eq i8 %.pre.i, 46
+ %conv22.i = sext i8 %.pre.i to i32
+ %cond24.i = select i1 %cmp18.i, i32 0, i32 %conv22.i
+ %sub.i = sub nsw i32 %.conv16.i, %cond24.i
+ %cmp1 = icmp sgt i32 %sub.i, -1
+ br i1 %cmp1, label %if.end3, label %if.then10
+
+if.end3: ; preds = %dict_match.exit, %lor.lhs.false.i, %while.end.i
+; CHECK: %if.end3
+; CHECK: cmp
+; CHECK-NOT: cbnz
+ %storemerge1.i3 = phi i32 [ %sub.i, %dict_match.exit ], [ 0, %lor.lhs.false.i ], [ 0, %while.end.i ]
+ %right = getelementptr inbounds %struct.Dict_node_struct* %dn.tr, i32 0, i32 4
+ %4 = load %struct.Dict_node_struct** %right, align 4
+ tail call fastcc void @rdictionary_lookup(%struct.Dict_node_struct* %4, i8* %s)
+ %cmp4 = icmp eq i32 %storemerge1.i3, 0
+ br i1 %cmp4, label %if.then5, label %if.end8
+
+if.then5: ; preds = %if.end3
+ %call6 = tail call fastcc i8* @xalloc(i32 20)
+ %5 = bitcast i8* %call6 to %struct.Dict_node_struct*
+ %6 = bitcast %struct.Dict_node_struct* %dn.tr to i8*
+ tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %call6, i8* %6, i32 16, i32 4, i1 false)
+ %7 = load %struct.Dict_node_struct** @lookup_list, align 4
+ %right7 = getelementptr inbounds i8* %call6, i32 16
+ %8 = bitcast i8* %right7 to %struct.Dict_node_struct**
+ store %struct.Dict_node_struct* %7, %struct.Dict_node_struct** %8, align 4
+ store %struct.Dict_node_struct* %5, %struct.Dict_node_struct** @lookup_list, align 4
+ br label %if.then10
+
+if.end8: ; preds = %if.end3
+ %cmp9 = icmp slt i32 %storemerge1.i3, 1
+ br i1 %cmp9, label %if.then10, label %if.end11
+
+if.then10: ; preds = %if.end8, %if.then5, %dict_match.exit
+ %left = getelementptr inbounds %struct.Dict_node_struct* %dn.tr, i32 0, i32 3
+ %9 = load %struct.Dict_node_struct** %left, align 4
+ br label %tailrecurse
+
+if.end11: ; preds = %if.end8, %tailrecurse
+ ret void
+}
+
+; Materializable
+declare hidden fastcc i8* @xalloc(i32) nounwind ssp
diff --git a/test/CodeGen/Thumb2/aligned-constants.ll b/test/CodeGen/Thumb2/aligned-constants.ll
new file mode 100644
index 0000000..16b3a19
--- /dev/null
+++ b/test/CodeGen/Thumb2/aligned-constants.ll
@@ -0,0 +1,26 @@
+; RUN: llc < %s -mcpu=cortex-a8 | FileCheck %s
+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"
+
+; The double in the constant pool is 8-byte aligned, forcing the function
+; alignment.
+; CHECK: .align 3
+; CHECK: func
+;
+; Constant pool with 8-byte entry before 4-byte entry:
+; CHECK: .align 3
+; CHECK: LCPI
+; CHECK: .long 2370821947
+; CHECK: .long 1080815255
+; CHECK: LCPI
+; CHECK: .long 1123477881
+define void @func(float* nocapture %x, double* nocapture %y) nounwind ssp {
+entry:
+ %0 = load float* %x, align 4
+ %add = fadd float %0, 0x405EDD2F20000000
+ store float %add, float* %x, align 4
+ %1 = load double* %y, align 4
+ %add1 = fadd double %1, 2.234560e+02
+ store double %add1, double* %y, align 4
+ ret void
+}
diff --git a/test/CodeGen/Thumb2/aligned-spill.ll b/test/CodeGen/Thumb2/aligned-spill.ll
new file mode 100644
index 0000000..c98ca80
--- /dev/null
+++ b/test/CodeGen/Thumb2/aligned-spill.ll
@@ -0,0 +1,95 @@
+; RUN: llc < %s -mcpu=cortex-a8 -align-neon-spills=0 | FileCheck %s
+; RUN: llc < %s -mcpu=cortex-a8 -align-neon-spills=1 | FileCheck %s --check-prefix=NEON
+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"
+
+; CHECK: f
+; This function is forced to spill a double.
+; Verify that the spill slot is properly aligned.
+;
+; The caller-saved r4 is used as a scratch register for stack realignment.
+; CHECK: push {r4, r7, lr}
+; CHECK: bic r4, r4, #7
+; CHECK: mov sp, r4
+define void @f(double* nocapture %p) nounwind ssp {
+entry:
+ %0 = load double* %p, align 4
+ tail call void asm sideeffect "", "~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"() nounwind
+ tail call void @g() nounwind
+ store double %0, double* %p, align 4
+ ret void
+}
+
+; NEON: f
+; NEON: push {r4, r7, lr}
+; NEON: sub.w r4, sp, #64
+; NEON: bic r4, r4, #15
+; Stack pointer must be updated before the spills.
+; NEON: mov sp, r4
+; NEON: vst1.64 {d8, d9, d10, d11}, [r4, :128]!
+; NEON: vst1.64 {d12, d13, d14, d15}, [r4, :128]
+; Stack pointer adjustment for the stack frame contents.
+; This could legally happen before the spills.
+; Since the spill slot is only 8 bytes, technically it would be fine to only
+; subtract #8 here. That would leave sp less aligned than some stack slots,
+; and would probably blow MFI's mind.
+; NEON: sub sp, #16
+; The epilog is free to use another scratch register than r4.
+; NEON: add r[[R4:[0-9]+]], sp, #16
+; NEON: vld1.64 {d8, d9, d10, d11}, [r[[R4]], :128]!
+; NEON: vld1.64 {d12, d13, d14, d15}, [r[[R4]], :128]
+; The stack pointer restore must happen after the reloads.
+; NEON: mov sp,
+; NEON: pop
+
+declare void @g()
+
+; Spill 7 d-registers.
+define void @f7(double* nocapture %p) nounwind ssp {
+entry:
+ tail call void asm sideeffect "", "~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14}"() nounwind
+ ret void
+}
+
+; NEON: f7
+; NEON: push {r4, r7, lr}
+; NEON: sub.w r4, sp, #56
+; NEON: bic r4, r4, #15
+; Stack pointer must be updated before the spills.
+; NEON: mov sp, r4
+; NEON: vst1.64 {d8, d9, d10, d11}, [r4, :128]!
+; NEON: vst1.64 {d12, d13}, [r4, :128]
+; NEON: vstr d14, [r4, #16]
+; Epilog
+; NEON: vld1.64 {d8, d9, d10, d11},
+; NEON: vld1.64 {d12, d13},
+; NEON: vldr d14,
+; The stack pointer restore must happen after the reloads.
+; NEON: mov sp,
+; NEON: pop
+
+; Spill 7 d-registers, leave a hole.
+define void @f3plus4(double* nocapture %p) nounwind ssp {
+entry:
+ tail call void asm sideeffect "", "~{d8},~{d9},~{d10},~{d12},~{d13},~{d14},~{d15}"() nounwind
+ ret void
+}
+
+; Aligned spilling only works for contiguous ranges starting from d8.
+; The rest goes to the standard vpush instructions.
+; NEON: f3plus4
+; NEON: push {r4, r7, lr}
+; NEON: vpush {d12, d13, d14, d15}
+; NEON: sub.w r4, sp, #24
+; NEON: bic r4, r4, #15
+; Stack pointer must be updated before the spills.
+; NEON: mov sp, r4
+; NEON: vst1.64 {d8, d9}, [r4, :128]
+; NEON: vstr d10, [r4, #16]
+; Epilog
+; NEON: vld1.64 {d8, d9},
+; NEON: vldr d10, [{{.*}}, #16]
+; The stack pointer restore must happen after the reloads.
+; NEON: mov sp,
+; NEON: vpop {d12, d13, d14, d15}
+; NEON: pop
diff --git a/test/CodeGen/Thumb2/constant-islands.ll b/test/CodeGen/Thumb2/constant-islands.ll
new file mode 100644
index 0000000..19d2385
--- /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 @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call224, float 0.000000e+00, float 0.000000e+00, float 0xBFF921FB60000000)
+ call void @_ZNK11btTransformmlERKS_(%class.btTransform* sret %ref.tmp225, %class.btTransform* %offset, %class.btTransform* %transform)
+ %m_shapes226 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 2
+ %arrayidx227 = getelementptr inbounds [11 x %class.btCollisionShape*]* %m_shapes226, i32 0, i32 10
+ %57 = load %class.btCollisionShape** %arrayidx227, align 4
+ %call228 = call %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll* %this1, float 1.000000e+00, %class.btTransform* %ref.tmp225, %class.btCollisionShape* %57)
+ %m_bodies229 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx230 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies229, i32 0, i32 10
+ store %class.btRigidBody* %call228, %class.btRigidBody** %arrayidx230, align 4
+ store i32 0, i32* %i, align 4
+ br label %for.cond
+
+for.cond: ; preds = %for.inc, %invoke.cont90
+ %58 = load i32* %i, align 4
+ %cmp = icmp slt i32 %58, 11
+ br i1 %cmp, label %for.body, label %for.end
+
+for.body: ; preds = %for.cond
+ %59 = load i32* %i, align 4
+ %m_bodies231 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx232 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies231, i32 0, i32 %59
+ %60 = load %class.btRigidBody** %arrayidx232, align 4
+ call void @_ZN11btRigidBody10setDampingEff(%class.btRigidBody* %60, float 0x3FA99999A0000000, float 0x3FEB333340000000)
+ %61 = load i32* %i, align 4
+ %m_bodies233 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx234 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies233, i32 0, i32 %61
+ %62 = load %class.btRigidBody** %arrayidx234, align 4
+ %63 = bitcast %class.btRigidBody* %62 to %class.btCollisionObject*
+ call void @_ZN17btCollisionObject19setDeactivationTimeEf(%class.btCollisionObject* %63, float 0x3FE99999A0000000)
+ %64 = load i32* %i, align 4
+ %m_bodies235 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx236 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies235, i32 0, i32 %64
+ %65 = load %class.btRigidBody** %arrayidx236, align 4
+ call void @_ZN11btRigidBody21setSleepingThresholdsEff(%class.btRigidBody* %65, float 0x3FF99999A0000000, float 2.500000e+00)
+ br label %for.inc
+
+for.inc: ; preds = %for.body
+ %66 = load i32* %i, align 4
+ %inc = add nsw i32 %66, 1
+ store i32 %inc, i32* %i, align 4
+ br label %for.cond
+
+lpad: ; preds = %entry
+ %67 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %68 = extractvalue { i8*, i32 } %67, 0
+ store i8* %68, i8** %exn.slot
+ %69 = extractvalue { i8*, i32 } %67, 1
+ store i32 %69, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call)
+ to label %invoke.cont4 unwind label %terminate.lpad
+
+invoke.cont4: ; preds = %lpad
+ br label %eh.resume
+
+lpad8: ; preds = %invoke.cont
+ %70 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %71 = extractvalue { i8*, i32 } %70, 0
+ store i8* %71, i8** %exn.slot
+ %72 = extractvalue { i8*, i32 } %70, 1
+ store i32 %72, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call5)
+ to label %invoke.cont11 unwind label %terminate.lpad
+
+invoke.cont11: ; preds = %lpad8
+ br label %eh.resume
+
+lpad17: ; preds = %invoke.cont9
+ %73 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %74 = extractvalue { i8*, i32 } %73, 0
+ store i8* %74, i8** %exn.slot
+ %75 = extractvalue { i8*, i32 } %73, 1
+ store i32 %75, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call14)
+ to label %invoke.cont20 unwind label %terminate.lpad
+
+invoke.cont20: ; preds = %lpad17
+ br label %eh.resume
+
+lpad26: ; preds = %invoke.cont18
+ %76 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %77 = extractvalue { i8*, i32 } %76, 0
+ store i8* %77, i8** %exn.slot
+ %78 = extractvalue { i8*, i32 } %76, 1
+ store i32 %78, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call23)
+ to label %invoke.cont29 unwind label %terminate.lpad
+
+invoke.cont29: ; preds = %lpad26
+ br label %eh.resume
+
+lpad35: ; preds = %invoke.cont27
+ %79 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %80 = extractvalue { i8*, i32 } %79, 0
+ store i8* %80, i8** %exn.slot
+ %81 = extractvalue { i8*, i32 } %79, 1
+ store i32 %81, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call32)
+ to label %invoke.cont38 unwind label %terminate.lpad
+
+invoke.cont38: ; preds = %lpad35
+ br label %eh.resume
+
+lpad44: ; preds = %invoke.cont36
+ %82 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %83 = extractvalue { i8*, i32 } %82, 0
+ store i8* %83, i8** %exn.slot
+ %84 = extractvalue { i8*, i32 } %82, 1
+ store i32 %84, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call41)
+ to label %invoke.cont47 unwind label %terminate.lpad
+
+invoke.cont47: ; preds = %lpad44
+ br label %eh.resume
+
+lpad53: ; preds = %invoke.cont45
+ %85 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %86 = extractvalue { i8*, i32 } %85, 0
+ store i8* %86, i8** %exn.slot
+ %87 = extractvalue { i8*, i32 } %85, 1
+ store i32 %87, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call50)
+ to label %invoke.cont56 unwind label %terminate.lpad
+
+invoke.cont56: ; preds = %lpad53
+ br label %eh.resume
+
+lpad62: ; preds = %invoke.cont54
+ %88 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %89 = extractvalue { i8*, i32 } %88, 0
+ store i8* %89, i8** %exn.slot
+ %90 = extractvalue { i8*, i32 } %88, 1
+ store i32 %90, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call59)
+ to label %invoke.cont65 unwind label %terminate.lpad
+
+invoke.cont65: ; preds = %lpad62
+ br label %eh.resume
+
+lpad71: ; preds = %invoke.cont63
+ %91 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %92 = extractvalue { i8*, i32 } %91, 0
+ store i8* %92, i8** %exn.slot
+ %93 = extractvalue { i8*, i32 } %91, 1
+ store i32 %93, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call68)
+ to label %invoke.cont74 unwind label %terminate.lpad
+
+invoke.cont74: ; preds = %lpad71
+ br label %eh.resume
+
+lpad80: ; preds = %invoke.cont72
+ %94 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %95 = extractvalue { i8*, i32 } %94, 0
+ store i8* %95, i8** %exn.slot
+ %96 = extractvalue { i8*, i32 } %94, 1
+ store i32 %96, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call77)
+ to label %invoke.cont83 unwind label %terminate.lpad
+
+invoke.cont83: ; preds = %lpad80
+ br label %eh.resume
+
+lpad89: ; preds = %invoke.cont81
+ %97 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %98 = extractvalue { i8*, i32 } %97, 0
+ store i8* %98, i8** %exn.slot
+ %99 = extractvalue { i8*, i32 } %97, 1
+ store i32 %99, i32* %ehselector.slot
+ invoke void @_ZN13btConvexShapedlEPv(i8* %call86)
+ to label %invoke.cont92 unwind label %terminate.lpad
+
+invoke.cont92: ; preds = %lpad89
+ br label %eh.resume
+
+for.end: ; preds = %for.cond
+ %call237 = call %class.btTransform* @_ZN11btTransformC1Ev(%class.btTransform* %localA)
+ %call238 = call %class.btTransform* @_ZN11btTransformC1Ev(%class.btTransform* %localB)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call239 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call239, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp242, align 4
+ store float 0x3FC3333340000000, float* %ref.tmp243, align 4
+ store float 0.000000e+00, float* %ref.tmp244, align 4
+ %call245 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp241, float* %ref.tmp242, float* %ref.tmp243, float* %ref.tmp244)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp240, float* %scale.addr, %class.btVector3* %ref.tmp241)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp240)
+ %call246 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call246, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp249, align 4
+ store float 0xBFC3333340000000, float* %ref.tmp250, align 4
+ store float 0.000000e+00, float* %ref.tmp251, align 4
+ %call252 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp248, float* %ref.tmp249, float* %ref.tmp250, float* %ref.tmp251)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp247, float* %scale.addr, %class.btVector3* %ref.tmp248)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp247)
+ %call253 = call noalias i8* @_Znwm(i32 780)
+ %100 = bitcast i8* %call253 to %class.btHingeConstraint*
+ %m_bodies254 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx255 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies254, i32 0, i32 0
+ %101 = load %class.btRigidBody** %arrayidx255, align 4
+ %m_bodies256 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx257 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies256, i32 0, i32 1
+ %102 = load %class.btRigidBody** %arrayidx257, align 4
+ %call260 = invoke %class.btHingeConstraint* @_ZN17btHingeConstraintC1ER11btRigidBodyS1_RK11btTransformS4_b(%class.btHingeConstraint* %100, %class.btRigidBody* %101, %class.btRigidBody* %102, %class.btTransform* %localA, %class.btTransform* %localB, i1 zeroext false)
+ to label %invoke.cont259 unwind label %lpad258
+
+invoke.cont259: ; preds = %for.end
+ store %class.btHingeConstraint* %100, %class.btHingeConstraint** %hingeC, align 4
+ %103 = load %class.btHingeConstraint** %hingeC, align 4
+ call void @_ZN17btHingeConstraint8setLimitEfffff(%class.btHingeConstraint* %103, float 0xBFE921FB60000000, float 0x3FF921FB60000000, float 0x3FECCCCCC0000000, float 0x3FD3333340000000, float 1.000000e+00)
+ %104 = load %class.btHingeConstraint** %hingeC, align 4
+ %105 = bitcast %class.btHingeConstraint* %104 to %class.btTypedConstraint*
+ %m_joints = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx261 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints, i32 0, i32 0
+ store %class.btTypedConstraint* %105, %class.btTypedConstraint** %arrayidx261, align 4
+ %m_ownerWorld262 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %106 = load %class.btDynamicsWorld** %m_ownerWorld262, align 4
+ %107 = bitcast %class.btDynamicsWorld* %106 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %107
+ %vfn = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable, i64 10
+ %108 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn
+ %m_joints263 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx264 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints263, i32 0, i32 0
+ %109 = load %class.btTypedConstraint** %arrayidx264, align 4
+ call void %108(%class.btDynamicsWorld* %106, %class.btTypedConstraint* %109, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call265 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call265, float 0.000000e+00, float 0.000000e+00, float 0x3FF921FB60000000)
+ store float 0.000000e+00, float* %ref.tmp268, align 4
+ store float 0x3FD3333340000000, float* %ref.tmp269, align 4
+ store float 0.000000e+00, float* %ref.tmp270, align 4
+ %call271 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp267, float* %ref.tmp268, float* %ref.tmp269, float* %ref.tmp270)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp266, float* %scale.addr, %class.btVector3* %ref.tmp267)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp266)
+ %call272 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call272, float 0.000000e+00, float 0.000000e+00, float 0x3FF921FB60000000)
+ store float 0.000000e+00, float* %ref.tmp275, align 4
+ store float 0xBFC1EB8520000000, float* %ref.tmp276, align 4
+ store float 0.000000e+00, float* %ref.tmp277, align 4
+ %call278 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp274, float* %ref.tmp275, float* %ref.tmp276, float* %ref.tmp277)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp273, float* %scale.addr, %class.btVector3* %ref.tmp274)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp273)
+ %call279 = call noalias i8* @_Znwm(i32 628)
+ %110 = bitcast i8* %call279 to %class.btConeTwistConstraint*
+ %m_bodies280 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx281 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies280, i32 0, i32 1
+ %111 = load %class.btRigidBody** %arrayidx281, align 4
+ %m_bodies282 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx283 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies282, i32 0, i32 2
+ %112 = load %class.btRigidBody** %arrayidx283, align 4
+ %call286 = invoke %class.btConeTwistConstraint* @_ZN21btConeTwistConstraintC1ER11btRigidBodyS1_RK11btTransformS4_(%class.btConeTwistConstraint* %110, %class.btRigidBody* %111, %class.btRigidBody* %112, %class.btTransform* %localA, %class.btTransform* %localB)
+ to label %invoke.cont285 unwind label %lpad284
+
+invoke.cont285: ; preds = %invoke.cont259
+ store %class.btConeTwistConstraint* %110, %class.btConeTwistConstraint** %coneC, align 4
+ %113 = load %class.btConeTwistConstraint** %coneC, align 4
+ call void @_ZN21btConeTwistConstraint8setLimitEffffff(%class.btConeTwistConstraint* %113, float 0x3FE921FB60000000, float 0x3FE921FB60000000, float 0x3FF921FB60000000, float 1.000000e+00, float 0x3FD3333340000000, float 1.000000e+00)
+ %114 = load %class.btConeTwistConstraint** %coneC, align 4
+ %115 = bitcast %class.btConeTwistConstraint* %114 to %class.btTypedConstraint*
+ %m_joints287 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx288 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints287, i32 0, i32 1
+ store %class.btTypedConstraint* %115, %class.btTypedConstraint** %arrayidx288, align 4
+ %m_ownerWorld289 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %116 = load %class.btDynamicsWorld** %m_ownerWorld289, align 4
+ %117 = bitcast %class.btDynamicsWorld* %116 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable290 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %117
+ %vfn291 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable290, i64 10
+ %118 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn291
+ %m_joints292 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx293 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints292, i32 0, i32 1
+ %119 = load %class.btTypedConstraint** %arrayidx293, align 4
+ call void %118(%class.btDynamicsWorld* %116, %class.btTypedConstraint* %119, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call294 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call294, float 0.000000e+00, float 0.000000e+00, float 0xC00F6A7A20000000)
+ store float 0xBFC70A3D80000000, float* %ref.tmp297, align 4
+ store float 0xBFB99999A0000000, float* %ref.tmp298, align 4
+ store float 0.000000e+00, float* %ref.tmp299, align 4
+ %call300 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp296, float* %ref.tmp297, float* %ref.tmp298, float* %ref.tmp299)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp295, float* %scale.addr, %class.btVector3* %ref.tmp296)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp295)
+ %call301 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call301, float 0.000000e+00, float 0.000000e+00, float 0xC00F6A7A20000000)
+ store float 0.000000e+00, float* %ref.tmp304, align 4
+ store float 0x3FCCCCCCC0000000, float* %ref.tmp305, align 4
+ store float 0.000000e+00, float* %ref.tmp306, align 4
+ %call307 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp303, float* %ref.tmp304, float* %ref.tmp305, float* %ref.tmp306)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp302, float* %scale.addr, %class.btVector3* %ref.tmp303)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp302)
+ %call308 = call noalias i8* @_Znwm(i32 628)
+ %120 = bitcast i8* %call308 to %class.btConeTwistConstraint*
+ %m_bodies309 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx310 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies309, i32 0, i32 0
+ %121 = load %class.btRigidBody** %arrayidx310, align 4
+ %m_bodies311 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx312 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies311, i32 0, i32 3
+ %122 = load %class.btRigidBody** %arrayidx312, align 4
+ %call315 = invoke %class.btConeTwistConstraint* @_ZN21btConeTwistConstraintC1ER11btRigidBodyS1_RK11btTransformS4_(%class.btConeTwistConstraint* %120, %class.btRigidBody* %121, %class.btRigidBody* %122, %class.btTransform* %localA, %class.btTransform* %localB)
+ to label %invoke.cont314 unwind label %lpad313
+
+invoke.cont314: ; preds = %invoke.cont285
+ store %class.btConeTwistConstraint* %120, %class.btConeTwistConstraint** %coneC, align 4
+ %123 = load %class.btConeTwistConstraint** %coneC, align 4
+ call void @_ZN21btConeTwistConstraint8setLimitEffffff(%class.btConeTwistConstraint* %123, float 0x3FE921FB60000000, float 0x3FE921FB60000000, float 0.000000e+00, float 1.000000e+00, float 0x3FD3333340000000, float 1.000000e+00)
+ %124 = load %class.btConeTwistConstraint** %coneC, align 4
+ %125 = bitcast %class.btConeTwistConstraint* %124 to %class.btTypedConstraint*
+ %m_joints316 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx317 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints316, i32 0, i32 2
+ store %class.btTypedConstraint* %125, %class.btTypedConstraint** %arrayidx317, align 4
+ %m_ownerWorld318 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %126 = load %class.btDynamicsWorld** %m_ownerWorld318, align 4
+ %127 = bitcast %class.btDynamicsWorld* %126 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable319 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %127
+ %vfn320 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable319, i64 10
+ %128 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn320
+ %m_joints321 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx322 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints321, i32 0, i32 2
+ %129 = load %class.btTypedConstraint** %arrayidx322, align 4
+ call void %128(%class.btDynamicsWorld* %126, %class.btTypedConstraint* %129, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call323 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call323, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp326, align 4
+ store float 0xBFCCCCCCC0000000, float* %ref.tmp327, align 4
+ store float 0.000000e+00, float* %ref.tmp328, align 4
+ %call329 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp325, float* %ref.tmp326, float* %ref.tmp327, float* %ref.tmp328)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp324, float* %scale.addr, %class.btVector3* %ref.tmp325)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp324)
+ %call330 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call330, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp333, align 4
+ store float 0x3FC7AE1480000000, float* %ref.tmp334, align 4
+ store float 0.000000e+00, float* %ref.tmp335, align 4
+ %call336 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp332, float* %ref.tmp333, float* %ref.tmp334, float* %ref.tmp335)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp331, float* %scale.addr, %class.btVector3* %ref.tmp332)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp331)
+ %call337 = call noalias i8* @_Znwm(i32 780)
+ %130 = bitcast i8* %call337 to %class.btHingeConstraint*
+ %m_bodies338 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx339 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies338, i32 0, i32 3
+ %131 = load %class.btRigidBody** %arrayidx339, align 4
+ %m_bodies340 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx341 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies340, i32 0, i32 4
+ %132 = load %class.btRigidBody** %arrayidx341, align 4
+ %call344 = invoke %class.btHingeConstraint* @_ZN17btHingeConstraintC1ER11btRigidBodyS1_RK11btTransformS4_b(%class.btHingeConstraint* %130, %class.btRigidBody* %131, %class.btRigidBody* %132, %class.btTransform* %localA, %class.btTransform* %localB, i1 zeroext false)
+ to label %invoke.cont343 unwind label %lpad342
+
+invoke.cont343: ; preds = %invoke.cont314
+ store %class.btHingeConstraint* %130, %class.btHingeConstraint** %hingeC, align 4
+ %133 = load %class.btHingeConstraint** %hingeC, align 4
+ call void @_ZN17btHingeConstraint8setLimitEfffff(%class.btHingeConstraint* %133, float 0.000000e+00, float 0x3FF921FB60000000, float 0x3FECCCCCC0000000, float 0x3FD3333340000000, float 1.000000e+00)
+ %134 = load %class.btHingeConstraint** %hingeC, align 4
+ %135 = bitcast %class.btHingeConstraint* %134 to %class.btTypedConstraint*
+ %m_joints345 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx346 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints345, i32 0, i32 3
+ store %class.btTypedConstraint* %135, %class.btTypedConstraint** %arrayidx346, align 4
+ %m_ownerWorld347 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %136 = load %class.btDynamicsWorld** %m_ownerWorld347, align 4
+ %137 = bitcast %class.btDynamicsWorld* %136 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable348 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %137
+ %vfn349 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable348, i64 10
+ %138 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn349
+ %m_joints350 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx351 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints350, i32 0, i32 3
+ %139 = load %class.btTypedConstraint** %arrayidx351, align 4
+ call void %138(%class.btDynamicsWorld* %136, %class.btTypedConstraint* %139, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call352 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call352, float 0.000000e+00, float 0.000000e+00, float 0x3FE921FB60000000)
+ store float 0x3FC70A3D80000000, float* %ref.tmp355, align 4
+ store float 0xBFB99999A0000000, float* %ref.tmp356, align 4
+ store float 0.000000e+00, float* %ref.tmp357, align 4
+ %call358 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp354, float* %ref.tmp355, float* %ref.tmp356, float* %ref.tmp357)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp353, float* %scale.addr, %class.btVector3* %ref.tmp354)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp353)
+ %call359 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call359, float 0.000000e+00, float 0.000000e+00, float 0x3FE921FB60000000)
+ store float 0.000000e+00, float* %ref.tmp362, align 4
+ store float 0x3FCCCCCCC0000000, float* %ref.tmp363, align 4
+ store float 0.000000e+00, float* %ref.tmp364, align 4
+ %call365 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp361, float* %ref.tmp362, float* %ref.tmp363, float* %ref.tmp364)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp360, float* %scale.addr, %class.btVector3* %ref.tmp361)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp360)
+ %call366 = call noalias i8* @_Znwm(i32 628)
+ %140 = bitcast i8* %call366 to %class.btConeTwistConstraint*
+ %m_bodies367 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx368 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies367, i32 0, i32 0
+ %141 = load %class.btRigidBody** %arrayidx368, align 4
+ %m_bodies369 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx370 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies369, i32 0, i32 5
+ %142 = load %class.btRigidBody** %arrayidx370, align 4
+ %call373 = invoke %class.btConeTwistConstraint* @_ZN21btConeTwistConstraintC1ER11btRigidBodyS1_RK11btTransformS4_(%class.btConeTwistConstraint* %140, %class.btRigidBody* %141, %class.btRigidBody* %142, %class.btTransform* %localA, %class.btTransform* %localB)
+ to label %invoke.cont372 unwind label %lpad371
+
+invoke.cont372: ; preds = %invoke.cont343
+ store %class.btConeTwistConstraint* %140, %class.btConeTwistConstraint** %coneC, align 4
+ %143 = load %class.btConeTwistConstraint** %coneC, align 4
+ call void @_ZN21btConeTwistConstraint8setLimitEffffff(%class.btConeTwistConstraint* %143, float 0x3FE921FB60000000, float 0x3FE921FB60000000, float 0.000000e+00, float 1.000000e+00, float 0x3FD3333340000000, float 1.000000e+00)
+ %144 = load %class.btConeTwistConstraint** %coneC, align 4
+ %145 = bitcast %class.btConeTwistConstraint* %144 to %class.btTypedConstraint*
+ %m_joints374 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx375 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints374, i32 0, i32 4
+ store %class.btTypedConstraint* %145, %class.btTypedConstraint** %arrayidx375, align 4
+ %m_ownerWorld376 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %146 = load %class.btDynamicsWorld** %m_ownerWorld376, align 4
+ %147 = bitcast %class.btDynamicsWorld* %146 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable377 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %147
+ %vfn378 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable377, i64 10
+ %148 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn378
+ %m_joints379 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx380 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints379, i32 0, i32 4
+ %149 = load %class.btTypedConstraint** %arrayidx380, align 4
+ call void %148(%class.btDynamicsWorld* %146, %class.btTypedConstraint* %149, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call381 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call381, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp384, align 4
+ store float 0xBFCCCCCCC0000000, float* %ref.tmp385, align 4
+ store float 0.000000e+00, float* %ref.tmp386, align 4
+ %call387 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp383, float* %ref.tmp384, float* %ref.tmp385, float* %ref.tmp386)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp382, float* %scale.addr, %class.btVector3* %ref.tmp383)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp382)
+ %call388 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call388, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp391, align 4
+ store float 0x3FC7AE1480000000, float* %ref.tmp392, align 4
+ store float 0.000000e+00, float* %ref.tmp393, align 4
+ %call394 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp390, float* %ref.tmp391, float* %ref.tmp392, float* %ref.tmp393)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp389, float* %scale.addr, %class.btVector3* %ref.tmp390)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp389)
+ %call395 = call noalias i8* @_Znwm(i32 780)
+ %150 = bitcast i8* %call395 to %class.btHingeConstraint*
+ %m_bodies396 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx397 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies396, i32 0, i32 5
+ %151 = load %class.btRigidBody** %arrayidx397, align 4
+ %m_bodies398 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx399 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies398, i32 0, i32 6
+ %152 = load %class.btRigidBody** %arrayidx399, align 4
+ %call402 = invoke %class.btHingeConstraint* @_ZN17btHingeConstraintC1ER11btRigidBodyS1_RK11btTransformS4_b(%class.btHingeConstraint* %150, %class.btRigidBody* %151, %class.btRigidBody* %152, %class.btTransform* %localA, %class.btTransform* %localB, i1 zeroext false)
+ to label %invoke.cont401 unwind label %lpad400
+
+invoke.cont401: ; preds = %invoke.cont372
+ store %class.btHingeConstraint* %150, %class.btHingeConstraint** %hingeC, align 4
+ %153 = load %class.btHingeConstraint** %hingeC, align 4
+ call void @_ZN17btHingeConstraint8setLimitEfffff(%class.btHingeConstraint* %153, float 0.000000e+00, float 0x3FF921FB60000000, float 0x3FECCCCCC0000000, float 0x3FD3333340000000, float 1.000000e+00)
+ %154 = load %class.btHingeConstraint** %hingeC, align 4
+ %155 = bitcast %class.btHingeConstraint* %154 to %class.btTypedConstraint*
+ %m_joints403 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx404 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints403, i32 0, i32 5
+ store %class.btTypedConstraint* %155, %class.btTypedConstraint** %arrayidx404, align 4
+ %m_ownerWorld405 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %156 = load %class.btDynamicsWorld** %m_ownerWorld405, align 4
+ %157 = bitcast %class.btDynamicsWorld* %156 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable406 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %157
+ %vfn407 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable406, i64 10
+ %158 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn407
+ %m_joints408 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx409 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints408, i32 0, i32 5
+ %159 = load %class.btTypedConstraint** %arrayidx409, align 4
+ call void %158(%class.btDynamicsWorld* %156, %class.btTypedConstraint* %159, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call410 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call410, float 0.000000e+00, float 0.000000e+00, float 0x400921FB60000000)
+ store float 0xBFC99999A0000000, float* %ref.tmp413, align 4
+ store float 0x3FC3333340000000, float* %ref.tmp414, align 4
+ store float 0.000000e+00, float* %ref.tmp415, align 4
+ %call416 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp412, float* %ref.tmp413, float* %ref.tmp414, float* %ref.tmp415)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp411, float* %scale.addr, %class.btVector3* %ref.tmp412)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp411)
+ %call417 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call417, float 0.000000e+00, float 0.000000e+00, float 0x3FF921FB60000000)
+ store float 0.000000e+00, float* %ref.tmp420, align 4
+ store float 0xBFC70A3D80000000, float* %ref.tmp421, align 4
+ store float 0.000000e+00, float* %ref.tmp422, align 4
+ %call423 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp419, float* %ref.tmp420, float* %ref.tmp421, float* %ref.tmp422)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp418, float* %scale.addr, %class.btVector3* %ref.tmp419)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp418)
+ %call424 = call noalias i8* @_Znwm(i32 628)
+ %160 = bitcast i8* %call424 to %class.btConeTwistConstraint*
+ %m_bodies425 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx426 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies425, i32 0, i32 1
+ %161 = load %class.btRigidBody** %arrayidx426, align 4
+ %m_bodies427 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx428 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies427, i32 0, i32 7
+ %162 = load %class.btRigidBody** %arrayidx428, align 4
+ %call431 = invoke %class.btConeTwistConstraint* @_ZN21btConeTwistConstraintC1ER11btRigidBodyS1_RK11btTransformS4_(%class.btConeTwistConstraint* %160, %class.btRigidBody* %161, %class.btRigidBody* %162, %class.btTransform* %localA, %class.btTransform* %localB)
+ to label %invoke.cont430 unwind label %lpad429
+
+invoke.cont430: ; preds = %invoke.cont401
+ store %class.btConeTwistConstraint* %160, %class.btConeTwistConstraint** %coneC, align 4
+ %163 = load %class.btConeTwistConstraint** %coneC, align 4
+ call void @_ZN21btConeTwistConstraint8setLimitEffffff(%class.btConeTwistConstraint* %163, float 0x3FF921FB60000000, float 0x3FF921FB60000000, float 0.000000e+00, float 1.000000e+00, float 0x3FD3333340000000, float 1.000000e+00)
+ %164 = load %class.btConeTwistConstraint** %coneC, align 4
+ %165 = bitcast %class.btConeTwistConstraint* %164 to %class.btTypedConstraint*
+ %m_joints432 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx433 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints432, i32 0, i32 6
+ store %class.btTypedConstraint* %165, %class.btTypedConstraint** %arrayidx433, align 4
+ %m_ownerWorld434 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %166 = load %class.btDynamicsWorld** %m_ownerWorld434, align 4
+ %167 = bitcast %class.btDynamicsWorld* %166 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable435 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %167
+ %vfn436 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable435, i64 10
+ %168 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn436
+ %m_joints437 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx438 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints437, i32 0, i32 6
+ %169 = load %class.btTypedConstraint** %arrayidx438, align 4
+ call void %168(%class.btDynamicsWorld* %166, %class.btTypedConstraint* %169, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call439 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call439, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp442, align 4
+ store float 0x3FC70A3D80000000, float* %ref.tmp443, align 4
+ store float 0.000000e+00, float* %ref.tmp444, align 4
+ %call445 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp441, float* %ref.tmp442, float* %ref.tmp443, float* %ref.tmp444)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp440, float* %scale.addr, %class.btVector3* %ref.tmp441)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp440)
+ %call446 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call446, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp449, align 4
+ store float 0xBFC1EB8520000000, float* %ref.tmp450, align 4
+ store float 0.000000e+00, float* %ref.tmp451, align 4
+ %call452 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp448, float* %ref.tmp449, float* %ref.tmp450, float* %ref.tmp451)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp447, float* %scale.addr, %class.btVector3* %ref.tmp448)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp447)
+ %call453 = call noalias i8* @_Znwm(i32 780)
+ %170 = bitcast i8* %call453 to %class.btHingeConstraint*
+ %m_bodies454 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx455 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies454, i32 0, i32 7
+ %171 = load %class.btRigidBody** %arrayidx455, align 4
+ %m_bodies456 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx457 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies456, i32 0, i32 8
+ %172 = load %class.btRigidBody** %arrayidx457, align 4
+ %call460 = invoke %class.btHingeConstraint* @_ZN17btHingeConstraintC1ER11btRigidBodyS1_RK11btTransformS4_b(%class.btHingeConstraint* %170, %class.btRigidBody* %171, %class.btRigidBody* %172, %class.btTransform* %localA, %class.btTransform* %localB, i1 zeroext false)
+ to label %invoke.cont459 unwind label %lpad458
+
+invoke.cont459: ; preds = %invoke.cont430
+ store %class.btHingeConstraint* %170, %class.btHingeConstraint** %hingeC, align 4
+ %173 = load %class.btHingeConstraint** %hingeC, align 4
+ call void @_ZN17btHingeConstraint8setLimitEfffff(%class.btHingeConstraint* %173, float 0xBFF921FB60000000, float 0.000000e+00, float 0x3FECCCCCC0000000, float 0x3FD3333340000000, float 1.000000e+00)
+ %174 = load %class.btHingeConstraint** %hingeC, align 4
+ %175 = bitcast %class.btHingeConstraint* %174 to %class.btTypedConstraint*
+ %m_joints461 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx462 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints461, i32 0, i32 7
+ store %class.btTypedConstraint* %175, %class.btTypedConstraint** %arrayidx462, align 4
+ %m_ownerWorld463 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %176 = load %class.btDynamicsWorld** %m_ownerWorld463, align 4
+ %177 = bitcast %class.btDynamicsWorld* %176 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable464 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %177
+ %vfn465 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable464, i64 10
+ %178 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn465
+ %m_joints466 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx467 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints466, i32 0, i32 7
+ %179 = load %class.btTypedConstraint** %arrayidx467, align 4
+ call void %178(%class.btDynamicsWorld* %176, %class.btTypedConstraint* %179, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call468 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call468, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00)
+ store float 0x3FC99999A0000000, float* %ref.tmp471, align 4
+ store float 0x3FC3333340000000, float* %ref.tmp472, align 4
+ store float 0.000000e+00, float* %ref.tmp473, align 4
+ %call474 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp470, float* %ref.tmp471, float* %ref.tmp472, float* %ref.tmp473)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp469, float* %scale.addr, %class.btVector3* %ref.tmp470)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp469)
+ %call475 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call475, float 0.000000e+00, float 0.000000e+00, float 0x3FF921FB60000000)
+ store float 0.000000e+00, float* %ref.tmp478, align 4
+ store float 0xBFC70A3D80000000, float* %ref.tmp479, align 4
+ store float 0.000000e+00, float* %ref.tmp480, align 4
+ %call481 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp477, float* %ref.tmp478, float* %ref.tmp479, float* %ref.tmp480)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp476, float* %scale.addr, %class.btVector3* %ref.tmp477)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp476)
+ %call482 = call noalias i8* @_Znwm(i32 628)
+ %180 = bitcast i8* %call482 to %class.btConeTwistConstraint*
+ %m_bodies483 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx484 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies483, i32 0, i32 1
+ %181 = load %class.btRigidBody** %arrayidx484, align 4
+ %m_bodies485 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx486 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies485, i32 0, i32 9
+ %182 = load %class.btRigidBody** %arrayidx486, align 4
+ %call489 = invoke %class.btConeTwistConstraint* @_ZN21btConeTwistConstraintC1ER11btRigidBodyS1_RK11btTransformS4_(%class.btConeTwistConstraint* %180, %class.btRigidBody* %181, %class.btRigidBody* %182, %class.btTransform* %localA, %class.btTransform* %localB)
+ to label %invoke.cont488 unwind label %lpad487
+
+invoke.cont488: ; preds = %invoke.cont459
+ store %class.btConeTwistConstraint* %180, %class.btConeTwistConstraint** %coneC, align 4
+ %183 = load %class.btConeTwistConstraint** %coneC, align 4
+ call void @_ZN21btConeTwistConstraint8setLimitEffffff(%class.btConeTwistConstraint* %183, float 0x3FF921FB60000000, float 0x3FF921FB60000000, float 0.000000e+00, float 1.000000e+00, float 0x3FD3333340000000, float 1.000000e+00)
+ %184 = load %class.btConeTwistConstraint** %coneC, align 4
+ %185 = bitcast %class.btConeTwistConstraint* %184 to %class.btTypedConstraint*
+ %m_joints490 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx491 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints490, i32 0, i32 8
+ store %class.btTypedConstraint* %185, %class.btTypedConstraint** %arrayidx491, align 4
+ %m_ownerWorld492 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %186 = load %class.btDynamicsWorld** %m_ownerWorld492, align 4
+ %187 = bitcast %class.btDynamicsWorld* %186 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable493 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %187
+ %vfn494 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable493, i64 10
+ %188 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn494
+ %m_joints495 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx496 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints495, i32 0, i32 8
+ %189 = load %class.btTypedConstraint** %arrayidx496, align 4
+ call void %188(%class.btDynamicsWorld* %186, %class.btTypedConstraint* %189, i1 zeroext true)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localA)
+ call void @_ZN11btTransform11setIdentityEv(%class.btTransform* %localB)
+ %call497 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localA)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call497, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp500, align 4
+ store float 0x3FC70A3D80000000, float* %ref.tmp501, align 4
+ store float 0.000000e+00, float* %ref.tmp502, align 4
+ %call503 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp499, float* %ref.tmp500, float* %ref.tmp501, float* %ref.tmp502)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp498, float* %scale.addr, %class.btVector3* %ref.tmp499)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localA, %class.btVector3* %ref.tmp498)
+ %call504 = call %class.btMatrix3x3* @_ZN11btTransform8getBasisEv(%class.btTransform* %localB)
+ call void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3* %call504, float 0.000000e+00, float 0x3FF921FB60000000, float 0.000000e+00)
+ store float 0.000000e+00, float* %ref.tmp507, align 4
+ store float 0xBFC1EB8520000000, float* %ref.tmp508, align 4
+ store float 0.000000e+00, float* %ref.tmp509, align 4
+ %call510 = call %class.btVector3* @_ZN9btVector3C1ERKfS1_S1_(%class.btVector3* %ref.tmp506, float* %ref.tmp507, float* %ref.tmp508, float* %ref.tmp509)
+ call void @_ZmlRKfRK9btVector3(%class.btVector3* sret %ref.tmp505, float* %scale.addr, %class.btVector3* %ref.tmp506)
+ call void @_ZN11btTransform9setOriginERK9btVector3(%class.btTransform* %localB, %class.btVector3* %ref.tmp505)
+ %call511 = call noalias i8* @_Znwm(i32 780)
+ %190 = bitcast i8* %call511 to %class.btHingeConstraint*
+ %m_bodies512 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx513 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies512, i32 0, i32 9
+ %191 = load %class.btRigidBody** %arrayidx513, align 4
+ %m_bodies514 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 3
+ %arrayidx515 = getelementptr inbounds [11 x %class.btRigidBody*]* %m_bodies514, i32 0, i32 10
+ %192 = load %class.btRigidBody** %arrayidx515, align 4
+ %call518 = invoke %class.btHingeConstraint* @_ZN17btHingeConstraintC1ER11btRigidBodyS1_RK11btTransformS4_b(%class.btHingeConstraint* %190, %class.btRigidBody* %191, %class.btRigidBody* %192, %class.btTransform* %localA, %class.btTransform* %localB, i1 zeroext false)
+ to label %invoke.cont517 unwind label %lpad516
+
+invoke.cont517: ; preds = %invoke.cont488
+ store %class.btHingeConstraint* %190, %class.btHingeConstraint** %hingeC, align 4
+ %193 = load %class.btHingeConstraint** %hingeC, align 4
+ call void @_ZN17btHingeConstraint8setLimitEfffff(%class.btHingeConstraint* %193, float 0xBFF921FB60000000, float 0.000000e+00, float 0x3FECCCCCC0000000, float 0x3FD3333340000000, float 1.000000e+00)
+ %194 = load %class.btHingeConstraint** %hingeC, align 4
+ %195 = bitcast %class.btHingeConstraint* %194 to %class.btTypedConstraint*
+ %m_joints519 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx520 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints519, i32 0, i32 9
+ store %class.btTypedConstraint* %195, %class.btTypedConstraint** %arrayidx520, align 4
+ %m_ownerWorld521 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 1
+ %196 = load %class.btDynamicsWorld** %m_ownerWorld521, align 4
+ %197 = bitcast %class.btDynamicsWorld* %196 to void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)***
+ %vtable522 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)*** %197
+ %vfn523 = getelementptr inbounds void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vtable522, i64 10
+ %198 = load void (%class.btDynamicsWorld*, %class.btTypedConstraint*, i1)** %vfn523
+ %m_joints524 = getelementptr inbounds %class.RagDoll* %this1, i32 0, i32 4
+ %arrayidx525 = getelementptr inbounds [10 x %class.btTypedConstraint*]* %m_joints524, i32 0, i32 9
+ %199 = load %class.btTypedConstraint** %arrayidx525, align 4
+ call void %198(%class.btDynamicsWorld* %196, %class.btTypedConstraint* %199, i1 zeroext true)
+ %200 = load %class.RagDoll** %retval
+ ret %class.RagDoll* %200
+
+lpad258: ; preds = %for.end
+ %201 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %202 = extractvalue { i8*, i32 } %201, 0
+ store i8* %202, i8** %exn.slot
+ %203 = extractvalue { i8*, i32 } %201, 1
+ store i32 %203, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call253) nounwind
+ br label %eh.resume
+
+lpad284: ; preds = %invoke.cont259
+ %204 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %205 = extractvalue { i8*, i32 } %204, 0
+ store i8* %205, i8** %exn.slot
+ %206 = extractvalue { i8*, i32 } %204, 1
+ store i32 %206, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call279) nounwind
+ br label %eh.resume
+
+lpad313: ; preds = %invoke.cont285
+ %207 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %208 = extractvalue { i8*, i32 } %207, 0
+ store i8* %208, i8** %exn.slot
+ %209 = extractvalue { i8*, i32 } %207, 1
+ store i32 %209, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call308) nounwind
+ br label %eh.resume
+
+lpad342: ; preds = %invoke.cont314
+ %210 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %211 = extractvalue { i8*, i32 } %210, 0
+ store i8* %211, i8** %exn.slot
+ %212 = extractvalue { i8*, i32 } %210, 1
+ store i32 %212, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call337) nounwind
+ br label %eh.resume
+
+lpad371: ; preds = %invoke.cont343
+ %213 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %214 = extractvalue { i8*, i32 } %213, 0
+ store i8* %214, i8** %exn.slot
+ %215 = extractvalue { i8*, i32 } %213, 1
+ store i32 %215, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call366) nounwind
+ br label %eh.resume
+
+lpad400: ; preds = %invoke.cont372
+ %216 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %217 = extractvalue { i8*, i32 } %216, 0
+ store i8* %217, i8** %exn.slot
+ %218 = extractvalue { i8*, i32 } %216, 1
+ store i32 %218, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call395) nounwind
+ br label %eh.resume
+
+lpad429: ; preds = %invoke.cont401
+ %219 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %220 = extractvalue { i8*, i32 } %219, 0
+ store i8* %220, i8** %exn.slot
+ %221 = extractvalue { i8*, i32 } %219, 1
+ store i32 %221, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call424) nounwind
+ br label %eh.resume
+
+lpad458: ; preds = %invoke.cont430
+ %222 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %223 = extractvalue { i8*, i32 } %222, 0
+ store i8* %223, i8** %exn.slot
+ %224 = extractvalue { i8*, i32 } %222, 1
+ store i32 %224, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call453) nounwind
+ br label %eh.resume
+
+lpad487: ; preds = %invoke.cont459
+ %225 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %226 = extractvalue { i8*, i32 } %225, 0
+ store i8* %226, i8** %exn.slot
+ %227 = extractvalue { i8*, i32 } %225, 1
+ store i32 %227, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call482) nounwind
+ br label %eh.resume
+
+lpad516: ; preds = %invoke.cont488
+ %228 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ cleanup
+ %229 = extractvalue { i8*, i32 } %228, 0
+ store i8* %229, i8** %exn.slot
+ %230 = extractvalue { i8*, i32 } %228, 1
+ store i32 %230, i32* %ehselector.slot
+ call void @_ZdlPv(i8* %call511) nounwind
+ br label %eh.resume
+
+eh.resume: ; preds = %lpad516, %lpad487, %lpad458, %lpad429, %lpad400, %lpad371, %lpad342, %lpad313, %lpad284, %lpad258, %invoke.cont92, %invoke.cont83, %invoke.cont74, %invoke.cont65, %invoke.cont56, %invoke.cont47, %invoke.cont38, %invoke.cont29, %invoke.cont20, %invoke.cont11, %invoke.cont4
+ %exn = load i8** %exn.slot
+ %sel = load i32* %ehselector.slot
+ %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
+ %lpad.val526 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
+ resume { i8*, i32 } %lpad.val526
+
+terminate.lpad: ; preds = %lpad89, %lpad80, %lpad71, %lpad62, %lpad53, %lpad44, %lpad35, %lpad26, %lpad17, %lpad8, %lpad
+ %231 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*)
+ catch i8* null
+ call void @_ZSt9terminatev() noreturn nounwind
+ unreachable
+}
+
+declare void @_ZmlRKfRK9btVector3(%class.btVector3* noalias sret, float*, %class.btVector3*) inlinehint ssp
+
+declare %class.btRigidBody* @_ZN7RagDoll20localCreateRigidBodyEfRK11btTransformP16btCollisionShape(%class.RagDoll*, float, %class.btTransform*, %class.btCollisionShape*) ssp align 2
+
+declare void @_ZNK11btTransformmlERKS_(%class.btTransform* noalias sret, %class.btTransform*, %class.btTransform*) inlinehint ssp align 2
+
+declare void @_ZN11btMatrix3x311setEulerZYXEfff(%class.btMatrix3x3*, float, float, float) ssp align 2
+
+declare void @_ZN11btRigidBody10setDampingEff(%class.btRigidBody*, float, float)
+
+declare void @_ZN17btCollisionObject19setDeactivationTimeEf(%class.btCollisionObject*, float) nounwind ssp align 2
+
+declare void @_ZN11btRigidBody21setSleepingThresholdsEff(%class.btRigidBody*, float, float) nounwind ssp align 2
+
+declare %class.btHingeConstraint* @_ZN17btHingeConstraintC1ER11btRigidBodyS1_RK11btTransformS4_b(%class.btHingeConstraint*, %class.btRigidBody*, %class.btRigidBody*, %class.btTransform*, %class.btTransform*, i1 zeroext)
+
+declare void @_ZN17btHingeConstraint8setLimitEfffff(%class.btHingeConstraint*, float, float, float, float, float) ssp align 2
+
+declare %class.btConeTwistConstraint* @_ZN21btConeTwistConstraintC1ER11btRigidBodyS1_RK11btTransformS4_(%class.btConeTwistConstraint*, %class.btRigidBody*, %class.btRigidBody*, %class.btTransform*, %class.btTransform*)
+
+declare void @_ZN21btConeTwistConstraint8setLimitEffffff(%class.btConeTwistConstraint*, float, float, float, float, float, float) nounwind ssp align 2
diff --git a/test/CodeGen/Thumb2/crash.ll b/test/CodeGen/Thumb2/crash.ll
index d8b51ec..cb4d080 100644
--- a/test/CodeGen/Thumb2/crash.ll
+++ b/test/CodeGen/Thumb2/crash.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8
+; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 -verify-machineinstrs
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32"
target triple = "thumbv7-apple-darwin10"
@@ -47,3 +47,32 @@ bb2: ; preds = %bb
tail call void @llvm.arm.neon.vst4.v4i32(i8* bitcast ([16 x i32]* @dbuf to i8*), <4 x i32> %2, <4 x i32> %3, <4 x i32> %4, <4 x i32> %5, i32 1) nounwind
ret i32 0
}
+
+; PR12389
+; Make sure the DPair register class can spill.
+define void @pr12389(i8* %p) nounwind ssp {
+entry:
+ %vld1 = tail call <4 x float> @llvm.arm.neon.vld1.v4f32(i8* %p, i32 1)
+ tail call void asm sideeffect "", "~{q0},~{q1},~{q2},~{q3},~{q4},~{q5},~{q6},~{q7},~{q8},~{q9},~{q10},~{q11},~{q12},~{q13},~{q14},~{q15}"() nounwind
+ tail call void @llvm.arm.neon.vst1.v4f32(i8* %p, <4 x float> %vld1, i32 1)
+ ret void
+}
+
+declare <4 x float> @llvm.arm.neon.vld1.v4f32(i8*, i32) nounwind readonly
+
+declare void @llvm.arm.neon.vst1.v4f32(i8*, <4 x float>, i32) nounwind
+
+; <rdar://problem/11101911>
+; When an strd is expanded into two str instructions, make sure the first str
+; doesn't kill the base register. This can happen if the base register is the
+; same as the data register.
+%class = type { i8*, %class*, i32 }
+define void @f11101911(%class* %this, i32 %num) ssp align 2 {
+entry:
+ %p1 = getelementptr inbounds %class* %this, i32 0, i32 1
+ %p2 = getelementptr inbounds %class* %this, i32 0, i32 2
+ tail call void asm sideeffect "", "~{r1},~{r3},~{r5},~{r11},~{r13}"() nounwind
+ store %class* %this, %class** %p1, align 4
+ store i32 %num, i32* %p2, align 4
+ ret void
+}
diff --git a/test/CodeGen/Thumb2/dg.exp b/test/CodeGen/Thumb2/dg.exp
deleted file mode 100644
index 3ff359a..0000000
--- a/test/CodeGen/Thumb2/dg.exp
+++ /dev/null
@@ -1,5 +0,0 @@
-load_lib llvm.exp
-
-if { [llvm_supports_target ARM] } {
- RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]
-}
diff --git a/test/CodeGen/Thumb2/large-call.ll b/test/CodeGen/Thumb2/large-call.ll
new file mode 100644
index 0000000..aef6f85
--- /dev/null
+++ b/test/CodeGen/Thumb2/large-call.ll
@@ -0,0 +1,29 @@
+; RUN: llc < %s -O0 -mcpu=cortex-a8 | FileCheck %s
+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-ios0.0.0"
+
+; This test case would clobber the outgoing call arguments by writing to the
+; emergency spill slot at [sp, #4] without adjusting the stack pointer first.
+
+; CHECK: main
+; CHECK: vmov.f64
+; Adjust SP for the large call
+; CHECK: sub sp,
+; CHECK: mov [[FR:r[0-9]+]], sp
+; Store to call frame + #4
+; CHECK: str{{.*\[}}[[FR]], #4]
+; Don't clobber that store until the call.
+; CHECK-NOT: [sp, #4]
+; CHECK: variadic
+
+define i32 @main() ssp {
+entry:
+ %d = alloca double, align 8
+ store double 1.000000e+00, double* %d, align 8
+ %0 = load double* %d, align 8
+ call void (i8*, i8*, i8*, ...)* @variadic(i8* null, i8* null, i8* null, i32 1, double 1.234800e+03, double 2.363450e+03, double %0, i32 1, double 1.234560e+03, double 2.345670e+03, double 4.6334563e+03, double 2.423440e+03, double 4.234330e+03, double 2.965430e+03, i32 1, double 4.669300e+03, double 2.927500e+03, double 4.663100e+03, double 2.921000e+03, double 4.663100e+03, double 2.345100e+03, i32 1, double 3.663100e+03, double 2.905100e+03, double 4.669300e+03, double 2.898600e+03, double 4.676900e+03, double 2.898600e+03, i32 1, double 4.684600e+03, double 2.898600e+03, double 1.234800e+03, double 2.905100e+03, double 1.234800e+03, double 2.345100e+03, i32 1, double 7.719700e+03, double 2.920500e+03, double 4.713500e+03, double 2.927000e+03, double 4.705800e+03, double 2.927000e+03, i32 1, double 8.698200e+03, double 2.927000e+03, double 4.692000e+03, double 2.920500e+03, double 4.692000e+03, double 2.912500e+03, i32 1, double 4.692000e+03, double 2.945600e+03, double 4.698200e+03, double 2.898100e+03, double 4.705800e+03, double 2.898100e+03, i32 1, double 4.713500e+03, double 2.898100e+03, double 4.719700e+03, double 2.945600e+03, double 4.719700e+03, double 2.912500e+03, i32 1, double 4.749200e+03, double 2.920100e+03, double 4.743000e+03, double 2.926600e+03, double 4.735300e+03, double 2.926600e+03, i32 1, double 4.727700e+03, double 2.926600e+03, double 4.721500e+03, double 2.920100e+03, double 4.721500e+03, double 2.912100e+03, i32 1, double 4.721500e+03, double 2.945100e+03, double 4.727700e+03, double 2.897700e+03, double 4.735300e+03, double 2.897700e+03, i32 1, double 4.743000e+03, double 2.897700e+03, double 4.749200e+03, double 2.945100e+03, double 4.749200e+03, double 2.912100e+03, i32 1, double 4.778200e+03, double 2.920100e+03, double 4.772000e+03, double 2.926600e+03, double 4.764300e+03, double 2.926600e+03, i32 1, double 4.756700e+03, double 2.926600e+03, double 4.750500e+03, double 2.920100e+03, double 4.750500e+03, double 2.912100e+03, i32 1, double 4.750500e+03, double 2.945100e+03, double 4.756700e+03, double 2.897700e+03, double 4.764300e+03, double 2.897700e+03, i32 1, double 4.772000e+03, double 2.897700e+03, double 4.778200e+03, double 2.945100e+03, double 4.778200e+03, double 2.912100e+03, i32 1, double 4.801900e+03, double 2.942100e+03, double 4.795700e+03, double 2.948500e+03, double 4.788100e+03, double 2.948500e+03, i32 1, double 4.780500e+03, double 2.948500e+03, double 4.774300e+03, double 2.942100e+03, double 4.774300e+03, double 2.934100e+03, i32 1, double 4.774300e+03, double 2.926100e+03, double 4.780500e+03, double 2.919600e+03, double 4.788100e+03, double 2.919600e+03, i32 1, double 4.795700e+03, double 2.919600e+03, double 4.801900e+03, double 2.926100e+03, double 4.801900e+03, double 2.934100e+03, i32 1, double 4.801500e+03, double 2.972500e+03, double 4.795300e+03, double 2.978900e+03, double 4.787700e+03, double 2.978900e+03, i32 1, double 4.780000e+03, double 2.978900e+03, double 4.773800e+03, double 2.972500e+03, double 4.773800e+03, double 2.964500e+03, i32 1, double 4.773800e+03, double 2.956500e+03, double 4.780000e+03, double 2.950000e+03, double 4.787700e+03, double 2.950000e+03, i32 1, double 4.795300e+03, double 2.950000e+03, double 4.801500e+03, double 2.956500e+03, double 4.801500e+03, double 2.964500e+03, i32 1, double 4.802400e+03, double 3.010200e+03, double 4.796200e+03, double 3.016600e+03, double 4.788500e+03, double 3.016600e+03, i32 1, double 4.780900e+03, double 3.016600e+03, double 4.774700e+03, double 3.010200e+03, double 4.774700e+03, double 3.002200e+03, i32 1, double 4.774700e+03, double 2.994200e+03, double 4.780900e+03, double 2.987700e+03, double 4.788500e+03, double 2.987700e+03, i32 1, double 4.796200e+03, double 2.987700e+03, double 4.802400e+03, double 2.994200e+03, double 4.802400e+03, double 3.002200e+03, i32 1, double 4.802400e+03, double 3.039400e+03, double 4.796200e+03, double 3.455800e+03, double 4.788500e+03, double 3.455800e+03, i32 1, double 4.780900e+03, double 3.455800e+03, double 4.774700e+03, double 3.039400e+03, double 4.774700e+03, double 3.031400e+03, i32 1, double 4.774700e+03, double 3.023400e+03, double 4.780900e+03, double 3.016900e+03, double 4.788500e+03, double 3.016900e+03, i32 1, double 4.796200e+03, double 3.016900e+03, double 4.802400e+03, double 3.023400e+03, double 4.802400e+03, double 3.031400e+03, i32 1, double 4.778600e+03, double 3.063100e+03, double 4.772400e+03, double 3.069600e+03, double 4.764700e+03, double 3.069600e+03, i32 1, double 4.757100e+03, double 3.069600e+03, double 4.750900e+03, double 3.063100e+03, double 4.750900e+03, double 3.055100e+03, i32 1, double 4.750900e+03, double 3.457100e+03, double 4.757100e+03, double 3.450700e+03, double 4.764700e+03, double 3.450700e+03, i32 1, double 4.772400e+03, double 3.450700e+03, double 4.778600e+03, double 3.457100e+03, double 4.778600e+03, double 3.055100e+03, i32 1, double 4.748600e+03, double 3.063600e+03, double 4.742400e+03, double 3.070000e+03, double 4.734700e+03, double 3.070000e+03, i32 1, double 4.727100e+03, double 3.070000e+03, double 4.720900e+03, double 3.063600e+03, double 4.720900e+03, double 3.055600e+03, i32 1, double 4.720900e+03, double 3.457600e+03, double 4.727100e+03, double 3.451100e+03, double 4.734700e+03, double 3.451100e+03, i32 1, double 4.742400e+03, double 3.451100e+03, double 4.748600e+03, double 3.457600e+03, double 4.748600e+03, double 3.055600e+03, i32 1, double 4.719500e+03, double 3.063600e+03, double 4.713300e+03, double 3.070000e+03, double 4.705700e+03, double 3.070000e+03, i32 1, double 4.698000e+03, double 3.070000e+03, double 4.691900e+03, double 3.063600e+03, double 4.691900e+03, double 3.055600e+03, i32 1, double 4.691900e+03, double 3.457600e+03, double 4.698000e+03, double 3.451100e+03, double 4.705700e+03, double 3.451100e+03, i32 1, double 4.713300e+03, double 3.451100e+03, double 4.719500e+03, double 3.457600e+03, double 4.719500e+03, double 3.055600e+03, i32 1, double 4.691300e+03, double 3.064000e+03, double 4.685100e+03, double 3.070500e+03, double 4.677500e+03, double 3.070500e+03, i32 1, double 4.669900e+03, double 3.070500e+03, double 4.663700e+03, double 3.064000e+03, double 4.663700e+03, double 3.056000e+03, i32 1, double 4.663700e+03, double 3.458000e+03, double 4.669900e+03, double 3.451600e+03, double 4.677500e+03, double 3.451600e+03, i32 1, double 4.685100e+03, double 3.451600e+03, double 4.691300e+03, double 3.458000e+03, double 4.691300e+03, double 3.056000e+03, i32 1, double 4.668500e+03, double 3.453000e+03, double 4.662300e+03, double 3.459400e+03, double 4.654700e+03, double 3.459400e+03, i32 1, double 4.647000e+03, double 3.459400e+03, double 4.640900e+03, double 3.453000e+03, double 4.640900e+03, double 3.035000e+03, i32 1, double 4.640900e+03, double 3.027000e+03, double 4.647000e+03, double 3.020500e+03, double 4.654700e+03, double 3.020500e+03, i32 1, double 4.662300e+03, double 3.020500e+03, double 4.668500e+03, double 3.027000e+03, double 4.668500e+03, double 3.035000e+03, i32 1, double 4.668500e+03, double 3.014300e+03, double 4.662300e+03, double 3.020800e+03, double 4.654700e+03, double 3.020800e+03, i32 1, double 4.647000e+03, double 3.020800e+03, double 4.640900e+03, double 3.014300e+03, double 4.640900e+03, double 3.006400e+03, i32 1, double 4.640900e+03, double 2.998400e+03, double 4.647000e+03, double 2.991900e+03, double 4.654700e+03, double 2.991900e+03, i32 1, double 4.662300e+03, double 2.991900e+03, double 4.668500e+03, double 2.998400e+03, double 4.668500e+03, double 3.006400e+03, i32 1, double 4.668100e+03, double 2.941100e+03, double 4.661900e+03, double 2.947600e+03, double 4.654200e+03, double 2.947600e+03, i32 1, double 4.646600e+03, double 2.947600e+03, double 4.640400e+03, double 2.941100e+03, double 4.640400e+03, double 2.933100e+03, i32 1, double 4.640400e+03, double 2.925200e+03, double 4.646600e+03, double 2.918700e+03, double 4.654200e+03, double 2.918700e+03, i32 1, double 4.661900e+03, double 2.918700e+03, double 4.668100e+03, double 2.925200e+03, double 4.668100e+03, double 2.933100e+03, i32 1, double 4.668500e+03, double 2.971600e+03, double 4.662300e+03, double 2.978100e+03, double 4.654700e+03, double 2.978100e+03, i32 1, double 4.647000e+03, double 2.978100e+03, double 4.640900e+03, double 2.971600e+03, double 4.640900e+03, double 2.963600e+03, i32 1, double 4.640900e+03, double 2.955700e+03, double 4.647000e+03, double 2.949200e+03, double 4.654700e+03, double 2.949200e+03, i32 1, double 4.662300e+03, double 2.949200e+03, double 4.668500e+03, double 2.955700e+03, double 4.668500e+03, double 2.963600e+03, i32 2, i32 1, double 4.691300e+03, double 3.056000e+03, i32 2, i32 1, double 4.748600e+03, double 3.055600e+03, i32 2, i32 1, double 4.778200e+03, double 2.912100e+03, i32 2, i32 1, double 4.749200e+03, double 2.912100e+03, i32 2, i32 1, double 4.802400e+03, double 3.031400e+03, i32 2, i32 1, double 4.778600e+03, double 3.055100e+03, i32 2, i32 1, double 4.801500e+03, double 2.964500e+03, i32 2, i32 1, double 4.802400e+03, double 3.002200e+03, i32 2, i32 1, double 4.719700e+03, double 2.912500e+03, i32 2, i32 1, double 4.801900e+03, double 2.934100e+03, i32 2, i32 1, double 4.719500e+03, double 3.055600e+03, i32 2, i32 1, double 4.668500e+03, double 3.006400e+03, i32 2, i32 1, double 4.668500e+03, double 3.035000e+03, i32 2, i32 1, double 4.668100e+03, double 2.933100e+03, i32 2, i32 1, double 4.668500e+03, double 2.963600e+03, i32 2, i32 48)
+ ret i32 0
+}
+
+declare void @variadic(i8*, i8*, i8*, ...)
+
diff --git a/test/CodeGen/Thumb2/ldr-str-imm12.ll b/test/CodeGen/Thumb2/ldr-str-imm12.ll
index 4597ba5..36544d1 100644
--- a/test/CodeGen/Thumb2/ldr-str-imm12.ll
+++ b/test/CodeGen/Thumb2/ldr-str-imm12.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 -relocation-model=pic -disable-fp-elim -regalloc=linearscan | FileCheck %s
+; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 -relocation-model=pic -disable-fp-elim | FileCheck %s
; rdar://7352504
; Make sure we use "str r9, [sp, #+28]" instead of "sub.w r4, r7, #256" followed by "str r9, [r4, #-32]".
@@ -46,10 +46,10 @@ bb119: ; preds = %bb20, %bb20
bb420: ; preds = %bb20, %bb20
; CHECK: bb420
-; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp]
-; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp, #4]
-; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp, #8]
-; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp, #24]
+; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp
+; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp
+; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp
+; CHECK: str{{(.w)?}} r{{[0-9]+}}, [sp
store %union.rec* null, %union.rec** @zz_hold, align 4
store %union.rec* null, %union.rec** @zz_res, align 4
store %union.rec* %x, %union.rec** @zz_hold, align 4
diff --git a/test/CodeGen/Thumb2/lit.local.cfg b/test/CodeGen/Thumb2/lit.local.cfg
new file mode 100644
index 0000000..cb77b09
--- /dev/null
+++ b/test/CodeGen/Thumb2/lit.local.cfg
@@ -0,0 +1,6 @@
+config.suffixes = ['.ll', '.c', '.cpp']
+
+targets = set(config.root.targets_to_build.split())
+if not 'ARM' in targets:
+ config.unsupported = True
+
diff --git a/test/CodeGen/Thumb2/lsr-deficiency.ll b/test/CodeGen/Thumb2/lsr-deficiency.ll
index 9ff114e..9aaa821 100644
--- a/test/CodeGen/Thumb2/lsr-deficiency.ll
+++ b/test/CodeGen/Thumb2/lsr-deficiency.ll
@@ -3,11 +3,6 @@
; This now reduces to a single induction variable.
-; TODO: It still gets a GPR shuffle at the end of the loop
-; This is because something in instruction selection has decided
-; that comparing the pre-incremented value with zero is better
-; than comparing the post-incremented value with -4.
-
@G = external global i32 ; <i32*> [#uses=2]
@array = external global i32* ; <i32**> [#uses=1]
@@ -20,9 +15,9 @@ entry:
bb: ; preds = %bb, %entry
; CHECK: LBB0_1:
-; CHECK: cmp [[R2:r[0-9]+]], #0
-; CHECK: sub{{(.w)?}} [[REGISTER:(r[0-9]+)|(lr)]], [[R2]], #1
-; CHECK: mov [[R2]], [[REGISTER]]
+; CHECK: subs [[R2:r[0-9]+]], #1
+; CHECK: cmp.w [[R2]], #-1
+; CHECK: bne LBB0_1
%0 = phi i32 [ %.pre, %entry ], [ %3, %bb ] ; <i32> [#uses=1]
%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb ] ; <i32> [#uses=2]
diff --git a/test/CodeGen/Thumb2/machine-licm.ll b/test/CodeGen/Thumb2/machine-licm.ll
index 46937fc..8285742 100644
--- a/test/CodeGen/Thumb2/machine-licm.ll
+++ b/test/CodeGen/Thumb2/machine-licm.ll
@@ -51,12 +51,11 @@ return: ; preds = %bb, %entry
define void @t2(i8* %ptr1, i8* %ptr2) nounwind {
entry:
; CHECK: t2:
-; CHECK: mov.w [[R3:r[0-9]+]], #1065353216
-; CHECK: vdup.32 q{{.*}}, [[R3]]
+; CHECK: vmov.f32 q{{.*}}, #1.000000e+00
br i1 undef, label %bb1, label %bb2
bb1:
-; CHECK-NEXT: %bb1
+; CHECK: %bb1
%indvar = phi i32 [ %indvar.next, %bb1 ], [ 0, %entry ]
%tmp1 = shl i32 %indvar, 2
%gep1 = getelementptr i8* %ptr1, i32 %tmp1
@@ -95,8 +94,8 @@ bb.nph:
bb: ; preds = %bb, %bb.nph
; CHECK: bb
-; CHECK: eor.w {{(r[0-9])|(lr)}}, {{(r[0-9])|(lr)}}, [[REGISTER]]
; CHECK: eor.w
+; CHECK: eor.w {{(r[0-9])|(lr)}}, {{(r[0-9])|(lr)}}, [[REGISTER]]
; CHECK-NOT: eor
; CHECK: and
%data_addr.013 = phi i8 [ %data, %bb.nph ], [ %8, %bb ] ; <i8> [#uses=2]
diff --git a/test/CodeGen/Thumb2/thumb2-cbnz.ll b/test/CodeGen/Thumb2/thumb2-cbnz.ll
index 0992fa8..893bd0f 100644
--- a/test/CodeGen/Thumb2/thumb2-cbnz.ll
+++ b/test/CodeGen/Thumb2/thumb2-cbnz.ll
@@ -1,7 +1,7 @@
; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 | FileCheck %s
; rdar://7354379
-declare double @floor(double) nounwind readnone
+declare double @foo(double) nounwind readnone
define void @t(i32 %c, double %b) {
entry:
@@ -24,9 +24,8 @@ bb7: ; preds = %bb3
bb9: ; preds = %bb7
; CHECK: cmp r0, #0
-; CHECK: cmp r0, #0
; CHECK-NEXT: cbnz
- %0 = tail call double @floor(double %b) nounwind readnone ; <double> [#uses=0]
+ %0 = tail call double @foo(double %b) nounwind readnone ; <double> [#uses=0]
br label %bb11
bb11: ; preds = %bb9, %bb7
diff --git a/test/CodeGen/Thumb2/thumb2-clz.ll b/test/CodeGen/Thumb2/thumb2-clz.ll
index 00a54a0..f7e9665 100644
--- a/test/CodeGen/Thumb2/thumb2-clz.ll
+++ b/test/CodeGen/Thumb2/thumb2-clz.ll
@@ -3,8 +3,8 @@
define i32 @f1(i32 %a) {
; CHECK: f1:
; CHECK: clz r
- %tmp = tail call i32 @llvm.ctlz.i32(i32 %a)
+ %tmp = tail call i32 @llvm.ctlz.i32(i32 %a, i1 true)
ret i32 %tmp
}
-declare i32 @llvm.ctlz.i32(i32) nounwind readnone
+declare i32 @llvm.ctlz.i32(i32, i1) nounwind readnone
diff --git a/test/CodeGen/Thumb2/thumb2-ifcvt2.ll b/test/CodeGen/Thumb2/thumb2-ifcvt2.ll
index 2c57348..f577f79 100644
--- a/test/CodeGen/Thumb2/thumb2-ifcvt2.ll
+++ b/test/CodeGen/Thumb2/thumb2-ifcvt2.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=thumbv7-apple-darwin | FileCheck %s
+; RUN: llc < %s -mtriple=thumbv7-apple-ios | FileCheck %s
define void @foo(i32 %X, i32 %Y) {
entry:
diff --git a/test/CodeGen/Thumb2/thumb2-ldm.ll b/test/CodeGen/Thumb2/thumb2-ldm.ll
index 4f2b7c1..b2328e7 100644
--- a/test/CodeGen/Thumb2/thumb2-ldm.ll
+++ b/test/CodeGen/Thumb2/thumb2-ldm.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mattr=+thumb2 | FileCheck %s
+; RUN: llc < %s -mtriple=thumbv7-apple-ios -mattr=+thumb2 | FileCheck %s
@X = external global [0 x i32] ; <[0 x i32]*> [#uses=5]
diff --git a/test/CodeGen/Thumb2/thumb2-ldrd.ll b/test/CodeGen/Thumb2/thumb2-ldrd.ll
index d3b781d..2e83ea1 100644
--- a/test/CodeGen/Thumb2/thumb2-ldrd.ll
+++ b/test/CodeGen/Thumb2/thumb2-ldrd.ll
@@ -1,10 +1,11 @@
-; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mattr=+thumb2 -regalloc=linearscan | FileCheck %s
+; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mattr=+thumb2 | FileCheck %s
@b = external global i64*
define i64 @t(i64 %a) nounwind readonly {
entry:
-;CHECK: ldrd r2, r3, [r2]
+; CHECK: ldrd
+; CHECK: umull
%0 = load i64** @b, align 4
%1 = load i64* %0, align 4
%2 = mul i64 %1, %a
diff --git a/test/CodeGen/Thumb2/thumb2-mls.ll b/test/CodeGen/Thumb2/thumb2-mls.ll
index 24c45c5..58f9add 100644
--- a/test/CodeGen/Thumb2/thumb2-mls.ll
+++ b/test/CodeGen/Thumb2/thumb2-mls.ll
@@ -15,5 +15,5 @@ define i32 @f2(i32 %a, i32 %b, i32 %c) {
ret i32 %tmp2
}
; CHECK: f2:
-; CHECK: muls r0, r0, r1
+; CHECK: muls r0, r1, r0
diff --git a/test/CodeGen/Thumb2/thumb2-mul.ll b/test/CodeGen/Thumb2/thumb2-mul.ll
index bb97d97..ac059bd 100644
--- a/test/CodeGen/Thumb2/thumb2-mul.ll
+++ b/test/CodeGen/Thumb2/thumb2-mul.ll
@@ -2,7 +2,7 @@
define i32 @f1(i32 %a, i32 %b, i32 %c) {
; CHECK: f1:
-; CHECK: muls r0, r0, r1
+; CHECK: muls r0, r1, r0
%tmp = mul i32 %a, %b
ret i32 %tmp
}
diff --git a/test/CodeGen/Thumb2/thumb2-select_xform.ll b/test/CodeGen/Thumb2/thumb2-select_xform.ll
index ceefabb..74729fd 100644
--- a/test/CodeGen/Thumb2/thumb2-select_xform.ll
+++ b/test/CodeGen/Thumb2/thumb2-select_xform.ll
@@ -3,8 +3,8 @@
define i32 @t1(i32 %a, i32 %b, i32 %c) nounwind {
; CHECK: t1
; CHECK: mvn r0, #-2147483648
-; CHECK: add r0, r1
; CHECK: cmp r2, #10
+; CHECK: add r0, r1
; CHECK: it gt
; CHECK: movgt r0, r1
%tmp1 = icmp sgt i32 %c, 10
OpenPOWER on IntegriCloud