; LLVM IR from Derek-TH-Wang/quadruped_ctrl :: src/MPC_Ctrl (ConvexMPCLocomotion)

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

%struct.StateEstimate = type { %"class.Eigen::Matrix.3", %"class.Eigen::Matrix", %"class.Eigen::Matrix", [8 x i8], %"class.Eigen::Matrix.3", %"class.Eigen::Matrix", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", [4 x i8] }
%"class.Eigen::Matrix.3" = type { %"class.Eigen::PlainObjectBase.4" }
%"class.Eigen::PlainObjectBase.4" = type { %"class.Eigen::DenseStorage.11" }
%"class.Eigen::DenseStorage.11" = type { %"struct.Eigen::internal::plain_array.12" }
%"struct.Eigen::internal::plain_array.12" = type { [4 x float] }
%"class.Eigen::Matrix.29" = type { %"class.Eigen::PlainObjectBase.30" }
%"class.Eigen::PlainObjectBase.30" = type { %"class.Eigen::DenseStorage.37" }
%"class.Eigen::DenseStorage.37" = type { %"struct.Eigen::internal::plain_array.38" }
%"struct.Eigen::internal::plain_array.38" = type { [9 x float] }
%"class.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [3 x float] }
%"class.Eigen::Product.269" = type { %"class.Eigen::Transpose.276", ptr }
%"class.Eigen::Transpose.276" = type { ptr }
%class.Timer = type { %struct.timespec }
%struct.timespec = type { i64, i64 }
%class.ConvexMPCLocomotion = type { i8, %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", [4 x %"class.Eigen::Matrix"], [4 x %"class.Eigen::Matrix"], [4 x %"class.Eigen::Matrix"], [4 x %"class.Eigen::Matrix"], %"class.Eigen::Matrix.3", float, float, float, float, float, float, float, float, float, float, i32, i32, i32, float, float, i32, [4 x %"class.Eigen::Matrix"], %"class.Eigen::Matrix.3", [4 x %class.FootSwingTrajectory], %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %class.OffsetDurationGait, %"class.Eigen::Matrix.29", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix.29", i8, [4 x i8], [4 x float], [6 x float], i32, i32, %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", float, [4 x %"class.Eigen::Matrix"], [12 x i8], %struct.CMPC_Result, [720 x float], float, %struct.CMPC_Jump, %"class.std::vector", %class.SparseCMPC }
%class.FootSwingTrajectory = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", float }
%class.OffsetDurationGait = type <{ %class.Gait, ptr, %"class.Eigen::Array", %"class.Eigen::Array", %"class.Eigen::Array.21", %"class.Eigen::Array.21", i32, i32, float, [4 x i8] }>
%class.Gait = type { ptr, %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.Eigen::Array" = type { %"class.Eigen::PlainObjectBase.13" }
%"class.Eigen::PlainObjectBase.13" = type { %"class.Eigen::DenseStorage.19" }
%"class.Eigen::DenseStorage.19" = type { %"struct.Eigen::internal::plain_array.20" }
%"struct.Eigen::internal::plain_array.20" = type { [4 x i32] }
%"class.Eigen::Array.21" = type { %"class.Eigen::PlainObjectBase.22" }
%"class.Eigen::PlainObjectBase.22" = type { %"class.Eigen::DenseStorage.11" }
%struct.CMPC_Result = type { [4 x %struct.LegControllerCommand], %"class.Eigen::Matrix.3" }
%struct.LegControllerCommand = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix.29" }
%struct.CMPC_Jump = type { i8, i8, i8, i32, i32, i32 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, 12, 1>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 1>>>::_Vector_impl" }
%"struct.std::_Vector_base<Eigen::Matrix<double, 12, 1>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 1>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, 12, 1>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 1>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Eigen::Matrix<double, 12, 1>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 1>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.SparseCMPC = type <{ %"class.Eigen::Matrix.42", [8 x i8], %"class.Eigen::Matrix.52", double, double, double, double, %"class.Eigen::Matrix.62", %"class.Eigen::Matrix.62", %"class.Eigen::Matrix.62", %"class.Eigen::Matrix.62", %"class.Eigen::Matrix.72", %"class.Eigen::Matrix.52", %"class.Eigen::Matrix.52", %"class.Eigen::Matrix.52", %"class.std::vector.82", %"class.std::vector", %"class.std::vector.87", %"class.std::vector.92", %"class.std::vector.98", %"class.std::vector.103", %"class.std::vector.109", %"class.std::vector.109", %"class.std::vector.114", %"class.std::vector.114", %"class.std::vector.87", %"class.std::vector.87", %"class.std::vector.87", %"class.Eigen::Matrix.119", i32, i32, i32, [12 x i8] }>
%"class.Eigen::Matrix.42" = type { %"class.Eigen::PlainObjectBase.43" }
%"class.Eigen::PlainObjectBase.43" = type { %"class.Eigen::DenseStorage.50" }
%"class.Eigen::DenseStorage.50" = type { %"struct.Eigen::internal::plain_array.51" }
%"struct.Eigen::internal::plain_array.51" = type { [9 x double] }
%"class.Eigen::Matrix.62" = type { %"class.Eigen::PlainObjectBase.63" }
%"class.Eigen::PlainObjectBase.63" = type { %"class.Eigen::DenseStorage.70" }
%"class.Eigen::DenseStorage.70" = type { %"struct.Eigen::internal::plain_array.71" }
%"struct.Eigen::internal::plain_array.71" = type { [3 x double] }
%"class.Eigen::Matrix.72" = type { %"class.Eigen::PlainObjectBase.73" }
%"class.Eigen::PlainObjectBase.73" = type { %"class.Eigen::DenseStorage.80" }
%"class.Eigen::DenseStorage.80" = type { %"struct.Eigen::internal::plain_array.81" }
%"struct.Eigen::internal::plain_array.81" = type { [4 x double] }
%"class.Eigen::Matrix.52" = type { %"class.Eigen::PlainObjectBase.53" }
%"class.Eigen::PlainObjectBase.53" = type { %"class.Eigen::DenseStorage.60" }
%"class.Eigen::DenseStorage.60" = type { %"struct.Eigen::internal::plain_array.61" }
%"struct.Eigen::internal::plain_array.61" = type { [12 x double] }
%"class.std::vector.82" = type { %"struct.std::_Vector_base.83" }
%"struct.std::_Vector_base.83" = type { %"struct.std::_Vector_base<ContactState, std::allocator<ContactState>>::_Vector_impl" }
%"struct.std::_Vector_base<ContactState, std::allocator<ContactState>>::_Vector_impl" = type { %"struct.std::_Vector_base<ContactState, std::allocator<ContactState>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ContactState, std::allocator<ContactState>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.92" = type { %"struct.std::_Vector_base.93" }
%"struct.std::_Vector_base.93" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, 12, 12>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 12>>>::_Vector_impl" }
%"struct.std::_Vector_base<Eigen::Matrix<double, 12, 12>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 12>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, 12, 12>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 12>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Eigen::Matrix<double, 12, 12>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 12>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.98" = type { %"struct.std::_Vector_base.99" }
%"struct.std::_Vector_base.99" = type { %"struct.std::_Vector_base<BblockID, std::allocator<BblockID>>::_Vector_impl" }
%"struct.std::_Vector_base<BblockID, std::allocator<BblockID>>::_Vector_impl" = type { %"struct.std::_Vector_base<BblockID, std::allocator<BblockID>>::_Vector_impl_data" }
%"struct.std::_Vector_base<BblockID, std::allocator<BblockID>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.103" = type { %"struct.std::_Vector_base.104" }
%"struct.std::_Vector_base.104" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, 12, 3>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 3>>>::_Vector_impl" }
%"struct.std::_Vector_base<Eigen::Matrix<double, 12, 3>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 3>>>::_Vector_impl" = type { %"struct.std::_Vector_base<Eigen::Matrix<double, 12, 3>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 3>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Eigen::Matrix<double, 12, 3>, Eigen::aligned_allocator<Eigen::Matrix<double, 12, 3>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.109" = type { %"struct.std::_Vector_base.110" }
%"struct.std::_Vector_base.110" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.114" = type { %"struct.std::_Vector_base.115" }
%"struct.std::_Vector_base.115" = type { %"struct.std::_Vector_base<SparseTriple<double>, std::allocator<SparseTriple<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<SparseTriple<double>, std::allocator<SparseTriple<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<SparseTriple<double>, std::allocator<SparseTriple<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SparseTriple<double>, std::allocator<SparseTriple<double>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.87" = type { %"struct.std::_Vector_base.88" }
%"struct.std::_Vector_base.88" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.Eigen::Matrix.119" = type { %"class.Eigen::PlainObjectBase.120" }
%"class.Eigen::PlainObjectBase.120" = type { %"class.Eigen::DenseStorage.127" }
%"class.Eigen::DenseStorage.127" = type { ptr, i64 }

; 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 uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(172) ptr @_ZN23StateEstimatorContainerIfE9getResultEv(ptr noundef nonnull align 16 dereferenceable(96)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN19ConvexMPCLocomotion17updateMPCIfNeededEPiR23StateEstimatorContainerIfEb(ptr noundef nonnull align 16 dereferenceable(7184) %0, ptr noundef %1, ptr noundef nonnull align 16 dereferenceable(96) %2, i1 noundef zeroext %3) #4 align 2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca %struct.StateEstimate, align 16
  %10 = alloca ptr, align 8
  %11 = alloca %"class.Eigen::Matrix", align 4
  %12 = alloca float, align 4
  %13 = alloca %"class.Eigen::Matrix", align 4
  %14 = alloca %"class.Eigen::Product.269", align 8
  %15 = alloca %"class.Eigen::Transpose.276", align 8
  %16 = alloca [12 x float], align 16
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca [12 x float], align 16
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca %class.Timer, align 8
  %27 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  %28 = zext i1 %3 to i8
  store i8 %28, ptr %8, align 1, !tbaa !9
  %29 = load ptr, ptr %5, align 8
  %30 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 26
  %31 = load i32, ptr %30, align 4, !tbaa !11
  %32 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 21
  %33 = load i32, ptr %32, align 8, !tbaa !93
  %34 = srem i32 %31, %33
  %35 = icmp eq i32 %34, 0
  br i1 %35, label %36, label %323

36:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 176, ptr %9) #5
  %37 = load ptr, ptr %7, align 8, !tbaa !5
  %38 = call noundef nonnull align 16 dereferenceable(172) ptr @_ZN23StateEstimatorContainerIfE9getResultEv(ptr noundef nonnull align 16 dereferenceable(96) %37)
  call void @_ZN13StateEstimateIfEC2ERKS0_(ptr noundef nonnull align 16 dereferenceable(172) %9, ptr noundef nonnull align 16 dereferenceable(172) %38)
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %39 = getelementptr inbounds %struct.StateEstimate, ptr %9, i32 0, i32 1
  %40 = call noundef ptr @_ZN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE4dataEv(ptr noundef nonnull align 4 dereferenceable(12) %39)
  store ptr %40, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 12, ptr %11) #5
  %41 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 16
  %42 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 17
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store float 0.000000e+00, ptr %12, align 4, !tbaa !94
  call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12) %11, ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 4 dereferenceable(4) %12)
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 12, ptr %13) #5
  %43 = load i8, ptr %8, align 1, !tbaa !9, !range !95, !noundef !96
  %44 = trunc i8 %43 to i1
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  br i1 %44, label %45, label %46

45:                                               ; preds = %36
  call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %13, ptr noundef nonnull align 4 dereferenceable(12) %11)
  br label %55

46:                                               ; preds = %36
  %47 = getelementptr inbounds %struct.StateEstimate, ptr %9, i32 0, i32 6
  %48 = call ptr @_ZN5Eigen9DenseBaseINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEE9transposeEv(ptr noundef nonnull align 1 dereferenceable(1) %47)
  %49 = getelementptr inbounds %"class.Eigen::Transpose.276", ptr %15, i32 0, i32 0
  store ptr %48, ptr %49, align 8
  %50 = call { ptr, ptr } @_ZNK5Eigen10MatrixBaseINS_9TransposeINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEEEEmlINS2_IfLi3ELi1ELi0ELi3ELi1EEEEEKNS_7ProductIS4_T_Li0EEERKNS0_IS9_EE(ptr noundef nonnull align 1 dereferenceable(1) %15, ptr noundef nonnull align 1 dereferenceable(1) %11)
  %51 = getelementptr inbounds { ptr, ptr }, ptr %14, i32 0, i32 0
  %52 = extractvalue { ptr, ptr } %50, 0
  store ptr %52, ptr %51, align 8
  %53 = getelementptr inbounds { ptr, ptr }, ptr %14, i32 0, i32 1
  %54 = extractvalue { ptr, ptr } %50, 1
  store ptr %54, ptr %53, align 8
  call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_7ProductINS_9TransposeINS0_IfLi3ELi3ELi0ELi3ELi3EEEEES1_Li0EEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %13, ptr noundef nonnull align 1 dereferenceable(1) %14)
  br label %55

55:                                               ; preds = %46, %45
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  %56 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 50
  %57 = load i32, ptr %56, align 4, !tbaa !97
  %58 = icmp eq i32 %57, 4
  br i1 %58, label %59, label %117

59:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 48, ptr %16) #5
  %60 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 14
  %61 = load float, ptr %60, align 4, !tbaa !98
  store float %61, ptr %16, align 4, !tbaa !94
  %62 = getelementptr inbounds float, ptr %16, i64 1
  %63 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 15
  %64 = load float, ptr %63, align 16, !tbaa !99
  store float %64, ptr %62, align 4, !tbaa !94
  %65 = getelementptr inbounds float, ptr %16, i64 2
  %66 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 49
  %67 = getelementptr inbounds [6 x float], ptr %66, i64 0, i64 5
  %68 = load float, ptr %67, align 4, !tbaa !94
  store float %68, ptr %65, align 4, !tbaa !94
  %69 = getelementptr inbounds float, ptr %16, i64 3
  %70 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 49
  %71 = getelementptr inbounds [6 x float], ptr %70, i64 0, i64 0
  %72 = load float, ptr %71, align 4, !tbaa !94
  store float %72, ptr %69, align 4, !tbaa !94
  %73 = getelementptr inbounds float, ptr %16, i64 4
  %74 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 49
  %75 = getelementptr inbounds [6 x float], ptr %74, i64 0, i64 1
  %76 = load float, ptr %75, align 4, !tbaa !94
  store float %76, ptr %73, align 4, !tbaa !94
  %77 = getelementptr inbounds float, ptr %16, i64 5
  %78 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 18
  %79 = load float, ptr %78, align 4, !tbaa !100
  store float %79, ptr %77, align 4, !tbaa !94
  %80 = getelementptr inbounds float, ptr %16, i64 6
  store float 0.000000e+00, ptr %80, align 4, !tbaa !94
  %81 = getelementptr inbounds float, ptr %16, i64 7
  store float 0.000000e+00, ptr %81, align 4, !tbaa !94
  %82 = getelementptr inbounds float, ptr %16, i64 8
  store float 0.000000e+00, ptr %82, align 4, !tbaa !94
  %83 = getelementptr inbounds float, ptr %16, i64 9
  store float 0.000000e+00, ptr %83, align 4, !tbaa !94
  %84 = getelementptr inbounds float, ptr %16, i64 10
  store float 0.000000e+00, ptr %84, align 4, !tbaa !94
  %85 = getelementptr inbounds float, ptr %16, i64 11
  store float 0.000000e+00, ptr %85, align 4, !tbaa !94
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 0, ptr %17, align 4, !tbaa !101
  br label %86

