; LLVM IR from csviragh/robotsim :: src/utilities (param_utils)

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

%struct.unit_model_params_t = type { %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, %struct.unit_param_double_t, [512 x i8] }
%struct.unit_param_double_t = type { [64 x i8], [10 x i8], double }

; Function Attrs: nounwind uwtable
define dso_local void @ChangeUnitModelParameter(ptr noundef %0, i32 noundef %1, double noundef %2, double noundef %3) #0 {
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store double %2, ptr %7, align 8, !tbaa !11
  store double %3, ptr %8, align 8, !tbaa !11
  %9 = load i32, ptr %6, align 4, !tbaa !9
  switch i32 %9, label %248 [
    i32 1, label %10
    i32 2, label %29
    i32 3, label %48
    i32 4, label %65
    i32 5, label %82
    i32 6, label %99
    i32 7, label %118
    i32 8, label %135
    i32 9, label %152
    i32 10, label %169
    i32 11, label %186
    i32 12, label %203
    i32 13, label %231
  ]

10:                                               ; preds = %4
  %11 = load double, ptr %7, align 8, !tbaa !11
  %12 = load ptr, ptr %5, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.unit_model_params_t, ptr %12, i32 0, i32 0
  %14 = getelementptr inbounds %struct.unit_param_double_t, ptr %13, i32 0, i32 2
  %15 = load double, ptr %14, align 8, !tbaa !13
  %16 = call double @llvm.fmuladd.f64(double %11, double 1.000000e-02, double %15)
  store double %16, ptr %14, align 8, !tbaa !13
  %17 = load ptr, ptr %5, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.unit_model_params_t, ptr %17, i32 0, i32 0
  %19 = getelementptr inbounds %struct.unit_param_double_t, ptr %18, i32 0, i32 2
  %20 = load double, ptr %19, align 8, !tbaa !13
  %21 = load double, ptr %8, align 8, !tbaa !11
  %22 = fcmp olt double %20, %21
  br i1 %22, label %23, label %28

23:                                               ; preds = %10
  %24 = load double, ptr %8, align 8, !tbaa !11
  %25 = load ptr, ptr %5, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.unit_model_params_t, ptr %25, i32 0, i32 0
  %27 = getelementptr inbounds %struct.unit_param_double_t, ptr %26, i32 0, i32 2
  store double %24, ptr %27, align 8, !tbaa !13
  br label %28

28:                                               ; preds = %23, %10
  br label %248

29:                                               ; preds = %4
  %30 = load double, ptr %7, align 8, !tbaa !11
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.unit_model_params_t, ptr %31, i32 0, i32 1
  %33 = getelementptr inbounds %struct.unit_param_double_t, ptr %32, i32 0, i32 2
  %34 = load double, ptr %33, align 8, !tbaa !16
  %35 = call double @llvm.fmuladd.f64(double %30, double 1.000000e-02, double %34)
  store double %35, ptr %33, align 8, !tbaa !16
  %36 = load ptr, ptr %5, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.unit_model_params_t, ptr %36, i32 0, i32 1
  %38 = getelementptr inbounds %struct.unit_param_double_t, ptr %37, i32 0, i32 2
  %39 = load double, ptr %38, align 8, !tbaa !16
  %40 = load double, ptr %8, align 8, !tbaa !11
  %41 = fcmp olt double %39, %40
  br i1 %41, label %42, label %47

42:                                               ; preds = %29
  %43 = load double, ptr %8, align 8, !tbaa !11
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.unit_model_params_t, ptr %44, i32 0, i32 1
  %46 = getelementptr inbounds %struct.unit_param_double_t, ptr %45, i32 0, i32 2
  store double %43, ptr %46, align 8, !tbaa !16
  br label %47

47:                                               ; preds = %42, %29
  br label %248

