; LLVM IR from unitreerobotics/kinect_teleoperate :: src/mujoco-3.1.5/sample (testspeed)

; 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.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.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.std::allocator.6" = type { i8 }
%"class.std::thread" = type { %"class.std::thread::id" }
%"class.std::thread::id" = type { i64 }
%"class.std::initializer_list" = type { ptr, i64 }
%struct.mjModel_ = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, %struct.mjOption_, %struct.mjVisual_, %struct.mjStatistic_, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.mjOption_ = type { double, double, double, double, double, double, double, [3 x double], [3 x double], [3 x double], double, double, double, [2 x double], [5 x double], [5 x double], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.mjVisual_ = type { %struct.anon, %struct.anon.1, %struct.anon.2, %struct.anon.3, %struct.anon.4, %struct.anon.5 }
%struct.anon = type { float, float, float, float, float, float, float, i32, i32, i32, i32 }
%struct.anon.1 = type { i32, i32, i32, i32, i32 }
%struct.anon.2 = type { [3 x float], [3 x float], [3 x float], i32 }
%struct.anon.3 = type { float, float, float, float, float, float, float, float, float, float, float, float, float }
%struct.anon.4 = type { float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float }
%struct.anon.5 = type { [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float], [4 x float] }
%struct.mjStatistic_ = type { double, double, double, double, [3 x double] }
%struct.mjData_ = type { i64, i64, i32, i64, i64, i64, i64, [128 x i64], i64, i32, i32, [8 x %struct.mjWarningStat_], [15 x %struct.mjTimerStat_], [4000 x %struct.mjSolverStat_], i32, [20 x i32], [20 x i32], [2 x double], i32, i32, i32, i32, i32, i32, i32, double, [2 x double], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64 }
%struct.mjWarningStat_ = type { i32, i32 }
%struct.mjTimerStat_ = type { double, i32 }
%struct.mjSolverStat_ = type { double, double, double, i32, i32, i32, i32 }

@m = external dso_local global ptr, align 8
@d = external dso_local global [512 x ptr], align 16
@contacts = external dso_local global [512 x i32], align 16
@constraints = external dso_local global [512 x i32], align 16
@simtime = external dso_local global [512 x double], align 16
@.str.1 = external hidden unnamed_addr constant [568 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@__const.main.error = external hidden unnamed_addr constant [1000 x i8], align 16
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@mjcb_time = external global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@__const.main.mu_str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [27 x i8], align 1
@mjTIMERSTRING = external global [15 x ptr], align 16
@.str.32 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [2 x i8], align 1
@constinit = external hidden constant [6 x i32], align 4
@.str.34 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [34 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_Z5gettmv() #0

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef, ptr noundef) #0

declare i32 @printf(ptr noundef, ...) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z9CtrlNoisePK8mjModel_id(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef, i32 noundef, double noundef) #0

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z8simulateiiPd(i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #5 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca double, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::allocator.6", align 1
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca [1000 x i8], align 16
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca %"class.std::vector", align 8
  %21 = alloca [512 x %"class.std::thread"], align 16
  %22 = alloca double, align 8
  %23 = alloca i32, align 4
  %24 = alloca %"class.std::thread", align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca double, align 8
  %28 = alloca [3 x i8], align 1
  %29 = alloca i32, align 4
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %"class.std::initializer_list", align 8
  %40 = alloca [6 x i32], align 4
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca double, align 8
  %45 = alloca ptr, align 8
  %46 = alloca %"class.std::initializer_list", align 8
  %47 = alloca [2 x i32], align 4
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca i32, align 4
  %55 = alloca ptr, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  %56 = load i32, ptr %4, align 4, !tbaa !5
  %57 = icmp slt i32 %56, 2
  br i1 %57, label %61, label %58

58:                                               ; preds = %2
  %59 = load i32, ptr %4, align 4, !tbaa !5
  %60 = icmp sgt i32 %59, 6
  br i1 %60, label %61, label %63

61:                                               ; preds = %58, %2
  %62 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef @.str.1, ptr noundef null)
  store i32 %62, ptr %3, align 4
  br label %786

63:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  store i32 10000, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 0, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  store double 1.000000e-02, ptr %9, align 8, !tbaa !11
  %64 = load i32, ptr %4, align 4, !tbaa !5
  %65 = icmp sgt i32 %64, 2
  br i1 %65, label %66, label %77

66:                                               ; preds = %63
  %67 = load ptr, ptr %5, align 8, !tbaa !9
  %68 = getelementptr inbounds ptr, ptr %67, i64 2
  %69 = load ptr, ptr %68, align 8, !tbaa !9
  %70 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %69, ptr noundef @.str.2, ptr noundef %6) #7
  %71 = icmp ne i32 %70, 1
  br i1 %71, label %75, label %72

72:                                               ; preds = %66
  %73 = load i32, ptr %6, align 4, !tbaa !5
  %74 = icmp sle i32 %73, 0
  br i1 %74, label %75, label %77

75:                                               ; preds = %72, %66
  %76 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef @.str.3, ptr noundef null)
  store i32 %76, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %785

77:                                               ; preds = %72, %63
  %78 = load i32, ptr %4, align 4, !tbaa !5
  %79 = icmp sgt i32 %78, 3
  br i1 %79, label %80, label %88

80:                                               ; preds = %77
  %81 = load ptr, ptr %5, align 8, !tbaa !9
  %82 = getelementptr inbounds ptr, ptr %81, i64 3
  %83 = load ptr, ptr %82, align 8, !tbaa !9
  %84 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %83, ptr noundef @.str.2, ptr noundef %7) #7
  %85 = icmp ne i32 %84, 1
  br i1 %85, label %86, label %88

86:                                               ; preds = %80
  %87 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef @.str.4, ptr noundef null)
  store i32 %87, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %785

88:                                               ; preds = %80, %77
  %89 = load i32, ptr %4, align 4, !tbaa !5
  %90 = icmp sgt i32 %89, 4
  br i1 %90, label %91, label %99

91:                                               ; preds = %88
  %92 = load ptr, ptr %5, align 8, !tbaa !9
  %93 = getelementptr inbounds ptr, ptr %92, i64 4
  %94 = load ptr, ptr %93, align 8, !tbaa !9
  %95 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %94, ptr noundef @.str.5, ptr noundef %9) #7
  %96 = icmp ne i32 %95, 1
  br i1 %96, label %97, label %99

97:                                               ; preds = %91
  %98 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef @.str.6, ptr noundef null)
  store i32 %98, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %785

99:                                               ; preds = %91, %88
  %100 = load i32, ptr %4, align 4, !tbaa !5
  %101 = icmp sgt i32 %100, 5
  br i1 %101, label %102, label %110

102:                                              ; preds = %99
  %103 = load ptr, ptr %5, align 8, !tbaa !9
  %104 = getelementptr inbounds ptr, ptr %103, i64 5
  %105 = load ptr, ptr %104, align 8, !tbaa !9
  %106 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %105, ptr noundef @.str.2, ptr noundef %8) #7
  %107 = icmp ne i32 %106, 1
  br i1 %107, label %108, label %110

108:                                              ; preds = %102
  %109 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef @.str.7, ptr noundef null)
  store i32 %109, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %785

110:                                              ; preds = %102, %99
  %111 = load double, ptr %9, align 8, !tbaa !11
  %112 = fcmp olt double %111, 1.000000e+00
  br i1 %112, label %113, label %115

113:                                              ; preds = %110
  %114 = load double, ptr %9, align 8, !tbaa !11
  br label %116

115:                                              ; preds = %110
  br label %116

116:                                              ; preds = %115, %113
  %117 = phi double [ %114, %113 ], [ 1.000000e+00, %115 ]
  %118 = fcmp ogt double 0.000000e+00, %117
  br i1 %118, label %119, label %120

119:                                              ; preds = %116
  br label %128

120:                                              ; preds = %116
  %121 = load double, ptr %9, align 8, !tbaa !11
  %122 = fcmp olt double %121, 1.000000e+00
  br i1 %122, label %123, label %125

123:                                              ; preds = %120
  %124 = load double, ptr %9, align 8, !tbaa !11
  br label %126

125:                                              ; preds = %120
  br label %126

126:                                              ; preds = %125, %123
  %127 = phi double [ %124, %123 ], [ 1.000000e+00, %125 ]
  br label %128

128:                                              ; preds = %126, %119
  %129 = phi double [ 0.000000e+00, %119 ], [ %127, %126 ]
  store double %129, ptr %9, align 8, !tbaa !11
  %130 = load i32, ptr %7, align 4, !tbaa !5
  %131 = icmp slt i32 512, %130
  br i1 %131, label %132, label %133

132:                                              ; preds = %128
  br label %135

133:                                              ; preds = %128
  %134 = load i32, ptr %7, align 4, !tbaa !5
  br label %135

135:                                              ; preds = %133, %132
  %136 = phi i32 [ 512, %132 ], [ %134, %133 ]
  %137 = icmp sgt i32 1, %136
  br i1 %137, label %138, label %139

138:                                              ; preds = %135
  br label %147

139:                                              ; preds = %135
  %140 = load i32, ptr %7, align 4, !tbaa !5
  %141 = icmp slt i32 512, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %139
  br label %145

143:                                              ; preds = %139
  %144 = load i32, ptr %7, align 4, !tbaa !5
  br label %145

145:                                              ; preds = %143, %142
  %146 = phi i32 [ 512, %142 ], [ %144, %143 ]
  br label %147

147:                                              ; preds = %145, %138
  %148 = phi i32 [ 1, %138 ], [ %146, %145 ]
  store i32 %148, ptr %7, align 4, !tbaa !5
  %149 = load i32, ptr %8, align 4, !tbaa !5
  %150 = icmp slt i32 512, %149
  br i1 %150, label %151, label %152

151:                                              ; preds = %147
  br label %154

152:                                              ; preds = %147
  %153 = load i32, ptr %8, align 4, !tbaa !5
  br label %154

154:                                              ; preds = %152, %151
  %155 = phi i32 [ 512, %151 ], [ %153, %152 ]
  %156 = icmp sgt i32 1, %155
  br i1 %156, label %157, label %158

157:                                              ; preds = %154
  br label %166

158:                                              ; preds = %154
  %159 = load i32, ptr %8, align 4, !tbaa !5
  %160 = icmp slt i32 512, %159
  br i1 %160, label %161, label %162

161:                                              ; preds = %158
  br label %164

162:                                              ; preds = %158
  %163 = load i32, ptr %8, align 4, !tbaa !5
  br label %164

164:                                              ; preds = %162, %161
  %165 = phi i32 [ 512, %161 ], [ %163, %162 ]
  br label %166

166:                                              ; preds = %164, %157
  %167 = phi i32 [ 1, %157 ], [ %165, %164 ]
  store i32 %167, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #7
  %168 = load ptr, ptr %5, align 8, !tbaa !9
  %169 = getelementptr inbounds ptr, ptr %168, i64 1
  %170 = load ptr, ptr %169, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef %170, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %171 unwind label %183

171:                                              ; preds = %166
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #7
  %172 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcm(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef @.str.8, i64 noundef 0) #7
  %173 = icmp ne i64 %172, -1
  %174 = zext i1 %173 to i8
  store i8 %174, ptr %15, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1000, ptr %16) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %16, ptr align 16 @__const.main.error, i64 1000, i1 false)
  %175 = load i8, ptr %15, align 1, !tbaa !13, !range !15, !noundef !16
  %176 = trunc i8 %175 to i1
  br i1 %176, label %177, label %191

177:                                              ; preds = %171
  %178 = load ptr, ptr %5, align 8, !tbaa !9
  %179 = getelementptr inbounds ptr, ptr %178, i64 1
  %180 = load ptr, ptr %179, align 8, !tbaa !9
  %181 = invoke ptr @mj_loadModel(ptr noundef %180, ptr noundef null)
          to label %182 unwind label %187

182:                                              ; preds = %177
  store ptr %181, ptr @m, align 8, !tbaa !9
  br label %198

183:                                              ; preds = %166
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %13, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %14, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #7
  br label %784

187:                                              ; preds = %201, %191, %177
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %13, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %14, align 4
  br label %783

191:                                              ; preds = %171
  %192 = load ptr, ptr %5, align 8, !tbaa !9
  %193 = getelementptr inbounds ptr, ptr %192, i64 1
  %194 = load ptr, ptr %193, align 8, !tbaa !9
  %195 = getelementptr inbounds [1000 x i8], ptr %16, i64 0, i64 0
  %196 = invoke ptr @mj_loadXML(ptr noundef %194, ptr noundef null, ptr noundef %195, i32 noundef 1000)
          to label %197 unwind label %187

197:                                              ; preds = %191
  store ptr %196, ptr @m, align 8, !tbaa !9
  br label %198

198:                                              ; preds = %197, %182
  %199 = load ptr, ptr @m, align 8, !tbaa !9
  %200 = icmp ne ptr %199, null
  br i1 %200, label %205, label %201

201:                                              ; preds = %198
  %202 = getelementptr inbounds [1000 x i8], ptr %16, i64 0, i64 0
  %203 = invoke noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef %202, ptr noundef null)
          to label %204 unwind label %187

204:                                              ; preds = %201
  store i32 %203, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %782

205:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  %206 = load ptr, ptr @m, align 8, !tbaa !9
  %207 = invoke i32 @mj_name2id(ptr noundef %206, i32 noundef 24, ptr noundef @.str.9)
          to label %208 unwind label %214

208:                                              ; preds = %205
  store i32 %207, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %209

209:                                              ; preds = %268, %208
  %210 = load i32, ptr %18, align 4, !tbaa !5
  %211 = load i32, ptr %7, align 4, !tbaa !5
  %212 = icmp slt i32 %210, %211
  br i1 %212, label %218, label %213

213:                                              ; preds = %209
  store i32 2, ptr %10, align 4
  br label %271

214:                                              ; preds = %292, %288, %274, %205
  %215 = landingpad { ptr, i32 }
          cleanup
  %216 = extractvalue { ptr, i32 } %215, 0
  store ptr %216, ptr %13, align 8
  %217 = extractvalue { ptr, i32 } %215, 1
  store i32 %217, ptr %14, align 4
  br label %781

218:                                              ; preds = %209
  %219 = load ptr, ptr @m, align 8, !tbaa !9
  %220 = invoke ptr @mj_makeData(ptr noundef %219)
          to label %221 unwind label %234

221:                                              ; preds = %218
  %222 = load i32, ptr %18, align 4, !tbaa !5
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %223
  store ptr %220, ptr %224, align 8, !tbaa !9
  %225 = load i32, ptr %18, align 4, !tbaa !5
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %226
  %228 = load ptr, ptr %227, align 8, !tbaa !9
  %229 = icmp ne ptr %228, null
  br i1 %229, label %238, label %230

230:                                              ; preds = %221
  %231 = load ptr, ptr @m, align 8, !tbaa !9
  %232 = invoke noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef @.str.10, ptr noundef %231)
          to label %233 unwind label %234

233:                                              ; preds = %230
  store i32 %232, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %271

234:                                              ; preds = %241, %230, %218
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %13, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %14, align 4
  br label %273

238:                                              ; preds = %221
  %239 = load i32, ptr %17, align 4, !tbaa !5
  %240 = icmp sge i32 %239, 0
  br i1 %240, label %241, label %249

241:                                              ; preds = %238
  %242 = load ptr, ptr @m, align 8, !tbaa !9
  %243 = load i32, ptr %18, align 4, !tbaa !5
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !9
  %247 = load i32, ptr %17, align 4, !tbaa !5
  invoke void @mj_resetDataKeyframe(ptr noundef %242, ptr noundef %246, i32 noundef %247)
          to label %248 unwind label %234