86:                                               ; preds = %113, %59
  %87 = load i32, ptr %17, align 4, !tbaa !101
  %88 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 22
  %89 = load i32, ptr %88, align 4, !tbaa !102
  %90 = icmp slt i32 %87, %89
  br i1 %90, label %92, label %91

91:                                               ; preds = %86
  store i32 2, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %116

92:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !101
  br label %93

93:                                               ; preds = %109, %92
  %94 = load i32, ptr %19, align 4, !tbaa !101
  %95 = icmp slt i32 %94, 12
  br i1 %95, label %97, label %96

96:                                               ; preds = %93
  store i32 5, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %112

97:                                               ; preds = %93
  %98 = load i32, ptr %19, align 4, !tbaa !101
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [12 x float], ptr %16, i64 0, i64 %99
  %101 = load float, ptr %100, align 4, !tbaa !94
  %102 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %103 = load i32, ptr %17, align 4, !tbaa !101
  %104 = mul nsw i32 12, %103
  %105 = load i32, ptr %19, align 4, !tbaa !101
  %106 = add nsw i32 %104, %105
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [720 x float], ptr %102, i64 0, i64 %107
  store float %101, ptr %108, align 4, !tbaa !94
  br label %109

109:                                              ; preds = %97
  %110 = load i32, ptr %19, align 4, !tbaa !101
  %111 = add nsw i32 %110, 1
  store i32 %111, ptr %19, align 4, !tbaa !101
  br label %93, !llvm.loop !103

112:                                              ; preds = %96
  br label %113

113:                                              ; preds = %112
  %114 = load i32, ptr %17, align 4, !tbaa !101
  %115 = add nsw i32 %114, 1
  store i32 %115, ptr %17, align 4, !tbaa !101
  br label %86, !llvm.loop !105

116:                                              ; preds = %91
  call void @llvm.lifetime.end.p0(i64 48, ptr %16) #5
  br label %312

117:                                              ; preds = %55
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store float 0x3FB99999A0000000, ptr %20, align 4, !tbaa !94
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %118 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 52
  %119 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %118, i64 noundef 0)
  %120 = load float, ptr %119, align 4, !tbaa !94
  store float %120, ptr %21, align 4, !tbaa !94
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %121 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 52
  %122 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %121, i64 noundef 1)
  %123 = load float, ptr %122, align 4, !tbaa !94
  store float %123, ptr %22, align 4, !tbaa !94
  %124 = load float, ptr %21, align 4, !tbaa !94
  %125 = load ptr, ptr %10, align 8, !tbaa !5
  %126 = getelementptr inbounds float, ptr %125, i64 0
  %127 = load float, ptr %126, align 4, !tbaa !94
  %128 = fsub float %124, %127
  %129 = fcmp ogt float %128, 0x3FB99999A0000000
  br i1 %129, label %130, label %137