48:                                               ; preds = %4
  %49 = load double, ptr %7, align 8, !tbaa !11
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.unit_model_params_t, ptr %50, i32 0, i32 2
  %52 = getelementptr inbounds %struct.unit_param_double_t, ptr %51, i32 0, i32 2
  %53 = load double, ptr %52, align 8, !tbaa !17
  %54 = fadd double %53, %49
  store double %54, ptr %52, align 8, !tbaa !17
  %55 = load ptr, ptr %5, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.unit_model_params_t, ptr %55, i32 0, i32 2
  %57 = getelementptr inbounds %struct.unit_param_double_t, ptr %56, i32 0, i32 2
  %58 = load double, ptr %57, align 8, !tbaa !17
  %59 = fcmp olt double %58, 0.000000e+00
  br i1 %59, label %60, label %64

60:                                               ; preds = %48
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.unit_model_params_t, ptr %61, i32 0, i32 2
  %63 = getelementptr inbounds %struct.unit_param_double_t, ptr %62, i32 0, i32 2
  store double 0.000000e+00, ptr %63, align 8, !tbaa !17
  br label %64

64:                                               ; preds = %60, %48
  br label %248

65:                                               ; preds = %4
  %66 = load double, ptr %7, align 8, !tbaa !11
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.unit_model_params_t, ptr %67, i32 0, i32 5
  %69 = getelementptr inbounds %struct.unit_param_double_t, ptr %68, i32 0, i32 2
  %70 = load double, ptr %69, align 8, !tbaa !18
  %71 = call double @llvm.fmuladd.f64(double %66, double 1.000000e+01, double %70)
  store double %71, ptr %69, align 8, !tbaa !18
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.unit_model_params_t, ptr %72, i32 0, i32 5
  %74 = getelementptr inbounds %struct.unit_param_double_t, ptr %73, i32 0, i32 2
  %75 = load double, ptr %74, align 8, !tbaa !18
  %76 = fcmp olt double %75, 1.000000e+00
  br i1 %76, label %77, label %81

77:                                               ; preds = %65
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.unit_model_params_t, ptr %78, i32 0, i32 5
  %80 = getelementptr inbounds %struct.unit_param_double_t, ptr %79, i32 0, i32 2
  store double 1.000000e+00, ptr %80, align 8, !tbaa !18
  br label %81

81:                                               ; preds = %77, %65
  br label %248

82:                                               ; preds = %4
  %83 = load double, ptr %7, align 8, !tbaa !11
  %84 = load ptr, ptr %5, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.unit_model_params_t, ptr %84, i32 0, i32 4
  %86 = getelementptr inbounds %struct.unit_param_double_t, ptr %85, i32 0, i32 2
  %87 = load double, ptr %86, align 8, !tbaa !19
  %88 = call double @llvm.fmuladd.f64(double %83, double 1.000000e-02, double %87)
  store double %88, ptr %86, align 8, !tbaa !19
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.unit_model_params_t, ptr %89, i32 0, i32 4
  %91 = getelementptr inbounds %struct.unit_param_double_t, ptr %90, i32 0, i32 2
  %92 = load double, ptr %91, align 8, !tbaa !19
  %93 = fcmp olt double %92, 0.000000e+00
  br i1 %93, label %94, label %98

94:                                               ; preds = %82
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.unit_model_params_t, ptr %95, i32 0, i32 4
  %97 = getelementptr inbounds %struct.unit_param_double_t, ptr %96, i32 0, i32 2
  store double 0.000000e+00, ptr %97, align 8, !tbaa !19
  br label %98

98:                                               ; preds = %94, %82
  br label %248

99:                                               ; preds = %4
  %100 = load double, ptr %7, align 8, !tbaa !11
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.unit_model_params_t, ptr %101, i32 0, i32 3
  %103 = getelementptr inbounds %struct.unit_param_double_t, ptr %102, i32 0, i32 2
  %104 = load double, ptr %103, align 8, !tbaa !20
  %105 = call double @llvm.fmuladd.f64(double %100, double 1.000000e-02, double %104)
  store double %105, ptr %103, align 8, !tbaa !20
  %106 = load ptr, ptr %5, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.unit_model_params_t, ptr %106, i32 0, i32 3
  %108 = getelementptr inbounds %struct.unit_param_double_t, ptr %107, i32 0, i32 2
  %109 = load double, ptr %108, align 8, !tbaa !20
  %110 = load double, ptr %8, align 8, !tbaa !11
  %111 = fcmp olt double %109, %110
  br i1 %111, label %112, label %117

112:                                              ; preds = %99
  %113 = load double, ptr %8, align 8, !tbaa !11
  %114 = load ptr, ptr %5, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.unit_model_params_t, ptr %114, i32 0, i32 3
  %116 = getelementptr inbounds %struct.unit_param_double_t, ptr %115, i32 0, i32 2
  store double %113, ptr %116, align 8, !tbaa !20
  br label %117

117:                                              ; preds = %112, %99
  br label %248

118:                                              ; preds = %4
  %119 = load double, ptr %7, align 8, !tbaa !11
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.unit_model_params_t, ptr %120, i32 0, i32 8
  %122 = getelementptr inbounds %struct.unit_param_double_t, ptr %121, i32 0, i32 2
  %123 = load double, ptr %122, align 8, !tbaa !21
  %124 = call double @llvm.fmuladd.f64(double %119, double 1.000000e+01, double %123)
  store double %124, ptr %122, align 8, !tbaa !21
  %125 = load ptr, ptr %5, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.unit_model_params_t, ptr %125, i32 0, i32 8
  %127 = getelementptr inbounds %struct.unit_param_double_t, ptr %126, i32 0, i32 2
  %128 = load double, ptr %127, align 8, !tbaa !21
  %129 = fcmp olt double %128, 0.000000e+00
  br i1 %129, label %130, label %134

130:                                              ; preds = %118
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.unit_model_params_t, ptr %131, i32 0, i32 8
  %133 = getelementptr inbounds %struct.unit_param_double_t, ptr %132, i32 0, i32 2
  store double 0.000000e+00, ptr %133, align 8, !tbaa !21
  br label %134

134:                                              ; preds = %130, %118
  br label %248

135:                                              ; preds = %4
  %136 = load double, ptr %7, align 8, !tbaa !11
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.unit_model_params_t, ptr %137, i32 0, i32 10
  %139 = getelementptr inbounds %struct.unit_param_double_t, ptr %138, i32 0, i32 2
  %140 = load double, ptr %139, align 8, !tbaa !22
  %141 = call double @llvm.fmuladd.f64(double %136, double 1.000000e+01, double %140)
  store double %141, ptr %139, align 8, !tbaa !22
  %142 = load ptr, ptr %5, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.unit_model_params_t, ptr %142, i32 0, i32 10
  %144 = getelementptr inbounds %struct.unit_param_double_t, ptr %143, i32 0, i32 2
  %145 = load double, ptr %144, align 8, !tbaa !22
  %146 = fcmp olt double %145, 0.000000e+00
  br i1 %146, label %147, label %151

147:                                              ; preds = %135
  %148 = load ptr, ptr %5, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.unit_model_params_t, ptr %148, i32 0, i32 10
  %150 = getelementptr inbounds %struct.unit_param_double_t, ptr %149, i32 0, i32 2
  store double 0.000000e+00, ptr %150, align 8, !tbaa !22
  br label %151

151:                                              ; preds = %147, %135
  br label %248

152:                                              ; preds = %4
  %153 = load double, ptr %7, align 8, !tbaa !11
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.unit_model_params_t, ptr %154, i32 0, i32 9
  %156 = getelementptr inbounds %struct.unit_param_double_t, ptr %155, i32 0, i32 2
  %157 = load double, ptr %156, align 8, !tbaa !23
  %158 = call double @llvm.fmuladd.f64(double %153, double 1.000000e+01, double %157)
  store double %158, ptr %156, align 8, !tbaa !23
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.unit_model_params_t, ptr %159, i32 0, i32 9
  %161 = getelementptr inbounds %struct.unit_param_double_t, ptr %160, i32 0, i32 2
  %162 = load double, ptr %161, align 8, !tbaa !23
  %163 = fcmp olt double %162, 0.000000e+00
  br i1 %163, label %164, label %168

164:                                              ; preds = %152
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.unit_model_params_t, ptr %165, i32 0, i32 9
  %167 = getelementptr inbounds %struct.unit_param_double_t, ptr %166, i32 0, i32 2
  store double 0.000000e+00, ptr %167, align 8, !tbaa !23
  br label %168

168:                                              ; preds = %164, %152
  br label %248

169:                                              ; preds = %4
  %170 = load double, ptr %7, align 8, !tbaa !11
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.unit_model_params_t, ptr %171, i32 0, i32 11
  %173 = getelementptr inbounds %struct.unit_param_double_t, ptr %172, i32 0, i32 2
  %174 = load double, ptr %173, align 8, !tbaa !24
  %175 = call double @llvm.fmuladd.f64(double %170, double 1.000000e+01, double %174)
  store double %175, ptr %173, align 8, !tbaa !24
  %176 = load ptr, ptr %5, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.unit_model_params_t, ptr %176, i32 0, i32 11
  %178 = getelementptr inbounds %struct.unit_param_double_t, ptr %177, i32 0, i32 2
  %179 = load double, ptr %178, align 8, !tbaa !24
  %180 = fcmp olt double %179, 0.000000e+00
  br i1 %180, label %181, label %185

181:                                              ; preds = %169
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.unit_model_params_t, ptr %182, i32 0, i32 11
  %184 = getelementptr inbounds %struct.unit_param_double_t, ptr %183, i32 0, i32 2
  store double 0.000000e+00, ptr %184, align 8, !tbaa !24
  br label %185

185:                                              ; preds = %181, %169
  br label %248

186:                                              ; preds = %4
  %187 = load double, ptr %7, align 8, !tbaa !11
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.unit_model_params_t, ptr %188, i32 0, i32 12
  %190 = getelementptr inbounds %struct.unit_param_double_t, ptr %189, i32 0, i32 2
  %191 = load double, ptr %190, align 8, !tbaa !25
  %192 = call double @llvm.fmuladd.f64(double %187, double 1.000000e+01, double %191)
  store double %192, ptr %190, align 8, !tbaa !25
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.unit_model_params_t, ptr %193, i32 0, i32 12
  %195 = getelementptr inbounds %struct.unit_param_double_t, ptr %194, i32 0, i32 2
  %196 = load double, ptr %195, align 8, !tbaa !25
  %197 = fcmp olt double %196, 0.000000e+00
  br i1 %197, label %198, label %202

198:                                              ; preds = %186
  %199 = load ptr, ptr %5, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.unit_model_params_t, ptr %199, i32 0, i32 12
  %201 = getelementptr inbounds %struct.unit_param_double_t, ptr %200, i32 0, i32 2
  store double 0.000000e+00, ptr %201, align 8, !tbaa !25
  br label %202

202:                                              ; preds = %198, %186
  br label %248

203:                                              ; preds = %4
  %204 = load double, ptr %7, align 8, !tbaa !11
  %205 = load ptr, ptr %5, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.unit_model_params_t, ptr %205, i32 0, i32 6
  %207 = getelementptr inbounds %struct.unit_param_double_t, ptr %206, i32 0, i32 2
  %208 = load double, ptr %207, align 8, !tbaa !26
  %209 = call double @llvm.fmuladd.f64(double %204, double 1.000000e-02, double %208)
  store double %209, ptr %207, align 8, !tbaa !26
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.unit_model_params_t, ptr %210, i32 0, i32 6
  %212 = getelementptr inbounds %struct.unit_param_double_t, ptr %211, i32 0, i32 2
  %213 = load double, ptr %212, align 8, !tbaa !26
  %214 = fcmp olt double %213, 0.000000e+00
  br i1 %214, label %215, label %219

215:                                              ; preds = %203
  %216 = load ptr, ptr %5, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.unit_model_params_t, ptr %216, i32 0, i32 6
  %218 = getelementptr inbounds %struct.unit_param_double_t, ptr %217, i32 0, i32 2
  store double 0.000000e+00, ptr %218, align 8, !tbaa !26
  br label %230

219:                                              ; preds = %203
  %220 = load ptr, ptr %5, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.unit_model_params_t, ptr %220, i32 0, i32 6
  %222 = getelementptr inbounds %struct.unit_param_double_t, ptr %221, i32 0, i32 2
  %223 = load double, ptr %222, align 8, !tbaa !26
  %224 = fcmp ogt double %223, 1.000000e+00
  br i1 %224, label %225, label %229

225:                                              ; preds = %219
  %226 = load ptr, ptr %5, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.unit_model_params_t, ptr %226, i32 0, i32 6
  %228 = getelementptr inbounds %struct.unit_param_double_t, ptr %227, i32 0, i32 2
  store double 1.000000e+00, ptr %228, align 8, !tbaa !26
  br label %229

229:                                              ; preds = %225, %219
  br label %230

230:                                              ; preds = %229, %215
  br label %248

231:                                              ; preds = %4
  %232 = load double, ptr %7, align 8, !tbaa !11
  %233 = load ptr, ptr %5, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.unit_model_params_t, ptr %233, i32 0, i32 7
  %235 = getelementptr inbounds %struct.unit_param_double_t, ptr %234, i32 0, i32 2
  %236 = load double, ptr %235, align 8, !tbaa !27
  %237 = call double @llvm.fmuladd.f64(double %232, double 1.000000e+01, double %236)
  store double %237, ptr %235, align 8, !tbaa !27
  %238 = load ptr, ptr %5, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.unit_model_params_t, ptr %238, i32 0, i32 7
  %240 = getelementptr inbounds %struct.unit_param_double_t, ptr %239, i32 0, i32 2
  %241 = load double, ptr %240, align 8, !tbaa !27
  %242 = fcmp olt double %241, 0.000000e+00
  br i1 %242, label %243, label %247

243:                                              ; preds = %231
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.unit_model_params_t, ptr %244, i32 0, i32 7
  %246 = getelementptr inbounds %struct.unit_param_double_t, ptr %245, i32 0, i32 2
  store double 0.000000e+00, ptr %246, align 8, !tbaa !27
  br label %247

247:                                              ; preds = %243, %231
  br label %248

248:                                              ; preds = %247, %230, %202, %185, %168, %151, %134, %117, %98, %81, %64, %47, %28, %4
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !12, i64 80}
!14 = !{!"", !15, i64 0, !15, i64 88, !15, i64 176, !15, i64 264, !15, i64 352, !15, i64 440, !15, i64 528, !15, i64 616, !15, i64 704, !15, i64 792, !15, i64 880, !15, i64 968, !15, i64 1056, !15, i64 1144, !15, i64 1232, !15, i64 1320, !7, i64 1408}
!15 = !{!"", !7, i64 0, !7, i64 64, !12, i64 80}
!16 = !{!14, !12, i64 168}
!17 = !{!14, !12, i64 256}
!18 = !{!14, !12, i64 520}
!19 = !{!14, !12, i64 432}
!20 = !{!14, !12, i64 344}
!21 = !{!14, !12, i64 784}
!22 = !{!14, !12, i64 960}
!23 = !{!14, !12, i64 872}
!24 = !{!14, !12, i64 1048}
!25 = !{!14, !12, i64 1136}
!26 = !{!14, !12, i64 608}
!27 = !{!14, !12, i64 696}


; 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"

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
define dso_local void @ChangeUnitModelParameter(ptr nocapture noundef %0, i32 noundef %1, double noundef %2, double noundef %3) local_unnamed_addr #0 {
  switch i32 %1, label %86 [
    i32 1, label %5
    i32 2, label %11
    i32 3, label %17
    i32 4, label %23
    i32 5, label %29
    i32 6, label %35
    i32 7, label %41
    i32 8, label %47
    i32 9, label %53
    i32 10, label %59
    i32 11, label %65
    i32 12, label %71
    i32 13, label %80
  ]

5:                                                ; preds = %4
  %6 = getelementptr inbounds i8, ptr %0, i64 80
  %7 = load double, ptr %6, align 8, !tbaa !5
  %8 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e-02, double %7)
  store double %8, ptr %6, align 8, !tbaa !5
  %9 = fcmp olt double %8, %3
  br i1 %9, label %10, label %86

10:                                               ; preds = %5
  store double %3, ptr %6, align 8, !tbaa !5
  br label %86

11:                                               ; preds = %4
  %12 = getelementptr inbounds i8, ptr %0, i64 168
  %13 = load double, ptr %12, align 8, !tbaa !11
  %14 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e-02, double %13)
  store double %14, ptr %12, align 8, !tbaa !11
  %15 = fcmp olt double %14, %3
  br i1 %15, label %16, label %86

16:                                               ; preds = %11
  store double %3, ptr %12, align 8, !tbaa !11
  br label %86

17:                                               ; preds = %4
  %18 = getelementptr inbounds i8, ptr %0, i64 256
  %19 = load double, ptr %18, align 8, !tbaa !12
  %20 = fadd double %19, %2
  store double %20, ptr %18, align 8, !tbaa !12
  %21 = fcmp olt double %20, 0.000000e+00
  br i1 %21, label %22, label %86

22:                                               ; preds = %17
  store double 0.000000e+00, ptr %18, align 8, !tbaa !12
  br label %86

23:                                               ; preds = %4
  %24 = getelementptr inbounds i8, ptr %0, i64 520
  %25 = load double, ptr %24, align 8, !tbaa !13
  %26 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+01, double %25)
  store double %26, ptr %24, align 8, !tbaa !13
  %27 = fcmp olt double %26, 1.000000e+00
  br i1 %27, label %28, label %86

28:                                               ; preds = %23
  store double 1.000000e+00, ptr %24, align 8, !tbaa !13
  br label %86

29:                                               ; preds = %4
  %30 = getelementptr inbounds i8, ptr %0, i64 432
  %31 = load double, ptr %30, align 8, !tbaa !14
  %32 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e-02, double %31)
  store double %32, ptr %30, align 8, !tbaa !14
  %33 = fcmp olt double %32, 0.000000e+00
  br i1 %33, label %34, label %86

34:                                               ; preds = %29
  store double 0.000000e+00, ptr %30, align 8, !tbaa !14
  br label %86

35:                                               ; preds = %4
  %36 = getelementptr inbounds i8, ptr %0, i64 344
  %37 = load double, ptr %36, align 8, !tbaa !15
  %38 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e-02, double %37)
  store double %38, ptr %36, align 8, !tbaa !15
  %39 = fcmp olt double %38, %3
  br i1 %39, label %40, label %86

40:                                               ; preds = %35
  store double %3, ptr %36, align 8, !tbaa !15
  br label %86

41:                                               ; preds = %4
  %42 = getelementptr inbounds i8, ptr %0, i64 784
  %43 = load double, ptr %42, align 8, !tbaa !16
  %44 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+01, double %43)
  store double %44, ptr %42, align 8, !tbaa !16
  %45 = fcmp olt double %44, 0.000000e+00
  br i1 %45, label %46, label %86

46:                                               ; preds = %41
  store double 0.000000e+00, ptr %42, align 8, !tbaa !16
  br label %86

47:                                               ; preds = %4
  %48 = getelementptr inbounds i8, ptr %0, i64 960
  %49 = load double, ptr %48, align 8, !tbaa !17
  %50 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+01, double %49)
  store double %50, ptr %48, align 8, !tbaa !17
  %51 = fcmp olt double %50, 0.000000e+00
  br i1 %51, label %52, label %86

52:                                               ; preds = %47
  store double 0.000000e+00, ptr %48, align 8, !tbaa !17
  br label %86

53:                                               ; preds = %4
  %54 = getelementptr inbounds i8, ptr %0, i64 872
  %55 = load double, ptr %54, align 8, !tbaa !18
  %56 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+01, double %55)
  store double %56, ptr %54, align 8, !tbaa !18
  %57 = fcmp olt double %56, 0.000000e+00
  br i1 %57, label %58, label %86

58:                                               ; preds = %53
  store double 0.000000e+00, ptr %54, align 8, !tbaa !18
  br label %86

59:                                               ; preds = %4
  %60 = getelementptr inbounds i8, ptr %0, i64 1048
  %61 = load double, ptr %60, align 8, !tbaa !19
  %62 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+01, double %61)
  store double %62, ptr %60, align 8, !tbaa !19
  %63 = fcmp olt double %62, 0.000000e+00
  br i1 %63, label %64, label %86

64:                                               ; preds = %59
  store double 0.000000e+00, ptr %60, align 8, !tbaa !19
  br label %86

65:                                               ; preds = %4
  %66 = getelementptr inbounds i8, ptr %0, i64 1136
  %67 = load double, ptr %66, align 8, !tbaa !20
  %68 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+01, double %67)
  store double %68, ptr %66, align 8, !tbaa !20
  %69 = fcmp olt double %68, 0.000000e+00
  br i1 %69, label %70, label %86

70:                                               ; preds = %65
  store double 0.000000e+00, ptr %66, align 8, !tbaa !20
  br label %86

71:                                               ; preds = %4
  %72 = getelementptr inbounds i8, ptr %0, i64 608
  %73 = load double, ptr %72, align 8, !tbaa !21
  %74 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e-02, double %73)
  store double %74, ptr %72, align 8, !tbaa !21
  %75 = fcmp olt double %74, 0.000000e+00
  br i1 %75, label %76, label %77

76:                                               ; preds = %71
  store double 0.000000e+00, ptr %72, align 8, !tbaa !21
  br label %86

77:                                               ; preds = %71
  %78 = fcmp ogt double %74, 1.000000e+00
  br i1 %78, label %79, label %86

79:                                               ; preds = %77
  store double 1.000000e+00, ptr %72, align 8, !tbaa !21
  br label %86

80:                                               ; preds = %4
  %81 = getelementptr inbounds i8, ptr %0, i64 696
  %82 = load double, ptr %81, align 8, !tbaa !22
  %83 = tail call double @llvm.fmuladd.f64(double %2, double 1.000000e+01, double %82)
  store double %83, ptr %81, align 8, !tbaa !22
  %84 = fcmp olt double %83, 0.000000e+00
  br i1 %84, label %85, label %86

85:                                               ; preds = %80
  store double 0.000000e+00, ptr %81, align 8, !tbaa !22
  br label %86

86:                                               ; preds = %80, %85, %76, %79, %77, %65, %70, %59, %64, %53, %58, %47, %52, %41, %46, %35, %40, %29, %34, %23, %28, %17, %22, %11, %16, %5, %10, %4
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) 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 speculatable willreturn memory(none) }

!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, !10, i64 80}
!6 = !{!"", !7, i64 0, !7, i64 88, !7, i64 176, !7, i64 264, !7, i64 352, !7, i64 440, !7, i64 528, !7, i64 616, !7, i64 704, !7, i64 792, !7, i64 880, !7, i64 968, !7, i64 1056, !7, i64 1144, !7, i64 1232, !7, i64 1320, !8, i64 1408}
!7 = !{!"", !8, i64 0, !8, i64 64, !10, i64 80}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!6, !10, i64 168}
!12 = !{!6, !10, i64 256}
!13 = !{!6, !10, i64 520}
!14 = !{!6, !10, i64 432}
!15 = !{!6, !10, i64 344}
!16 = !{!6, !10, i64 784}
!17 = !{!6, !10, i64 960}
!18 = !{!6, !10, i64 872}
!19 = !{!6, !10, i64 1048}
!20 = !{!6, !10, i64 1136}
!21 = !{!6, !10, i64 608}
!22 = !{!6, !10, i64 696}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass