; LLVM IR from ClementineAccount/Albuquerque :: lib/bullet/include/Bullet3Dynamics/ConstraintSolver (b3Generic6DofConstraint)

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

%class.b3Vector3 = type { %union.anon.0 }
%union.anon.0 = type { [4 x float] }
%"struct.b3TypedConstraint::b3ConstraintInfo2" = type { float, float, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, i32, float }
%class.b3RotationalLimitMotor = type { float, float, float, float, float, float, float, float, float, float, float, i8, float, float, i32, float }
%class.b3Generic6DofConstraint = type { %class.b3TypedConstraint, %class.b3Transform, %class.b3Transform, %class.b3TranslationalLimitMotor, [3 x %class.b3RotationalLimitMotor], %class.b3Transform, %class.b3Transform, %class.b3Vector3, [3 x %class.b3Vector3], %class.b3Vector3, float, float, float, i8, %class.b3Vector3, i8, i8, i32, [8 x i8] }
%class.b3TypedConstraint = type { ptr, %struct.b3TypedObject, i32, %union.anon, float, i8, i8, i32, i32, i32, float, float, ptr }
%struct.b3TypedObject = type { i32 }
%union.anon = type { ptr }
%class.b3TranslationalLimitMotor = type { %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, %class.b3Vector3, float, float, float, [3 x i8], [3 x i32], [4 x i8] }
%class.b3Transform = type { %class.b3Matrix3x3, %class.b3Vector3 }
%class.b3Matrix3x3 = type { [3 x %class.b3Vector3] }

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) #2 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN23b3Generic6DofConstraint21get_limit_motor_info2EP22b3RotationalLimitMotorRK11b3TransformS4_RK9b3Vector3S7_S7_S7_PN17b3TypedConstraint17b3ConstraintInfo2EiRS5_ii(ptr noundef nonnull align 16 dereferenceable(824) %0, ptr noundef %1, ptr noundef nonnull align 16 dereferenceable(64) %2, ptr noundef nonnull align 16 dereferenceable(64) %3, ptr noundef nonnull align 16 dereferenceable(16) %4, ptr noundef nonnull align 16 dereferenceable(16) %5, ptr noundef nonnull align 16 dereferenceable(16) %6, ptr noundef nonnull align 16 dereferenceable(16) %7, ptr noundef %8, i32 noundef %9, ptr noundef nonnull align 16 dereferenceable(16) %10, i32 noundef %11, i32 noundef %12) #4 align 2 {
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i8, align 1
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca %class.b3Vector3, align 16
  %34 = alloca %class.b3Vector3, align 16
  %35 = alloca %class.b3Vector3, align 16
  %36 = alloca %class.b3Vector3, align 16
  %37 = alloca %class.b3Vector3, align 16
  %38 = alloca %class.b3Vector3, align 16
  %39 = alloca float, align 4
  %40 = alloca %class.b3Vector3, align 16
  %41 = alloca %class.b3Vector3, align 16
  %42 = alloca %class.b3Vector3, align 16
  %43 = alloca float, align 4
  %44 = alloca %class.b3Vector3, align 16
  %45 = alloca float, align 4
  %46 = alloca %class.b3Vector3, align 16
  %47 = alloca %class.b3Vector3, align 16
  %48 = alloca %class.b3Vector3, align 16
  %49 = alloca %class.b3Vector3, align 16
  %50 = alloca %class.b3Vector3, align 16
  %51 = alloca %class.b3Vector3, align 16
  %52 = alloca %class.b3Vector3, align 16
  %53 = alloca %class.b3Vector3, align 16
  %54 = alloca %class.b3Vector3, align 16
  %55 = alloca i32, align 4
  %56 = alloca %class.b3Vector3, align 16
  %57 = alloca %class.b3Vector3, align 16
  %58 = alloca %class.b3Vector3, align 16
  %59 = alloca %class.b3Vector3, align 16
  %60 = alloca %class.b3Vector3, align 16
  %61 = alloca %class.b3Vector3, align 16
  %62 = alloca float, align 4
  %63 = alloca float, align 4
  %64 = alloca float, align 4
  %65 = alloca float, align 4
  %66 = alloca float, align 4
  %67 = alloca float, align 4
  %68 = alloca i32, align 4
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store ptr %2, ptr %17, align 8, !tbaa !5
  store ptr %3, ptr %18, align 8, !tbaa !5
  store ptr %4, ptr %19, align 8, !tbaa !5
  store ptr %5, ptr %20, align 8, !tbaa !5
  store ptr %6, ptr %21, align 8, !tbaa !5
  store ptr %7, ptr %22, align 8, !tbaa !5
  store ptr %8, ptr %23, align 8, !tbaa !5
  store i32 %9, ptr %24, align 4, !tbaa !9
  store ptr %10, ptr %25, align 8, !tbaa !5
  store i32 %11, ptr %26, align 4, !tbaa !9
  store i32 %12, ptr %27, align 4, !tbaa !9
  %69 = load ptr, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %70 = load i32, ptr %24, align 4, !tbaa !9
  %71 = load ptr, ptr %23, align 8, !tbaa !5
  %72 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %71, i32 0, i32 6
  %73 = load i32, ptr %72, align 8, !tbaa !11
  %74 = mul nsw i32 %70, %73
  store i32 %74, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #7
  %75 = load ptr, ptr %16, align 8, !tbaa !5
  %76 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %75, i32 0, i32 11
  %77 = load i8, ptr %76, align 4, !tbaa !14, !range !17, !noundef !18
  %78 = trunc i8 %77 to i1
  %79 = zext i1 %78 to i8
  store i8 %79, ptr %29, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %80 = load ptr, ptr %16, align 8, !tbaa !5
  %81 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %80, i32 0, i32 14
  %82 = load i32, ptr %81, align 4, !tbaa !20
  store i32 %82, ptr %30, align 4, !tbaa !9
  %83 = load i8, ptr %29, align 1, !tbaa !19, !range !17, !noundef !18
  %84 = trunc i8 %83 to i1
  br i1 %84, label %88, label %85

85:                                               ; preds = %13
  %86 = load i32, ptr %30, align 4, !tbaa !9
  %87 = icmp ne i32 %86, 0
  br i1 %87, label %88, label %773

88:                                               ; preds = %85, %13
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %89 = load i32, ptr %26, align 4, !tbaa !9
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %91, label %95

91:                                               ; preds = %88
  %92 = load ptr, ptr %23, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %92, i32 0, i32 3
  %94 = load ptr, ptr %93, align 8, !tbaa !21
  br label %99

95:                                               ; preds = %88
  %96 = load ptr, ptr %23, align 8, !tbaa !5
  %97 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %96, i32 0, i32 2
  %98 = load ptr, ptr %97, align 8, !tbaa !22
  br label %99

99:                                               ; preds = %95, %91
  %100 = phi ptr [ %94, %91 ], [ %98, %95 ]
  store ptr %100, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %101 = load i32, ptr %26, align 4, !tbaa !9
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %107

103:                                              ; preds = %99
  %104 = load ptr, ptr %23, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %104, i32 0, i32 5
  %106 = load ptr, ptr %105, align 8, !tbaa !23
  br label %111

107:                                              ; preds = %99
  %108 = load ptr, ptr %23, align 8, !tbaa !5
  %109 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %108, i32 0, i32 4
  %110 = load ptr, ptr %109, align 8, !tbaa !24
  br label %111

111:                                              ; preds = %107, %103
  %112 = phi ptr [ %106, %103 ], [ %110, %107 ]
  store ptr %112, ptr %32, align 8, !tbaa !5
  %113 = load ptr, ptr %31, align 8, !tbaa !5
  %114 = icmp ne ptr %113, null
  br i1 %114, label %115, label %143

115:                                              ; preds = %111
  %116 = load ptr, ptr %25, align 8, !tbaa !5
  %117 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %116)
  %118 = getelementptr inbounds float, ptr %117, i64 0
  %119 = load float, ptr %118, align 4, !tbaa !25
  %120 = load ptr, ptr %31, align 8, !tbaa !5
  %121 = load i32, ptr %28, align 4, !tbaa !9
  %122 = add nsw i32 %121, 0
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds float, ptr %120, i64 %123
  store float %119, ptr %124, align 4, !tbaa !25
  %125 = load ptr, ptr %25, align 8, !tbaa !5
  %126 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %125)
  %127 = getelementptr inbounds float, ptr %126, i64 1
  %128 = load float, ptr %127, align 4, !tbaa !25
  %129 = load ptr, ptr %31, align 8, !tbaa !5
  %130 = load i32, ptr %28, align 4, !tbaa !9
  %131 = add nsw i32 %130, 1
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds float, ptr %129, i64 %132
  store float %128, ptr %133, align 4, !tbaa !25
  %134 = load ptr, ptr %25, align 8, !tbaa !5
  %135 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %134)
  %136 = getelementptr inbounds float, ptr %135, i64 2
  %137 = load float, ptr %136, align 4, !tbaa !25
  %138 = load ptr, ptr %31, align 8, !tbaa !5
  %139 = load i32, ptr %28, align 4, !tbaa !9
  %140 = add nsw i32 %139, 2
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds float, ptr %138, i64 %141
  store float %137, ptr %142, align 4, !tbaa !25
  br label %143

143:                                              ; preds = %115, %111
  %144 = load ptr, ptr %32, align 8, !tbaa !5
  %145 = icmp ne ptr %144, null
  br i1 %145, label %146, label %177

146:                                              ; preds = %143
  %147 = load ptr, ptr %25, align 8, !tbaa !5
  %148 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %147)
  %149 = getelementptr inbounds float, ptr %148, i64 0
  %150 = load float, ptr %149, align 4, !tbaa !25
  %151 = fneg float %150
  %152 = load ptr, ptr %32, align 8, !tbaa !5
  %153 = load i32, ptr %28, align 4, !tbaa !9
  %154 = add nsw i32 %153, 0
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds float, ptr %152, i64 %155
  store float %151, ptr %156, align 4, !tbaa !25
  %157 = load ptr, ptr %25, align 8, !tbaa !5
  %158 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %157)
  %159 = getelementptr inbounds float, ptr %158, i64 1
  %160 = load float, ptr %159, align 4, !tbaa !25
  %161 = fneg float %160
  %162 = load ptr, ptr %32, align 8, !tbaa !5
  %163 = load i32, ptr %28, align 4, !tbaa !9
  %164 = add nsw i32 %163, 1
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds float, ptr %162, i64 %165
  store float %161, ptr %166, align 4, !tbaa !25
  %167 = load ptr, ptr %25, align 8, !tbaa !5
  %168 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %167)
  %169 = getelementptr inbounds float, ptr %168, i64 2
  %170 = load float, ptr %169, align 4, !tbaa !25
  %171 = fneg float %170
  %172 = load ptr, ptr %32, align 8, !tbaa !5
  %173 = load i32, ptr %28, align 4, !tbaa !9
  %174 = add nsw i32 %173, 2
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds float, ptr %172, i64 %175
  store float %171, ptr %176, align 4, !tbaa !25
  br label %177

177:                                              ; preds = %146, %143
  %178 = load i32, ptr %26, align 4, !tbaa !9
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %478, label %180

180:                                              ; preds = %177
  %181 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 16
  %182 = load i8, ptr %181, align 1, !tbaa !26, !range !17, !noundef !18
  %183 = trunc i8 %182 to i1
  br i1 %183, label %184, label %371

184:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #7
  %185 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 6
  %186 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %185)
  %187 = load ptr, ptr %18, align 8, !tbaa !5
  %188 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %187)
  %189 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %186, ptr noundef nonnull align 16 dereferenceable(16) %188)
  %190 = getelementptr inbounds %class.b3Vector3, ptr %37, i32 0, i32 0
  %191 = getelementptr inbounds %union.anon.0, ptr %190, i32 0, i32 0
  %192 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %191, i32 0, i32 0
  %193 = extractvalue { <2 x float>, <2 x float> } %189, 0
  store <2 x float> %193, ptr %192, align 16
  %194 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %191, i32 0, i32 1
  %195 = extractvalue { <2 x float>, <2 x float> } %189, 1
  store <2 x float> %195, ptr %194, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %36, ptr align 16 %37, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #7
  %196 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  %197 = load ptr, ptr %25, align 8, !tbaa !5
  %198 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %36, ptr noundef nonnull align 16 dereferenceable(16) %197)
  store float %198, ptr %39, align 4, !tbaa !25
  %199 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %196, ptr noundef nonnull align 4 dereferenceable(4) %39)
  %200 = getelementptr inbounds %class.b3Vector3, ptr %38, i32 0, i32 0
  %201 = getelementptr inbounds %union.anon.0, ptr %200, i32 0, i32 0
  %202 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %201, i32 0, i32 0
  %203 = extractvalue { <2 x float>, <2 x float> } %199, 0
  store <2 x float> %203, ptr %202, align 16
  %204 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %201, i32 0, i32 1
  %205 = extractvalue { <2 x float>, <2 x float> } %199, 1
  store <2 x float> %205, ptr %204, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #7
  %206 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %36, ptr noundef nonnull align 16 dereferenceable(16) %38)
  %207 = getelementptr inbounds %class.b3Vector3, ptr %40, i32 0, i32 0
  %208 = getelementptr inbounds %union.anon.0, ptr %207, i32 0, i32 0
  %209 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %208, i32 0, i32 0
  %210 = extractvalue { <2 x float>, <2 x float> } %206, 0
  store <2 x float> %210, ptr %209, align 16
  %211 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %208, i32 0, i32 1
  %212 = extractvalue { <2 x float>, <2 x float> } %206, 1
  store <2 x float> %212, ptr %211, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #7
  %213 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 5
  %214 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %213)
  %215 = load ptr, ptr %17, align 8, !tbaa !5
  %216 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %215)
  %217 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %214, ptr noundef nonnull align 16 dereferenceable(16) %216)
  %218 = getelementptr inbounds %class.b3Vector3, ptr %41, i32 0, i32 0
  %219 = getelementptr inbounds %union.anon.0, ptr %218, i32 0, i32 0
  %220 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %219, i32 0, i32 0
  %221 = extractvalue { <2 x float>, <2 x float> } %217, 0
  store <2 x float> %221, ptr %220, align 16
  %222 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %219, i32 0, i32 1
  %223 = extractvalue { <2 x float>, <2 x float> } %217, 1
  store <2 x float> %223, ptr %222, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %35, ptr align 16 %41, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #7
  %224 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %225 = load ptr, ptr %25, align 8, !tbaa !5
  %226 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %35, ptr noundef nonnull align 16 dereferenceable(16) %225)
  store float %226, ptr %43, align 4, !tbaa !25
  %227 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %224, ptr noundef nonnull align 4 dereferenceable(4) %43)
  %228 = getelementptr inbounds %class.b3Vector3, ptr %42, i32 0, i32 0
  %229 = getelementptr inbounds %union.anon.0, ptr %228, i32 0, i32 0
  %230 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %229, i32 0, i32 0
  %231 = extractvalue { <2 x float>, <2 x float> } %227, 0
  store <2 x float> %231, ptr %230, align 16
  %232 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %229, i32 0, i32 1
  %233 = extractvalue { <2 x float>, <2 x float> } %227, 1
  store <2 x float> %233, ptr %232, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #7
  %234 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %35, ptr noundef nonnull align 16 dereferenceable(16) %42)
  %235 = getelementptr inbounds %class.b3Vector3, ptr %44, i32 0, i32 0
  %236 = getelementptr inbounds %union.anon.0, ptr %235, i32 0, i32 0
  %237 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %236, i32 0, i32 0
  %238 = extractvalue { <2 x float>, <2 x float> } %234, 0
  store <2 x float> %238, ptr %237, align 16
  %239 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %236, i32 0, i32 1
  %240 = extractvalue { <2 x float>, <2 x float> } %234, 1
  store <2 x float> %240, ptr %239, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  %241 = load ptr, ptr %16, align 8, !tbaa !5
  %242 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %241, i32 0, i32 13
  %243 = load float, ptr %242, align 4, !tbaa !36
  %244 = load ptr, ptr %16, align 8, !tbaa !5
  %245 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %244, i32 0, i32 12
  %246 = load float, ptr %245, align 4, !tbaa !37
  %247 = fsub float %243, %246
  store float %247, ptr %45, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %47) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %48) #7
  %248 = load ptr, ptr %25, align 8, !tbaa !5
  %249 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %248, ptr noundef nonnull align 4 dereferenceable(4) %45)
  %250 = getelementptr inbounds %class.b3Vector3, ptr %48, i32 0, i32 0
  %251 = getelementptr inbounds %union.anon.0, ptr %250, i32 0, i32 0
  %252 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %251, i32 0, i32 0
  %253 = extractvalue { <2 x float>, <2 x float> } %249, 0
  store <2 x float> %253, ptr %252, align 16
  %254 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %251, i32 0, i32 1
  %255 = extractvalue { <2 x float>, <2 x float> } %249, 1
  store <2 x float> %255, ptr %254, align 8
  %256 = call { <2 x float>, <2 x float> } @_ZplRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %42, ptr noundef nonnull align 16 dereferenceable(16) %48)
  %257 = getelementptr inbounds %class.b3Vector3, ptr %47, i32 0, i32 0
  %258 = getelementptr inbounds %union.anon.0, ptr %257, i32 0, i32 0
  %259 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %258, i32 0, i32 0
  %260 = extractvalue { <2 x float>, <2 x float> } %256, 0
  store <2 x float> %260, ptr %259, align 16
  %261 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %258, i32 0, i32 1
  %262 = extractvalue { <2 x float>, <2 x float> } %256, 1
  store <2 x float> %262, ptr %261, align 8
  %263 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %47, ptr noundef nonnull align 16 dereferenceable(16) %38)
  %264 = getelementptr inbounds %class.b3Vector3, ptr %46, i32 0, i32 0
  %265 = getelementptr inbounds %union.anon.0, ptr %264, i32 0, i32 0
  %266 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %265, i32 0, i32 0
  %267 = extractvalue { <2 x float>, <2 x float> } %263, 0
  store <2 x float> %267, ptr %266, align 16
  %268 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %265, i32 0, i32 1
  %269 = extractvalue { <2 x float>, <2 x float> } %263, 1
  store <2 x float> %269, ptr %268, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %47) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #7
  %270 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 11
  %271 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %46, ptr noundef nonnull align 4 dereferenceable(4) %270)
  %272 = getelementptr inbounds %class.b3Vector3, ptr %50, i32 0, i32 0
  %273 = getelementptr inbounds %union.anon.0, ptr %272, i32 0, i32 0
  %274 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %273, i32 0, i32 0
  %275 = extractvalue { <2 x float>, <2 x float> } %271, 0
  store <2 x float> %275, ptr %274, align 16
  %276 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %273, i32 0, i32 1
  %277 = extractvalue { <2 x float>, <2 x float> } %271, 1
  store <2 x float> %277, ptr %276, align 8
  %278 = call { <2 x float>, <2 x float> } @_ZplRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %44, ptr noundef nonnull align 16 dereferenceable(16) %50)
  %279 = getelementptr inbounds %class.b3Vector3, ptr %49, i32 0, i32 0
  %280 = getelementptr inbounds %union.anon.0, ptr %279, i32 0, i32 0
  %281 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %280, i32 0, i32 0
  %282 = extractvalue { <2 x float>, <2 x float> } %278, 0
  store <2 x float> %282, ptr %281, align 16
  %283 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %280, i32 0, i32 1
  %284 = extractvalue { <2 x float>, <2 x float> } %278, 1
  store <2 x float> %284, ptr %283, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %35, ptr align 16 %49, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #7
  %285 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 12
  %286 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %46, ptr noundef nonnull align 4 dereferenceable(4) %285)
  %287 = getelementptr inbounds %class.b3Vector3, ptr %52, i32 0, i32 0
  %288 = getelementptr inbounds %union.anon.0, ptr %287, i32 0, i32 0
  %289 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %288, i32 0, i32 0
  %290 = extractvalue { <2 x float>, <2 x float> } %286, 0
  store <2 x float> %290, ptr %289, align 16
  %291 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %288, i32 0, i32 1
  %292 = extractvalue { <2 x float>, <2 x float> } %286, 1
  store <2 x float> %292, ptr %291, align 8
  %293 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %40, ptr noundef nonnull align 16 dereferenceable(16) %52)
  %294 = getelementptr inbounds %class.b3Vector3, ptr %51, i32 0, i32 0
  %295 = getelementptr inbounds %union.anon.0, ptr %294, i32 0, i32 0
  %296 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %295, i32 0, i32 0
  %297 = extractvalue { <2 x float>, <2 x float> } %293, 0
  store <2 x float> %297, ptr %296, align 16
  %298 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %295, i32 0, i32 1
  %299 = extractvalue { <2 x float>, <2 x float> } %293, 1
  store <2 x float> %299, ptr %298, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %36, ptr align 16 %51, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #7
  %300 = load ptr, ptr %25, align 8, !tbaa !5
  %301 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %35, ptr noundef nonnull align 16 dereferenceable(16) %300)
  %302 = getelementptr inbounds %class.b3Vector3, ptr %53, i32 0, i32 0
  %303 = getelementptr inbounds %union.anon.0, ptr %302, i32 0, i32 0
  %304 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %303, i32 0, i32 0
  %305 = extractvalue { <2 x float>, <2 x float> } %301, 0
  store <2 x float> %305, ptr %304, align 16
  %306 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %303, i32 0, i32 1
  %307 = extractvalue { <2 x float>, <2 x float> } %301, 1
  store <2 x float> %307, ptr %306, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %33, ptr align 16 %53, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #7
  %308 = load ptr, ptr %25, align 8, !tbaa !5
  %309 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %36, ptr noundef nonnull align 16 dereferenceable(16) %308)
  %310 = getelementptr inbounds %class.b3Vector3, ptr %54, i32 0, i32 0
  %311 = getelementptr inbounds %union.anon.0, ptr %310, i32 0, i32 0
  %312 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %311, i32 0, i32 0
  %313 = extractvalue { <2 x float>, <2 x float> } %309, 0
  store <2 x float> %313, ptr %312, align 16
  %314 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %311, i32 0, i32 1
  %315 = extractvalue { <2 x float>, <2 x float> } %309, 1
  store <2 x float> %315, ptr %314, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %34, ptr align 16 %54, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #7
  %316 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 13
  %317 = load i8, ptr %316, align 4, !tbaa !38, !range !17, !noundef !18
  %318 = trunc i8 %317 to i1
  br i1 %318, label %319, label %327

319:                                              ; preds = %184
  %320 = load i32, ptr %27, align 4, !tbaa !9
  %321 = icmp ne i32 %320, 0
  br i1 %321, label %327, label %322

322:                                              ; preds = %319
  %323 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 11
  %324 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN9b3Vector3mLERKf(ptr noundef nonnull align 16 dereferenceable(16) %33, ptr noundef nonnull align 4 dereferenceable(4) %323)
  %325 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 12
  %326 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN9b3Vector3mLERKf(ptr noundef nonnull align 16 dereferenceable(16) %34, ptr noundef nonnull align 4 dereferenceable(4) %325)
  br label %327

327:                                              ; preds = %322, %319, %184
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #7
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %328

328:                                              ; preds = %345, %327
  %329 = load i32, ptr %55, align 4, !tbaa !9
  %330 = icmp slt i32 %329, 3
  br i1 %330, label %331, label %348

331:                                              ; preds = %328
  %332 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %33)
  %333 = load i32, ptr %55, align 4, !tbaa !9
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds float, ptr %332, i64 %334
  %336 = load float, ptr %335, align 4, !tbaa !25
  %337 = load ptr, ptr %23, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %337, i32 0, i32 3
  %339 = load ptr, ptr %338, align 8, !tbaa !21
  %340 = load i32, ptr %28, align 4, !tbaa !9
  %341 = load i32, ptr %55, align 4, !tbaa !9
  %342 = add nsw i32 %340, %341
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds float, ptr %339, i64 %343
  store float %336, ptr %344, align 4, !tbaa !25
  br label %345

345:                                              ; preds = %331
  %346 = load i32, ptr %55, align 4, !tbaa !9
  %347 = add nsw i32 %346, 1
  store i32 %347, ptr %55, align 4, !tbaa !9
  br label %328, !llvm.loop !39

348:                                              ; preds = %328
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %349

349:                                              ; preds = %367, %348
  %350 = load i32, ptr %55, align 4, !tbaa !9
  %351 = icmp slt i32 %350, 3
  br i1 %351, label %352, label %370

352:                                              ; preds = %349
  %353 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %34)
  %354 = load i32, ptr %55, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds float, ptr %353, i64 %355
  %357 = load float, ptr %356, align 4, !tbaa !25
  %358 = fneg float %357
  %359 = load ptr, ptr %23, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %359, i32 0, i32 5
  %361 = load ptr, ptr %360, align 8, !tbaa !23
  %362 = load i32, ptr %28, align 4, !tbaa !9
  %363 = load i32, ptr %55, align 4, !tbaa !9
  %364 = add nsw i32 %362, %363
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds float, ptr %361, i64 %365
  store float %358, ptr %366, align 4, !tbaa !25
  br label %367

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

370:                                              ; preds = %349
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #7
  br label %477

371:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #7
  %372 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 6
  %373 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %372)
  %374 = load ptr, ptr %17, align 8, !tbaa !5
  %375 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %374)
  %376 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %373, ptr noundef nonnull align 16 dereferenceable(16) %375)
  %377 = getelementptr inbounds %class.b3Vector3, ptr %57, i32 0, i32 0
  %378 = getelementptr inbounds %union.anon.0, ptr %377, i32 0, i32 0
  %379 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %378, i32 0, i32 0
  %380 = extractvalue { <2 x float>, <2 x float> } %376, 0
  store <2 x float> %380, ptr %379, align 16
  %381 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %378, i32 0, i32 1
  %382 = extractvalue { <2 x float>, <2 x float> } %376, 1
  store <2 x float> %382, ptr %381, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #7
  %383 = load ptr, ptr %25, align 8, !tbaa !5
  %384 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %57, ptr noundef nonnull align 16 dereferenceable(16) %383)
  %385 = getelementptr inbounds %class.b3Vector3, ptr %58, i32 0, i32 0
  %386 = getelementptr inbounds %union.anon.0, ptr %385, i32 0, i32 0
  %387 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %386, i32 0, i32 0
  %388 = extractvalue { <2 x float>, <2 x float> } %384, 0
  store <2 x float> %388, ptr %387, align 16
  %389 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %386, i32 0, i32 1
  %390 = extractvalue { <2 x float>, <2 x float> } %384, 1
  store <2 x float> %390, ptr %389, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 %58, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #7
  %391 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %56)
  %392 = getelementptr inbounds float, ptr %391, i64 0
  %393 = load float, ptr %392, align 4, !tbaa !25
  %394 = load ptr, ptr %23, align 8, !tbaa !5
  %395 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %394, i32 0, i32 3
  %396 = load ptr, ptr %395, align 8, !tbaa !21
  %397 = load i32, ptr %28, align 4, !tbaa !9
  %398 = add nsw i32 %397, 0
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds float, ptr %396, i64 %399
  store float %393, ptr %400, align 4, !tbaa !25
  %401 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %56)
  %402 = getelementptr inbounds float, ptr %401, i64 1
  %403 = load float, ptr %402, align 4, !tbaa !25
  %404 = load ptr, ptr %23, align 8, !tbaa !5
  %405 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %404, i32 0, i32 3
  %406 = load ptr, ptr %405, align 8, !tbaa !21
  %407 = load i32, ptr %28, align 4, !tbaa !9
  %408 = add nsw i32 %407, 1
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds float, ptr %406, i64 %409
  store float %403, ptr %410, align 4, !tbaa !25
  %411 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %56)
  %412 = getelementptr inbounds float, ptr %411, i64 2
  %413 = load float, ptr %412, align 4, !tbaa !25
  %414 = load ptr, ptr %23, align 8, !tbaa !5
  %415 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %414, i32 0, i32 3
  %416 = load ptr, ptr %415, align 8, !tbaa !21
  %417 = load i32, ptr %28, align 4, !tbaa !9
  %418 = add nsw i32 %417, 2
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds float, ptr %416, i64 %419
  store float %413, ptr %420, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #7
  %421 = getelementptr inbounds %class.b3Generic6DofConstraint, ptr %69, i32 0, i32 6
  %422 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %421)
  %423 = load ptr, ptr %18, align 8, !tbaa !5
  %424 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %423)
  %425 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %422, ptr noundef nonnull align 16 dereferenceable(16) %424)
  %426 = getelementptr inbounds %class.b3Vector3, ptr %59, i32 0, i32 0
  %427 = getelementptr inbounds %union.anon.0, ptr %426, i32 0, i32 0
  %428 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %427, i32 0, i32 0
  %429 = extractvalue { <2 x float>, <2 x float> } %425, 0
  store <2 x float> %429, ptr %428, align 16
  %430 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %427, i32 0, i32 1
  %431 = extractvalue { <2 x float>, <2 x float> } %425, 1
  store <2 x float> %431, ptr %430, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %57, ptr align 16 %59, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #7
  %432 = load ptr, ptr %25, align 8, !tbaa !5
  %433 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %57, ptr noundef nonnull align 16 dereferenceable(16) %432)
  %434 = getelementptr inbounds %class.b3Vector3, ptr %61, i32 0, i32 0
  %435 = getelementptr inbounds %union.anon.0, ptr %434, i32 0, i32 0
  %436 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %435, i32 0, i32 0
  %437 = extractvalue { <2 x float>, <2 x float> } %433, 0
  store <2 x float> %437, ptr %436, align 16
  %438 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %435, i32 0, i32 1
  %439 = extractvalue { <2 x float>, <2 x float> } %433, 1
  store <2 x float> %439, ptr %438, align 8
  %440 = call { <2 x float>, <2 x float> } @_ZngRK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(16) %61)
  %441 = getelementptr inbounds %class.b3Vector3, ptr %60, i32 0, i32 0
  %442 = getelementptr inbounds %union.anon.0, ptr %441, i32 0, i32 0
  %443 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %442, i32 0, i32 0
  %444 = extractvalue { <2 x float>, <2 x float> } %440, 0
  store <2 x float> %444, ptr %443, align 16
  %445 = getelementptr inbounds { <2 x float>, <2 x float> }, ptr %442, i32 0, i32 1
  %446 = extractvalue { <2 x float>, <2 x float> } %440, 1
  store <2 x float> %446, ptr %445, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 %60, i64 16, i1 false), !tbaa.struct !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #7
  %447 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %56)
  %448 = getelementptr inbounds float, ptr %447, i64 0
  %449 = load float, ptr %448, align 4, !tbaa !25
  %450 = load ptr, ptr %23, align 8, !tbaa !5
  %451 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %450, i32 0, i32 5
  %452 = load ptr, ptr %451, align 8, !tbaa !23
  %453 = load i32, ptr %28, align 4, !tbaa !9
  %454 = add nsw i32 %453, 0
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds float, ptr %452, i64 %455
  store float %449, ptr %456, align 4, !tbaa !25
  %457 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %56)
  %458 = getelementptr inbounds float, ptr %457, i64 1
  %459 = load float, ptr %458, align 4, !tbaa !25
  %460 = load ptr, ptr %23, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %460, i32 0, i32 5
  %462 = load ptr, ptr %461, align 8, !tbaa !23
  %463 = load i32, ptr %28, align 4, !tbaa !9
  %464 = add nsw i32 %463, 1
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds float, ptr %462, i64 %465
  store float %459, ptr %466, align 4, !tbaa !25
  %467 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %56)
  %468 = getelementptr inbounds float, ptr %467, i64 2
  %469 = load float, ptr %468, align 4, !tbaa !25
  %470 = load ptr, ptr %23, align 8, !tbaa !5
  %471 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %470, i32 0, i32 5
  %472 = load ptr, ptr %471, align 8, !tbaa !23
  %473 = load i32, ptr %28, align 4, !tbaa !9
  %474 = add nsw i32 %473, 2
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds float, ptr %472, i64 %475
  store float %469, ptr %476, align 4, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #7
  br label %477

477:                                              ; preds = %371, %370
  br label %478

478:                                              ; preds = %477, %177
  %479 = load i32, ptr %30, align 4, !tbaa !9
  %480 = icmp ne i32 %479, 0
  br i1 %480, label %481, label %490

481:                                              ; preds = %478
  %482 = load ptr, ptr %16, align 8, !tbaa !5
  %483 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %482, i32 0, i32 0
  %484 = load float, ptr %483, align 4, !tbaa !42
  %485 = load ptr, ptr %16, align 8, !tbaa !5
  %486 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %485, i32 0, i32 1
  %487 = load float, ptr %486, align 4, !tbaa !43
  %488 = fcmp oeq float %484, %487
  br i1 %488, label %489, label %490

489:                                              ; preds = %481
  store i8 0, ptr %29, align 1, !tbaa !19
  br label %490

490:                                              ; preds = %489, %481, %478
  %491 = load ptr, ptr %23, align 8, !tbaa !5
  %492 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %491, i32 0, i32 7
  %493 = load ptr, ptr %492, align 8, !tbaa !44
  %494 = load i32, ptr %28, align 4, !tbaa !9
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds float, ptr %493, i64 %495
  store float 0.000000e+00, ptr %496, align 4, !tbaa !25
  %497 = load i8, ptr %29, align 1, !tbaa !19, !range !17, !noundef !18
  %498 = trunc i8 %497 to i1
  br i1 %498, label %499, label %583

499:                                              ; preds = %490
  %500 = load ptr, ptr %16, align 8, !tbaa !5
  %501 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %500, i32 0, i32 7
  %502 = load float, ptr %501, align 4, !tbaa !45
  %503 = load ptr, ptr %23, align 8, !tbaa !5
  %504 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %503, i32 0, i32 8
  %505 = load ptr, ptr %504, align 8, !tbaa !46
  %506 = load i32, ptr %28, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds float, ptr %505, i64 %507
  store float %502, ptr %508, align 4, !tbaa !25
  %509 = load i32, ptr %30, align 4, !tbaa !9
  %510 = icmp ne i32 %509, 0
  br i1 %510, label %582, label %511

511:                                              ; preds = %499
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #7
  %512 = load i32, ptr %26, align 4, !tbaa !9
  %513 = icmp ne i32 %512, 0
  br i1 %513, label %514, label %518

514:                                              ; preds = %511
  %515 = load ptr, ptr %16, align 8, !tbaa !5
  %516 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %515, i32 0, i32 2
  %517 = load float, ptr %516, align 4, !tbaa !47
  br label %523

518:                                              ; preds = %511
  %519 = load ptr, ptr %16, align 8, !tbaa !5
  %520 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %519, i32 0, i32 2
  %521 = load float, ptr %520, align 4, !tbaa !47
  %522 = fneg float %521
  br label %523

523:                                              ; preds = %518, %514
  %524 = phi float [ %517, %514 ], [ %522, %518 ]
  store float %524, ptr %62, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #7
  %525 = load ptr, ptr %16, align 8, !tbaa !5
  %526 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %525, i32 0, i32 13
  %527 = load float, ptr %526, align 4, !tbaa !36
  %528 = load ptr, ptr %16, align 8, !tbaa !5
  %529 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %528, i32 0, i32 0
  %530 = load float, ptr %529, align 4, !tbaa !42
  %531 = load ptr, ptr %16, align 8, !tbaa !5
  %532 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %531, i32 0, i32 1
  %533 = load float, ptr %532, align 4, !tbaa !43
  %534 = load float, ptr %62, align 4, !tbaa !25
  %535 = load ptr, ptr %23, align 8, !tbaa !5
  %536 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %535, i32 0, i32 0
  %537 = load float, ptr %536, align 8, !tbaa !48
  %538 = load ptr, ptr %16, align 8, !tbaa !5
  %539 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %538, i32 0, i32 8
  %540 = load float, ptr %539, align 4, !tbaa !49
  %541 = fmul float %537, %540
  %542 = call noundef float @_ZN17b3TypedConstraint14getMotorFactorEfffff(ptr noundef nonnull align 16 dereferenceable(64) %69, float noundef %527, float noundef %530, float noundef %533, float noundef %534, float noundef %541)
  store float %542, ptr %63, align 4, !tbaa !25
  %543 = load float, ptr %63, align 4, !tbaa !25
  %544 = load ptr, ptr %16, align 8, !tbaa !5
  %545 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %544, i32 0, i32 2
  %546 = load float, ptr %545, align 4, !tbaa !47
  %547 = load ptr, ptr %23, align 8, !tbaa !5
  %548 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %547, i32 0, i32 7
  %549 = load ptr, ptr %548, align 8, !tbaa !44
  %550 = load i32, ptr %28, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds float, ptr %549, i64 %551
  %553 = load float, ptr %552, align 4, !tbaa !25
  %554 = call float @llvm.fmuladd.f32(float %543, float %546, float %553)
  store float %554, ptr %552, align 4, !tbaa !25
  %555 = load ptr, ptr %16, align 8, !tbaa !5
  %556 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %555, i32 0, i32 3
  %557 = load float, ptr %556, align 4, !tbaa !50
  %558 = fneg float %557
  %559 = load ptr, ptr %23, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %559, i32 0, i32 0
  %561 = load float, ptr %560, align 8, !tbaa !48
  %562 = fdiv float %558, %561
  %563 = load ptr, ptr %23, align 8, !tbaa !5
  %564 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %563, i32 0, i32 9
  %565 = load ptr, ptr %564, align 8, !tbaa !51
  %566 = load i32, ptr %28, align 4, !tbaa !9
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds float, ptr %565, i64 %567
  store float %562, ptr %568, align 4, !tbaa !25
  %569 = load ptr, ptr %16, align 8, !tbaa !5
  %570 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %569, i32 0, i32 3
  %571 = load float, ptr %570, align 4, !tbaa !50
  %572 = load ptr, ptr %23, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %572, i32 0, i32 0
  %574 = load float, ptr %573, align 8, !tbaa !48
  %575 = fdiv float %571, %574
  %576 = load ptr, ptr %23, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %576, i32 0, i32 10
  %578 = load ptr, ptr %577, align 8, !tbaa !52
  %579 = load i32, ptr %28, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = getelementptr inbounds float, ptr %578, i64 %580
  store float %575, ptr %581, align 4, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  br label %582

582:                                              ; preds = %523, %499
  br label %583

583:                                              ; preds = %582, %490
  %584 = load i32, ptr %30, align 4, !tbaa !9
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %586, label %772

586:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #7
  %587 = load ptr, ptr %23, align 8, !tbaa !5
  %588 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %587, i32 0, i32 0
  %589 = load float, ptr %588, align 8, !tbaa !48
  %590 = load ptr, ptr %16, align 8, !tbaa !5
  %591 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %590, i32 0, i32 8
  %592 = load float, ptr %591, align 4, !tbaa !49
  %593 = fmul float %589, %592
  store float %593, ptr %64, align 4, !tbaa !25
  %594 = load i32, ptr %26, align 4, !tbaa !9
  %595 = icmp ne i32 %594, 0
  br i1 %595, label %609, label %596

596:                                              ; preds = %586
  %597 = load float, ptr %64, align 4, !tbaa !25
  %598 = load ptr, ptr %16, align 8, !tbaa !5
  %599 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %598, i32 0, i32 12
  %600 = load float, ptr %599, align 4, !tbaa !37
  %601 = load ptr, ptr %23, align 8, !tbaa !5
  %602 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %601, i32 0, i32 7
  %603 = load ptr, ptr %602, align 8, !tbaa !44
  %604 = load i32, ptr %28, align 4, !tbaa !9
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds float, ptr %603, i64 %605
  %607 = load float, ptr %606, align 4, !tbaa !25
  %608 = call float @llvm.fmuladd.f32(float %597, float %600, float %607)
  store float %608, ptr %606, align 4, !tbaa !25
  br label %623

609:                                              ; preds = %586
  %610 = load float, ptr %64, align 4, !tbaa !25
  %611 = fneg float %610
  %612 = load ptr, ptr %16, align 8, !tbaa !5
  %613 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %612, i32 0, i32 12
  %614 = load float, ptr %613, align 4, !tbaa !37
  %615 = load ptr, ptr %23, align 8, !tbaa !5
  %616 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %615, i32 0, i32 7
  %617 = load ptr, ptr %616, align 8, !tbaa !44
  %618 = load i32, ptr %28, align 4, !tbaa !9
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds float, ptr %617, i64 %619
  %621 = load float, ptr %620, align 4, !tbaa !25
  %622 = call float @llvm.fmuladd.f32(float %611, float %614, float %621)
  store float %622, ptr %620, align 4, !tbaa !25
  br label %623

623:                                              ; preds = %609, %596
  %624 = load ptr, ptr %16, align 8, !tbaa !5
  %625 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %624, i32 0, i32 9
  %626 = load float, ptr %625, align 4, !tbaa !53
  %627 = load ptr, ptr %23, align 8, !tbaa !5
  %628 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %627, i32 0, i32 8
  %629 = load ptr, ptr %628, align 8, !tbaa !46
  %630 = load i32, ptr %28, align 4, !tbaa !9
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds float, ptr %629, i64 %631
  store float %626, ptr %632, align 4, !tbaa !25
  %633 = load ptr, ptr %16, align 8, !tbaa !5
  %634 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %633, i32 0, i32 0
  %635 = load float, ptr %634, align 4, !tbaa !42
  %636 = load ptr, ptr %16, align 8, !tbaa !5
  %637 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %636, i32 0, i32 1
  %638 = load float, ptr %637, align 4, !tbaa !43
  %639 = fcmp oeq float %635, %638
  br i1 %639, label %640, label %653

640:                                              ; preds = %623
  %641 = load ptr, ptr %23, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %641, i32 0, i32 9
  %643 = load ptr, ptr %642, align 8, !tbaa !51
  %644 = load i32, ptr %28, align 4, !tbaa !9
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds float, ptr %643, i64 %645
  store float 0xC7EFFFFFE0000000, ptr %646, align 4, !tbaa !25
  %647 = load ptr, ptr %23, align 8, !tbaa !5
  %648 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %647, i32 0, i32 10
  %649 = load ptr, ptr %648, align 8, !tbaa !52
  %650 = load i32, ptr %28, align 4, !tbaa !9
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds float, ptr %649, i64 %651
  store float 0x47EFFFFFE0000000, ptr %652, align 4, !tbaa !25
  br label %771

653:                                              ; preds = %623
  %654 = load i32, ptr %30, align 4, !tbaa !9
  %655 = icmp eq i32 %654, 1
  br i1 %655, label %656, label %669

656:                                              ; preds = %653
  %657 = load ptr, ptr %23, align 8, !tbaa !5
  %658 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %657, i32 0, i32 9
  %659 = load ptr, ptr %658, align 8, !tbaa !51
  %660 = load i32, ptr %28, align 4, !tbaa !9
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds float, ptr %659, i64 %661
  store float 0.000000e+00, ptr %662, align 4, !tbaa !25
  %663 = load ptr, ptr %23, align 8, !tbaa !5
  %664 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %663, i32 0, i32 10
  %665 = load ptr, ptr %664, align 8, !tbaa !52
  %666 = load i32, ptr %28, align 4, !tbaa !9
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds float, ptr %665, i64 %667
  store float 0x47EFFFFFE0000000, ptr %668, align 4, !tbaa !25
  br label %682

669:                                              ; preds = %653
  %670 = load ptr, ptr %23, align 8, !tbaa !5
  %671 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %670, i32 0, i32 9
  %672 = load ptr, ptr %671, align 8, !tbaa !51
  %673 = load i32, ptr %28, align 4, !tbaa !9
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds float, ptr %672, i64 %674
  store float 0xC7EFFFFFE0000000, ptr %675, align 4, !tbaa !25
  %676 = load ptr, ptr %23, align 8, !tbaa !5
  %677 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %676, i32 0, i32 10
  %678 = load ptr, ptr %677, align 8, !tbaa !52
  %679 = load i32, ptr %28, align 4, !tbaa !9
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds float, ptr %678, i64 %680
  store float 0.000000e+00, ptr %681, align 4, !tbaa !25
  br label %682

682:                                              ; preds = %669, %656
  %683 = load ptr, ptr %16, align 8, !tbaa !5
  %684 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %683, i32 0, i32 10
  %685 = load float, ptr %684, align 4, !tbaa !54
  %686 = fcmp ogt float %685, 0.000000e+00
  br i1 %686, label %687, label %770

687:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #7
  %688 = load i32, ptr %26, align 4, !tbaa !9
  %689 = icmp ne i32 %688, 0
  br i1 %689, label %690, label %699

690:                                              ; preds = %687
  %691 = load ptr, ptr %21, align 8, !tbaa !5
  %692 = load ptr, ptr %25, align 8, !tbaa !5
  %693 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %691, ptr noundef nonnull align 16 dereferenceable(16) %692)
  store float %693, ptr %65, align 4, !tbaa !25
  %694 = load ptr, ptr %22, align 8, !tbaa !5
  %695 = load ptr, ptr %25, align 8, !tbaa !5
  %696 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %694, ptr noundef nonnull align 16 dereferenceable(16) %695)
  %697 = load float, ptr %65, align 4, !tbaa !25
  %698 = fsub float %697, %696
  store float %698, ptr %65, align 4, !tbaa !25
  br label %708

699:                                              ; preds = %687
  %700 = load ptr, ptr %19, align 8, !tbaa !5
  %701 = load ptr, ptr %25, align 8, !tbaa !5
  %702 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %700, ptr noundef nonnull align 16 dereferenceable(16) %701)
  store float %702, ptr %65, align 4, !tbaa !25
  %703 = load ptr, ptr %20, align 8, !tbaa !5
  %704 = load ptr, ptr %25, align 8, !tbaa !5
  %705 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %703, ptr noundef nonnull align 16 dereferenceable(16) %704)
  %706 = load float, ptr %65, align 4, !tbaa !25
  %707 = fsub float %706, %705
  store float %707, ptr %65, align 4, !tbaa !25
  br label %708

708:                                              ; preds = %699, %690
  %709 = load i32, ptr %30, align 4, !tbaa !9
  %710 = icmp eq i32 %709, 1
  br i1 %710, label %711, label %740

711:                                              ; preds = %708
  %712 = load float, ptr %65, align 4, !tbaa !25
  %713 = fcmp olt float %712, 0.000000e+00
  br i1 %713, label %714, label %739

714:                                              ; preds = %711
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #7
  %715 = load ptr, ptr %16, align 8, !tbaa !5
  %716 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %715, i32 0, i32 10
  %717 = load float, ptr %716, align 4, !tbaa !54
  %718 = fneg float %717
  %719 = load float, ptr %65, align 4, !tbaa !25
  %720 = fmul float %718, %719
  store float %720, ptr %66, align 4, !tbaa !25
  %721 = load float, ptr %66, align 4, !tbaa !25
  %722 = load ptr, ptr %23, align 8, !tbaa !5
  %723 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %722, i32 0, i32 7
  %724 = load ptr, ptr %723, align 8, !tbaa !44
  %725 = load i32, ptr %28, align 4, !tbaa !9
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds float, ptr %724, i64 %726
  %728 = load float, ptr %727, align 4, !tbaa !25
  %729 = fcmp ogt float %721, %728
  br i1 %729, label %730, label %738

730:                                              ; preds = %714
  %731 = load float, ptr %66, align 4, !tbaa !25
  %732 = load ptr, ptr %23, align 8, !tbaa !5
  %733 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %732, i32 0, i32 7
  %734 = load ptr, ptr %733, align 8, !tbaa !44
  %735 = load i32, ptr %28, align 4, !tbaa !9
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds float, ptr %734, i64 %736
  store float %731, ptr %737, align 4, !tbaa !25
  br label %738

738:                                              ; preds = %730, %714
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #7
  br label %739

739:                                              ; preds = %738, %711
  br label %769

740:                                              ; preds = %708
  %741 = load float, ptr %65, align 4, !tbaa !25
  %742 = fcmp ogt float %741, 0.000000e+00
  br i1 %742, label %743, label %768

743:                                              ; preds = %740
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #7
  %744 = load ptr, ptr %16, align 8, !tbaa !5
  %745 = getelementptr inbounds %class.b3RotationalLimitMotor, ptr %744, i32 0, i32 10
  %746 = load float, ptr %745, align 4, !tbaa !54
  %747 = fneg float %746
  %748 = load float, ptr %65, align 4, !tbaa !25
  %749 = fmul float %747, %748
  store float %749, ptr %67, align 4, !tbaa !25
  %750 = load float, ptr %67, align 4, !tbaa !25
  %751 = load ptr, ptr %23, align 8, !tbaa !5
  %752 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %751, i32 0, i32 7
  %753 = load ptr, ptr %752, align 8, !tbaa !44
  %754 = load i32, ptr %28, align 4, !tbaa !9
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds float, ptr %753, i64 %755
  %757 = load float, ptr %756, align 4, !tbaa !25
  %758 = fcmp olt float %750, %757
  br i1 %758, label %759, label %767

759:                                              ; preds = %743
  %760 = load float, ptr %67, align 4, !tbaa !25
  %761 = load ptr, ptr %23, align 8, !tbaa !5
  %762 = getelementptr inbounds %"struct.b3TypedConstraint::b3ConstraintInfo2", ptr %761, i32 0, i32 7
  %763 = load ptr, ptr %762, align 8, !tbaa !44
  %764 = load i32, ptr %28, align 4, !tbaa !9
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds float, ptr %763, i64 %765
  store float %760, ptr %766, align 4, !tbaa !25
  br label %767

767:                                              ; preds = %759, %743
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #7
  br label %768

768:                                              ; preds = %767, %740
  br label %769

769:                                              ; preds = %768, %739
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #7
  br label %770

770:                                              ; preds = %769, %682
  br label %771

771:                                              ; preds = %770, %640
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #7
  br label %772

772:                                              ; preds = %771, %583
  store i32 1, ptr %14, align 4
  store i32 1, ptr %68, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  br label %774

773:                                              ; preds = %85
  store i32 0, ptr %14, align 4
  store i32 1, ptr %68, align 4
  br label %774

774:                                              ; preds = %773, %772
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  %775 = load i32, ptr %14, align 4
  ret i32 %775
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZplRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN9b3Vector3mLERKf(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZngRK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(16)) #2

declare noundef float @_ZN17b3TypedConstraint14getMotorFactorEfffff(ptr noundef nonnull align 16 dereferenceable(64), float noundef, float noundef, float noundef, float noundef, float noundef) #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #6

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 40}
!12 = !{!"_ZTSN17b3TypedConstraint17b3ConstraintInfo2E", !13, i64 0, !13, i64 4, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !13, i64 92}
!13 = !{!"float", !7, i64 0}
!14 = !{!15, !16, i64 44}
!15 = !{!"_ZTS22b3RotationalLimitMotor", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !16, i64 44, !13, i64 48, !13, i64 52, !10, i64 56, !13, i64 60}
!16 = !{!"bool", !7, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!16, !16, i64 0}
!20 = !{!15, !10, i64 56}
!21 = !{!12, !6, i64 16}
!22 = !{!12, !6, i64 8}
!23 = !{!12, !6, i64 32}
!24 = !{!12, !6, i64 24}
!25 = !{!13, !13, i64 0}
!26 = !{!27, !16, i64 817}
!27 = !{!"_ZTS23b3Generic6DofConstraint", !28, i64 0, !30, i64 64, !30, i64 128, !33, i64 192, !7, i64 384, !30, i64 576, !30, i64 640, !32, i64 704, !7, i64 720, !32, i64 768, !13, i64 784, !13, i64 788, !13, i64 792, !16, i64 796, !32, i64 800, !16, i64 816, !16, i64 817, !10, i64 820}
!28 = !{!"_ZTS17b3TypedConstraint", !29, i64 8, !10, i64 12, !7, i64 16, !13, i64 24, !16, i64 28, !16, i64 29, !10, i64 32, !10, i64 36, !10, i64 40, !13, i64 44, !13, i64 48, !6, i64 56}
!29 = !{!"_ZTS13b3TypedObject", !10, i64 0}
!30 = !{!"_ZTS11b3Transform", !31, i64 0, !32, i64 48}
!31 = !{!"_ZTS11b3Matrix3x3", !7, i64 0}
!32 = !{!"_ZTS9b3Vector3", !7, i64 0}
!33 = !{!"_ZTS25b3TranslationalLimitMotor", !32, i64 0, !32, i64 16, !32, i64 32, !32, i64 48, !32, i64 64, !32, i64 80, !32, i64 96, !32, i64 112, !32, i64 128, !32, i64 144, !13, i64 160, !13, i64 164, !13, i64 168, !7, i64 172, !7, i64 176}
!34 = !{i64 0, i64 16, !35}
!35 = !{!7, !7, i64 0}
!36 = !{!15, !13, i64 52}
!37 = !{!15, !13, i64 48}
!38 = !{!27, !16, i64 796}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}
!41 = distinct !{!41, !40}
!42 = !{!15, !13, i64 0}
!43 = !{!15, !13, i64 4}
!44 = !{!12, !6, i64 48}
!45 = !{!15, !13, i64 28}
!46 = !{!12, !6, i64 56}
!47 = !{!15, !13, i64 8}
!48 = !{!12, !13, i64 0}
!49 = !{!15, !13, i64 32}
!50 = !{!15, !13, i64 12}
!51 = !{!12, !6, i64 64}
!52 = !{!12, !6, i64 72}
!53 = !{!15, !13, i64 36}
!54 = !{!15, !13, i64 40}


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

%class.b3Vector3 = type { %union.anon.0 }
%union.anon.0 = type { [4 x float] }

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 2) i32 @_ZN23b3Generic6DofConstraint21get_limit_motor_info2EP22b3RotationalLimitMotorRK11b3TransformS4_RK9b3Vector3S7_S7_S7_PN17b3TypedConstraint17b3ConstraintInfo2EiRS5_ii(ptr noundef nonnull align 16 dereferenceable(824) %0, ptr nocapture noundef readonly %1, ptr noundef nonnull align 16 dereferenceable(64) %2, ptr noundef nonnull align 16 dereferenceable(64) %3, ptr noundef nonnull align 16 dereferenceable(16) %4, ptr noundef nonnull align 16 dereferenceable(16) %5, ptr noundef nonnull align 16 dereferenceable(16) %6, ptr noundef nonnull align 16 dereferenceable(16) %7, ptr nocapture noundef readonly %8, i32 noundef %9, ptr noundef nonnull align 16 dereferenceable(16) %10, i32 noundef %11, i32 noundef %12) local_unnamed_addr #3 align 2 {
  %14 = alloca %class.b3Vector3, align 16
  %15 = alloca %class.b3Vector3, align 16
  %16 = alloca %class.b3Vector3, align 16
  %17 = alloca %class.b3Vector3, align 16
  %18 = alloca %class.b3Vector3, align 16
  %19 = alloca float, align 4
  %20 = alloca %class.b3Vector3, align 16
  %21 = alloca %class.b3Vector3, align 16
  %22 = alloca float, align 4
  %23 = alloca %class.b3Vector3, align 16
  %24 = alloca float, align 4
  %25 = alloca %class.b3Vector3, align 16
  %26 = alloca %class.b3Vector3, align 16
  %27 = alloca %class.b3Vector3, align 16
  %28 = alloca %class.b3Vector3, align 16
  %29 = alloca %class.b3Vector3, align 16
  %30 = alloca %class.b3Vector3, align 16
  %31 = alloca %class.b3Vector3, align 16
  %32 = alloca %class.b3Vector3, align 16
  %33 = getelementptr inbounds i8, ptr %8, i64 40
  %34 = load i32, ptr %33, align 8, !tbaa !5
  %35 = mul nsw i32 %34, %9
  %36 = getelementptr inbounds i8, ptr %1, i64 44
  %37 = load i8, ptr %36, align 4, !tbaa !12, !range !15, !noundef !16
  %38 = trunc nuw i8 %37 to i1
  %39 = getelementptr inbounds i8, ptr %1, i64 56
  %40 = load i32, ptr %39, align 4, !tbaa !17
  %41 = icmp ne i32 %40, 0
  %or.cond = select i1 %38, i1 true, i1 %41
  br i1 %or.cond, label %42, label %.thread202

42:                                               ; preds = %13
  %.not193 = icmp eq i32 %11, 0
  %43 = getelementptr inbounds i8, ptr %8, i64 16
  %44 = getelementptr inbounds i8, ptr %8, i64 8
  %.in = select i1 %.not193, ptr %44, ptr %43
  %45 = load ptr, ptr %.in, align 8, !tbaa !18
  %46 = getelementptr inbounds i8, ptr %8, i64 32
  %47 = getelementptr inbounds i8, ptr %8, i64 24
  %.in194 = select i1 %.not193, ptr %47, ptr %46
  %48 = load ptr, ptr %.in194, align 8, !tbaa !18
  %.not195 = icmp eq ptr %45, null
  br i1 %.not195, label %62, label %49

49:                                               ; preds = %42
  %50 = tail call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  %51 = load float, ptr %50, align 4, !tbaa !19
  %52 = sext i32 %35 to i64
  %53 = getelementptr inbounds float, ptr %45, i64 %52
  store float %51, ptr %53, align 4, !tbaa !19
  %54 = tail call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  %55 = getelementptr inbounds i8, ptr %54, i64 4
  %56 = load float, ptr %55, align 4, !tbaa !19
  %57 = getelementptr i8, ptr %53, i64 4
  store float %56, ptr %57, align 4, !tbaa !19
  %58 = tail call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  %59 = getelementptr inbounds i8, ptr %58, i64 8
  %60 = load float, ptr %59, align 4, !tbaa !19
  %61 = getelementptr i8, ptr %53, i64 8
  store float %60, ptr %61, align 4, !tbaa !19
  br label %62

62:                                               ; preds = %49, %42
  %.not196 = icmp eq ptr %48, null
  br i1 %.not196, label %79, label %63

63:                                               ; preds = %62
  %64 = tail call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  %65 = load float, ptr %64, align 4, !tbaa !19
  %66 = fneg float %65
  %67 = sext i32 %35 to i64
  %68 = getelementptr inbounds float, ptr %48, i64 %67
  store float %66, ptr %68, align 4, !tbaa !19
  %69 = tail call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  %70 = getelementptr inbounds i8, ptr %69, i64 4
  %71 = load float, ptr %70, align 4, !tbaa !19
  %72 = fneg float %71
  %73 = getelementptr i8, ptr %68, i64 4
  store float %72, ptr %73, align 4, !tbaa !19
  %74 = tail call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  %75 = getelementptr inbounds i8, ptr %74, i64 8
  %76 = load float, ptr %75, align 4, !tbaa !19
  %77 = fneg float %76
  %78 = getelementptr i8, ptr %68, i64 8
  store float %77, ptr %78, align 4, !tbaa !19
  br label %79

79:                                               ; preds = %63, %62
  br i1 %.not193, label %80, label %251

80:                                               ; preds = %79
  %81 = getelementptr inbounds i8, ptr %0, i64 817
  %82 = load i8, ptr %81, align 1, !tbaa !20, !range !15, !noundef !16
  %83 = trunc nuw i8 %82 to i1
  br i1 %83, label %84, label %195

84:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #6
  %85 = getelementptr inbounds i8, ptr %0, i64 640
  %86 = tail call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %85)
  %87 = tail call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %3)
  %88 = tail call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %86, ptr noundef nonnull align 16 dereferenceable(16) %87)
  %89 = extractvalue { <2 x float>, <2 x float> } %88, 0
  %90 = extractvalue { <2 x float>, <2 x float> } %88, 1
  store <2 x float> %89, ptr %17, align 16
  %.sroa.439.0..sroa_idx = getelementptr inbounds i8, ptr %17, i64 8
  store <2 x float> %90, ptr %.sroa.439.0..sroa_idx, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #6
  %91 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %17, ptr noundef nonnull align 16 dereferenceable(16) %10)
  store float %91, ptr %19, align 4, !tbaa !19
  %92 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %10, ptr noundef nonnull align 4 dereferenceable(4) %19)
  %93 = extractvalue { <2 x float>, <2 x float> } %92, 0
  store <2 x float> %93, ptr %18, align 16
  %94 = getelementptr inbounds i8, ptr %18, i64 8
  %95 = extractvalue { <2 x float>, <2 x float> } %92, 1
  store <2 x float> %95, ptr %94, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #6
  %96 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %17, ptr noundef nonnull align 16 dereferenceable(16) %18)
  %97 = extractvalue { <2 x float>, <2 x float> } %96, 0
  store <2 x float> %97, ptr %20, align 16
  %98 = getelementptr inbounds i8, ptr %20, i64 8
  %99 = extractvalue { <2 x float>, <2 x float> } %96, 1
  store <2 x float> %99, ptr %98, align 8
  %100 = getelementptr inbounds i8, ptr %0, i64 576
  %101 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %100)
  %102 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %2)
  %103 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %101, ptr noundef nonnull align 16 dereferenceable(16) %102)
  %104 = extractvalue { <2 x float>, <2 x float> } %103, 0
  %105 = extractvalue { <2 x float>, <2 x float> } %103, 1
  store <2 x float> %104, ptr %16, align 16
  %.sroa.437.0..sroa_idx = getelementptr inbounds i8, ptr %16, i64 8
  store <2 x float> %105, ptr %.sroa.437.0..sroa_idx, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #6
  %106 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %16, ptr noundef nonnull align 16 dereferenceable(16) %10)
  store float %106, ptr %22, align 4, !tbaa !19
  %107 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %10, ptr noundef nonnull align 4 dereferenceable(4) %22)
  %108 = extractvalue { <2 x float>, <2 x float> } %107, 0
  store <2 x float> %108, ptr %21, align 16
  %109 = getelementptr inbounds i8, ptr %21, i64 8
  %110 = extractvalue { <2 x float>, <2 x float> } %107, 1
  store <2 x float> %110, ptr %109, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #6
  %111 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %16, ptr noundef nonnull align 16 dereferenceable(16) %21)
  %112 = extractvalue { <2 x float>, <2 x float> } %111, 0
  store <2 x float> %112, ptr %23, align 16
  %113 = getelementptr inbounds i8, ptr %23, i64 8
  %114 = extractvalue { <2 x float>, <2 x float> } %111, 1
  store <2 x float> %114, ptr %113, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #6
  %115 = getelementptr inbounds i8, ptr %1, i64 52
  %116 = load float, ptr %115, align 4, !tbaa !29
  %117 = getelementptr inbounds i8, ptr %1, i64 48
  %118 = load float, ptr %117, align 4, !tbaa !30
  %119 = fsub float %116, %118
  store float %119, ptr %24, align 4, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #6
  %120 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %10, ptr noundef nonnull align 4 dereferenceable(4) %24)
  %121 = extractvalue { <2 x float>, <2 x float> } %120, 0
  store <2 x float> %121, ptr %27, align 16
  %122 = getelementptr inbounds i8, ptr %27, i64 8
  %123 = extractvalue { <2 x float>, <2 x float> } %120, 1
  store <2 x float> %123, ptr %122, align 8
  %124 = call { <2 x float>, <2 x float> } @_ZplRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %21, ptr noundef nonnull align 16 dereferenceable(16) %27)
  %125 = extractvalue { <2 x float>, <2 x float> } %124, 0
  store <2 x float> %125, ptr %26, align 16
  %126 = getelementptr inbounds i8, ptr %26, i64 8
  %127 = extractvalue { <2 x float>, <2 x float> } %124, 1
  store <2 x float> %127, ptr %126, align 8
  %128 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %26, ptr noundef nonnull align 16 dereferenceable(16) %18)
  %129 = extractvalue { <2 x float>, <2 x float> } %128, 0
  store <2 x float> %129, ptr %25, align 16
  %130 = getelementptr inbounds i8, ptr %25, i64 8
  %131 = extractvalue { <2 x float>, <2 x float> } %128, 1
  store <2 x float> %131, ptr %130, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #6
  %132 = getelementptr inbounds i8, ptr %0, i64 788
  %133 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(4) %132)
  %134 = extractvalue { <2 x float>, <2 x float> } %133, 0
  store <2 x float> %134, ptr %28, align 16
  %135 = getelementptr inbounds i8, ptr %28, i64 8
  %136 = extractvalue { <2 x float>, <2 x float> } %133, 1
  store <2 x float> %136, ptr %135, align 8
  %137 = call { <2 x float>, <2 x float> } @_ZplRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %23, ptr noundef nonnull align 16 dereferenceable(16) %28)
  %138 = extractvalue { <2 x float>, <2 x float> } %137, 0
  %139 = extractvalue { <2 x float>, <2 x float> } %137, 1
  store <2 x float> %138, ptr %16, align 16
  store <2 x float> %139, ptr %.sroa.437.0..sroa_idx, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #6
  %140 = getelementptr inbounds i8, ptr %0, i64 792
  %141 = call { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16) %25, ptr noundef nonnull align 4 dereferenceable(4) %140)
  %142 = extractvalue { <2 x float>, <2 x float> } %141, 0
  store <2 x float> %142, ptr %29, align 16
  %143 = getelementptr inbounds i8, ptr %29, i64 8
  %144 = extractvalue { <2 x float>, <2 x float> } %141, 1
  store <2 x float> %144, ptr %143, align 8
  %145 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %20, ptr noundef nonnull align 16 dereferenceable(16) %29)
  %146 = extractvalue { <2 x float>, <2 x float> } %145, 0
  %147 = extractvalue { <2 x float>, <2 x float> } %145, 1
  store <2 x float> %146, ptr %17, align 16
  store <2 x float> %147, ptr %.sroa.439.0..sroa_idx, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #6
  %148 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %16, ptr noundef nonnull align 16 dereferenceable(16) %10)
  %149 = extractvalue { <2 x float>, <2 x float> } %148, 0
  %150 = extractvalue { <2 x float>, <2 x float> } %148, 1
  store <2 x float> %149, ptr %14, align 16
  %.sroa.431.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 8
  store <2 x float> %150, ptr %.sroa.431.0..sroa_idx, align 8, !tbaa !28
  %151 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %17, ptr noundef nonnull align 16 dereferenceable(16) %10)
  %152 = extractvalue { <2 x float>, <2 x float> } %151, 0
  %153 = extractvalue { <2 x float>, <2 x float> } %151, 1
  store <2 x float> %152, ptr %15, align 16
  %.sroa.429.0..sroa_idx = getelementptr inbounds i8, ptr %15, i64 8
  store <2 x float> %153, ptr %.sroa.429.0..sroa_idx, align 8, !tbaa !28
  %154 = getelementptr inbounds i8, ptr %0, i64 796
  %155 = load i8, ptr %154, align 4, !tbaa !31, !range !15, !noundef !16
  %156 = trunc nuw i8 %155 to i1
  %157 = icmp eq i32 %12, 0
  %or.cond3.not = and i1 %157, %156
  br i1 %or.cond3.not, label %158, label %.preheader.preheader

158:                                              ; preds = %84
  %159 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN9b3Vector3mLERKf(ptr noundef nonnull align 16 dereferenceable(16) %14, ptr noundef nonnull align 4 dereferenceable(4) %132)
  %160 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN9b3Vector3mLERKf(ptr noundef nonnull align 16 dereferenceable(16) %15, ptr noundef nonnull align 4 dereferenceable(4) %140)
  br label %.preheader.preheader

.preheader.preheader:                             ; preds = %158, %84
  %161 = sext i32 %35 to i64
  %162 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %14)
  %163 = load float, ptr %162, align 4, !tbaa !19
  %164 = load ptr, ptr %43, align 8, !tbaa !32
  %165 = getelementptr inbounds float, ptr %164, i64 %161
  store float %163, ptr %165, align 4, !tbaa !19
  %166 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %14)
  %167 = getelementptr inbounds i8, ptr %166, i64 4
  %168 = load float, ptr %167, align 4, !tbaa !19
  %169 = load ptr, ptr %43, align 8, !tbaa !32
  %170 = add nsw i64 %161, 1
  %171 = getelementptr inbounds float, ptr %169, i64 %170
  store float %168, ptr %171, align 4, !tbaa !19
  %172 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %14)
  %173 = getelementptr inbounds i8, ptr %172, i64 8
  %174 = load float, ptr %173, align 4, !tbaa !19
  %175 = load ptr, ptr %43, align 8, !tbaa !32
  %176 = add nsw i64 %161, 2
  %177 = getelementptr inbounds float, ptr %175, i64 %176
  store float %174, ptr %177, align 4, !tbaa !19
  %178 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
  %179 = load float, ptr %178, align 4, !tbaa !19
  %180 = fneg float %179
  %181 = load ptr, ptr %46, align 8, !tbaa !33
  %182 = getelementptr inbounds float, ptr %181, i64 %161
  store float %180, ptr %182, align 4, !tbaa !19
  %183 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
  %184 = getelementptr inbounds i8, ptr %183, i64 4
  %185 = load float, ptr %184, align 4, !tbaa !19
  %186 = fneg float %185
  %187 = load ptr, ptr %46, align 8, !tbaa !33
  %188 = getelementptr inbounds float, ptr %187, i64 %170
  store float %186, ptr %188, align 4, !tbaa !19
  %189 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %15)
  %190 = getelementptr inbounds i8, ptr %189, i64 8
  %191 = load float, ptr %190, align 4, !tbaa !19
  %192 = fneg float %191
  %193 = load ptr, ptr %46, align 8, !tbaa !33
  %194 = getelementptr inbounds float, ptr %193, i64 %176
  store float %192, ptr %194, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #6
  br label %251

195:                                              ; preds = %80
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #6
  %196 = getelementptr inbounds i8, ptr %0, i64 640
  %197 = tail call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %196)
  %198 = tail call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %2)
  %199 = tail call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %197, ptr noundef nonnull align 16 dereferenceable(16) %198)
  %200 = extractvalue { <2 x float>, <2 x float> } %199, 0
  store <2 x float> %200, ptr %31, align 16
  %201 = getelementptr inbounds i8, ptr %31, i64 8
  %202 = extractvalue { <2 x float>, <2 x float> } %199, 1
  store <2 x float> %202, ptr %201, align 8
  %203 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %31, ptr noundef nonnull align 16 dereferenceable(16) %10)
  %204 = extractvalue { <2 x float>, <2 x float> } %203, 0
  %205 = extractvalue { <2 x float>, <2 x float> } %203, 1
  store <2 x float> %204, ptr %30, align 16
  %.sroa.420.0..sroa_idx = getelementptr inbounds i8, ptr %30, i64 8
  store <2 x float> %205, ptr %.sroa.420.0..sroa_idx, align 8, !tbaa !28
  %206 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %30)
  %207 = load float, ptr %206, align 4, !tbaa !19
  %208 = load ptr, ptr %43, align 8, !tbaa !32
  %209 = sext i32 %35 to i64
  %210 = getelementptr inbounds float, ptr %208, i64 %209
  store float %207, ptr %210, align 4, !tbaa !19
  %211 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %30)
  %212 = getelementptr inbounds i8, ptr %211, i64 4
  %213 = load float, ptr %212, align 4, !tbaa !19
  %214 = load ptr, ptr %43, align 8, !tbaa !32
  %215 = add nsw i32 %35, 1
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds float, ptr %214, i64 %216
  store float %213, ptr %217, align 4, !tbaa !19
  %218 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %30)
  %219 = getelementptr inbounds i8, ptr %218, i64 8
  %220 = load float, ptr %219, align 4, !tbaa !19
  %221 = load ptr, ptr %43, align 8, !tbaa !32
  %222 = add nsw i32 %35, 2
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds float, ptr %221, i64 %223
  store float %220, ptr %224, align 4, !tbaa !19
  %225 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %196)
  %226 = call noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64) %3)
  %227 = call { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16) %225, ptr noundef nonnull align 16 dereferenceable(16) %226)
  %228 = extractvalue { <2 x float>, <2 x float> } %227, 0
  %229 = extractvalue { <2 x float>, <2 x float> } %227, 1
  store <2 x float> %228, ptr %31, align 16
  store <2 x float> %229, ptr %201, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #6
  %230 = call { <2 x float>, <2 x float> } @_ZNK9b3Vector35crossERKS_(ptr noundef nonnull align 16 dereferenceable(16) %31, ptr noundef nonnull align 16 dereferenceable(16) %10)
  %231 = extractvalue { <2 x float>, <2 x float> } %230, 0
  store <2 x float> %231, ptr %32, align 16
  %232 = getelementptr inbounds i8, ptr %32, i64 8
  %233 = extractvalue { <2 x float>, <2 x float> } %230, 1
  store <2 x float> %233, ptr %232, align 8
  %234 = call { <2 x float>, <2 x float> } @_ZngRK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(16) %32)
  %235 = extractvalue { <2 x float>, <2 x float> } %234, 0
  %236 = extractvalue { <2 x float>, <2 x float> } %234, 1
  store <2 x float> %235, ptr %30, align 16
  store <2 x float> %236, ptr %.sroa.420.0..sroa_idx, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #6
  %237 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %30)
  %238 = load float, ptr %237, align 4, !tbaa !19
  %239 = load ptr, ptr %46, align 8, !tbaa !33
  %240 = getelementptr inbounds float, ptr %239, i64 %209
  store float %238, ptr %240, align 4, !tbaa !19
  %241 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %30)
  %242 = getelementptr inbounds i8, ptr %241, i64 4
  %243 = load float, ptr %242, align 4, !tbaa !19
  %244 = load ptr, ptr %46, align 8, !tbaa !33
  %245 = getelementptr inbounds float, ptr %244, i64 %216
  store float %243, ptr %245, align 4, !tbaa !19
  %246 = call noundef ptr @_ZN9b3Vector3cvPfEv(ptr noundef nonnull align 16 dereferenceable(16) %30)
  %247 = getelementptr inbounds i8, ptr %246, i64 8
  %248 = load float, ptr %247, align 4, !tbaa !19
  %249 = load ptr, ptr %46, align 8, !tbaa !33
  %250 = getelementptr inbounds float, ptr %249, i64 %223
  store float %248, ptr %250, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #6
  br label %251

251:                                              ; preds = %.preheader.preheader, %195, %79
  br i1 %41, label %252, label %.thread199

252:                                              ; preds = %251
  %253 = load float, ptr %1, align 4, !tbaa !34
  %254 = getelementptr inbounds i8, ptr %1, i64 4
  %255 = load float, ptr %254, align 4, !tbaa !35
  %256 = fcmp une float %253, %255
  %257 = getelementptr inbounds i8, ptr %8, i64 48
  %258 = load ptr, ptr %257, align 8, !tbaa !36
  %259 = sext i32 %35 to i64
  %260 = getelementptr inbounds float, ptr %258, i64 %259
  store float 0.000000e+00, ptr %260, align 4, !tbaa !19
  %brmerge.not = and i1 %256, %38
  br i1 %brmerge.not, label %265, label %.critedge

.thread199:                                       ; preds = %251
  %261 = getelementptr inbounds i8, ptr %8, i64 48
  %262 = load ptr, ptr %261, align 8, !tbaa !36
  %263 = sext i32 %35 to i64
  %264 = getelementptr inbounds float, ptr %262, i64 %263
  store float 0.000000e+00, ptr %264, align 4, !tbaa !19
  br i1 %38, label %271, label %.thread202

265:                                              ; preds = %252
  %266 = getelementptr inbounds i8, ptr %1, i64 28
  %267 = load float, ptr %266, align 4, !tbaa !37
  %268 = getelementptr inbounds i8, ptr %8, i64 56
  %269 = load ptr, ptr %268, align 8, !tbaa !38
  %270 = getelementptr inbounds float, ptr %269, i64 %259
  store float %267, ptr %270, align 4, !tbaa !19
  br label %.critedge

271:                                              ; preds = %.thread199
  %272 = getelementptr inbounds i8, ptr %1, i64 28
  %273 = load float, ptr %272, align 4, !tbaa !37
  %274 = getelementptr inbounds i8, ptr %8, i64 56
  %275 = load ptr, ptr %274, align 8, !tbaa !38
  %276 = getelementptr inbounds float, ptr %275, i64 %263
  store float %273, ptr %276, align 4, !tbaa !19
  %277 = getelementptr inbounds i8, ptr %1, i64 8
  %278 = load float, ptr %277, align 4, !tbaa !39
  %279 = fneg float %278
  %280 = select i1 %.not193, float %279, float %278
  %281 = getelementptr inbounds i8, ptr %1, i64 52
  %282 = load float, ptr %281, align 4, !tbaa !29
  %283 = load float, ptr %1, align 4, !tbaa !34
  %284 = getelementptr inbounds i8, ptr %1, i64 4
  %285 = load float, ptr %284, align 4, !tbaa !35
  %286 = load float, ptr %8, align 8, !tbaa !40
  %287 = getelementptr inbounds i8, ptr %1, i64 32
  %288 = load float, ptr %287, align 4, !tbaa !41
  %289 = fmul float %286, %288
  %290 = call noundef float @_ZN17b3TypedConstraint14getMotorFactorEfffff(ptr noundef nonnull align 16 dereferenceable(64) %0, float noundef %282, float noundef %283, float noundef %285, float noundef %280, float noundef %289)
  %291 = getelementptr inbounds i8, ptr %1, i64 8
  %292 = load float, ptr %291, align 4, !tbaa !39
  %293 = load ptr, ptr %261, align 8, !tbaa !36
  %294 = getelementptr inbounds float, ptr %293, i64 %263
  %295 = load float, ptr %294, align 4, !tbaa !19
  %296 = call float @llvm.fmuladd.f32(float %290, float %292, float %295)
  store float %296, ptr %294, align 4, !tbaa !19
  %297 = getelementptr inbounds i8, ptr %1, i64 12
  %298 = load float, ptr %297, align 4, !tbaa !42
  %299 = fneg float %298
  %300 = load float, ptr %8, align 8, !tbaa !40
  %301 = fdiv float %299, %300
  %302 = getelementptr inbounds i8, ptr %8, i64 64
  %303 = load ptr, ptr %302, align 8, !tbaa !43
  %304 = getelementptr inbounds float, ptr %303, i64 %263
  store float %301, ptr %304, align 4, !tbaa !19
  %305 = load float, ptr %297, align 4, !tbaa !42
  %306 = load float, ptr %8, align 8, !tbaa !40
  %307 = fdiv float %305, %306
  %308 = getelementptr inbounds i8, ptr %8, i64 72
  %309 = load ptr, ptr %308, align 8, !tbaa !44
  %310 = getelementptr inbounds float, ptr %309, i64 %263
  store float %307, ptr %310, align 4, !tbaa !19
  br label %.thread202

.critedge:                                        ; preds = %252, %265
  %311 = load float, ptr %8, align 8, !tbaa !40
  %312 = getelementptr inbounds i8, ptr %1, i64 32
  %313 = load float, ptr %312, align 4, !tbaa !41
  %314 = fmul float %311, %313
  %315 = fneg float %314
  %.sink209 = select i1 %.not193, float %314, float %315
  %316 = getelementptr inbounds i8, ptr %1, i64 48
  %317 = load float, ptr %316, align 4, !tbaa !30
  %318 = getelementptr inbounds float, ptr %258, i64 %259
  %319 = load float, ptr %318, align 4, !tbaa !19
  %320 = call float @llvm.fmuladd.f32(float %.sink209, float %317, float %319)
  store float %320, ptr %318, align 4, !tbaa !19
  %321 = getelementptr inbounds i8, ptr %1, i64 36
  %322 = load float, ptr %321, align 4, !tbaa !45
  %323 = getelementptr inbounds i8, ptr %8, i64 56
  %324 = load ptr, ptr %323, align 8, !tbaa !38
  %325 = getelementptr inbounds float, ptr %324, i64 %259
  store float %322, ptr %325, align 4, !tbaa !19
  %326 = load float, ptr %1, align 4, !tbaa !34
  %327 = load float, ptr %254, align 4, !tbaa !35
  %328 = fcmp oeq float %326, %327
  %329 = getelementptr inbounds i8, ptr %8, i64 72
  br i1 %328, label %330, label %336

330:                                              ; preds = %.critedge
  %331 = getelementptr inbounds i8, ptr %8, i64 64
  %332 = load ptr, ptr %331, align 8, !tbaa !43
  %333 = getelementptr inbounds float, ptr %332, i64 %259
  store float 0xC7EFFFFFE0000000, ptr %333, align 4, !tbaa !19
  %334 = load ptr, ptr %329, align 8, !tbaa !44
  %335 = getelementptr inbounds float, ptr %334, i64 %259
  store float 0x47EFFFFFE0000000, ptr %335, align 4, !tbaa !19
  br label %.thread202

336:                                              ; preds = %.critedge
  %337 = icmp eq i32 %40, 1
  %338 = getelementptr inbounds i8, ptr %8, i64 64
  %339 = load ptr, ptr %338, align 8, !tbaa !43
  %340 = getelementptr inbounds float, ptr %339, i64 %259
  %. = select i1 %337, float 0.000000e+00, float 0xC7EFFFFFE0000000
  %.219 = select i1 %337, float 0x47EFFFFFE0000000, float 0.000000e+00
  store float %., ptr %340, align 4, !tbaa !19
  %341 = load ptr, ptr %329, align 8, !tbaa !44
  %342 = getelementptr inbounds float, ptr %341, i64 %259
  store float %.219, ptr %342, align 4, !tbaa !19
  %343 = getelementptr inbounds i8, ptr %1, i64 40
  %344 = load float, ptr %343, align 4, !tbaa !46
  %345 = fcmp ogt float %344, 0.000000e+00
  br i1 %345, label %346, label %.thread202

346:                                              ; preds = %336
  %.220 = select i1 %.not193, ptr %4, ptr %6
  %.221 = select i1 %.not193, ptr %5, ptr %7
  %347 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %.220, ptr noundef nonnull align 16 dereferenceable(16) %10)
  %348 = call noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16) %.221, ptr noundef nonnull align 16 dereferenceable(16) %10)
  %349 = fsub float %347, %348
  br i1 %337, label %350, label %361

350:                                              ; preds = %346
  %351 = fcmp olt float %349, 0.000000e+00
  br i1 %351, label %352, label %.thread202

352:                                              ; preds = %350
  %353 = load float, ptr %343, align 4, !tbaa !46
  %354 = fneg float %353
  %355 = fmul float %349, %354
  %356 = load ptr, ptr %257, align 8, !tbaa !36
  %357 = getelementptr inbounds float, ptr %356, i64 %259
  %358 = load float, ptr %357, align 4, !tbaa !19
  %359 = fcmp ogt float %355, %358
  br i1 %359, label %360, label %.thread202

360:                                              ; preds = %352
  store float %355, ptr %357, align 4, !tbaa !19
  br label %.thread202

361:                                              ; preds = %346
  %362 = fcmp ogt float %349, 0.000000e+00
  br i1 %362, label %363, label %.thread202

363:                                              ; preds = %361
  %364 = load float, ptr %343, align 4, !tbaa !46
  %365 = fneg float %364
  %366 = fmul float %349, %365
  %367 = load ptr, ptr %257, align 8, !tbaa !36
  %368 = getelementptr inbounds float, ptr %367, i64 %259
  %369 = load float, ptr %368, align 4, !tbaa !19
  %370 = fcmp olt float %366, %369
  br i1 %370, label %371, label %.thread202

371:                                              ; preds = %363
  store float %366, ptr %368, align 4, !tbaa !19
  br label %.thread202

.thread202:                                       ; preds = %271, %.thread199, %13, %350, %361, %360, %352, %371, %363, %336, %330
  %.0 = phi i32 [ 1, %330 ], [ 1, %336 ], [ 1, %363 ], [ 1, %371 ], [ 1, %352 ], [ 1, %360 ], [ 1, %361 ], [ 1, %350 ], [ 0, %13 ], [ 1, %.thread199 ], [ 1, %271 ]
  ret i32 %.0
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZplRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmlRK9b3Vector3RKf(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZmiRK9b3Vector3S1_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZNK11b3Transform9getOriginEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK9b3Vector33dotERKS_(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(16) ptr @_ZN9b3Vector3mLERKf(ptr noundef nonnull align 16 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local { <2 x float>, <2 x float> } @_ZngRK9b3Vector3(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #2

declare noundef float @_ZN17b3TypedConstraint14getMotorFactorEfffff(ptr noundef nonnull align 16 dereferenceable(64), float noundef, float noundef, float noundef, float noundef, float noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 40}
!6 = !{!"_ZTSN17b3TypedConstraint17b3ConstraintInfo2E", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !11, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !11, i64 88, !7, i64 92}
!7 = !{!"float", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!13, !14, i64 44}
!13 = !{!"_ZTS22b3RotationalLimitMotor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !14, i64 44, !7, i64 48, !7, i64 52, !11, i64 56, !7, i64 60}
!14 = !{!"bool", !8, i64 0}
!15 = !{i8 0, i8 2}
!16 = !{}
!17 = !{!13, !11, i64 56}
!18 = !{!10, !10, i64 0}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !14, i64 817}
!21 = !{!"_ZTS23b3Generic6DofConstraint", !22, i64 0, !24, i64 64, !24, i64 128, !27, i64 192, !8, i64 384, !24, i64 576, !24, i64 640, !26, i64 704, !8, i64 720, !26, i64 768, !7, i64 784, !7, i64 788, !7, i64 792, !14, i64 796, !26, i64 800, !14, i64 816, !14, i64 817, !11, i64 820}
!22 = !{!"_ZTS17b3TypedConstraint", !23, i64 8, !11, i64 12, !8, i64 16, !7, i64 24, !14, i64 28, !14, i64 29, !11, i64 32, !11, i64 36, !11, i64 40, !7, i64 44, !7, i64 48, !10, i64 56}
!23 = !{!"_ZTS13b3TypedObject", !11, i64 0}
!24 = !{!"_ZTS11b3Transform", !25, i64 0, !26, i64 48}
!25 = !{!"_ZTS11b3Matrix3x3", !8, i64 0}
!26 = !{!"_ZTS9b3Vector3", !8, i64 0}
!27 = !{!"_ZTS25b3TranslationalLimitMotor", !26, i64 0, !26, i64 16, !26, i64 32, !26, i64 48, !26, i64 64, !26, i64 80, !26, i64 96, !26, i64 112, !26, i64 128, !26, i64 144, !7, i64 160, !7, i64 164, !7, i64 168, !8, i64 172, !8, i64 176}
!28 = !{!8, !8, i64 0}
!29 = !{!13, !7, i64 52}
!30 = !{!13, !7, i64 48}
!31 = !{!21, !14, i64 796}
!32 = !{!6, !10, i64 16}
!33 = !{!6, !10, i64 32}
!34 = !{!13, !7, i64 0}
!35 = !{!13, !7, i64 4}
!36 = !{!6, !10, i64 48}
!37 = !{!13, !7, i64 28}
!38 = !{!6, !10, i64 56}
!39 = !{!13, !7, i64 8}
!40 = !{!6, !7, i64 0}
!41 = !{!13, !7, i64 32}
!42 = !{!13, !7, i64 12}
!43 = !{!6, !10, i64 64}
!44 = !{!6, !10, i64 72}
!45 = !{!13, !7, i64 36}
!46 = !{!13, !7, i64 40}


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