130:                                              ; preds = %117
  %131 = load ptr, ptr %10, align 8, !tbaa !5
  %132 = getelementptr inbounds float, ptr %131, i64 0
  %133 = load float, ptr %132, align 4, !tbaa !94
  %134 = fpext float %133 to double
  %135 = fadd double %134, 1.000000e-01
  %136 = fptrunc double %135 to float
  store float %136, ptr %21, align 4, !tbaa !94
  br label %137

137:                                              ; preds = %130, %117
  %138 = load ptr, ptr %10, align 8, !tbaa !5
  %139 = getelementptr inbounds float, ptr %138, i64 0
  %140 = load float, ptr %139, align 4, !tbaa !94
  %141 = load float, ptr %21, align 4, !tbaa !94
  %142 = fsub float %140, %141
  %143 = fcmp ogt float %142, 0x3FB99999A0000000
  br i1 %143, label %144, label %151

144:                                              ; preds = %137
  %145 = load ptr, ptr %10, align 8, !tbaa !5
  %146 = getelementptr inbounds float, ptr %145, i64 0
  %147 = load float, ptr %146, align 4, !tbaa !94
  %148 = fpext float %147 to double
  %149 = fsub double %148, 1.000000e-01
  %150 = fptrunc double %149 to float
  store float %150, ptr %21, align 4, !tbaa !94
  br label %151

151:                                              ; preds = %144, %137
  %152 = load float, ptr %22, align 4, !tbaa !94
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = getelementptr inbounds float, ptr %153, i64 1
  %155 = load float, ptr %154, align 4, !tbaa !94
  %156 = fsub float %152, %155
  %157 = fcmp ogt float %156, 0x3FB99999A0000000
  br i1 %157, label %158, label %165

158:                                              ; preds = %151
  %159 = load ptr, ptr %10, align 8, !tbaa !5
  %160 = getelementptr inbounds float, ptr %159, i64 1
  %161 = load float, ptr %160, align 4, !tbaa !94
  %162 = fpext float %161 to double
  %163 = fadd double %162, 1.000000e-01
  %164 = fptrunc double %163 to float
  store float %164, ptr %22, align 4, !tbaa !94
  br label %165

165:                                              ; preds = %158, %151
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = getelementptr inbounds float, ptr %166, i64 1
  %168 = load float, ptr %167, align 4, !tbaa !94
  %169 = load float, ptr %22, align 4, !tbaa !94
  %170 = fsub float %168, %169
  %171 = fcmp ogt float %170, 0x3FB99999A0000000
  br i1 %171, label %172, label %179

172:                                              ; preds = %165
  %173 = load ptr, ptr %10, align 8, !tbaa !5
  %174 = getelementptr inbounds float, ptr %173, i64 1
  %175 = load float, ptr %174, align 4, !tbaa !94
  %176 = fpext float %175 to double
  %177 = fsub double %176, 1.000000e-01
  %178 = fptrunc double %177 to float
  store float %178, ptr %22, align 4, !tbaa !94
  br label %179

179:                                              ; preds = %172, %165
  %180 = load float, ptr %21, align 4, !tbaa !94
  %181 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 52
  %182 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %181, i64 noundef 0)
  store float %180, ptr %182, align 4, !tbaa !94
  %183 = load float, ptr %22, align 4, !tbaa !94
  %184 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 52
  %185 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %184, i64 noundef 1)
  store float %183, ptr %185, align 4, !tbaa !94
  call void @llvm.lifetime.start.p0(i64 48, ptr %23) #5
  %186 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 54
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %186, i64 noundef 0)
  %188 = load float, ptr %187, align 4, !tbaa !94
  store float %188, ptr %23, align 4, !tbaa !94
  %189 = getelementptr inbounds float, ptr %23, i64 1
  %190 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 54
  %191 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %190, i64 noundef 1)
  %192 = load float, ptr %191, align 4, !tbaa !94
  store float %192, ptr %189, align 4, !tbaa !94
  %193 = getelementptr inbounds float, ptr %23, i64 2
  %194 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 13
  %195 = load float, ptr %194, align 8, !tbaa !106
  store float %195, ptr %193, align 4, !tbaa !94
  %196 = getelementptr inbounds float, ptr %23, i64 3
  %197 = load float, ptr %21, align 4, !tbaa !94
  store float %197, ptr %196, align 4, !tbaa !94
  %198 = getelementptr inbounds float, ptr %23, i64 4
  %199 = load float, ptr %22, align 4, !tbaa !94
  store float %199, ptr %198, align 4, !tbaa !94
  %200 = getelementptr inbounds float, ptr %23, i64 5
  %201 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 18
  %202 = load float, ptr %201, align 4, !tbaa !100
  store float %202, ptr %200, align 4, !tbaa !94
  %203 = getelementptr inbounds float, ptr %23, i64 6
  store float 0.000000e+00, ptr %203, align 4, !tbaa !94
  %204 = getelementptr inbounds float, ptr %23, i64 7
  store float 0.000000e+00, ptr %204, align 4, !tbaa !94
  %205 = getelementptr inbounds float, ptr %23, i64 8
  %206 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 11
  %207 = load float, ptr %206, align 16, !tbaa !107
  store float %207, ptr %205, align 4, !tbaa !94
  %208 = getelementptr inbounds float, ptr %23, i64 9
  %209 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %13, i64 noundef 0)
  %210 = load float, ptr %209, align 4, !tbaa !94
  store float %210, ptr %208, align 4, !tbaa !94
  %211 = getelementptr inbounds float, ptr %23, i64 10
  %212 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %13, i64 noundef 1)
  %213 = load float, ptr %212, align 4, !tbaa !94
  store float %213, ptr %211, align 4, !tbaa !94
  %214 = getelementptr inbounds float, ptr %23, i64 11
  store float 0.000000e+00, ptr %214, align 4, !tbaa !94
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !101
  br label %215

215:                                              ; preds = %308, %179
  %216 = load i32, ptr %24, align 4, !tbaa !101
  %217 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 22
  %218 = load i32, ptr %217, align 4, !tbaa !102
  %219 = icmp slt i32 %216, %218
  br i1 %219, label %221, label %220

220:                                              ; preds = %215
  store i32 8, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %311

221:                                              ; preds = %215
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  store i32 0, ptr %25, align 4, !tbaa !101
  br label %222

222:                                              ; preds = %238, %221
  %223 = load i32, ptr %25, align 4, !tbaa !101
  %224 = icmp slt i32 %223, 12
  br i1 %224, label %226, label %225

225:                                              ; preds = %222
  store i32 11, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %241

226:                                              ; preds = %222
  %227 = load i32, ptr %25, align 4, !tbaa !101
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds [12 x float], ptr %23, i64 0, i64 %228
  %230 = load float, ptr %229, align 4, !tbaa !94
  %231 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %232 = load i32, ptr %24, align 4, !tbaa !101
  %233 = mul nsw i32 12, %232
  %234 = load i32, ptr %25, align 4, !tbaa !101
  %235 = add nsw i32 %233, %234
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds [720 x float], ptr %231, i64 0, i64 %236
  store float %230, ptr %237, align 4, !tbaa !94
  br label %238

238:                                              ; preds = %226
  %239 = load i32, ptr %25, align 4, !tbaa !101
  %240 = add nsw i32 %239, 1
  store i32 %240, ptr %25, align 4, !tbaa !101
  br label %222, !llvm.loop !108

241:                                              ; preds = %225
  %242 = load i32, ptr %24, align 4, !tbaa !101
  %243 = icmp eq i32 %242, 0
  br i1 %243, label %244, label %249

244:                                              ; preds = %241
  %245 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 13
  %246 = load float, ptr %245, align 8, !tbaa !106
  %247 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %248 = getelementptr inbounds [720 x float], ptr %247, i64 0, i64 2
  store float %246, ptr %248, align 8, !tbaa !94
  br label %307

249:                                              ; preds = %241
  %250 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %251 = load i32, ptr %24, align 4, !tbaa !101
  %252 = sub nsw i32 %251, 1
  %253 = mul nsw i32 12, %252
  %254 = add nsw i32 %253, 3
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds [720 x float], ptr %250, i64 0, i64 %255
  %257 = load float, ptr %256, align 4, !tbaa !94
  %258 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 25
  %259 = load float, ptr %258, align 8, !tbaa !109
  %260 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %13, i64 noundef 0)
  %261 = load float, ptr %260, align 4, !tbaa !94
  %262 = call float @llvm.fmuladd.f32(float %259, float %261, float %257)
  %263 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %264 = load i32, ptr %24, align 4, !tbaa !101
  %265 = mul nsw i32 12, %264
  %266 = add nsw i32 %265, 3
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [720 x float], ptr %263, i64 0, i64 %267
  store float %262, ptr %268, align 4, !tbaa !94
  %269 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %270 = load i32, ptr %24, align 4, !tbaa !101
  %271 = sub nsw i32 %270, 1
  %272 = mul nsw i32 12, %271
  %273 = add nsw i32 %272, 4
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds [720 x float], ptr %269, i64 0, i64 %274
  %276 = load float, ptr %275, align 4, !tbaa !94
  %277 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 25
  %278 = load float, ptr %277, align 8, !tbaa !109
  %279 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %13, i64 noundef 1)
  %280 = load float, ptr %279, align 4, !tbaa !94
  %281 = call float @llvm.fmuladd.f32(float %278, float %280, float %276)
  %282 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %283 = load i32, ptr %24, align 4, !tbaa !101
  %284 = mul nsw i32 12, %283
  %285 = add nsw i32 %284, 4
  %286 = sext i32 %285 to i64
  %287 = getelementptr inbounds [720 x float], ptr %282, i64 0, i64 %286
  store float %281, ptr %287, align 4, !tbaa !94
  %288 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %289 = load i32, ptr %24, align 4, !tbaa !101
  %290 = sub nsw i32 %289, 1
  %291 = mul nsw i32 12, %290
  %292 = add nsw i32 %291, 2
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds [720 x float], ptr %288, i64 0, i64 %293
  %295 = load float, ptr %294, align 4, !tbaa !94
  %296 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 25
  %297 = load float, ptr %296, align 8, !tbaa !109
  %298 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 11
  %299 = load float, ptr %298, align 16, !tbaa !107
  %300 = call float @llvm.fmuladd.f32(float %297, float %299, float %295)
  %301 = getelementptr inbounds %class.ConvexMPCLocomotion, ptr %29, i32 0, i32 59
  %302 = load i32, ptr %24, align 4, !tbaa !101
  %303 = mul nsw i32 12, %302
  %304 = add nsw i32 %303, 2
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds [720 x float], ptr %301, i64 0, i64 %305
  store float %300, ptr %306, align 4, !tbaa !94
  br label %307

307:                                              ; preds = %249, %244
  br label %308

308:                                              ; preds = %307
  %309 = load i32, ptr %24, align 4, !tbaa !101
  %310 = add nsw i32 %309, 1
  store i32 %310, ptr %24, align 4, !tbaa !101
  br label %215, !llvm.loop !110

311:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 48, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %312

312:                                              ; preds = %311, %116
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #5
  call void @_ZN5TimerC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26)
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 0, ptr %27, align 4, !tbaa !101
  %313 = load i32, ptr %27, align 4, !tbaa !101
  %314 = sitofp i32 %313 to double
  %315 = fcmp ogt double %314, 5.000000e-01
  br i1 %315, label %316, label %319

316:                                              ; preds = %312
  %317 = load ptr, ptr %6, align 8, !tbaa !5
  %318 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN19ConvexMPCLocomotion14solveSparseMPCEPiR23StateEstimatorContainerIfE(ptr noundef nonnull align 16 dereferenceable(7184) %29, ptr noundef %317, ptr noundef nonnull align 16 dereferenceable(96) %318)
  br label %322

319:                                              ; preds = %312
  %320 = load ptr, ptr %6, align 8, !tbaa !5
  %321 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN19ConvexMPCLocomotion13solveDenseMPCEPiR23StateEstimatorContainerIfE(ptr noundef nonnull align 16 dereferenceable(7184) %29, ptr noundef %320, ptr noundef nonnull align 16 dereferenceable(96) %321)
  br label %322

322:                                              ; preds = %319, %316
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 176, ptr %9) #5
  br label %323

323:                                              ; preds = %322, %4
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13StateEstimateIfEC2ERKS0_(ptr noundef nonnull align 16 dereferenceable(172), ptr noundef nonnull align 16 dereferenceable(172)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE4dataEv(ptr noundef nonnull align 4 dereferenceable(12)) #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { ptr, ptr } @_ZNK5Eigen10MatrixBaseINS_9TransposeINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEEEEmlINS2_IfLi3ELi1ELi0ELi3ELi1EEEEEKNS_7ProductIS4_T_Li0EEERKNS0_IS9_EE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_7ProductINS_9TransposeINS0_IfLi3ELi3ELi0ELi3ELi3EEEEES1_Li0EEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN19ConvexMPCLocomotion14solveSparseMPCEPiR23StateEstimatorContainerIfE(ptr noundef nonnull align 16 dereferenceable(7184), ptr noundef, ptr noundef nonnull align 16 dereferenceable(96)) #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN19ConvexMPCLocomotion13solveDenseMPCEPiR23StateEstimatorContainerIfE(ptr noundef nonnull align 16 dereferenceable(7184), ptr noundef, ptr noundef nonnull align 16 dereferenceable(96)) #4 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 = !{!"bool", !7, i64 0}
!11 = !{!12, !22, i64 332}
!12 = !{!"_ZTS19ConvexMPCLocomotion", !10, i64 0, !13, i64 4, !13, i64 16, !13, i64 28, !13, i64 40, !13, i64 52, !7, i64 64, !7, i64 112, !7, i64 160, !7, i64 208, !17, i64 256, !21, i64 272, !21, i64 276, !21, i64 280, !21, i64 284, !21, i64 288, !21, i64 292, !21, i64 296, !21, i64 300, !21, i64 304, !21, i64 308, !22, i64 312, !22, i64 316, !22, i64 320, !21, i64 324, !21, i64 328, !22, i64 332, !7, i64 336, !17, i64 384, !7, i64 400, !23, i64 656, !23, i64 784, !23, i64 912, !23, i64 1040, !23, i64 1168, !23, i64 1296, !23, i64 1424, !23, i64 1552, !23, i64 1680, !23, i64 1808, !23, i64 1936, !34, i64 2064, !34, i64 2100, !34, i64 2136, !34, i64 2172, !34, i64 2208, !10, i64 2244, !7, i64 2245, !7, i64 2252, !7, i64 2268, !22, i64 2292, !22, i64 2296, !13, i64 2300, !13, i64 2312, !13, i64 2324, !21, i64 2336, !7, i64 2340, !38, i64 2400, !7, i64 3280, !21, i64 6160, !39, i64 6164, !40, i64 6184, !44, i64 6208}
!13 = !{!"_ZTSN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEE", !14, i64 0}
!14 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEE", !15, i64 0}
!15 = !{!"_ZTSN5Eigen12DenseStorageIfLi3ELi3ELi1ELi0EEE", !16, i64 0}
!16 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi3ELi0ELi0EEE", !7, i64 0}
!17 = !{!"_ZTSN5Eigen6MatrixIfLi4ELi1ELi0ELi4ELi1EEE", !18, i64 0}
!18 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi4ELi1ELi0ELi4ELi1EEEEE", !19, i64 0}
!19 = !{!"_ZTSN5Eigen12DenseStorageIfLi4ELi4ELi1ELi0EEE", !20, i64 0}
!20 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi4ELi0ELi16EEE", !7, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = !{!"int", !7, i64 0}
!23 = !{!"_ZTS18OffsetDurationGait", !24, i64 0, !6, i64 40, !28, i64 48, !28, i64 64, !32, i64 80, !32, i64 96, !22, i64 112, !22, i64 116, !21, i64 120}
!24 = !{!"_ZTS4Gait", !25, i64 8}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !26, i64 0, !27, i64 8, !7, i64 16}
!26 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_ZTSN5Eigen5ArrayIiLi4ELi1ELi0ELi4ELi1EEE", !29, i64 0}
!29 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_5ArrayIiLi4ELi1ELi0ELi4ELi1EEEEE", !30, i64 0}
!30 = !{!"_ZTSN5Eigen12DenseStorageIiLi4ELi4ELi1ELi0EEE", !31, i64 0}
!31 = !{!"_ZTSN5Eigen8internal11plain_arrayIiLi4ELi0ELi16EEE", !7, i64 0}
!32 = !{!"_ZTSN5Eigen5ArrayIfLi4ELi1ELi0ELi4ELi1EEE", !33, i64 0}
!33 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_5ArrayIfLi4ELi1ELi0ELi4ELi1EEEEE", !19, i64 0}
!34 = !{!"_ZTSN5Eigen6MatrixIfLi3ELi3ELi0ELi3ELi3EEE", !35, i64 0}
!35 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEEE", !36, i64 0}
!36 = !{!"_ZTSN5Eigen12DenseStorageIfLi9ELi3ELi3ELi0EEE", !37, i64 0}
!37 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi9ELi0ELi0EEE", !7, i64 0}
!38 = !{!"_ZTS11CMPC_ResultIfE", !7, i64 0, !17, i64 864}
!39 = !{!"_ZTS9CMPC_Jump", !10, i64 0, !10, i64 1, !10, i64 2, !22, i64 4, !22, i64 8, !22, i64 12}
!40 = !{!"_ZTSSt6vectorIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE", !41, i64 0}
!41 = !{!"_ZTSSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE12_Vector_implE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!44 = !{!"_ZTS10SparseCMPC", !45, i64 0, !49, i64 80, !53, i64 176, !53, i64 184, !53, i64 192, !53, i64 200, !54, i64 208, !54, i64 232, !54, i64 256, !54, i64 280, !58, i64 304, !49, i64 336, !49, i64 432, !49, i64 528, !62, i64 624, !40, i64 648, !66, i64 672, !70, i64 696, !74, i64 720, !78, i64 744, !82, i64 768, !82, i64 792, !86, i64 816, !86, i64 840, !66, i64 864, !66, i64 888, !66, i64 912, !90, i64 936, !22, i64 952, !22, i64 956, !22, i64 960}
!45 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE", !46, i64 0}
!46 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi3ELi0ELi3ELi3EEEEE", !47, i64 0}
!47 = !{!"_ZTSN5Eigen12DenseStorageIdLi9ELi3ELi3ELi0EEE", !48, i64 0}
!48 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi9ELi0ELi0EEE", !7, i64 0}
!49 = !{!"_ZTSN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEE", !50, i64 0}
!50 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi12ELi1ELi0ELi12ELi1EEEEE", !51, i64 0}
!51 = !{!"_ZTSN5Eigen12DenseStorageIdLi12ELi12ELi1ELi0EEE", !52, i64 0}
!52 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi12ELi0ELi16EEE", !7, i64 0}
!53 = !{!"double", !7, i64 0}
!54 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEE", !55, i64 0}
!55 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE", !56, i64 0}
!56 = !{!"_ZTSN5Eigen12DenseStorageIdLi3ELi3ELi1ELi0EEE", !57, i64 0}
!57 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi3ELi0ELi0EEE", !7, i64 0}
!58 = !{!"_ZTSN5Eigen6MatrixIdLi4ELi1ELi0ELi4ELi1EEE", !59, i64 0}
!59 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEE", !60, i64 0}
!60 = !{!"_ZTSN5Eigen12DenseStorageIdLi4ELi4ELi1ELi0EEE", !61, i64 0}
!61 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi4ELi0ELi16EEE", !7, i64 0}
!62 = !{!"_ZTSSt6vectorI12ContactStateSaIS0_EE", !63, i64 0}
!63 = !{!"_ZTSSt12_Vector_baseI12ContactStateSaIS0_EE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseI12ContactStateSaIS0_EE12_Vector_implE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseI12ContactStateSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!66 = !{!"_ZTSSt6vectorIdSaIdEE", !67, i64 0}
!67 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!70 = !{!"_ZTSSt6vectorIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE", !71, i64 0}
!71 = !{!"_ZTSSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE", !72, i64 0}
!72 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE12_Vector_implE", !73, i64 0}
!73 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!74 = !{!"_ZTSSt6vectorI8BblockIDSaIS0_EE", !75, i64 0}
!75 = !{!"_ZTSSt12_Vector_baseI8BblockIDSaIS0_EE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseI8BblockIDSaIS0_EE12_Vector_implE", !77, i64 0}
!77 = !{!"_ZTSNSt12_Vector_baseI8BblockIDSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!78 = !{!"_ZTSSt6vectorIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE", !79, i64 0}
!79 = !{!"_ZTSSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE", !80, i64 0}
!80 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE12_Vector_implE", !81, i64 0}
!81 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!82 = !{!"_ZTSSt6vectorIjSaIjEE", !83, i64 0}
!83 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !84, i64 0}
!84 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !85, i64 0}
!85 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!86 = !{!"_ZTSSt6vectorI12SparseTripleIdESaIS1_EE", !87, i64 0}
!87 = !{!"_ZTSSt12_Vector_baseI12SparseTripleIdESaIS1_EE", !88, i64 0}
!88 = !{!"_ZTSNSt12_Vector_baseI12SparseTripleIdESaIS1_EE12_Vector_implE", !89, i64 0}
!89 = !{!"_ZTSNSt12_Vector_baseI12SparseTripleIdESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!90 = !{!"_ZTSN5Eigen6MatrixIfLin1ELi1ELi0ELin1ELi1EEE", !91, i64 0}
!91 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLin1ELi1ELi0ELin1ELi1EEEEE", !92, i64 0}
!92 = !{!"_ZTSN5Eigen12DenseStorageIfLin1ELin1ELi1ELi0EEE", !6, i64 0, !27, i64 8}
!93 = !{!12, !22, i64 312}
!94 = !{!21, !21, i64 0}
!95 = !{i8 0, i8 2}
!96 = !{}
!97 = !{!12, !22, i64 2292}
!98 = !{!12, !21, i64 284}
!99 = !{!12, !21, i64 288}
!100 = !{!12, !21, i64 300}
!101 = !{!22, !22, i64 0}
!102 = !{!12, !22, i64 316}
!103 = distinct !{!103, !104}
!104 = !{!"llvm.loop.mustprogress"}
!105 = distinct !{!105, !104}
!106 = !{!12, !21, i64 280}
!107 = !{!12, !21, i64 272}
!108 = distinct !{!108, !104}
!109 = !{!12, !21, i64 328}
!110 = distinct !{!110, !104}


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

%struct.StateEstimate = type { %"class.Eigen::Matrix.3", %"class.Eigen::Matrix", %"class.Eigen::Matrix", [8 x i8], %"class.Eigen::Matrix.3", %"class.Eigen::Matrix", %"class.Eigen::Matrix.29", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", [4 x i8] }
%"class.Eigen::Matrix.3" = type { %"class.Eigen::PlainObjectBase.4" }
%"class.Eigen::PlainObjectBase.4" = type { %"class.Eigen::DenseStorage.11" }
%"class.Eigen::DenseStorage.11" = type { %"struct.Eigen::internal::plain_array.12" }
%"struct.Eigen::internal::plain_array.12" = type { [4 x float] }
%"class.Eigen::Matrix.29" = type { %"class.Eigen::PlainObjectBase.30" }
%"class.Eigen::PlainObjectBase.30" = type { %"class.Eigen::DenseStorage.37" }
%"class.Eigen::DenseStorage.37" = type { %"struct.Eigen::internal::plain_array.38" }
%"struct.Eigen::internal::plain_array.38" = type { [9 x float] }
%"class.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [3 x float] }
%"class.Eigen::Product.269" = type { %"class.Eigen::Transpose.276", ptr }
%"class.Eigen::Transpose.276" = type { ptr }
%class.Timer = type { %struct.timespec }
%struct.timespec = type { i64, i64 }

; 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 uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1), i64 noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 16 dereferenceable(172) ptr @_ZN23StateEstimatorContainerIfE9getResultEv(ptr noundef nonnull align 16 dereferenceable(96)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN19ConvexMPCLocomotion17updateMPCIfNeededEPiR23StateEstimatorContainerIfEb(ptr noundef nonnull align 16 dereferenceable(7184) %0, ptr noundef %1, ptr noundef nonnull align 16 dereferenceable(96) %2, i1 noundef zeroext %3) local_unnamed_addr #4 align 2 {
  %5 = alloca %struct.StateEstimate, align 16
  %6 = alloca %"class.Eigen::Matrix", align 4
  %7 = alloca float, align 4
  %8 = alloca %"class.Eigen::Matrix", align 4
  %9 = alloca %"class.Eigen::Product.269", align 8
  %10 = alloca %"class.Eigen::Transpose.276", align 8
  %11 = alloca %class.Timer, align 8
  %12 = getelementptr inbounds i8, ptr %0, i64 332
  %13 = load i32, ptr %12, align 4, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %0, i64 312
  %15 = load i32, ptr %14, align 8, !tbaa !91
  %16 = srem i32 %13, %15
  %17 = icmp eq i32 %16, 0
  br i1 %17, label %18, label %141

18:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %5) #6
  %19 = tail call noundef nonnull align 16 dereferenceable(172) ptr @_ZN23StateEstimatorContainerIfE9getResultEv(ptr noundef nonnull align 16 dereferenceable(96) %2)
  call void @_ZN13StateEstimateIfEC2ERKS0_(ptr noundef nonnull align 16 dereferenceable(172) %5, ptr noundef nonnull align 16 dereferenceable(172) %19)
  %20 = getelementptr inbounds i8, ptr %5, i64 16
  %21 = call noundef ptr @_ZN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE4dataEv(ptr noundef nonnull align 4 dereferenceable(12) %20)
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #6
  %22 = getelementptr inbounds i8, ptr %0, i64 292
  %23 = getelementptr inbounds i8, ptr %0, i64 296
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #6
  store float 0.000000e+00, ptr %7, align 4, !tbaa !92
  call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12) %6, ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(4) %23, ptr noundef nonnull align 4 dereferenceable(4) %7)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  br i1 %3, label %24, label %25

24:                                               ; preds = %18
  call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %8, ptr noundef nonnull align 4 dereferenceable(12) %6)
  br label %32

25:                                               ; preds = %18
  %26 = getelementptr inbounds i8, ptr %5, i64 76
  %27 = call ptr @_ZN5Eigen9DenseBaseINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEE9transposeEv(ptr noundef nonnull align 1 dereferenceable(1) %26)
  store ptr %27, ptr %10, align 8
  %28 = call { ptr, ptr } @_ZNK5Eigen10MatrixBaseINS_9TransposeINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEEEEmlINS2_IfLi3ELi1ELi0ELi3ELi1EEEEEKNS_7ProductIS4_T_Li0EEERKNS0_IS9_EE(ptr noundef nonnull align 1 dereferenceable(1) %10, ptr noundef nonnull align 1 dereferenceable(1) %6)
  %29 = extractvalue { ptr, ptr } %28, 0
  store ptr %29, ptr %9, align 8
  %30 = getelementptr inbounds i8, ptr %9, i64 8
  %31 = extractvalue { ptr, ptr } %28, 1
  store ptr %31, ptr %30, align 8
  call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_7ProductINS_9TransposeINS0_IfLi3ELi3ELi0ELi3ELi3EEEEES1_Li0EEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %8, ptr noundef nonnull align 1 dereferenceable(1) %9)
  br label %32

32:                                               ; preds = %25, %24
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  %33 = getelementptr inbounds i8, ptr %0, i64 2292
  %34 = load i32, ptr %33, align 4, !tbaa !93
  %35 = icmp eq i32 %34, 4
  br i1 %35, label %36, label %59

36:                                               ; preds = %32
  %37 = getelementptr inbounds i8, ptr %0, i64 284
  %38 = load <4 x float>, ptr %37, align 4
  %39 = getelementptr inbounds i8, ptr %0, i64 2268
  %40 = getelementptr inbounds i8, ptr %0, i64 2288
  %41 = load float, ptr %40, align 16, !tbaa !92
  %42 = load float, ptr %39, align 4, !tbaa !92
  %43 = getelementptr inbounds i8, ptr %0, i64 2272
  %44 = load float, ptr %43, align 16, !tbaa !92
  %45 = getelementptr inbounds i8, ptr %0, i64 300
  %46 = load float, ptr %45, align 4, !tbaa !94
  %47 = getelementptr inbounds i8, ptr %0, i64 316
  %48 = load i32, ptr %47, align 4, !tbaa !95
  %49 = icmp sgt i32 %48, 0
  br i1 %49, label %.preheader.lr.ph, label %._crit_edge55

.preheader.lr.ph:                                 ; preds = %36
  %wide.trip.count = zext nneg i32 %48 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %50 = icmp eq i32 %48, 1
  br i1 %50, label %._crit_edge55.loopexit.unr-lcssa, label %.preheader.lr.ph.new

.preheader.lr.ph.new:                             ; preds = %.preheader.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  %51 = insertelement <4 x float> %38, float %41, i64 2
  %52 = insertelement <4 x float> %51, float %42, i64 3
  %53 = insertelement <4 x float> %38, float %41, i64 2
  %54 = insertelement <4 x float> %53, float %42, i64 3
  br label %.preheader

.preheader:                                       ; preds = %.preheader, %.preheader.lr.ph.new
  %indvar59 = phi i64 [ 0, %.preheader.lr.ph.new ], [ %indvar.next60.1, %.preheader ]
  %niter = phi i64 [ 0, %.preheader.lr.ph.new ], [ %niter.next.1, %.preheader ]
  %55 = mul nuw nsw i64 %indvar59, 48
  %56 = getelementptr i8, ptr %0, i64 %55
  %scevgep61 = getelementptr i8, ptr %56, i64 3280
  store <4 x float> %52, ptr %scevgep61, align 16, !tbaa !92
  %.sroa.779.0.scevgep61.sroa_idx = getelementptr i8, ptr %56, i64 3296
  store float %44, ptr %.sroa.779.0.scevgep61.sroa_idx, align 16, !tbaa !92
  %.sroa.880.0.scevgep61.sroa_idx = getelementptr i8, ptr %56, i64 3300
  store float %46, ptr %.sroa.880.0.scevgep61.sroa_idx, align 4, !tbaa !92
  %.sroa.981.0.scevgep61.sroa_idx = getelementptr i8, ptr %56, i64 3304
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.981.0.scevgep61.sroa_idx, i8 0, i64 24, i1 false)
  %57 = mul nuw i64 %indvar59, 48
  %58 = getelementptr i8, ptr %0, i64 %57
  %scevgep61.1 = getelementptr i8, ptr %58, i64 3328
  store <4 x float> %54, ptr %scevgep61.1, align 16, !tbaa !92
  %.sroa.779.0.scevgep61.sroa_idx.1 = getelementptr i8, ptr %58, i64 3344
  store float %44, ptr %.sroa.779.0.scevgep61.sroa_idx.1, align 16, !tbaa !92
  %.sroa.880.0.scevgep61.sroa_idx.1 = getelementptr i8, ptr %58, i64 3348
  store float %46, ptr %.sroa.880.0.scevgep61.sroa_idx.1, align 4, !tbaa !92
  %.sroa.981.0.scevgep61.sroa_idx.1 = getelementptr i8, ptr %58, i64 3352
  %indvar.next60.1 = add nuw nsw i64 %indvar59, 2
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.981.0.scevgep61.sroa_idx.1, i8 0, i64 24, i1 false)
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge55.loopexit.unr-lcssa.loopexit, label %.preheader, !llvm.loop !96

59:                                               ; preds = %32
  %60 = getelementptr inbounds i8, ptr %0, i64 2300
  %61 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %60, i64 noundef 0)
  %62 = load float, ptr %61, align 4, !tbaa !92
  %63 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %60, i64 noundef 1)
  %64 = load float, ptr %63, align 4, !tbaa !92
  %65 = load <2 x float>, ptr %21, align 4, !tbaa !92
  %66 = insertelement <2 x float> poison, float %62, i64 0
  %67 = insertelement <2 x float> %66, float %64, i64 1
  %68 = fsub <2 x float> %67, %65
  %69 = fcmp ogt <2 x float> %68, <float 0x3FB99999A0000000, float 0x3FB99999A0000000>
  %70 = fpext <2 x float> %65 to <2 x double>
  %71 = fadd <2 x double> %70, <double 1.000000e-01, double 1.000000e-01>
  %72 = fptrunc <2 x double> %71 to <2 x float>
  %73 = select <2 x i1> %69, <2 x float> %72, <2 x float> %67
  %74 = fsub <2 x float> %65, %73
  %75 = fcmp ogt <2 x float> %74, <float 0x3FB99999A0000000, float 0x3FB99999A0000000>
  %76 = fadd <2 x double> %70, <double -1.000000e-01, double -1.000000e-01>
  %77 = fptrunc <2 x double> %76 to <2 x float>
  %78 = select <2 x i1> %75, <2 x float> %77, <2 x float> %73
  %79 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %60, i64 noundef 0)
  %80 = extractelement <2 x float> %78, i64 0
  store float %80, ptr %79, align 4, !tbaa !92
  %81 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %60, i64 noundef 1)
  %82 = extractelement <2 x float> %78, i64 1
  store float %82, ptr %81, align 4, !tbaa !92
  %83 = getelementptr inbounds i8, ptr %0, i64 2324
  %84 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %83, i64 noundef 0)
  %85 = load float, ptr %84, align 4, !tbaa !92
  %86 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %83, i64 noundef 1)
  %87 = load float, ptr %86, align 4, !tbaa !92
  %88 = getelementptr inbounds i8, ptr %0, i64 280
  %89 = load float, ptr %88, align 8, !tbaa !98
  %90 = getelementptr inbounds i8, ptr %0, i64 300
  %91 = load float, ptr %90, align 4, !tbaa !94
  %92 = getelementptr inbounds i8, ptr %0, i64 272
  %93 = load float, ptr %92, align 16, !tbaa !99
  %94 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %8, i64 noundef 0)
  %95 = load float, ptr %94, align 4, !tbaa !92
  %96 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %8, i64 noundef 1)
  %97 = load float, ptr %96, align 4, !tbaa !92
  %98 = getelementptr inbounds i8, ptr %0, i64 316
  %99 = load i32, ptr %98, align 4, !tbaa !95
  %100 = icmp sgt i32 %99, 0
  br i1 %100, label %101, label %._crit_edge55

101:                                              ; preds = %59
  %102 = getelementptr inbounds i8, ptr %0, i64 3280
  %103 = getelementptr inbounds i8, ptr %0, i64 328
  store float %85, ptr %102, align 16, !tbaa !92
  %.sroa.5.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3284
  store float %87, ptr %.sroa.5.0.scevgep.peel.sroa_idx, align 4, !tbaa !92
  %.sroa.7.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3292
  store <2 x float> %78, ptr %.sroa.7.0.scevgep.peel.sroa_idx, align 4, !tbaa !92
  %.sroa.9.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3300
  store float %91, ptr %.sroa.9.0.scevgep.peel.sroa_idx, align 4, !tbaa !92
  %.sroa.10.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3304
  store <2 x float> zeroinitializer, ptr %.sroa.10.0.scevgep.peel.sroa_idx, align 8, !tbaa !92
  %.sroa.12.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3312
  store float %93, ptr %.sroa.12.0.scevgep.peel.sroa_idx, align 16, !tbaa !92
  %.sroa.13.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3316
  store float %95, ptr %.sroa.13.0.scevgep.peel.sroa_idx, align 4, !tbaa !92
  %.sroa.14.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3320
  store float %97, ptr %.sroa.14.0.scevgep.peel.sroa_idx, align 8, !tbaa !92
  %.sroa.15.0.scevgep.peel.sroa_idx = getelementptr inbounds i8, ptr %0, i64 3324
  store float 0.000000e+00, ptr %.sroa.15.0.scevgep.peel.sroa_idx, align 4, !tbaa !92
  %104 = getelementptr inbounds i8, ptr %0, i64 3288
  %105 = load float, ptr %88, align 8, !tbaa !98
  store float %105, ptr %104, align 8, !tbaa !92
  %.not = icmp eq i32 %99, 1
  br i1 %.not, label %._crit_edge55, label %.preheader50.peel.next

.preheader50.peel.next:                           ; preds = %101, %.preheader50.peel.next
  %indvar = phi i64 [ %indvar.next, %.preheader50.peel.next ], [ 1, %101 ]
  %106 = mul nuw nsw i64 %indvar, 48
  %107 = getelementptr i8, ptr %0, i64 %106
  %scevgep = getelementptr i8, ptr %107, i64 3280
  store float %85, ptr %scevgep, align 16, !tbaa !92
  %.sroa.5.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3284
  store float %87, ptr %.sroa.5.0.scevgep.sroa_idx, align 4, !tbaa !92
  %.sroa.6.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3288
  store float %89, ptr %.sroa.6.0.scevgep.sroa_idx, align 8, !tbaa !92
  %.sroa.7.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3292
  store <2 x float> %78, ptr %.sroa.7.0.scevgep.sroa_idx, align 4, !tbaa !92
  %.sroa.9.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3300
  store float %91, ptr %.sroa.9.0.scevgep.sroa_idx, align 4, !tbaa !92
  %.sroa.10.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3304
  store <2 x float> zeroinitializer, ptr %.sroa.10.0.scevgep.sroa_idx, align 8, !tbaa !92
  %.sroa.12.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3312
  store float %93, ptr %.sroa.12.0.scevgep.sroa_idx, align 16, !tbaa !92
  %.sroa.13.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3316
  store float %95, ptr %.sroa.13.0.scevgep.sroa_idx, align 4, !tbaa !92
  %.sroa.14.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3320
  store float %97, ptr %.sroa.14.0.scevgep.sroa_idx, align 8, !tbaa !92
  %.sroa.15.0.scevgep.sroa_idx = getelementptr i8, ptr %107, i64 3324
  store float 0.000000e+00, ptr %.sroa.15.0.scevgep.sroa_idx, align 4, !tbaa !92
  %108 = mul nuw nsw i64 %indvar, 12
  %109 = add nsw i64 %108, -9
  %110 = getelementptr inbounds [720 x float], ptr %102, i64 0, i64 %109
  %111 = load float, ptr %110, align 4, !tbaa !92
  %112 = load float, ptr %103, align 8, !tbaa !100
  %113 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %8, i64 noundef 0)
  %114 = load float, ptr %113, align 4, !tbaa !92
  %115 = call float @llvm.fmuladd.f32(float %112, float %114, float %111)
  %116 = or disjoint i64 %108, 3
  %117 = getelementptr inbounds [720 x float], ptr %102, i64 0, i64 %116
  store float %115, ptr %117, align 4, !tbaa !92
  %118 = add nsw i64 %108, -8
  %119 = getelementptr inbounds [720 x float], ptr %102, i64 0, i64 %118
  %120 = load float, ptr %119, align 16, !tbaa !92
  %121 = load float, ptr %103, align 8, !tbaa !100
  %122 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EEixEl(ptr noundef nonnull align 1 dereferenceable(1) %8, i64 noundef 1)
  %123 = load float, ptr %122, align 4, !tbaa !92
  %124 = call float @llvm.fmuladd.f32(float %121, float %123, float %120)
  %125 = add nuw nsw i64 %108, 4
  %126 = getelementptr inbounds [720 x float], ptr %102, i64 0, i64 %125
  store float %124, ptr %126, align 16, !tbaa !92
  %127 = add nsw i64 %108, -10
  %128 = getelementptr inbounds [720 x float], ptr %102, i64 0, i64 %127
  %129 = load float, ptr %128, align 8, !tbaa !92
  %130 = load float, ptr %103, align 8, !tbaa !100
  %131 = load float, ptr %92, align 16, !tbaa !99
  %132 = call float @llvm.fmuladd.f32(float %130, float %131, float %129)
  %133 = or disjoint i64 %108, 2
  %134 = getelementptr inbounds [720 x float], ptr %102, i64 0, i64 %133
  store float %132, ptr %134, align 8, !tbaa !92
  %.pre = load i32, ptr %98, align 4, !tbaa !95
  %indvar.next = add nuw nsw i64 %indvar, 1
  %135 = sext i32 %.pre to i64
  %136 = icmp slt i64 %indvar.next, %135
  br i1 %136, label %.preheader50.peel.next, label %._crit_edge55, !llvm.loop !101

._crit_edge55.loopexit.unr-lcssa.loopexit:        ; preds = %.preheader
  %137 = mul nuw nsw i64 %indvar.next60.1, 48
  br label %._crit_edge55.loopexit.unr-lcssa

._crit_edge55.loopexit.unr-lcssa:                 ; preds = %._crit_edge55.loopexit.unr-lcssa.loopexit, %.preheader.lr.ph
  %indvar59.unr = phi i64 [ 0, %.preheader.lr.ph ], [ %137, %._crit_edge55.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge55, label %.preheader.epil

.preheader.epil:                                  ; preds = %._crit_edge55.loopexit.unr-lcssa
  %138 = getelementptr i8, ptr %0, i64 %indvar59.unr
  %scevgep61.epil = getelementptr i8, ptr %138, i64 3280
  %139 = insertelement <4 x float> %38, float %41, i64 2
  %140 = insertelement <4 x float> %139, float %42, i64 3
  store <4 x float> %140, ptr %scevgep61.epil, align 16, !tbaa !92
  %.sroa.779.0.scevgep61.sroa_idx.epil = getelementptr i8, ptr %138, i64 3296
  store float %44, ptr %.sroa.779.0.scevgep61.sroa_idx.epil, align 16, !tbaa !92
  %.sroa.880.0.scevgep61.sroa_idx.epil = getelementptr i8, ptr %138, i64 3300
  store float %46, ptr %.sroa.880.0.scevgep61.sroa_idx.epil, align 4, !tbaa !92
  %.sroa.981.0.scevgep61.sroa_idx.epil = getelementptr i8, ptr %138, i64 3304
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %.sroa.981.0.scevgep61.sroa_idx.epil, i8 0, i64 24, i1 false)
  br label %._crit_edge55

._crit_edge55:                                    ; preds = %.preheader50.peel.next, %.preheader.epil, %._crit_edge55.loopexit.unr-lcssa, %59, %101, %36
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #6
  call void @_ZN5TimerC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %11)
  call void @_ZN19ConvexMPCLocomotion13solveDenseMPCEPiR23StateEstimatorContainerIfE(ptr noundef nonnull align 16 dereferenceable(7184) %0, ptr noundef %1, ptr noundef nonnull align 16 dereferenceable(96) %2)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %5) #6
  br label %141

141:                                              ; preds = %._crit_edge55, %4
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13StateEstimateIfEC2ERKS0_(ptr noundef nonnull align 16 dereferenceable(172), ptr noundef nonnull align 16 dereferenceable(172)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE4dataEv(ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { ptr, ptr } @_ZNK5Eigen10MatrixBaseINS_9TransposeINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEEEEmlINS2_IfLi3ELi1ELi0ELi3ELi1EEEEEKNS_7ProductIS4_T_Li0EEERKNS0_IS9_EE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_7ProductINS_9TransposeINS0_IfLi3ELi3ELi0ELi3ELi3EEEEES1_Li0EEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN19ConvexMPCLocomotion13solveDenseMPCEPiR23StateEstimatorContainerIfE(ptr noundef nonnull align 16 dereferenceable(7184), ptr noundef, ptr noundef nonnull align 16 dereferenceable(96)) local_unnamed_addr #4 align 2

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !19, i64 332}
!6 = !{!"_ZTS19ConvexMPCLocomotion", !7, i64 0, !10, i64 4, !10, i64 16, !10, i64 28, !10, i64 40, !10, i64 52, !8, i64 64, !8, i64 112, !8, i64 160, !8, i64 208, !14, i64 256, !18, i64 272, !18, i64 276, !18, i64 280, !18, i64 284, !18, i64 288, !18, i64 292, !18, i64 296, !18, i64 300, !18, i64 304, !18, i64 308, !19, i64 312, !19, i64 316, !19, i64 320, !18, i64 324, !18, i64 328, !19, i64 332, !8, i64 336, !14, i64 384, !8, i64 400, !20, i64 656, !20, i64 784, !20, i64 912, !20, i64 1040, !20, i64 1168, !20, i64 1296, !20, i64 1424, !20, i64 1552, !20, i64 1680, !20, i64 1808, !20, i64 1936, !32, i64 2064, !32, i64 2100, !32, i64 2136, !32, i64 2172, !32, i64 2208, !7, i64 2244, !8, i64 2245, !8, i64 2252, !8, i64 2268, !19, i64 2292, !19, i64 2296, !10, i64 2300, !10, i64 2312, !10, i64 2324, !18, i64 2336, !8, i64 2340, !36, i64 2400, !8, i64 3280, !18, i64 6160, !37, i64 6164, !38, i64 6184, !42, i64 6208}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEE", !11, i64 0}
!11 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEE", !12, i64 0}
!12 = !{!"_ZTSN5Eigen12DenseStorageIfLi3ELi3ELi1ELi0EEE", !13, i64 0}
!13 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi3ELi0ELi0EEE", !8, i64 0}
!14 = !{!"_ZTSN5Eigen6MatrixIfLi4ELi1ELi0ELi4ELi1EEE", !15, i64 0}
!15 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi4ELi1ELi0ELi4ELi1EEEEE", !16, i64 0}
!16 = !{!"_ZTSN5Eigen12DenseStorageIfLi4ELi4ELi1ELi0EEE", !17, i64 0}
!17 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi4ELi0ELi16EEE", !8, i64 0}
!18 = !{!"float", !8, i64 0}
!19 = !{!"int", !8, i64 0}
!20 = !{!"_ZTS18OffsetDurationGait", !21, i64 0, !24, i64 40, !26, i64 48, !26, i64 64, !30, i64 80, !30, i64 96, !19, i64 112, !19, i64 116, !18, i64 120}
!21 = !{!"_ZTS4Gait", !22, i64 8}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !23, i64 0, !25, i64 8, !8, i64 16}
!23 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !24, i64 0}
!24 = !{!"any pointer", !8, i64 0}
!25 = !{!"long", !8, i64 0}
!26 = !{!"_ZTSN5Eigen5ArrayIiLi4ELi1ELi0ELi4ELi1EEE", !27, i64 0}
!27 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_5ArrayIiLi4ELi1ELi0ELi4ELi1EEEEE", !28, i64 0}
!28 = !{!"_ZTSN5Eigen12DenseStorageIiLi4ELi4ELi1ELi0EEE", !29, i64 0}
!29 = !{!"_ZTSN5Eigen8internal11plain_arrayIiLi4ELi0ELi16EEE", !8, i64 0}
!30 = !{!"_ZTSN5Eigen5ArrayIfLi4ELi1ELi0ELi4ELi1EEE", !31, i64 0}
!31 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_5ArrayIfLi4ELi1ELi0ELi4ELi1EEEEE", !16, i64 0}
!32 = !{!"_ZTSN5Eigen6MatrixIfLi3ELi3ELi0ELi3ELi3EEE", !33, i64 0}
!33 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi3ELi0ELi3ELi3EEEEE", !34, i64 0}
!34 = !{!"_ZTSN5Eigen12DenseStorageIfLi9ELi3ELi3ELi0EEE", !35, i64 0}
!35 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi9ELi0ELi0EEE", !8, i64 0}
!36 = !{!"_ZTS11CMPC_ResultIfE", !8, i64 0, !14, i64 864}
!37 = !{!"_ZTS9CMPC_Jump", !7, i64 0, !7, i64 1, !7, i64 2, !19, i64 4, !19, i64 8, !19, i64 12}
!38 = !{!"_ZTSSt6vectorIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE12_Vector_implE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEENS0_17aligned_allocatorIS2_EEE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!42 = !{!"_ZTS10SparseCMPC", !43, i64 0, !47, i64 80, !51, i64 176, !51, i64 184, !51, i64 192, !51, i64 200, !52, i64 208, !52, i64 232, !52, i64 256, !52, i64 280, !56, i64 304, !47, i64 336, !47, i64 432, !47, i64 528, !60, i64 624, !38, i64 648, !64, i64 672, !68, i64 696, !72, i64 720, !76, i64 744, !80, i64 768, !80, i64 792, !84, i64 816, !84, i64 840, !64, i64 864, !64, i64 888, !64, i64 912, !88, i64 936, !19, i64 952, !19, i64 956, !19, i64 960}
!43 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi3ELi0ELi3ELi3EEE", !44, i64 0}
!44 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi3ELi0ELi3ELi3EEEEE", !45, i64 0}
!45 = !{!"_ZTSN5Eigen12DenseStorageIdLi9ELi3ELi3ELi0EEE", !46, i64 0}
!46 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi9ELi0ELi0EEE", !8, i64 0}
!47 = !{!"_ZTSN5Eigen6MatrixIdLi12ELi1ELi0ELi12ELi1EEE", !48, i64 0}
!48 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi12ELi1ELi0ELi12ELi1EEEEE", !49, i64 0}
!49 = !{!"_ZTSN5Eigen12DenseStorageIdLi12ELi12ELi1ELi0EEE", !50, i64 0}
!50 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi12ELi0ELi16EEE", !8, i64 0}
!51 = !{!"double", !8, i64 0}
!52 = !{!"_ZTSN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEE", !53, i64 0}
!53 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEE", !54, i64 0}
!54 = !{!"_ZTSN5Eigen12DenseStorageIdLi3ELi3ELi1ELi0EEE", !55, i64 0}
!55 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi3ELi0ELi0EEE", !8, i64 0}
!56 = !{!"_ZTSN5Eigen6MatrixIdLi4ELi1ELi0ELi4ELi1EEE", !57, i64 0}
!57 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEE", !58, i64 0}
!58 = !{!"_ZTSN5Eigen12DenseStorageIdLi4ELi4ELi1ELi0EEE", !59, i64 0}
!59 = !{!"_ZTSN5Eigen8internal11plain_arrayIdLi4ELi0ELi16EEE", !8, i64 0}
!60 = !{!"_ZTSSt6vectorI12ContactStateSaIS0_EE", !61, i64 0}
!61 = !{!"_ZTSSt12_Vector_baseI12ContactStateSaIS0_EE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseI12ContactStateSaIS0_EE12_Vector_implE", !63, i64 0}
!63 = !{!"_ZTSNSt12_Vector_baseI12ContactStateSaIS0_EE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!64 = !{!"_ZTSSt6vectorIdSaIdEE", !65, i64 0}
!65 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !67, i64 0}
!67 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!68 = !{!"_ZTSSt6vectorIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE", !69, i64 0}
!69 = !{!"_ZTSSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE12_Vector_implE", !71, i64 0}
!71 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi12ELi0ELi12ELi12EEENS0_17aligned_allocatorIS2_EEE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!72 = !{!"_ZTSSt6vectorI8BblockIDSaIS0_EE", !73, i64 0}
!73 = !{!"_ZTSSt12_Vector_baseI8BblockIDSaIS0_EE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseI8BblockIDSaIS0_EE12_Vector_implE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseI8BblockIDSaIS0_EE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!76 = !{!"_ZTSSt6vectorIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE", !77, i64 0}
!77 = !{!"_ZTSSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE", !78, i64 0}
!78 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE12_Vector_implE", !79, i64 0}
!79 = !{!"_ZTSNSt12_Vector_baseIN5Eigen6MatrixIdLi12ELi3ELi0ELi12ELi3EEENS0_17aligned_allocatorIS2_EEE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!80 = !{!"_ZTSSt6vectorIjSaIjEE", !81, i64 0}
!81 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !82, i64 0}
!82 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !83, i64 0}
!83 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!84 = !{!"_ZTSSt6vectorI12SparseTripleIdESaIS1_EE", !85, i64 0}
!85 = !{!"_ZTSSt12_Vector_baseI12SparseTripleIdESaIS1_EE", !86, i64 0}
!86 = !{!"_ZTSNSt12_Vector_baseI12SparseTripleIdESaIS1_EE12_Vector_implE", !87, i64 0}
!87 = !{!"_ZTSNSt12_Vector_baseI12SparseTripleIdESaIS1_EE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!88 = !{!"_ZTSN5Eigen6MatrixIfLin1ELi1ELi0ELin1ELi1EEE", !89, i64 0}
!89 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLin1ELi1ELi0ELin1ELi1EEEEE", !90, i64 0}
!90 = !{!"_ZTSN5Eigen12DenseStorageIfLin1ELin1ELi1ELi0EEE", !24, i64 0, !25, i64 8}
!91 = !{!6, !19, i64 312}
!92 = !{!18, !18, i64 0}
!93 = !{!6, !19, i64 2292}
!94 = !{!6, !18, i64 300}
!95 = !{!6, !19, i64 316}
!96 = distinct !{!96, !97}
!97 = !{!"llvm.loop.mustprogress"}
!98 = !{!6, !18, i64 280}
!99 = !{!6, !18, i64 272}
!100 = !{!6, !18, i64 328}
!101 = distinct !{!101, !97, !102}
!102 = !{!"llvm.loop.peeled.count", i32 1}


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