248:                                              ; preds = %241
  br label %249

249:                                              ; preds = %248, %238
  %250 = load i32, ptr %8, align 4, !tbaa !5
  %251 = icmp sgt i32 %250, 1
  br i1 %251, label %252, label %267

252:                                              ; preds = %249
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %253 = load i32, ptr %8, align 4, !tbaa !5
  %254 = sext i32 %253 to i64
  %255 = invoke ptr @mju_threadPoolCreate(i64 noundef %254)
          to label %256 unwind label %263

256:                                              ; preds = %252
  store ptr %255, ptr %19, align 8, !tbaa !9
  %257 = load i32, ptr %18, align 4, !tbaa !5
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %258
  %260 = load ptr, ptr %259, align 8, !tbaa !9
  %261 = load ptr, ptr %19, align 8, !tbaa !9
  invoke void @mju_bindThreadPool(ptr noundef %260, ptr noundef %261)
          to label %262 unwind label %263

262:                                              ; preds = %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %267

263:                                              ; preds = %256, %252
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %13, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %273

267:                                              ; preds = %262, %249
  br label %268

268:                                              ; preds = %267
  %269 = load i32, ptr %18, align 4, !tbaa !5
  %270 = add nsw i32 %269, 1
  store i32 %270, ptr %18, align 4, !tbaa !5
  br label %209, !llvm.loop !17

271:                                              ; preds = %233, %213
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  %272 = load i32, ptr %10, align 4
  switch i32 %272, label %780 [
    i32 2, label %274
  ]

273:                                              ; preds = %263, %234
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %781

274:                                              ; preds = %271
  store ptr @_Z5gettmv, ptr @mjcb_time, align 8, !tbaa !9
  %275 = load i32, ptr %6, align 4, !tbaa !5
  %276 = load i32, ptr %7, align 4, !tbaa !5
  %277 = icmp sgt i32 %276, 1
  %278 = zext i1 %277 to i64
  %279 = select i1 %277, ptr @.str.12, ptr @.str.13
  %280 = load ptr, ptr @m, align 8, !tbaa !9
  %281 = getelementptr inbounds %struct.mjModel_, ptr %280, i32 0, i32 78
  %282 = getelementptr inbounds %struct.mjOption_, ptr %281, i32 0, i32 0
  %283 = load double, ptr %282, align 8, !tbaa !19
  %284 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %275, ptr noundef %279, double noundef %283)
          to label %285 unwind label %214

285:                                              ; preds = %274
  %286 = load i32, ptr %8, align 4, !tbaa !5
  %287 = icmp sgt i32 %286, 1
  br i1 %287, label %288, label %292

288:                                              ; preds = %285
  %289 = load i32, ptr %8, align 4, !tbaa !5
  %290 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef %289)
          to label %291 unwind label %214

291:                                              ; preds = %288
  br label %292

292:                                              ; preds = %291, %285
  %293 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.15)
          to label %294 unwind label %214

294:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #7
  %295 = load ptr, ptr @m, align 8, !tbaa !9
  %296 = load i32, ptr %6, align 4, !tbaa !5
  %297 = load double, ptr %9, align 8, !tbaa !11
  invoke void @_Z9CtrlNoisePK8mjModel_id(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %20, ptr noundef %295, i32 noundef %296, double noundef %297)
          to label %298 unwind label %313

298:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 4096, ptr %21) #7
  %299 = getelementptr inbounds [512 x %"class.std::thread"], ptr %21, i32 0, i32 0
  %300 = getelementptr inbounds %"class.std::thread", ptr %299, i64 512
  br label %301

301:                                              ; preds = %301, %298
  %302 = phi ptr [ %299, %298 ], [ %303, %301 ]
  call void @_ZNSt6threadC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %302) #7
  %303 = getelementptr inbounds %"class.std::thread", ptr %302, i64 1
  %304 = icmp eq ptr %303, %300
  br i1 %304, label %305, label %301

305:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %306 = invoke noundef double @_Z5gettmv()
          to label %307 unwind label %317

307:                                              ; preds = %305
  store double %306, ptr %22, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %308

308:                                              ; preds = %328, %307
  %309 = load i32, ptr %23, align 4, !tbaa !5
  %310 = load i32, ptr %7, align 4, !tbaa !5
  %311 = icmp slt i32 %309, %310
  br i1 %311, label %321, label %312

312:                                              ; preds = %308
  store i32 5, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %335

313:                                              ; preds = %294
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %13, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %14, align 4
  br label %779

317:                                              ; preds = %305
  %318 = landingpad { ptr, i32 }
          cleanup
  %319 = extractvalue { ptr, i32 } %318, 0
  store ptr %319, ptr %13, align 8
  %320 = extractvalue { ptr, i32 } %318, 1
  store i32 %320, ptr %14, align 4
  br label %766

321:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  %322 = call noundef ptr @_ZNSt6vectorIdSaIdEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %20) #7
  store ptr %322, ptr %25, align 8, !tbaa !9
  invoke void @_ZNSt6threadC2IRFviiPdEJRiS4_S1_EvEEOT_DpOT0_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull @_Z8simulateiiPd, ptr noundef nonnull align 4 dereferenceable(4) %23, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 8 dereferenceable(8) %25)
          to label %323 unwind label %331

323:                                              ; preds = %321
  %324 = load i32, ptr %23, align 4, !tbaa !5
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds [512 x %"class.std::thread"], ptr %21, i64 0, i64 %325
  %327 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6threadaSEOS_(ptr noundef nonnull align 8 dereferenceable(8) %326, ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  br label %328

328:                                              ; preds = %323
  %329 = load i32, ptr %23, align 4, !tbaa !5
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %23, align 4, !tbaa !5
  br label %308, !llvm.loop !32

331:                                              ; preds = %321
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %13, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %766

335:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  store i32 0, ptr %26, align 4, !tbaa !5
  br label %336

336:                                              ; preds = %346, %335
  %337 = load i32, ptr %26, align 4, !tbaa !5
  %338 = load i32, ptr %7, align 4, !tbaa !5
  %339 = icmp slt i32 %337, %338
  br i1 %339, label %341, label %340

340:                                              ; preds = %336
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %353

341:                                              ; preds = %336
  %342 = load i32, ptr %26, align 4, !tbaa !5
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds [512 x %"class.std::thread"], ptr %21, i64 0, i64 %343
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %344)
          to label %345 unwind label %349

345:                                              ; preds = %341
  br label %346

346:                                              ; preds = %345
  %347 = load i32, ptr %26, align 4, !tbaa !5
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %26, align 4, !tbaa !5
  br label %336, !llvm.loop !33

349:                                              ; preds = %341
  %350 = landingpad { ptr, i32 }
          cleanup
  %351 = extractvalue { ptr, i32 } %350, 0
  store ptr %351, ptr %13, align 8
  %352 = extractvalue { ptr, i32 } %350, 1
  store i32 %352, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %766

353:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %354 = invoke noundef double @_Z5gettmv()
          to label %355 unwind label %401

355:                                              ; preds = %353
  %356 = load double, ptr %22, align 8, !tbaa !11
  %357 = fsub double %354, %356
  %358 = fmul double 0x3EB0C6F7A0B5ED8D, %357
  store double %358, ptr %27, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 3, ptr %28) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %28, ptr align 1 @__const.main.mu_str, i64 3, i1 false)
  %359 = load i32, ptr %7, align 4, !tbaa !5
  %360 = icmp sgt i32 %359, 1
  br i1 %360, label %361, label %409

361:                                              ; preds = %355
  %362 = load i32, ptr %7, align 4, !tbaa !5
  %363 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.16, i32 noundef %362)
          to label %364 unwind label %405

364:                                              ; preds = %361
  %365 = load double, ptr %27, align 8, !tbaa !11
  %366 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %365)
          to label %367 unwind label %405

367:                                              ; preds = %364
  %368 = load i32, ptr %7, align 4, !tbaa !5
  %369 = load i32, ptr %6, align 4, !tbaa !5
  %370 = mul nsw i32 %368, %369
  %371 = sitofp i32 %370 to double
  %372 = load double, ptr %27, align 8, !tbaa !11
  %373 = fdiv double %371, %372
  %374 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef %373)
          to label %375 unwind label %405

375:                                              ; preds = %367
  %376 = load i32, ptr %7, align 4, !tbaa !5
  %377 = load i32, ptr %6, align 4, !tbaa !5
  %378 = mul nsw i32 %376, %377
  %379 = sitofp i32 %378 to double
  %380 = load ptr, ptr @m, align 8, !tbaa !9
  %381 = getelementptr inbounds %struct.mjModel_, ptr %380, i32 0, i32 78
  %382 = getelementptr inbounds %struct.mjOption_, ptr %381, i32 0, i32 0
  %383 = load double, ptr %382, align 8, !tbaa !19
  %384 = fmul double %379, %383
  %385 = load double, ptr %27, align 8, !tbaa !11
  %386 = fdiv double %384, %385
  %387 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.19, double noundef %386)
          to label %388 unwind label %405

388:                                              ; preds = %375
  %389 = load double, ptr %27, align 8, !tbaa !11
  %390 = fmul double 1.000000e+06, %389
  %391 = load i32, ptr %7, align 4, !tbaa !5
  %392 = load i32, ptr %6, align 4, !tbaa !5
  %393 = mul nsw i32 %391, %392
  %394 = sitofp i32 %393 to double
  %395 = fdiv double %390, %394
  %396 = getelementptr inbounds [3 x i8], ptr %28, i64 0, i64 0
  %397 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.20, double noundef %395, ptr noundef %396)
          to label %398 unwind label %405

398:                                              ; preds = %388
  %399 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.21)
          to label %400 unwind label %405

400:                                              ; preds = %398
  br label %409

401:                                              ; preds = %353
  %402 = landingpad { ptr, i32 }
          cleanup
  %403 = extractvalue { ptr, i32 } %402, 0
  store ptr %403, ptr %13, align 8
  %404 = extractvalue { ptr, i32 } %402, 1
  store i32 %404, ptr %14, align 4
  br label %765

405:                                              ; preds = %458, %453, %445, %437, %429, %418, %412, %409, %398, %388, %375, %367, %364, %361
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %13, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %14, align 4
  br label %764

409:                                              ; preds = %400, %355
  %410 = load double, ptr @simtime, align 16, !tbaa !11
  %411 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.22, double noundef %410)
          to label %412 unwind label %405

412:                                              ; preds = %409
  %413 = load i32, ptr %6, align 4, !tbaa !5
  %414 = sitofp i32 %413 to double
  %415 = load double, ptr @simtime, align 16, !tbaa !11
  %416 = fdiv double %414, %415
  %417 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.23, double noundef %416)
          to label %418 unwind label %405

418:                                              ; preds = %412
  %419 = load i32, ptr %6, align 4, !tbaa !5
  %420 = sitofp i32 %419 to double
  %421 = load ptr, ptr @m, align 8, !tbaa !9
  %422 = getelementptr inbounds %struct.mjModel_, ptr %421, i32 0, i32 78
  %423 = getelementptr inbounds %struct.mjOption_, ptr %422, i32 0, i32 0
  %424 = load double, ptr %423, align 8, !tbaa !19
  %425 = fmul double %420, %424
  %426 = load double, ptr @simtime, align 16, !tbaa !11
  %427 = fdiv double %425, %426
  %428 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.24, double noundef %427)
          to label %429 unwind label %405

429:                                              ; preds = %418
  %430 = load double, ptr @simtime, align 16, !tbaa !11
  %431 = fmul double 1.000000e+06, %430
  %432 = load i32, ptr %6, align 4, !tbaa !5
  %433 = sitofp i32 %432 to double
  %434 = fdiv double %431, %433
  %435 = getelementptr inbounds [3 x i8], ptr %28, i64 0, i64 0
  %436 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.25, double noundef %434, ptr noundef %435)
          to label %437 unwind label %405

437:                                              ; preds = %429
  %438 = load i32, ptr @contacts, align 16, !tbaa !5
  %439 = sitofp i32 %438 to float
  %440 = load i32, ptr %6, align 4, !tbaa !5
  %441 = sitofp i32 %440 to float
  %442 = fdiv float %439, %441
  %443 = fpext float %442 to double
  %444 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.26, double noundef %443)
          to label %445 unwind label %405

445:                                              ; preds = %437
  %446 = load i32, ptr @constraints, align 16, !tbaa !5
  %447 = sitofp i32 %446 to float
  %448 = load i32, ptr %6, align 4, !tbaa !5
  %449 = sitofp i32 %448 to float
  %450 = fdiv float %447, %449
  %451 = fpext float %450 to double
  %452 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.27, double noundef %451)
          to label %453 unwind label %405

453:                                              ; preds = %445
  %454 = load ptr, ptr @m, align 8, !tbaa !9
  %455 = getelementptr inbounds %struct.mjModel_, ptr %454, i32 0, i32 1
  %456 = load i32, ptr %455, align 4, !tbaa !34
  %457 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.28, i32 noundef %456)
          to label %458 unwind label %405

458:                                              ; preds = %453
  %459 = load i32, ptr %7, align 4, !tbaa !5
  %460 = icmp sgt i32 %459, 1
  %461 = zext i1 %460 to i64
  %462 = select i1 %460, ptr @.str.30, ptr @.str.13
  %463 = getelementptr inbounds [3 x i8], ptr %28, i64 0, i64 0
  %464 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.29, ptr noundef %462, ptr noundef %463)
          to label %465 unwind label %405

465:                                              ; preds = %458
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %466 = load ptr, ptr @d, align 16, !tbaa !9
  %467 = getelementptr inbounds %struct.mjData_, ptr %466, i32 0, i32 12
  %468 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %467, i64 0, i64 0
  %469 = getelementptr inbounds %struct.mjTimerStat_, ptr %468, i32 0, i32 1
  %470 = load i32, ptr %469, align 8, !tbaa !35
  store i32 %470, ptr %29, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %471 = load i32, ptr %29, align 4, !tbaa !5
  %472 = icmp ne i32 %471, 0
  br i1 %472, label %473, label %482

473:                                              ; preds = %465
  %474 = load ptr, ptr @d, align 16, !tbaa !9
  %475 = getelementptr inbounds %struct.mjData_, ptr %474, i32 0, i32 12
  %476 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %475, i64 0, i64 0
  %477 = getelementptr inbounds %struct.mjTimerStat_, ptr %476, i32 0, i32 0
  %478 = load double, ptr %477, align 8, !tbaa !37
  %479 = load i32, ptr %29, align 4, !tbaa !5
  %480 = sitofp i32 %479 to double
  %481 = fdiv double %478, %480
  br label %483

482:                                              ; preds = %465
  br label %483

483:                                              ; preds = %482, %473
  %484 = phi double [ %481, %473 ], [ 0.000000e+00, %482 ]
  store double %484, ptr %30, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  store double 0.000000e+00, ptr %31, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  store double 0.000000e+00, ptr %32, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #7
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %485

485:                                              ; preds = %557, %483
  %486 = load i32, ptr %33, align 4, !tbaa !5
  %487 = icmp sle i32 %486, 7
  br i1 %487, label %489, label %488

488:                                              ; preds = %485
  store i32 11, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %560

489:                                              ; preds = %485
  %490 = load ptr, ptr @d, align 16, !tbaa !9
  %491 = getelementptr inbounds %struct.mjData_, ptr %490, i32 0, i32 12
  %492 = load i32, ptr %33, align 4, !tbaa !5
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %491, i64 0, i64 %493
  %495 = getelementptr inbounds %struct.mjTimerStat_, ptr %494, i32 0, i32 1
  %496 = load i32, ptr %495, align 8, !tbaa !35
  %497 = icmp sgt i32 %496, 0
  br i1 %497, label %498, label %556

498:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #7
  %499 = load ptr, ptr @d, align 16, !tbaa !9
  %500 = getelementptr inbounds %struct.mjData_, ptr %499, i32 0, i32 12
  %501 = load i32, ptr %33, align 4, !tbaa !5
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %500, i64 0, i64 %502
  %504 = getelementptr inbounds %struct.mjTimerStat_, ptr %503, i32 0, i32 1
  %505 = load i32, ptr %504, align 8, !tbaa !35
  store i32 %505, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %506 = load i32, ptr %34, align 4, !tbaa !5
  %507 = icmp ne i32 %506, 0
  br i1 %507, label %508, label %519

508:                                              ; preds = %498
  %509 = load ptr, ptr @d, align 16, !tbaa !9
  %510 = getelementptr inbounds %struct.mjData_, ptr %509, i32 0, i32 12
  %511 = load i32, ptr %33, align 4, !tbaa !5
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %510, i64 0, i64 %512
  %514 = getelementptr inbounds %struct.mjTimerStat_, ptr %513, i32 0, i32 0
  %515 = load double, ptr %514, align 8, !tbaa !37
  %516 = load i32, ptr %34, align 4, !tbaa !5
  %517 = sitofp i32 %516 to double
  %518 = fdiv double %515, %517
  br label %520

519:                                              ; preds = %498
  br label %520

520:                                              ; preds = %519, %508
  %521 = phi double [ %518, %508 ], [ 0.000000e+00, %519 ]
  store double %521, ptr %35, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %522 = load i32, ptr %34, align 4, !tbaa !5
  %523 = icmp ne i32 %522, 0
  br i1 %523, label %524, label %529

524:                                              ; preds = %520
  %525 = load double, ptr %35, align 8, !tbaa !11
  %526 = fmul double 1.000000e+02, %525
  %527 = load double, ptr %30, align 8, !tbaa !11
  %528 = fdiv double %526, %527
  br label %530

529:                                              ; preds = %520
  br label %530

530:                                              ; preds = %529, %524
  %531 = phi double [ %528, %524 ], [ 0.000000e+00, %529 ]
  store double %531, ptr %36, align 8, !tbaa !11
  %532 = load i32, ptr %33, align 4, !tbaa !5
  %533 = sext i32 %532 to i64
  %534 = getelementptr inbounds [15 x ptr], ptr @mjTIMERSTRING, i64 0, i64 %533
  %535 = load ptr, ptr %534, align 8, !tbaa !9
  %536 = load double, ptr %35, align 8, !tbaa !11
  %537 = load double, ptr %36, align 8, !tbaa !11
  %538 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.31, ptr noundef %535, double noundef %536, double noundef %537)
          to label %539 unwind label %544

539:                                              ; preds = %530
  %540 = load i32, ptr %33, align 4, !tbaa !5
  %541 = icmp eq i32 %540, 0
  br i1 %541, label %542, label %548

542:                                              ; preds = %539
  %543 = load double, ptr %35, align 8, !tbaa !11
  store double %543, ptr %32, align 8, !tbaa !11
  br label %548

544:                                              ; preds = %530
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %13, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #7
  br label %763

548:                                              ; preds = %542, %539
  %549 = load i32, ptr %33, align 4, !tbaa !5
  %550 = icmp sge i32 %549, 3
  br i1 %550, label %551, label %555

551:                                              ; preds = %548
  %552 = load double, ptr %35, align 8, !tbaa !11
  %553 = load double, ptr %31, align 8, !tbaa !11
  %554 = fadd double %553, %552
  store double %554, ptr %31, align 8, !tbaa !11
  br label %555

555:                                              ; preds = %551, %548
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #7
  br label %556

556:                                              ; preds = %555, %489
  br label %557

557:                                              ; preds = %556
  %558 = load i32, ptr %33, align 4, !tbaa !5
  %559 = add nsw i32 %558, 1
  store i32 %559, ptr %33, align 4, !tbaa !5
  br label %485, !llvm.loop !38

560:                                              ; preds = %488
  %561 = load double, ptr %30, align 8, !tbaa !11
  %562 = fcmp ogt double %561, 0.000000e+00
  br i1 %562, label %563, label %578

563:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %564 = load double, ptr %32, align 8, !tbaa !11
  %565 = load double, ptr %31, align 8, !tbaa !11
  %566 = fsub double %564, %565
  store double %566, ptr %37, align 8, !tbaa !11
  %567 = load double, ptr %37, align 8, !tbaa !11
  %568 = load double, ptr %37, align 8, !tbaa !11
  %569 = fmul double 1.000000e+02, %568
  %570 = load double, ptr %30, align 8, !tbaa !11
  %571 = fdiv double %569, %570
  %572 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.31, ptr noundef @.str.32, double noundef %567, double noundef %571)
          to label %573 unwind label %574

573:                                              ; preds = %563
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %578

574:                                              ; preds = %563
  %575 = landingpad { ptr, i32 }
          cleanup
  %576 = extractvalue { ptr, i32 } %575, 0
  store ptr %576, ptr %13, align 8
  %577 = extractvalue { ptr, i32 } %575, 1
  store i32 %577, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  br label %763

578:                                              ; preds = %573, %560
  %579 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.33)
          to label %580 unwind label %592

580:                                              ; preds = %578
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 4 @constinit, i64 24, i1 false), !tbaa.struct !39
  %581 = getelementptr inbounds %"class.std::initializer_list", ptr %39, i32 0, i32 0
  store ptr %40, ptr %581, align 8, !tbaa !41
  %582 = getelementptr inbounds %"class.std::initializer_list", ptr %39, i32 0, i32 1
  store i64 6, ptr %582, align 8, !tbaa !43
  store ptr %39, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %583 = load ptr, ptr %38, align 8, !tbaa !9
  %584 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %583) #7
  store ptr %584, ptr %41, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %585 = load ptr, ptr %38, align 8, !tbaa !9
  %586 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E3endEv(ptr noundef nonnull align 8 dereferenceable(16) %585) #7
  store ptr %586, ptr %42, align 8, !tbaa !9
  br label %587

587:                                              ; preds = %722, %580
  %588 = load ptr, ptr %41, align 8, !tbaa !9
  %589 = load ptr, ptr %42, align 8, !tbaa !9
  %590 = icmp ne ptr %588, %589
  br i1 %590, label %596, label %591

591:                                              ; preds = %587
  store i32 14, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %726

592:                                              ; preds = %758, %578
  %593 = landingpad { ptr, i32 }
          cleanup
  %594 = extractvalue { ptr, i32 } %593, 0
  store ptr %594, ptr %13, align 8
  %595 = extractvalue { ptr, i32 } %593, 1
  store i32 %595, ptr %14, align 4
  br label %763

596:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  %597 = load ptr, ptr %41, align 8, !tbaa !9
  %598 = load i32, ptr %597, align 4, !tbaa !44
  store i32 %598, ptr %43, align 4, !tbaa !5
  %599 = load ptr, ptr @d, align 16, !tbaa !9
  %600 = getelementptr inbounds %struct.mjData_, ptr %599, i32 0, i32 12
  %601 = load i32, ptr %43, align 4, !tbaa !5
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %600, i64 0, i64 %602
  %604 = getelementptr inbounds %struct.mjTimerStat_, ptr %603, i32 0, i32 1
  %605 = load i32, ptr %604, align 8, !tbaa !35
  %606 = icmp sgt i32 %605, 0
  br i1 %606, label %607, label %652

607:                                              ; preds = %596
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  %608 = load ptr, ptr @d, align 16, !tbaa !9
  %609 = getelementptr inbounds %struct.mjData_, ptr %608, i32 0, i32 12
  %610 = load i32, ptr %43, align 4, !tbaa !5
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %609, i64 0, i64 %611
  %613 = getelementptr inbounds %struct.mjTimerStat_, ptr %612, i32 0, i32 0
  %614 = load double, ptr %613, align 8, !tbaa !37
  %615 = load ptr, ptr @d, align 16, !tbaa !9
  %616 = getelementptr inbounds %struct.mjData_, ptr %615, i32 0, i32 12
  %617 = load i32, ptr %43, align 4, !tbaa !5
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %616, i64 0, i64 %618
  %620 = getelementptr inbounds %struct.mjTimerStat_, ptr %619, i32 0, i32 1
  %621 = load i32, ptr %620, align 8, !tbaa !35
  %622 = sitofp i32 %621 to double
  %623 = fdiv double %614, %622
  store double %623, ptr %44, align 8, !tbaa !11
  %624 = load i32, ptr %43, align 4, !tbaa !5
  %625 = icmp eq i32 %624, 3
  br i1 %625, label %626, label %638

626:                                              ; preds = %607
  %627 = load double, ptr %44, align 8, !tbaa !11
  %628 = load double, ptr %44, align 8, !tbaa !11
  %629 = fmul double 1.000000e+02, %628
  %630 = load double, ptr %30, align 8, !tbaa !11
  %631 = fdiv double %629, %630
  %632 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.34, double noundef %627, double noundef %631)
          to label %633 unwind label %634

633:                                              ; preds = %626
  br label %651

634:                                              ; preds = %638, %626
  %635 = landingpad { ptr, i32 }
          cleanup
  %636 = extractvalue { ptr, i32 } %635, 0
  store ptr %636, ptr %13, align 8
  %637 = extractvalue { ptr, i32 } %635, 1
  store i32 %637, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  br label %725

638:                                              ; preds = %607
  %639 = load i32, ptr %43, align 4, !tbaa !5
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds [15 x ptr], ptr @mjTIMERSTRING, i64 0, i64 %640
  %642 = load ptr, ptr %641, align 8, !tbaa !9
  %643 = getelementptr inbounds i8, ptr %642, i64 4
  %644 = load double, ptr %44, align 8, !tbaa !11
  %645 = load double, ptr %44, align 8, !tbaa !11
  %646 = fmul double 1.000000e+02, %645
  %647 = load double, ptr %30, align 8, !tbaa !11
  %648 = fdiv double %646, %647
  %649 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.35, ptr noundef %643, double noundef %644, double noundef %648)
          to label %650 unwind label %634

650:                                              ; preds = %638
  br label %651

651:                                              ; preds = %650, %633
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  br label %652

652:                                              ; preds = %651, %596
  %653 = load i32, ptr %43, align 4, !tbaa !5
  %654 = icmp eq i32 %653, 10
  br i1 %654, label %655, label %721

655:                                              ; preds = %652
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  store i32 13, ptr %47, align 4, !tbaa !44
  %656 = getelementptr inbounds i32, ptr %47, i64 1
  store i32 14, ptr %656, align 4, !tbaa !44
  %657 = getelementptr inbounds %"class.std::initializer_list", ptr %46, i32 0, i32 0
  store ptr %47, ptr %657, align 8, !tbaa !41
  %658 = getelementptr inbounds %"class.std::initializer_list", ptr %46, i32 0, i32 1
  store i64 2, ptr %658, align 8, !tbaa !43
  store ptr %46, ptr %45, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  %659 = load ptr, ptr %45, align 8, !tbaa !9
  %660 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %659) #7
  store ptr %660, ptr %48, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %661 = load ptr, ptr %45, align 8, !tbaa !9
  %662 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E3endEv(ptr noundef nonnull align 8 dereferenceable(16) %661) #7
  store ptr %662, ptr %49, align 8, !tbaa !9
  br label %663

663:                                              ; preds = %713, %655
  %664 = load ptr, ptr %48, align 8, !tbaa !9
  %665 = load ptr, ptr %49, align 8, !tbaa !9
  %666 = icmp ne ptr %664, %665
  br i1 %666, label %668, label %667

667:                                              ; preds = %663
  store i32 16, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %720

668:                                              ; preds = %663
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #7
  %669 = load ptr, ptr %48, align 8, !tbaa !9
  %670 = load i32, ptr %669, align 4, !tbaa !44
  store i32 %670, ptr %50, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #7
  %671 = load ptr, ptr @d, align 16, !tbaa !9
  %672 = getelementptr inbounds %struct.mjData_, ptr %671, i32 0, i32 12
  %673 = load i32, ptr %50, align 4, !tbaa !5
  %674 = sext i32 %673 to i64
  %675 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %672, i64 0, i64 %674
  %676 = getelementptr inbounds %struct.mjTimerStat_, ptr %675, i32 0, i32 1
  %677 = load i32, ptr %676, align 8, !tbaa !35
  store i32 %677, ptr %51, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  %678 = load i32, ptr %51, align 4, !tbaa !5
  %679 = icmp ne i32 %678, 0
  br i1 %679, label %680, label %691

680:                                              ; preds = %668
  %681 = load ptr, ptr @d, align 16, !tbaa !9
  %682 = getelementptr inbounds %struct.mjData_, ptr %681, i32 0, i32 12
  %683 = load i32, ptr %50, align 4, !tbaa !5
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %682, i64 0, i64 %684
  %686 = getelementptr inbounds %struct.mjTimerStat_, ptr %685, i32 0, i32 0
  %687 = load double, ptr %686, align 8, !tbaa !37
  %688 = load i32, ptr %51, align 4, !tbaa !5
  %689 = sitofp i32 %688 to double
  %690 = fdiv double %687, %689
  br label %692

691:                                              ; preds = %668
  br label %692

692:                                              ; preds = %691, %680
  %693 = phi double [ %690, %680 ], [ 0.000000e+00, %691 ]
  store double %693, ptr %52, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  %694 = load i32, ptr %51, align 4, !tbaa !5
  %695 = icmp ne i32 %694, 0
  br i1 %695, label %696, label %701

696:                                              ; preds = %692
  %697 = load double, ptr %52, align 8, !tbaa !11
  %698 = fmul double 1.000000e+02, %697
  %699 = load double, ptr %30, align 8, !tbaa !11
  %700 = fdiv double %698, %699
  br label %702

701:                                              ; preds = %692
  br label %702

702:                                              ; preds = %701, %696
  %703 = phi double [ %700, %696 ], [ 0.000000e+00, %701 ]
  store double %703, ptr %53, align 8, !tbaa !11
  %704 = load i32, ptr %50, align 4, !tbaa !5
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds [15 x ptr], ptr @mjTIMERSTRING, i64 0, i64 %705
  %707 = load ptr, ptr %706, align 8, !tbaa !9
  %708 = getelementptr inbounds i8, ptr %707, i64 4
  %709 = load double, ptr %52, align 8, !tbaa !11
  %710 = load double, ptr %53, align 8, !tbaa !11
  %711 = invoke i32 (ptr, ...) @printf(ptr noundef @.str.36, ptr noundef %708, double noundef %709, double noundef %710)
          to label %712 unwind label %716

712:                                              ; preds = %702
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #7
  br label %713

713:                                              ; preds = %712
  %714 = load ptr, ptr %48, align 8, !tbaa !9
  %715 = getelementptr inbounds i32, ptr %714, i32 1
  store ptr %715, ptr %48, align 8, !tbaa !9
  br label %663

716:                                              ; preds = %702
  %717 = landingpad { ptr, i32 }
          cleanup
  %718 = extractvalue { ptr, i32 } %717, 0
  store ptr %718, ptr %13, align 8
  %719 = extractvalue { ptr, i32 } %717, 1
  store i32 %719, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %725

720:                                              ; preds = %667
  br label %721

721:                                              ; preds = %720, %652
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %722

722:                                              ; preds = %721
  %723 = load ptr, ptr %41, align 8, !tbaa !9
  %724 = getelementptr inbounds i32, ptr %723, i32 1
  store ptr %724, ptr %41, align 8, !tbaa !9
  br label %587

725:                                              ; preds = %716, %634
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %763

726:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #7
  store i32 0, ptr %54, align 4, !tbaa !5
  br label %727

727:                                              ; preds = %755, %726
  %728 = load i32, ptr %54, align 4, !tbaa !5
  %729 = load i32, ptr %7, align 4, !tbaa !5
  %730 = icmp slt i32 %728, %729
  br i1 %730, label %732, label %731

731:                                              ; preds = %727
  store i32 18, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  br label %758

732:                                              ; preds = %727
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  %733 = load i32, ptr %54, align 4, !tbaa !5
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %734
  %736 = load ptr, ptr %735, align 8, !tbaa !9
  %737 = getelementptr inbounds %struct.mjData_, ptr %736, i32 0, i32 160
  %738 = load i64, ptr %737, align 8, !tbaa !46
  %739 = inttoptr i64 %738 to ptr
  store ptr %739, ptr %55, align 8, !tbaa !9
  %740 = load i32, ptr %54, align 4, !tbaa !5
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %741
  %743 = load ptr, ptr %742, align 8, !tbaa !9
  invoke void @mj_deleteData(ptr noundef %743)
          to label %744 unwind label %750

744:                                              ; preds = %732
  %745 = load ptr, ptr %55, align 8, !tbaa !9
  %746 = icmp ne ptr %745, null
  br i1 %746, label %747, label %754

747:                                              ; preds = %744
  %748 = load ptr, ptr %55, align 8, !tbaa !9
  invoke void @mju_threadPoolDestroy(ptr noundef %748)
          to label %749 unwind label %750

749:                                              ; preds = %747
  br label %754

750:                                              ; preds = %747, %732
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %13, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %14, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #7
  br label %763

754:                                              ; preds = %749, %744
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  br label %755

755:                                              ; preds = %754
  %756 = load i32, ptr %54, align 4, !tbaa !5
  %757 = add nsw i32 %756, 1
  store i32 %757, ptr %54, align 4, !tbaa !5
  br label %727, !llvm.loop !48

758:                                              ; preds = %731
  %759 = invoke noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef null, ptr noundef null)
          to label %760 unwind label %592

760:                                              ; preds = %758
  store i32 %759, ptr %3, align 4
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 3, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  %761 = getelementptr inbounds [512 x %"class.std::thread"], ptr %21, i32 0, i32 0
  %762 = getelementptr inbounds %"class.std::thread", ptr %761, i64 512
  br label %769

763:                                              ; preds = %750, %725, %592, %574, %544
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  br label %764

764:                                              ; preds = %763, %405
  call void @llvm.lifetime.end.p0(i64 3, ptr %28) #7
  br label %765

765:                                              ; preds = %764, %401
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  br label %766

766:                                              ; preds = %765, %349, %331, %317
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  %767 = getelementptr inbounds [512 x %"class.std::thread"], ptr %21, i32 0, i32 0
  %768 = getelementptr inbounds %"class.std::thread", ptr %767, i64 512
  br label %774

769:                                              ; preds = %769, %760
  %770 = phi ptr [ %762, %760 ], [ %771, %769 ]
  %771 = getelementptr inbounds %"class.std::thread", ptr %770, i64 -1
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %771) #7
  %772 = icmp eq ptr %771, %761
  br i1 %772, label %773, label %769

773:                                              ; preds = %769
  call void @llvm.lifetime.end.p0(i64 4096, ptr %21) #7
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #7
  br label %780

774:                                              ; preds = %774, %766
  %775 = phi ptr [ %768, %766 ], [ %776, %774 ]
  %776 = getelementptr inbounds %"class.std::thread", ptr %775, i64 -1
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %776) #7
  %777 = icmp eq ptr %776, %767
  br i1 %777, label %778, label %774

778:                                              ; preds = %774
  call void @llvm.lifetime.end.p0(i64 4096, ptr %21) #7
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %20) #7
  br label %779

779:                                              ; preds = %778, %313
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #7
  br label %781

780:                                              ; preds = %773, %271
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %782

781:                                              ; preds = %779, %273, %214
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %783

782:                                              ; preds = %780, %204
  call void @llvm.lifetime.end.p0(i64 1000, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #7
  br label %785

783:                                              ; preds = %781, %187
  call void @llvm.lifetime.end.p0(i64 1000, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #7
  br label %784

784:                                              ; preds = %783, %183
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  br label %788

785:                                              ; preds = %782, %108, %97, %86, %75
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  br label %786

786:                                              ; preds = %785, %61
  %787 = load i32, ptr %3, align 4
  ret i32 %787

788:                                              ; preds = %784
  %789 = load ptr, ptr %13, align 8
  %790 = load i32, ptr %14, align 4
  %791 = insertvalue { ptr, i32 } poison, ptr %789, 0
  %792 = insertvalue { ptr, i32 } %791, i32 %790, 1
  resume { ptr, i32 } %792
}

; Function Attrs: nounwind
declare i32 @__isoc99_sscanf(ptr noundef, ptr noundef, ...) #6

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcm(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i64 noundef) #4 align 2

declare ptr @mj_loadModel(ptr noundef, ptr noundef) #3

declare ptr @mj_loadXML(ptr noundef, ptr noundef, ptr noundef, i32 noundef) #3

declare i32 @mj_name2id(ptr noundef, i32 noundef, ptr noundef) #3

declare ptr @mj_makeData(ptr noundef) #3

declare void @mj_resetDataKeyframe(ptr noundef, ptr noundef, i32 noundef) #3

declare ptr @mju_threadPoolCreate(i64 noundef) #3

declare void @mju_bindThreadPool(ptr noundef, ptr noundef) #3

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

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

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

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

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

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) #3

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

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

declare void @mj_deleteData(ptr noundef) #3

declare void @mju_threadPoolDestroy(ptr noundef) #3

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress norecurse 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 #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{i8 0, i8 2}
!16 = !{}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!20, !12, i64 320}
!20 = !{!"_ZTS8mjModel_", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !6, i64 112, !6, i64 116, !6, i64 120, !6, i64 124, !6, i64 128, !6, i64 132, !6, i64 136, !6, i64 140, !6, i64 144, !6, i64 148, !6, i64 152, !6, i64 156, !6, i64 160, !6, i64 164, !6, i64 168, !6, i64 172, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188, !6, i64 192, !6, i64 196, !6, i64 200, !6, i64 204, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !6, i64 224, !6, i64 228, !6, i64 232, !6, i64 236, !6, i64 240, !6, i64 244, !6, i64 248, !6, i64 252, !6, i64 256, !6, i64 260, !6, i64 264, !6, i64 268, !6, i64 272, !6, i64 276, !6, i64 280, !6, i64 284, !6, i64 288, !6, i64 292, !6, i64 296, !6, i64 300, !21, i64 304, !21, i64 312, !22, i64 320, !23, i64 624, !31, i64 1248, !10, i64 1304, !10, i64 1312, !10, i64 1320, !10, i64 1328, !10, i64 1336, !10, i64 1344, !10, i64 1352, !10, i64 1360, !10, i64 1368, !10, i64 1376, !10, i64 1384, !10, i64 1392, !10, i64 1400, !10, i64 1408, !10, i64 1416, !10, i64 1424, !10, i64 1432, !10, i64 1440, !10, i64 1448, !10, i64 1456, !10, i64 1464, !10, i64 1472, !10, i64 1480, !10, i64 1488, !10, i64 1496, !10, i64 1504, !10, i64 1512, !10, i64 1520, !10, i64 1528, !10, i64 1536, !10, i64 1544, !10, i64 1552, !10, i64 1560, !10, i64 1568, !10, i64 1576, !10, i64 1584, !10, i64 1592, !10, i64 1600, !10, i64 1608, !10, i64 1616, !10, i64 1624, !10, i64 1632, !10, i64 1640, !10, i64 1648, !10, i64 1656, !10, i64 1664, !10, i64 1672, !10, i64 1680, !10, i64 1688, !10, i64 1696, !10, i64 1704, !10, i64 1712, !10, i64 1720, !10, i64 1728, !10, i64 1736, !10, i64 1744, !10, i64 1752, !10, i64 1760, !10, i64 1768, !10, i64 1776, !10, i64 1784, !10, i64 1792, !10, i64 1800, !10, i64 1808, !10, i64 1816, !10, i64 1824, !10, i64 1832, !10, i64 1840, !10, i64 1848, !10, i64 1856, !10, i64 1864, !10, i64 1872, !10, i64 1880, !10, i64 1888, !10, i64 1896, !10, i64 1904, !10, i64 1912, !10, i64 1920, !10, i64 1928, !10, i64 1936, !10, i64 1944, !10, i64 1952, !10, i64 1960, !10, i64 1968, !10, i64 1976, !10, i64 1984, !10, i64 1992, !10, i64 2000, !10, i64 2008, !10, i64 2016, !10, i64 2024, !10, i64 2032, !10, i64 2040, !10, i64 2048, !10, i64 2056, !10, i64 2064, !10, i64 2072, !10, i64 2080, !10, i64 2088, !10, i64 2096, !10, i64 2104, !10, i64 2112, !10, i64 2120, !10, i64 2128, !10, i64 2136, !10, i64 2144, !10, i64 2152, !10, i64 2160, !10, i64 2168, !10, i64 2176, !10, i64 2184, !10, i64 2192, !10, i64 2200, !10, i64 2208, !10, i64 2216, !10, i64 2224, !10, i64 2232, !10, i64 2240, !10, i64 2248, !10, i64 2256, !10, i64 2264, !10, i64 2272, !10, i64 2280, !10, i64 2288, !10, i64 2296, !10, i64 2304, !10, i64 2312, !10, i64 2320, !10, i64 2328, !10, i64 2336, !10, i64 2344, !10, i64 2352, !10, i64 2360, !10, i64 2368, !10, i64 2376, !10, i64 2384, !10, i64 2392, !10, i64 2400, !10, i64 2408, !10, i64 2416, !10, i64 2424, !10, i64 2432, !10, i64 2440, !10, i64 2448, !10, i64 2456, !10, i64 2464, !10, i64 2472, !10, i64 2480, !10, i64 2488, !10, i64 2496, !10, i64 2504, !10, i64 2512, !10, i64 2520, !10, i64 2528, !10, i64 2536, !10, i64 2544, !10, i64 2552, !10, i64 2560, !10, i64 2568, !10, i64 2576, !10, i64 2584, !10, i64 2592, !10, i64 2600, !10, i64 2608, !10, i64 2616, !10, i64 2624, !10, i64 2632, !10, i64 2640, !10, i64 2648, !10, i64 2656, !10, i64 2664, !10, i64 2672, !10, i64 2680, !10, i64 2688, !10, i64 2696, !10, i64 2704, !10, i64 2712, !10, i64 2720, !10, i64 2728, !10, i64 2736, !10, i64 2744, !10, i64 2752, !10, i64 2760, !10, i64 2768, !10, i64 2776, !10, i64 2784, !10, i64 2792, !10, i64 2800, !10, i64 2808, !10, i64 2816, !10, i64 2824, !10, i64 2832, !10, i64 2840, !10, i64 2848, !10, i64 2856, !10, i64 2864, !10, i64 2872, !10, i64 2880, !10, i64 2888, !10, i64 2896, !10, i64 2904, !10, i64 2912, !10, i64 2920, !10, i64 2928, !10, i64 2936, !10, i64 2944, !10, i64 2952, !10, i64 2960, !10, i64 2968, !10, i64 2976, !10, i64 2984, !10, i64 2992, !10, i64 3000, !10, i64 3008, !10, i64 3016, !10, i64 3024, !10, i64 3032, !10, i64 3040, !10, i64 3048, !10, i64 3056, !10, i64 3064, !10, i64 3072, !10, i64 3080, !10, i64 3088, !10, i64 3096, !10, i64 3104, !10, i64 3112, !10, i64 3120, !10, i64 3128, !10, i64 3136, !10, i64 3144, !10, i64 3152, !10, i64 3160, !10, i64 3168, !10, i64 3176, !10, i64 3184, !10, i64 3192, !10, i64 3200, !10, i64 3208, !10, i64 3216, !10, i64 3224, !10, i64 3232, !10, i64 3240, !10, i64 3248, !10, i64 3256, !10, i64 3264, !10, i64 3272, !10, i64 3280, !10, i64 3288, !10, i64 3296, !10, i64 3304, !10, i64 3312, !10, i64 3320, !10, i64 3328, !10, i64 3336, !10, i64 3344, !10, i64 3352, !10, i64 3360, !10, i64 3368, !10, i64 3376, !10, i64 3384, !10, i64 3392, !10, i64 3400, !10, i64 3408, !10, i64 3416, !10, i64 3424, !10, i64 3432, !10, i64 3440, !10, i64 3448, !10, i64 3456, !10, i64 3464, !10, i64 3472, !10, i64 3480, !10, i64 3488, !10, i64 3496, !10, i64 3504, !10, i64 3512, !10, i64 3520, !10, i64 3528, !10, i64 3536, !10, i64 3544, !10, i64 3552, !10, i64 3560, !10, i64 3568, !10, i64 3576, !10, i64 3584, !10, i64 3592, !10, i64 3600, !10, i64 3608, !10, i64 3616, !10, i64 3624, !10, i64 3632, !10, i64 3640, !10, i64 3648, !10, i64 3656, !10, i64 3664, !10, i64 3672, !10, i64 3680, !10, i64 3688, !10, i64 3696, !10, i64 3704, !10, i64 3712, !10, i64 3720, !10, i64 3728, !10, i64 3736, !10, i64 3744, !10, i64 3752, !10, i64 3760, !10, i64 3768, !10, i64 3776, !10, i64 3784, !10, i64 3792, !10, i64 3800, !10, i64 3808, !10, i64 3816, !10, i64 3824, !10, i64 3832, !10, i64 3840, !10, i64 3848, !10, i64 3856, !10, i64 3864, !10, i64 3872, !10, i64 3880, !10, i64 3888, !10, i64 3896, !10, i64 3904, !10, i64 3912, !10, i64 3920, !10, i64 3928, !10, i64 3936, !10, i64 3944, !10, i64 3952, !10, i64 3960, !10, i64 3968, !10, i64 3976, !10, i64 3984, !10, i64 3992, !10, i64 4000, !10, i64 4008, !10, i64 4016, !10, i64 4024, !10, i64 4032, !10, i64 4040, !10, i64 4048, !10, i64 4056, !10, i64 4064, !10, i64 4072, !10, i64 4080, !10, i64 4088, !10, i64 4096, !10, i64 4104, !10, i64 4112, !10, i64 4120, !10, i64 4128, !10, i64 4136, !10, i64 4144, !10, i64 4152, !10, i64 4160, !10, i64 4168, !10, i64 4176, !10, i64 4184, !10, i64 4192, !10, i64 4200, !10, i64 4208, !10, i64 4216, !10, i64 4224, !10, i64 4232, !10, i64 4240, !10, i64 4248, !10, i64 4256, !10, i64 4264, !10, i64 4272, !10, i64 4280, !10, i64 4288, !10, i64 4296, !10, i64 4304, !10, i64 4312}
!21 = !{!"long", !7, i64 0}
!22 = !{!"_ZTS9mjOption_", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !7, i64 56, !7, i64 80, !7, i64 104, !12, i64 128, !12, i64 136, !12, i64 144, !7, i64 152, !7, i64 168, !7, i64 208, !6, i64 248, !6, i64 252, !6, i64 256, !6, i64 260, !6, i64 264, !6, i64 268, !6, i64 272, !6, i64 276, !6, i64 280, !6, i64 284, !6, i64 288, !6, i64 292, !6, i64 296}
!23 = !{!"_ZTS9mjVisual_", !24, i64 0, !26, i64 44, !27, i64 64, !28, i64 104, !29, i64 156, !30, i64 224}
!24 = !{!"_ZTSN9mjVisual_Ut_E", !25, i64 0, !25, i64 4, !25, i64 8, !25, i64 12, !25, i64 16, !25, i64 20, !25, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40}
!25 = !{!"float", !7, i64 0}
!26 = !{!"_ZTSN9mjVisual_Ut0_E", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16}
!27 = !{!"_ZTSN9mjVisual_Ut1_E", !7, i64 0, !7, i64 12, !7, i64 24, !6, i64 36}
!28 = !{!"_ZTSN9mjVisual_Ut2_E", !25, i64 0, !25, i64 4, !25, i64 8, !25, i64 12, !25, i64 16, !25, i64 20, !25, i64 24, !25, i64 28, !25, i64 32, !25, i64 36, !25, i64 40, !25, i64 44, !25, i64 48}
!29 = !{!"_ZTSN9mjVisual_Ut3_E", !25, i64 0, !25, i64 4, !25, i64 8, !25, i64 12, !25, i64 16, !25, i64 20, !25, i64 24, !25, i64 28, !25, i64 32, !25, i64 36, !25, i64 40, !25, i64 44, !25, i64 48, !25, i64 52, !25, i64 56, !25, i64 60, !25, i64 64}
!30 = !{!"_ZTSN9mjVisual_Ut4_E", !7, i64 0, !7, i64 16, !7, i64 32, !7, i64 48, !7, i64 64, !7, i64 80, !7, i64 96, !7, i64 112, !7, i64 128, !7, i64 144, !7, i64 160, !7, i64 176, !7, i64 192, !7, i64 208, !7, i64 224, !7, i64 240, !7, i64 256, !7, i64 272, !7, i64 288, !7, i64 304, !7, i64 320, !7, i64 336, !7, i64 352, !7, i64 368, !7, i64 384}
!31 = !{!"_ZTS12mjStatistic_", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !7, i64 32}
!32 = distinct !{!32, !18}
!33 = distinct !{!33, !18}
!34 = !{!20, !6, i64 4}
!35 = !{!36, !6, i64 8}
!36 = !{!"_ZTS12mjTimerStat_", !12, i64 0, !6, i64 8}
!37 = !{!36, !12, i64 0}
!38 = distinct !{!38, !18}
!39 = !{i64 0, i64 24, !40}
!40 = !{!7, !7, i64 0}
!41 = !{!42, !10, i64 0}
!42 = !{!"_ZTSSt16initializer_listI9mjtTimer_E", !10, i64 0, !21, i64 8}
!43 = !{!42, !21, i64 8}
!44 = !{!45, !45, i64 0}
!45 = !{!"_ZTS9mjtTimer_", !7, i64 0}
!46 = !{!47, !21, i64 162704}
!47 = !{!"_ZTS7mjData_", !21, i64 0, !21, i64 8, !6, i64 16, !21, i64 24, !21, i64 32, !21, i64 40, !21, i64 48, !7, i64 56, !21, i64 1080, !6, i64 1088, !6, i64 1092, !7, i64 1096, !7, i64 1160, !7, i64 1400, !6, i64 161400, !7, i64 161404, !7, i64 161484, !7, i64 161568, !6, i64 161584, !6, i64 161588, !6, i64 161592, !6, i64 161596, !6, i64 161600, !6, i64 161604, !6, i64 161608, !12, i64 161616, !7, i64 161624, !10, i64 161640, !10, i64 161648, !10, i64 161656, !10, i64 161664, !10, i64 161672, !10, i64 161680, !10, i64 161688, !10, i64 161696, !10, i64 161704, !10, i64 161712, !10, i64 161720, !10, i64 161728, !10, i64 161736, !10, i64 161744, !10, i64 161752, !10, i64 161760, !10, i64 161768, !10, i64 161776, !10, i64 161784, !10, i64 161792, !10, i64 161800, !10, i64 161808, !10, i64 161816, !10, i64 161824, !10, i64 161832, !10, i64 161840, !10, i64 161848, !10, i64 161856, !10, i64 161864, !10, i64 161872, !10, i64 161880, !10, i64 161888, !10, i64 161896, !10, i64 161904, !10, i64 161912, !10, i64 161920, !10, i64 161928, !10, i64 161936, !10, i64 161944, !10, i64 161952, !10, i64 161960, !10, i64 161968, !10, i64 161976, !10, i64 161984, !10, i64 161992, !10, i64 162000, !10, i64 162008, !10, i64 162016, !10, i64 162024, !10, i64 162032, !10, i64 162040, !10, i64 162048, !10, i64 162056, !10, i64 162064, !10, i64 162072, !10, i64 162080, !10, i64 162088, !10, i64 162096, !10, i64 162104, !10, i64 162112, !10, i64 162120, !10, i64 162128, !10, i64 162136, !10, i64 162144, !10, i64 162152, !10, i64 162160, !10, i64 162168, !10, i64 162176, !10, i64 162184, !10, i64 162192, !10, i64 162200, !10, i64 162208, !10, i64 162216, !10, i64 162224, !10, i64 162232, !10, i64 162240, !10, i64 162248, !10, i64 162256, !10, i64 162264, !10, i64 162272, !10, i64 162280, !10, i64 162288, !10, i64 162296, !10, i64 162304, !10, i64 162312, !10, i64 162320, !10, i64 162328, !10, i64 162336, !10, i64 162344, !10, i64 162352, !10, i64 162360, !10, i64 162368, !10, i64 162376, !10, i64 162384, !10, i64 162392, !10, i64 162400, !10, i64 162408, !10, i64 162416, !10, i64 162424, !10, i64 162432, !10, i64 162440, !10, i64 162448, !10, i64 162456, !10, i64 162464, !10, i64 162472, !10, i64 162480, !10, i64 162488, !10, i64 162496, !10, i64 162504, !10, i64 162512, !10, i64 162520, !10, i64 162528, !10, i64 162536, !10, i64 162544, !10, i64 162552, !10, i64 162560, !10, i64 162568, !10, i64 162576, !10, i64 162584, !10, i64 162592, !10, i64 162600, !10, i64 162608, !10, i64 162616, !10, i64 162624, !10, i64 162632, !10, i64 162640, !10, i64 162648, !10, i64 162656, !10, i64 162664, !10, i64 162672, !10, i64 162680, !10, i64 162688, !10, i64 162696, !21, i64 162704}
!48 = distinct !{!48, !18}


; 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.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.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.std::allocator.6" = type { i8 }
%"class.std::thread" = type { %"class.std::thread::id" }
%"class.std::thread::id" = type { i64 }
%"class.std::initializer_list" = type { ptr, i64 }
%struct.mjTimerStat_ = type { double, i32 }

@m = external dso_local local_unnamed_addr global ptr, align 8
@d = external dso_local local_unnamed_addr global [512 x ptr], align 16
@contacts = external dso_local local_unnamed_addr global [512 x i32], align 16
@constraints = external dso_local local_unnamed_addr global [512 x i32], align 16
@simtime = external dso_local local_unnamed_addr global [512 x double], align 16
@.str.1 = external hidden unnamed_addr constant [568 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@__const.main.error = external hidden unnamed_addr constant [1000 x i8], align 16
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@mjcb_time = external local_unnamed_addr global ptr, align 8
@.str.11 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1
@__const.main.mu_str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [27 x i8], align 1
@mjTIMERSTRING = external local_unnamed_addr global [15 x ptr], align 16
@.str.32 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [2 x i8], align 1
@constinit = external hidden local_unnamed_addr constant [6 x i32], align 4
@.str.34 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [34 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_Z5gettmv() #0

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z9CtrlNoisePK8mjModel_id(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef, i32 noundef, double noundef) local_unnamed_addr #0

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z8simulateiiPd(i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca double, align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::allocator.6", align 1
  %9 = alloca [1000 x i8], align 16
  %10 = alloca %"class.std::vector", align 8
  %11 = alloca [512 x %"class.std::thread"], align 16
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::thread", align 8
  %14 = alloca ptr, align 8
  %15 = alloca [3 x i8], align 1
  %16 = alloca %"class.std::initializer_list", align 8
  %17 = alloca [6 x i32], align 4
  %18 = alloca %"class.std::initializer_list", align 8
  %19 = alloca [2 x i32], align 4
  %20 = add i32 %0, -7
  %or.cond = icmp ult i32 %20, -5
  br i1 %or.cond, label %21, label %23

21:                                               ; preds = %2
  %22 = tail call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef nonnull @.str.1, ptr noundef null)
  br label %465

23:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  store i32 10000, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #8
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  store double 1.000000e-02, ptr %6, align 8, !tbaa !9
  %24 = icmp ugt i32 %0, 2
  br i1 %24, label %25, label %.thread171

25:                                               ; preds = %23
  %26 = getelementptr inbounds i8, ptr %1, i64 16
  %27 = load ptr, ptr %26, align 8, !tbaa !11
  %28 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %27, ptr noundef nonnull @.str.2, ptr noundef nonnull %3) #8
  %29 = icmp ne i32 %28, 1
  %30 = load i32, ptr %3, align 4
  %31 = icmp slt i32 %30, 1
  %or.cond3 = select i1 %29, i1 true, i1 %31
  br i1 %or.cond3, label %32, label %34

32:                                               ; preds = %25
  %33 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef nonnull @.str.3, ptr noundef null)
  br label %464

34:                                               ; preds = %25
  %.not175 = icmp eq i32 %0, 3
  br i1 %.not175, label %.thread171, label %35

35:                                               ; preds = %34
  %36 = getelementptr inbounds i8, ptr %1, i64 24
  %37 = load ptr, ptr %36, align 8, !tbaa !11
  %38 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %37, ptr noundef nonnull @.str.2, ptr noundef nonnull %4) #8
  %.not = icmp eq i32 %38, 1
  br i1 %.not, label %41, label %39

39:                                               ; preds = %35
  %40 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef nonnull @.str.4, ptr noundef null)
  br label %464

41:                                               ; preds = %35
  %42 = icmp ugt i32 %0, 4
  br i1 %42, label %43, label %.thread171

43:                                               ; preds = %41
  %44 = getelementptr inbounds i8, ptr %1, i64 32
  %45 = load ptr, ptr %44, align 8, !tbaa !11
  %46 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %45, ptr noundef nonnull @.str.5, ptr noundef nonnull %6) #8
  %.not146 = icmp eq i32 %46, 1
  br i1 %.not146, label %49, label %47

47:                                               ; preds = %43
  %48 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef nonnull @.str.6, ptr noundef null)
  br label %464

49:                                               ; preds = %43
  %.not176 = icmp eq i32 %0, 5
  br i1 %.not176, label %.thread171, label %50

50:                                               ; preds = %49
  %51 = getelementptr inbounds i8, ptr %1, i64 40
  %52 = load ptr, ptr %51, align 8, !tbaa !11
  %53 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %52, ptr noundef nonnull @.str.2, ptr noundef nonnull %5) #8
  %.not147 = icmp eq i32 %53, 1
  br i1 %.not147, label %.thread171, label %54

54:                                               ; preds = %50
  %55 = call noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef nonnull @.str.7, ptr noundef null)
  br label %464

.thread171:                                       ; preds = %23, %34, %41, %50, %49
  %56 = load double, ptr %6, align 8
  %57 = fcmp olt double %56, 1.000000e+00
  %58 = select i1 %57, double %56, double 1.000000e+00
  %59 = fcmp olt double %58, 0.000000e+00
  %60 = select i1 %59, double 0.000000e+00, double %58
  store double %60, ptr %6, align 8, !tbaa !9
  %61 = load i32, ptr %4, align 4
  %62 = call i32 @llvm.smin.i32(i32 %61, i32 512)
  %63 = call i32 @llvm.smax.i32(i32 %62, i32 1)
  store i32 %63, ptr %4, align 4, !tbaa !5
  %64 = load i32, ptr %5, align 4
  %65 = call i32 @llvm.smin.i32(i32 %64, i32 512)
  %66 = call i32 @llvm.smax.i32(i32 %65, i32 1)
  store i32 %66, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #8
  %67 = getelementptr inbounds i8, ptr %1, i64 8
  %68 = load ptr, ptr %67, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %8) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef %68, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %69 unwind label %74

69:                                               ; preds = %.thread171
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  %70 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcm(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull @.str.8, i64 noundef 0) #8
  %.not148 = icmp eq i64 %70, -1
  call void @llvm.lifetime.start.p0(i64 1000, ptr nonnull %9) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(1000) %9, ptr noundef nonnull align 16 dereferenceable(1000) @__const.main.error, i64 1000, i1 false)
  %71 = load ptr, ptr %67, align 8, !tbaa !11
  br i1 %.not148, label %78, label %72

72:                                               ; preds = %69
  %73 = invoke ptr @mj_loadModel(ptr noundef %71, ptr noundef null)
          to label %80 unwind label %76

74:                                               ; preds = %.thread171
  %75 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %8) #8
  br label %463

76:                                               ; preds = %81, %78, %72
  %77 = landingpad { ptr, i32 }
          cleanup
  br label %462

78:                                               ; preds = %69
  %79 = invoke ptr @mj_loadXML(ptr noundef %71, ptr noundef null, ptr noundef nonnull %9, i32 noundef 1000)
          to label %80 unwind label %76

80:                                               ; preds = %78, %72
  %storemerge = phi ptr [ %73, %72 ], [ %79, %78 ]
  store ptr %storemerge, ptr @m, align 8, !tbaa !11
  %.not149 = icmp eq ptr %storemerge, null
  br i1 %.not149, label %81, label %83

81:                                               ; preds = %80
  %82 = invoke noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef nonnull %9, ptr noundef null)
          to label %.thread172 unwind label %76

83:                                               ; preds = %80
  %84 = invoke i32 @mj_name2id(ptr noundef nonnull %storemerge, i32 noundef 24, ptr noundef nonnull @.str.9)
          to label %.preheader unwind label %87

.preheader:                                       ; preds = %83
  %85 = load i32, ptr %4, align 4, !tbaa !5
  %.not151177 = icmp sgt i32 %85, 0
  br i1 %.not151177, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader
  %86 = icmp sgt i32 %84, -1
  br label %89

87:                                               ; preds = %83
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %462

89:                                               ; preds = %.lr.ph, %110
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %110 ]
  %90 = load ptr, ptr @m, align 8, !tbaa !11
  %91 = invoke ptr @mj_makeData(ptr noundef %90)
          to label %92 unwind label %.loopexit

92:                                               ; preds = %89
  %93 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %indvars.iv
  store ptr %91, ptr %93, align 8, !tbaa !11
  %.not150 = icmp eq ptr %91, null
  br i1 %.not150, label %94, label %97

94:                                               ; preds = %92
  %95 = load ptr, ptr @m, align 8, !tbaa !11
  %96 = invoke noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef nonnull @.str.10, ptr noundef %95)
          to label %.thread172 unwind label %.loopexit.split-lp

.loopexit:                                        ; preds = %89, %98
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %462

.loopexit.split-lp:                               ; preds = %94
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %462

97:                                               ; preds = %92
  br i1 %86, label %98, label %100

98:                                               ; preds = %97
  %99 = load ptr, ptr @m, align 8, !tbaa !11
  invoke void @mj_resetDataKeyframe(ptr noundef %99, ptr noundef nonnull %91, i32 noundef %84)
          to label %100 unwind label %.loopexit

100:                                              ; preds = %98, %97
  %101 = load i32, ptr %5, align 4, !tbaa !5
  %102 = icmp sgt i32 %101, 1
  br i1 %102, label %103, label %110

103:                                              ; preds = %100
  %104 = zext nneg i32 %101 to i64
  %105 = invoke ptr @mju_threadPoolCreate(i64 noundef %104)
          to label %106 unwind label %108

106:                                              ; preds = %103
  %107 = load ptr, ptr %93, align 8, !tbaa !11
  invoke void @mju_bindThreadPool(ptr noundef %107, ptr noundef %105)
          to label %110 unwind label %108

108:                                              ; preds = %106, %103
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %462

110:                                              ; preds = %106, %100
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %111 = load i32, ptr %4, align 4, !tbaa !5
  %112 = sext i32 %111 to i64
  %.not151 = icmp slt i64 %indvars.iv.next, %112
  br i1 %.not151, label %89, label %._crit_edge, !llvm.loop !13

._crit_edge:                                      ; preds = %110, %.preheader
  %113 = phi i32 [ %85, %.preheader ], [ %111, %110 ]
  store ptr @_Z5gettmv, ptr @mjcb_time, align 8, !tbaa !11
  %114 = load i32, ptr %3, align 4, !tbaa !5
  %115 = icmp sgt i32 %113, 1
  %116 = select i1 %115, ptr @.str.12, ptr @.str.13
  %117 = load ptr, ptr @m, align 8, !tbaa !11
  %118 = getelementptr inbounds i8, ptr %117, i64 320
  %119 = load double, ptr %118, align 8, !tbaa !15
  %120 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %114, ptr noundef nonnull %116, double noundef %119)
  %121 = load i32, ptr %5, align 4, !tbaa !5
  %122 = icmp sgt i32 %121, 1
  br i1 %122, label %123, label %125

123:                                              ; preds = %._crit_edge
  %124 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef %121)
  br label %125

125:                                              ; preds = %123, %._crit_edge
  %126 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #8
  %127 = load ptr, ptr @m, align 8, !tbaa !11
  %128 = load i32, ptr %3, align 4, !tbaa !5
  %129 = load double, ptr %6, align 8, !tbaa !9
  invoke void @_Z9CtrlNoisePK8mjModel_id(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %10, ptr noundef %127, i32 noundef %128, double noundef %129)
          to label %130 unwind label %140

130:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %11) #8
  br label %131

131:                                              ; preds = %131, %130
  %.idx = phi i64 [ 0, %130 ], [ %.add, %131 ]
  %.ptr = getelementptr inbounds i8, ptr %11, i64 %.idx
  call void @_ZNSt6threadC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %.ptr) #8
  %.add = add nuw nsw i64 %.idx, 8
  %132 = icmp eq i64 %.add, 4096
  br i1 %132, label %133, label %131

133:                                              ; preds = %131
  %134 = getelementptr inbounds i8, ptr %11, i64 4096
  %135 = invoke noundef double @_Z5gettmv()
          to label %136 unwind label %142

136:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  store i32 0, ptr %12, align 4, !tbaa !5
  %137 = load i32, ptr %4, align 4, !tbaa !5
  %138 = icmp sgt i32 %137, 0
  br i1 %138, label %.lr.ph180, label %._crit_edge181.thread

._crit_edge181.thread:                            ; preds = %136
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  br label %._crit_edge185

._crit_edge181:                                   ; preds = %145
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  %139 = icmp sgt i32 %152, 0
  br i1 %139, label %.lr.ph184, label %._crit_edge185

140:                                              ; preds = %125
  %141 = landingpad { ptr, i32 }
          cleanup
  br label %461

142:                                              ; preds = %133
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %450

.lr.ph180:                                        ; preds = %136, %145
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  %144 = call noundef ptr @_ZNSt6vectorIdSaIdEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  store ptr %144, ptr %14, align 8, !tbaa !11
  invoke void @_ZNSt6threadC2IRFviiPdEJRiS4_S1_EvEEOT_DpOT0_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull @_Z8simulateiiPd, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %145 unwind label %154

145:                                              ; preds = %.lr.ph180
  %146 = load i32, ptr %12, align 4, !tbaa !5
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds [512 x %"class.std::thread"], ptr %11, i64 0, i64 %147
  %149 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6threadaSEOS_(ptr noundef nonnull align 8 dereferenceable(8) %148, ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  %150 = load i32, ptr %12, align 4, !tbaa !5
  %151 = add nsw i32 %150, 1
  store i32 %151, ptr %12, align 4, !tbaa !5
  %152 = load i32, ptr %4, align 4, !tbaa !5
  %153 = icmp slt i32 %151, %152
  br i1 %153, label %.lr.ph180, label %._crit_edge181, !llvm.loop !28

154:                                              ; preds = %.lr.ph180
  %155 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  br label %450

._crit_edge185:                                   ; preds = %158, %._crit_edge181.thread, %._crit_edge181
  %156 = invoke noundef double @_Z5gettmv()
          to label %164 unwind label %196

.lr.ph184:                                        ; preds = %._crit_edge181, %158
  %indvars.iv204 = phi i64 [ %indvars.iv.next205, %158 ], [ 0, %._crit_edge181 ]
  %157 = getelementptr inbounds [512 x %"class.std::thread"], ptr %11, i64 0, i64 %indvars.iv204
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %157)
          to label %158 unwind label %162

158:                                              ; preds = %.lr.ph184
  %indvars.iv.next205 = add nuw nsw i64 %indvars.iv204, 1
  %159 = load i32, ptr %4, align 4, !tbaa !5
  %160 = sext i32 %159 to i64
  %161 = icmp slt i64 %indvars.iv.next205, %160
  br i1 %161, label %.lr.ph184, label %._crit_edge185, !llvm.loop !29

162:                                              ; preds = %.lr.ph184
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %450

164:                                              ; preds = %._crit_edge185
  call void @llvm.lifetime.start.p0(i64 3, ptr nonnull %15) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %15, ptr noundef nonnull align 1 dereferenceable(3) @__const.main.mu_str, i64 3, i1 false)
  %165 = load i32, ptr %4, align 4, !tbaa !5
  %166 = icmp sgt i32 %165, 1
  br i1 %166, label %167, label %198

167:                                              ; preds = %164
  %168 = fsub double %156, %135
  %169 = fmul double %168, 0x3EB0C6F7A0B5ED8D
  %170 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, i32 noundef %165)
  %171 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, double noundef %169)
  %172 = load i32, ptr %4, align 4, !tbaa !5
  %173 = load i32, ptr %3, align 4, !tbaa !5
  %174 = mul nsw i32 %173, %172
  %175 = sitofp i32 %174 to double
  %176 = fdiv double %175, %169
  %177 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef %176)
  %178 = load i32, ptr %4, align 4, !tbaa !5
  %179 = load i32, ptr %3, align 4, !tbaa !5
  %180 = mul nsw i32 %179, %178
  %181 = sitofp i32 %180 to double
  %182 = load ptr, ptr @m, align 8, !tbaa !11
  %183 = getelementptr inbounds i8, ptr %182, i64 320
  %184 = load double, ptr %183, align 8, !tbaa !15
  %185 = fmul double %184, %181
  %186 = fdiv double %185, %169
  %187 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, double noundef %186)
  %188 = fmul double %169, 1.000000e+06
  %189 = load i32, ptr %4, align 4, !tbaa !5
  %190 = load i32, ptr %3, align 4, !tbaa !5
  %191 = mul nsw i32 %190, %189
  %192 = sitofp i32 %191 to double
  %193 = fdiv double %188, %192
  %194 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, double noundef %193, ptr noundef nonnull %15)
  %195 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  br label %198

196:                                              ; preds = %._crit_edge185
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %450

198:                                              ; preds = %167, %164
  %199 = load double, ptr @simtime, align 16, !tbaa !9
  %200 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22, double noundef %199)
  %201 = load i32, ptr %3, align 4, !tbaa !5
  %202 = sitofp i32 %201 to double
  %203 = load double, ptr @simtime, align 16, !tbaa !9
  %204 = fdiv double %202, %203
  %205 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, double noundef %204)
  %206 = load i32, ptr %3, align 4, !tbaa !5
  %207 = sitofp i32 %206 to double
  %208 = load ptr, ptr @m, align 8, !tbaa !11
  %209 = getelementptr inbounds i8, ptr %208, i64 320
  %210 = load double, ptr %209, align 8, !tbaa !15
  %211 = fmul double %210, %207
  %212 = load double, ptr @simtime, align 16, !tbaa !9
  %213 = fdiv double %211, %212
  %214 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, double noundef %213)
  %215 = load double, ptr @simtime, align 16, !tbaa !9
  %216 = fmul double %215, 1.000000e+06
  %217 = load i32, ptr %3, align 4, !tbaa !5
  %218 = sitofp i32 %217 to double
  %219 = fdiv double %216, %218
  %220 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, double noundef %219, ptr noundef nonnull %15)
  %221 = load i32, ptr @contacts, align 16, !tbaa !5
  %222 = sitofp i32 %221 to float
  %223 = load i32, ptr %3, align 4, !tbaa !5
  %224 = sitofp i32 %223 to float
  %225 = fdiv float %222, %224
  %226 = fpext float %225 to double
  %227 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, double noundef %226)
  %228 = load i32, ptr @constraints, align 16, !tbaa !5
  %229 = sitofp i32 %228 to float
  %230 = load i32, ptr %3, align 4, !tbaa !5
  %231 = sitofp i32 %230 to float
  %232 = fdiv float %229, %231
  %233 = fpext float %232 to double
  %234 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, double noundef %233)
  %235 = load ptr, ptr @m, align 8, !tbaa !11
  %236 = getelementptr inbounds i8, ptr %235, i64 4
  %237 = load i32, ptr %236, align 4, !tbaa !30
  %238 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, i32 noundef %237)
  %239 = load i32, ptr %4, align 4, !tbaa !5
  %240 = icmp sgt i32 %239, 1
  %241 = select i1 %240, ptr @.str.30, ptr @.str.13
  %242 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.29, ptr noundef nonnull %241, ptr noundef nonnull %15)
  %243 = load ptr, ptr @d, align 16, !tbaa !11
  %244 = getelementptr inbounds i8, ptr %243, i64 1168
  %245 = load i32, ptr %244, align 8, !tbaa !31
  %.not154 = icmp eq i32 %245, 0
  br i1 %.not154, label %.thread, label %246

246:                                              ; preds = %198
  %247 = getelementptr inbounds i8, ptr %243, i64 1160
  %248 = load double, ptr %247, align 8, !tbaa !33
  %249 = sitofp i32 %245 to double
  %250 = fdiv double %248, %249
  %251 = icmp sgt i32 %245, 0
  br i1 %251, label %252, label %.thread

252:                                              ; preds = %246
  %253 = getelementptr inbounds i8, ptr %243, i64 1160
  %254 = load double, ptr %253, align 8, !tbaa !33
  %255 = uitofp nneg i32 %245 to double
  %256 = fdiv double %254, %255
  %257 = fmul double %256, 1.000000e+02
  %258 = fdiv double %257, %250
  %259 = load ptr, ptr @mjTIMERSTRING, align 16, !tbaa !11
  %260 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %259, double noundef %256, double noundef %258)
  %.pre = load ptr, ptr @d, align 16, !tbaa !11
  br label %.thread

.thread:                                          ; preds = %198, %246, %252
  %261 = phi double [ %250, %252 ], [ %250, %246 ], [ 0.000000e+00, %198 ]
  %262 = phi ptr [ %.pre, %252 ], [ %243, %246 ], [ %243, %198 ]
  %.2126 = phi double [ %256, %252 ], [ 0.000000e+00, %246 ], [ 0.000000e+00, %198 ]
  %263 = getelementptr inbounds i8, ptr %262, i64 1184
  %264 = load i32, ptr %263, align 8, !tbaa !31
  %265 = icmp sgt i32 %264, 0
  br i1 %265, label %266, label %275

266:                                              ; preds = %.thread
  %267 = getelementptr inbounds i8, ptr %262, i64 1176
  %268 = load double, ptr %267, align 8, !tbaa !33
  %269 = uitofp nneg i32 %264 to double
  %270 = fdiv double %268, %269
  %271 = fmul double %270, 1.000000e+02
  %272 = fdiv double %271, %261
  %273 = load ptr, ptr getelementptr inbounds (i8, ptr @mjTIMERSTRING, i64 8), align 8, !tbaa !11
  %274 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %273, double noundef %270, double noundef %272)
  %.pre213 = load ptr, ptr @d, align 16, !tbaa !11
  br label %275

275:                                              ; preds = %266, %.thread
  %276 = phi ptr [ %.pre213, %266 ], [ %262, %.thread ]
  %277 = getelementptr inbounds i8, ptr %276, i64 1200
  %278 = load i32, ptr %277, align 8, !tbaa !31
  %279 = icmp sgt i32 %278, 0
  br i1 %279, label %280, label %289

280:                                              ; preds = %275
  %281 = getelementptr inbounds i8, ptr %276, i64 1192
  %282 = load double, ptr %281, align 8, !tbaa !33
  %283 = uitofp nneg i32 %278 to double
  %284 = fdiv double %282, %283
  %285 = fmul double %284, 1.000000e+02
  %286 = fdiv double %285, %261
  %287 = load ptr, ptr getelementptr inbounds (i8, ptr @mjTIMERSTRING, i64 16), align 16, !tbaa !11
  %288 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %287, double noundef %284, double noundef %286)
  %.pre214 = load ptr, ptr @d, align 16, !tbaa !11
  br label %289

289:                                              ; preds = %280, %275
  %290 = phi ptr [ %.pre214, %280 ], [ %276, %275 ]
  %291 = getelementptr inbounds i8, ptr %290, i64 1216
  %292 = load i32, ptr %291, align 8, !tbaa !31
  %293 = icmp sgt i32 %292, 0
  br i1 %293, label %294, label %304

294:                                              ; preds = %289
  %295 = getelementptr inbounds i8, ptr %290, i64 1208
  %296 = load double, ptr %295, align 8, !tbaa !33
  %297 = uitofp nneg i32 %292 to double
  %298 = fdiv double %296, %297
  %299 = fmul double %298, 1.000000e+02
  %300 = fdiv double %299, %261
  %301 = load ptr, ptr getelementptr inbounds (i8, ptr @mjTIMERSTRING, i64 24), align 8, !tbaa !11
  %302 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %301, double noundef %298, double noundef %300)
  %303 = fadd double %298, 0.000000e+00
  %.pre215 = load ptr, ptr @d, align 16, !tbaa !11
  br label %304

304:                                              ; preds = %294, %289
  %305 = phi ptr [ %.pre215, %294 ], [ %290, %289 ]
  %.2123.3 = phi double [ %303, %294 ], [ 0.000000e+00, %289 ]
  %306 = getelementptr inbounds i8, ptr %305, i64 1232
  %307 = load i32, ptr %306, align 8, !tbaa !31
  %308 = icmp sgt i32 %307, 0
  br i1 %308, label %309, label %319

309:                                              ; preds = %304
  %310 = getelementptr inbounds i8, ptr %305, i64 1224
  %311 = load double, ptr %310, align 8, !tbaa !33
  %312 = uitofp nneg i32 %307 to double
  %313 = fdiv double %311, %312
  %314 = fmul double %313, 1.000000e+02
  %315 = fdiv double %314, %261
  %316 = load ptr, ptr getelementptr inbounds (i8, ptr @mjTIMERSTRING, i64 32), align 16, !tbaa !11
  %317 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %316, double noundef %313, double noundef %315)
  %318 = fadd double %.2123.3, %313
  %.pre216 = load ptr, ptr @d, align 16, !tbaa !11
  br label %319

319:                                              ; preds = %309, %304
  %320 = phi ptr [ %.pre216, %309 ], [ %305, %304 ]
  %.2123.4 = phi double [ %318, %309 ], [ %.2123.3, %304 ]
  %321 = getelementptr inbounds i8, ptr %320, i64 1248
  %322 = load i32, ptr %321, align 8, !tbaa !31
  %323 = icmp sgt i32 %322, 0
  br i1 %323, label %324, label %334

324:                                              ; preds = %319
  %325 = getelementptr inbounds i8, ptr %320, i64 1240
  %326 = load double, ptr %325, align 8, !tbaa !33
  %327 = uitofp nneg i32 %322 to double
  %328 = fdiv double %326, %327
  %329 = fmul double %328, 1.000000e+02
  %330 = fdiv double %329, %261
  %331 = load ptr, ptr getelementptr inbounds (i8, ptr @mjTIMERSTRING, i64 40), align 8, !tbaa !11
  %332 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %331, double noundef %328, double noundef %330)
  %333 = fadd double %.2123.4, %328
  %.pre217 = load ptr, ptr @d, align 16, !tbaa !11
  br label %334

334:                                              ; preds = %324, %319
  %335 = phi ptr [ %.pre217, %324 ], [ %320, %319 ]
  %.2123.5 = phi double [ %333, %324 ], [ %.2123.4, %319 ]
  %336 = getelementptr inbounds i8, ptr %335, i64 1264
  %337 = load i32, ptr %336, align 8, !tbaa !31
  %338 = icmp sgt i32 %337, 0
  br i1 %338, label %339, label %349

339:                                              ; preds = %334
  %340 = getelementptr inbounds i8, ptr %335, i64 1256
  %341 = load double, ptr %340, align 8, !tbaa !33
  %342 = uitofp nneg i32 %337 to double
  %343 = fdiv double %341, %342
  %344 = fmul double %343, 1.000000e+02
  %345 = fdiv double %344, %261
  %346 = load ptr, ptr getelementptr inbounds (i8, ptr @mjTIMERSTRING, i64 48), align 16, !tbaa !11
  %347 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %346, double noundef %343, double noundef %345)
  %348 = fadd double %.2123.5, %343
  %.pre218 = load ptr, ptr @d, align 16, !tbaa !11
  br label %349

349:                                              ; preds = %339, %334
  %350 = phi ptr [ %.pre218, %339 ], [ %335, %334 ]
  %.2123.6 = phi double [ %348, %339 ], [ %.2123.5, %334 ]
  %351 = getelementptr inbounds i8, ptr %350, i64 1280
  %352 = load i32, ptr %351, align 8, !tbaa !31
  %353 = icmp sgt i32 %352, 0
  br i1 %353, label %354, label %364

354:                                              ; preds = %349
  %355 = getelementptr inbounds i8, ptr %350, i64 1272
  %356 = load double, ptr %355, align 8, !tbaa !33
  %357 = uitofp nneg i32 %352 to double
  %358 = fdiv double %356, %357
  %359 = fmul double %358, 1.000000e+02
  %360 = fdiv double %359, %261
  %361 = load ptr, ptr getelementptr inbounds (i8, ptr @mjTIMERSTRING, i64 56), align 8, !tbaa !11
  %362 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef %361, double noundef %358, double noundef %360)
  %363 = fadd double %.2123.6, %358
  br label %364

364:                                              ; preds = %354, %349
  %.2123.7 = phi double [ %363, %354 ], [ %.2123.6, %349 ]
  %365 = fcmp ogt double %261, 0.000000e+00
  br i1 %365, label %366, label %371

366:                                              ; preds = %364
  %367 = fsub double %.2126, %.2123.7
  %368 = fmul double %367, 1.000000e+02
  %369 = fdiv double %368, %261
  %370 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef nonnull @.str.32, double noundef %367, double noundef %369)
  br label %371

371:                                              ; preds = %366, %364
  %372 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.33)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %17, ptr noundef nonnull align 4 dereferenceable(24) @constinit, i64 24, i1 false), !tbaa.struct !34
  store ptr %17, ptr %16, align 8, !tbaa !36
  %373 = getelementptr inbounds i8, ptr %16, i64 8
  store i64 6, ptr %373, align 8, !tbaa !38
  %374 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %16) #8
  %375 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E3endEv(ptr noundef nonnull align 8 dereferenceable(16) %16) #8
  %.not155194 = icmp eq ptr %374, %375
  br i1 %.not155194, label %._crit_edge198, label %.lr.ph197

.lr.ph197:                                        ; preds = %371
  %376 = getelementptr inbounds i8, ptr %19, i64 4
  %377 = getelementptr inbounds i8, ptr %18, i64 8
  br label %382

._crit_edge198:                                   ; preds = %432, %371
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #8
  %378 = load i32, ptr %4, align 4, !tbaa !5
  %379 = icmp sgt i32 %378, 0
  br i1 %379, label %.lr.ph201, label %._crit_edge202

380:                                              ; preds = %._crit_edge202
  %381 = landingpad { ptr, i32 }
          cleanup
  br label %449

382:                                              ; preds = %.lr.ph197, %432
  %.0128195 = phi ptr [ %374, %.lr.ph197 ], [ %433, %432 ]
  %383 = load i32, ptr %.0128195, align 4, !tbaa !39
  %384 = load ptr, ptr @d, align 16, !tbaa !11
  %385 = getelementptr inbounds i8, ptr %384, i64 1160
  %386 = sext i32 %383 to i64
  %387 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %385, i64 0, i64 %386
  %388 = getelementptr inbounds i8, ptr %387, i64 8
  %389 = load i32, ptr %388, align 8, !tbaa !31
  %390 = icmp sgt i32 %389, 0
  br i1 %390, label %391, label %406

391:                                              ; preds = %382
  %392 = load double, ptr %387, align 8, !tbaa !33
  %393 = uitofp nneg i32 %389 to double
  %394 = fdiv double %392, %393
  %395 = icmp eq i32 %383, 3
  br i1 %395, label %.thread174, label %399

.thread174:                                       ; preds = %391
  %396 = fmul double %394, 1.000000e+02
  %397 = fdiv double %396, %261
  %398 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.34, double noundef %394, double noundef %397)
  br label %432

399:                                              ; preds = %391
  %400 = getelementptr inbounds [15 x ptr], ptr @mjTIMERSTRING, i64 0, i64 %386
  %401 = load ptr, ptr %400, align 8, !tbaa !11
  %402 = getelementptr inbounds i8, ptr %401, i64 4
  %403 = fmul double %394, 1.000000e+02
  %404 = fdiv double %403, %261
  %405 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.35, ptr noundef nonnull %402, double noundef %394, double noundef %404)
  br label %406

406:                                              ; preds = %399, %382
  %407 = icmp eq i32 %383, 10
  br i1 %407, label %408, label %432

408:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  store i32 13, ptr %19, align 4, !tbaa !39
  store i32 14, ptr %376, align 4, !tbaa !39
  store ptr %19, ptr %18, align 8, !tbaa !36
  store i64 2, ptr %377, align 8, !tbaa !38
  %409 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  %410 = call noundef ptr @_ZNKSt16initializer_listI9mjtTimer_E3endEv(ptr noundef nonnull align 8 dereferenceable(16) %18) #8
  %.not159189 = icmp eq ptr %409, %410
  br i1 %.not159189, label %._crit_edge193, label %.lr.ph192

._crit_edge193:                                   ; preds = %422, %408
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  br label %432

.lr.ph192:                                        ; preds = %408, %422
  %.0120190 = phi ptr [ %431, %422 ], [ %409, %408 ]
  %411 = load i32, ptr %.0120190, align 4, !tbaa !39
  %412 = load ptr, ptr @d, align 16, !tbaa !11
  %413 = getelementptr inbounds i8, ptr %412, i64 1160
  %414 = sext i32 %411 to i64
  %415 = getelementptr inbounds [15 x %struct.mjTimerStat_], ptr %413, i64 0, i64 %414
  %416 = getelementptr inbounds i8, ptr %415, i64 8
  %417 = load i32, ptr %416, align 8, !tbaa !31
  %.not160 = icmp eq i32 %417, 0
  br i1 %.not160, label %422, label %418

418:                                              ; preds = %.lr.ph192
  %419 = load double, ptr %415, align 8, !tbaa !33
  %420 = sitofp i32 %417 to double
  %421 = fdiv double %419, %420
  br label %422

422:                                              ; preds = %.lr.ph192, %418
  %423 = phi double [ %421, %418 ], [ 0.000000e+00, %.lr.ph192 ]
  %424 = fmul double %423, 1.000000e+02
  %425 = fdiv double %424, %261
  %426 = select i1 %.not160, double 0.000000e+00, double %425
  %427 = getelementptr inbounds [15 x ptr], ptr @mjTIMERSTRING, i64 0, i64 %414
  %428 = load ptr, ptr %427, align 8, !tbaa !11
  %429 = getelementptr inbounds i8, ptr %428, i64 4
  %430 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.36, ptr noundef nonnull %429, double noundef %423, double noundef %426)
  %431 = getelementptr inbounds i8, ptr %.0120190, i64 4
  %.not159 = icmp eq ptr %431, %410
  br i1 %.not159, label %._crit_edge193, label %.lr.ph192

432:                                              ; preds = %.thread174, %._crit_edge193, %406
  %433 = getelementptr inbounds i8, ptr %.0128195, i64 4
  %.not155 = icmp eq ptr %433, %375
  br i1 %.not155, label %._crit_edge198, label %382

._crit_edge202:                                   ; preds = %444, %._crit_edge198
  %434 = invoke noundef i32 @_Z6finishPKcP8mjModel_(ptr noundef null, ptr noundef null)
          to label %448 unwind label %380

.lr.ph201:                                        ; preds = %._crit_edge198, %444
  %indvars.iv210 = phi i64 [ %indvars.iv.next211, %444 ], [ 0, %._crit_edge198 ]
  %435 = getelementptr inbounds [512 x ptr], ptr @d, i64 0, i64 %indvars.iv210
  %436 = load ptr, ptr %435, align 8, !tbaa !11
  %437 = getelementptr inbounds i8, ptr %436, i64 162704
  %438 = load i64, ptr %437, align 8, !tbaa !41
  %439 = inttoptr i64 %438 to ptr
  invoke void @mj_deleteData(ptr noundef nonnull %436)
          to label %440 unwind label %442

440:                                              ; preds = %.lr.ph201
  %.not156 = icmp eq i64 %438, 0
  br i1 %.not156, label %444, label %441

441:                                              ; preds = %440
  invoke void @mju_threadPoolDestroy(ptr noundef nonnull %439)
          to label %444 unwind label %442

442:                                              ; preds = %441, %.lr.ph201
  %443 = landingpad { ptr, i32 }
          cleanup
  br label %449

444:                                              ; preds = %441, %440
  %indvars.iv.next211 = add nuw nsw i64 %indvars.iv210, 1
  %445 = load i32, ptr %4, align 4, !tbaa !5
  %446 = sext i32 %445 to i64
  %447 = icmp slt i64 %indvars.iv.next211, %446
  br i1 %447, label %.lr.ph201, label %._crit_edge202, !llvm.loop !43

448:                                              ; preds = %._crit_edge202
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %15) #8
  br label %451

449:                                              ; preds = %442, %380
  %.pn = phi { ptr, i32 } [ %443, %442 ], [ %381, %380 ]
  call void @llvm.lifetime.end.p0(i64 3, ptr nonnull %15) #8
  br label %450

450:                                              ; preds = %196, %449, %162, %154, %142
  %.pn161 = phi { ptr, i32 } [ %155, %154 ], [ %163, %162 ], [ %143, %142 ], [ %.pn, %449 ], [ %197, %196 ]
  br label %456

451:                                              ; preds = %451, %448
  %452 = phi ptr [ %134, %448 ], [ %453, %451 ]
  %453 = getelementptr inbounds i8, ptr %452, i64 -8
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %453) #8
  %454 = icmp eq ptr %453, %11
  br i1 %454, label %455, label %451

455:                                              ; preds = %451
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %11) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  br label %.thread172

456:                                              ; preds = %456, %450
  %457 = phi ptr [ %134, %450 ], [ %458, %456 ]
  %458 = getelementptr inbounds i8, ptr %457, i64 -8
  call void @_ZNSt6threadD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %458) #8
  %459 = icmp eq ptr %458, %11
  br i1 %459, label %460, label %456

460:                                              ; preds = %456
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %11) #8
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #8
  br label %461

461:                                              ; preds = %460, %140
  %.pn161.pn = phi { ptr, i32 } [ %.pn161, %460 ], [ %141, %140 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #8
  br label %462

.thread172:                                       ; preds = %94, %455, %81
  %.2 = phi i32 [ %82, %81 ], [ %434, %455 ], [ %96, %94 ]
  call void @llvm.lifetime.end.p0(i64 1000, ptr nonnull %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  br label %464

462:                                              ; preds = %.loopexit, %.loopexit.split-lp, %87, %461, %108, %76
  %.pn164.pn.pn = phi { ptr, i32 } [ %77, %76 ], [ %.pn161.pn, %461 ], [ %88, %87 ], [ %109, %108 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 1000, ptr nonnull %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  br label %463

463:                                              ; preds = %462, %74
  %.pn164.pn.pn.pn = phi { ptr, i32 } [ %.pn164.pn.pn, %462 ], [ %75, %74 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  resume { ptr, i32 } %.pn164.pn.pn.pn

464:                                              ; preds = %.thread172, %54, %47, %39, %32
  %.3 = phi i32 [ %33, %32 ], [ %40, %39 ], [ %48, %47 ], [ %55, %54 ], [ %.2, %.thread172 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  br label %465

465:                                              ; preds = %464, %21
  %.4 = phi i32 [ %22, %21 ], [ %.3, %464 ]
  ret i32 %.4
}

; Function Attrs: nofree nounwind
declare noundef i32 @__isoc99_sscanf(ptr nocapture noundef readonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcm(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i64 noundef) local_unnamed_addr #4 align 2

declare ptr @mj_loadModel(ptr noundef, ptr noundef) local_unnamed_addr #6

declare ptr @mj_loadXML(ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #6

declare i32 @mj_name2id(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #6

declare ptr @mj_makeData(ptr noundef) local_unnamed_addr #6

declare void @mj_resetDataKeyframe(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #6

declare ptr @mju_threadPoolCreate(i64 noundef) local_unnamed_addr #6

declare void @mju_bindThreadPool(ptr noundef, ptr noundef) local_unnamed_addr #6

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

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

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

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

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

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6

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

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

declare void @mj_deleteData(ptr noundef) local_unnamed_addr #6

declare void @mju_threadPoolDestroy(ptr noundef) local_unnamed_addr #6

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #7

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #7

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !10, i64 320}
!16 = !{!"_ZTS8mjModel_", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !6, i64 112, !6, i64 116, !6, i64 120, !6, i64 124, !6, i64 128, !6, i64 132, !6, i64 136, !6, i64 140, !6, i64 144, !6, i64 148, !6, i64 152, !6, i64 156, !6, i64 160, !6, i64 164, !6, i64 168, !6, i64 172, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188, !6, i64 192, !6, i64 196, !6, i64 200, !6, i64 204, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !6, i64 224, !6, i64 228, !6, i64 232, !6, i64 236, !6, i64 240, !6, i64 244, !6, i64 248, !6, i64 252, !6, i64 256, !6, i64 260, !6, i64 264, !6, i64 268, !6, i64 272, !6, i64 276, !6, i64 280, !6, i64 284, !6, i64 288, !6, i64 292, !6, i64 296, !6, i64 300, !17, i64 304, !17, i64 312, !18, i64 320, !19, i64 624, !27, i64 1248, !12, i64 1304, !12, i64 1312, !12, i64 1320, !12, i64 1328, !12, i64 1336, !12, i64 1344, !12, i64 1352, !12, i64 1360, !12, i64 1368, !12, i64 1376, !12, i64 1384, !12, i64 1392, !12, i64 1400, !12, i64 1408, !12, i64 1416, !12, i64 1424, !12, i64 1432, !12, i64 1440, !12, i64 1448, !12, i64 1456, !12, i64 1464, !12, i64 1472, !12, i64 1480, !12, i64 1488, !12, i64 1496, !12, i64 1504, !12, i64 1512, !12, i64 1520, !12, i64 1528, !12, i64 1536, !12, i64 1544, !12, i64 1552, !12, i64 1560, !12, i64 1568, !12, i64 1576, !12, i64 1584, !12, i64 1592, !12, i64 1600, !12, i64 1608, !12, i64 1616, !12, i64 1624, !12, i64 1632, !12, i64 1640, !12, i64 1648, !12, i64 1656, !12, i64 1664, !12, i64 1672, !12, i64 1680, !12, i64 1688, !12, i64 1696, !12, i64 1704, !12, i64 1712, !12, i64 1720, !12, i64 1728, !12, i64 1736, !12, i64 1744, !12, i64 1752, !12, i64 1760, !12, i64 1768, !12, i64 1776, !12, i64 1784, !12, i64 1792, !12, i64 1800, !12, i64 1808, !12, i64 1816, !12, i64 1824, !12, i64 1832, !12, i64 1840, !12, i64 1848, !12, i64 1856, !12, i64 1864, !12, i64 1872, !12, i64 1880, !12, i64 1888, !12, i64 1896, !12, i64 1904, !12, i64 1912, !12, i64 1920, !12, i64 1928, !12, i64 1936, !12, i64 1944, !12, i64 1952, !12, i64 1960, !12, i64 1968, !12, i64 1976, !12, i64 1984, !12, i64 1992, !12, i64 2000, !12, i64 2008, !12, i64 2016, !12, i64 2024, !12, i64 2032, !12, i64 2040, !12, i64 2048, !12, i64 2056, !12, i64 2064, !12, i64 2072, !12, i64 2080, !12, i64 2088, !12, i64 2096, !12, i64 2104, !12, i64 2112, !12, i64 2120, !12, i64 2128, !12, i64 2136, !12, i64 2144, !12, i64 2152, !12, i64 2160, !12, i64 2168, !12, i64 2176, !12, i64 2184, !12, i64 2192, !12, i64 2200, !12, i64 2208, !12, i64 2216, !12, i64 2224, !12, i64 2232, !12, i64 2240, !12, i64 2248, !12, i64 2256, !12, i64 2264, !12, i64 2272, !12, i64 2280, !12, i64 2288, !12, i64 2296, !12, i64 2304, !12, i64 2312, !12, i64 2320, !12, i64 2328, !12, i64 2336, !12, i64 2344, !12, i64 2352, !12, i64 2360, !12, i64 2368, !12, i64 2376, !12, i64 2384, !12, i64 2392, !12, i64 2400, !12, i64 2408, !12, i64 2416, !12, i64 2424, !12, i64 2432, !12, i64 2440, !12, i64 2448, !12, i64 2456, !12, i64 2464, !12, i64 2472, !12, i64 2480, !12, i64 2488, !12, i64 2496, !12, i64 2504, !12, i64 2512, !12, i64 2520, !12, i64 2528, !12, i64 2536, !12, i64 2544, !12, i64 2552, !12, i64 2560, !12, i64 2568, !12, i64 2576, !12, i64 2584, !12, i64 2592, !12, i64 2600, !12, i64 2608, !12, i64 2616, !12, i64 2624, !12, i64 2632, !12, i64 2640, !12, i64 2648, !12, i64 2656, !12, i64 2664, !12, i64 2672, !12, i64 2680, !12, i64 2688, !12, i64 2696, !12, i64 2704, !12, i64 2712, !12, i64 2720, !12, i64 2728, !12, i64 2736, !12, i64 2744, !12, i64 2752, !12, i64 2760, !12, i64 2768, !12, i64 2776, !12, i64 2784, !12, i64 2792, !12, i64 2800, !12, i64 2808, !12, i64 2816, !12, i64 2824, !12, i64 2832, !12, i64 2840, !12, i64 2848, !12, i64 2856, !12, i64 2864, !12, i64 2872, !12, i64 2880, !12, i64 2888, !12, i64 2896, !12, i64 2904, !12, i64 2912, !12, i64 2920, !12, i64 2928, !12, i64 2936, !12, i64 2944, !12, i64 2952, !12, i64 2960, !12, i64 2968, !12, i64 2976, !12, i64 2984, !12, i64 2992, !12, i64 3000, !12, i64 3008, !12, i64 3016, !12, i64 3024, !12, i64 3032, !12, i64 3040, !12, i64 3048, !12, i64 3056, !12, i64 3064, !12, i64 3072, !12, i64 3080, !12, i64 3088, !12, i64 3096, !12, i64 3104, !12, i64 3112, !12, i64 3120, !12, i64 3128, !12, i64 3136, !12, i64 3144, !12, i64 3152, !12, i64 3160, !12, i64 3168, !12, i64 3176, !12, i64 3184, !12, i64 3192, !12, i64 3200, !12, i64 3208, !12, i64 3216, !12, i64 3224, !12, i64 3232, !12, i64 3240, !12, i64 3248, !12, i64 3256, !12, i64 3264, !12, i64 3272, !12, i64 3280, !12, i64 3288, !12, i64 3296, !12, i64 3304, !12, i64 3312, !12, i64 3320, !12, i64 3328, !12, i64 3336, !12, i64 3344, !12, i64 3352, !12, i64 3360, !12, i64 3368, !12, i64 3376, !12, i64 3384, !12, i64 3392, !12, i64 3400, !12, i64 3408, !12, i64 3416, !12, i64 3424, !12, i64 3432, !12, i64 3440, !12, i64 3448, !12, i64 3456, !12, i64 3464, !12, i64 3472, !12, i64 3480, !12, i64 3488, !12, i64 3496, !12, i64 3504, !12, i64 3512, !12, i64 3520, !12, i64 3528, !12, i64 3536, !12, i64 3544, !12, i64 3552, !12, i64 3560, !12, i64 3568, !12, i64 3576, !12, i64 3584, !12, i64 3592, !12, i64 3600, !12, i64 3608, !12, i64 3616, !12, i64 3624, !12, i64 3632, !12, i64 3640, !12, i64 3648, !12, i64 3656, !12, i64 3664, !12, i64 3672, !12, i64 3680, !12, i64 3688, !12, i64 3696, !12, i64 3704, !12, i64 3712, !12, i64 3720, !12, i64 3728, !12, i64 3736, !12, i64 3744, !12, i64 3752, !12, i64 3760, !12, i64 3768, !12, i64 3776, !12, i64 3784, !12, i64 3792, !12, i64 3800, !12, i64 3808, !12, i64 3816, !12, i64 3824, !12, i64 3832, !12, i64 3840, !12, i64 3848, !12, i64 3856, !12, i64 3864, !12, i64 3872, !12, i64 3880, !12, i64 3888, !12, i64 3896, !12, i64 3904, !12, i64 3912, !12, i64 3920, !12, i64 3928, !12, i64 3936, !12, i64 3944, !12, i64 3952, !12, i64 3960, !12, i64 3968, !12, i64 3976, !12, i64 3984, !12, i64 3992, !12, i64 4000, !12, i64 4008, !12, i64 4016, !12, i64 4024, !12, i64 4032, !12, i64 4040, !12, i64 4048, !12, i64 4056, !12, i64 4064, !12, i64 4072, !12, i64 4080, !12, i64 4088, !12, i64 4096, !12, i64 4104, !12, i64 4112, !12, i64 4120, !12, i64 4128, !12, i64 4136, !12, i64 4144, !12, i64 4152, !12, i64 4160, !12, i64 4168, !12, i64 4176, !12, i64 4184, !12, i64 4192, !12, i64 4200, !12, i64 4208, !12, i64 4216, !12, i64 4224, !12, i64 4232, !12, i64 4240, !12, i64 4248, !12, i64 4256, !12, i64 4264, !12, i64 4272, !12, i64 4280, !12, i64 4288, !12, i64 4296, !12, i64 4304, !12, i64 4312}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_ZTS9mjOption_", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !7, i64 56, !7, i64 80, !7, i64 104, !10, i64 128, !10, i64 136, !10, i64 144, !7, i64 152, !7, i64 168, !7, i64 208, !6, i64 248, !6, i64 252, !6, i64 256, !6, i64 260, !6, i64 264, !6, i64 268, !6, i64 272, !6, i64 276, !6, i64 280, !6, i64 284, !6, i64 288, !6, i64 292, !6, i64 296}
!19 = !{!"_ZTS9mjVisual_", !20, i64 0, !22, i64 44, !23, i64 64, !24, i64 104, !25, i64 156, !26, i64 224}
!20 = !{!"_ZTSN9mjVisual_Ut_E", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !21, i64 16, !21, i64 20, !21, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40}
!21 = !{!"float", !7, i64 0}
!22 = !{!"_ZTSN9mjVisual_Ut0_E", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16}
!23 = !{!"_ZTSN9mjVisual_Ut1_E", !7, i64 0, !7, i64 12, !7, i64 24, !6, i64 36}
!24 = !{!"_ZTSN9mjVisual_Ut2_E", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !21, i64 16, !21, i64 20, !21, i64 24, !21, i64 28, !21, i64 32, !21, i64 36, !21, i64 40, !21, i64 44, !21, i64 48}
!25 = !{!"_ZTSN9mjVisual_Ut3_E", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !21, i64 16, !21, i64 20, !21, i64 24, !21, i64 28, !21, i64 32, !21, i64 36, !21, i64 40, !21, i64 44, !21, i64 48, !21, i64 52, !21, i64 56, !21, i64 60, !21, i64 64}
!26 = !{!"_ZTSN9mjVisual_Ut4_E", !7, i64 0, !7, i64 16, !7, i64 32, !7, i64 48, !7, i64 64, !7, i64 80, !7, i64 96, !7, i64 112, !7, i64 128, !7, i64 144, !7, i64 160, !7, i64 176, !7, i64 192, !7, i64 208, !7, i64 224, !7, i64 240, !7, i64 256, !7, i64 272, !7, i64 288, !7, i64 304, !7, i64 320, !7, i64 336, !7, i64 352, !7, i64 368, !7, i64 384}
!27 = !{!"_ZTS12mjStatistic_", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !7, i64 32}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = !{!16, !6, i64 4}
!31 = !{!32, !6, i64 8}
!32 = !{!"_ZTS12mjTimerStat_", !10, i64 0, !6, i64 8}
!33 = !{!32, !10, i64 0}
!34 = !{i64 0, i64 24, !35}
!35 = !{!7, !7, i64 0}
!36 = !{!37, !12, i64 0}
!37 = !{!"_ZTSSt16initializer_listI9mjtTimer_E", !12, i64 0, !17, i64 8}
!38 = !{!37, !17, i64 8}
!39 = !{!40, !40, i64 0}
!40 = !{!"_ZTS9mjtTimer_", !7, i64 0}
!41 = !{!42, !17, i64 162704}
!42 = !{!"_ZTS7mjData_", !17, i64 0, !17, i64 8, !6, i64 16, !17, i64 24, !17, i64 32, !17, i64 40, !17, i64 48, !7, i64 56, !17, i64 1080, !6, i64 1088, !6, i64 1092, !7, i64 1096, !7, i64 1160, !7, i64 1400, !6, i64 161400, !7, i64 161404, !7, i64 161484, !7, i64 161568, !6, i64 161584, !6, i64 161588, !6, i64 161592, !6, i64 161596, !6, i64 161600, !6, i64 161604, !6, i64 161608, !10, i64 161616, !7, i64 161624, !12, i64 161640, !12, i64 161648, !12, i64 161656, !12, i64 161664, !12, i64 161672, !12, i64 161680, !12, i64 161688, !12, i64 161696, !12, i64 161704, !12, i64 161712, !12, i64 161720, !12, i64 161728, !12, i64 161736, !12, i64 161744, !12, i64 161752, !12, i64 161760, !12, i64 161768, !12, i64 161776, !12, i64 161784, !12, i64 161792, !12, i64 161800, !12, i64 161808, !12, i64 161816, !12, i64 161824, !12, i64 161832, !12, i64 161840, !12, i64 161848, !12, i64 161856, !12, i64 161864, !12, i64 161872, !12, i64 161880, !12, i64 161888, !12, i64 161896, !12, i64 161904, !12, i64 161912, !12, i64 161920, !12, i64 161928, !12, i64 161936, !12, i64 161944, !12, i64 161952, !12, i64 161960, !12, i64 161968, !12, i64 161976, !12, i64 161984, !12, i64 161992, !12, i64 162000, !12, i64 162008, !12, i64 162016, !12, i64 162024, !12, i64 162032, !12, i64 162040, !12, i64 162048, !12, i64 162056, !12, i64 162064, !12, i64 162072, !12, i64 162080, !12, i64 162088, !12, i64 162096, !12, i64 162104, !12, i64 162112, !12, i64 162120, !12, i64 162128, !12, i64 162136, !12, i64 162144, !12, i64 162152, !12, i64 162160, !12, i64 162168, !12, i64 162176, !12, i64 162184, !12, i64 162192, !12, i64 162200, !12, i64 162208, !12, i64 162216, !12, i64 162224, !12, i64 162232, !12, i64 162240, !12, i64 162248, !12, i64 162256, !12, i64 162264, !12, i64 162272, !12, i64 162280, !12, i64 162288, !12, i64 162296, !12, i64 162304, !12, i64 162312, !12, i64 162320, !12, i64 162328, !12, i64 162336, !12, i64 162344, !12, i64 162352, !12, i64 162360, !12, i64 162368, !12, i64 162376, !12, i64 162384, !12, i64 162392, !12, i64 162400, !12, i64 162408, !12, i64 162416, !12, i64 162424, !12, i64 162432, !12, i64 162440, !12, i64 162448, !12, i64 162456, !12, i64 162464, !12, i64 162472, !12, i64 162480, !12, i64 162488, !12, i64 162496, !12, i64 162504, !12, i64 162512, !12, i64 162520, !12, i64 162528, !12, i64 162536, !12, i64 162544, !12, i64 162552, !12, i64 162560, !12, i64 162568, !12, i64 162576, !12, i64 162584, !12, i64 162592, !12, i64 162600, !12, i64 162608, !12, i64 162616, !12, i64 162624, !12, i64 162632, !12, i64 162640, !12, i64 162648, !12, i64 162656, !12, i64 162664, !12, i64 162672, !12, i64 162680, !12, i64 162688, !12, i64 162696, !17, i64 162704}
!43 = distinct !{!43, !14}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass