; LLVM IR from OpenFAST/openfast :: modules/map/src (mapinit)

; 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.tagbstring = type { i32, i32, ptr }
%struct.InitializationData_t = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.bstrList = type { i32, i32, ptr }
%struct.Domain_t = type { %struct.InnerSolveAttributes_t, %struct.OuterSolveAttributes_t, %struct.DomainOptions_t, ptr, i32, %struct.Vessel_t, %struct.list_t, %struct.list_t, %struct.list_t, %struct.list_t, ptr }
%struct.InnerSolveAttributes_t = type { ptr, double, double, double, [2 x double], [2 x double], [4 x double], [2 x double], [2 x double], [2 x double], [2 x double], [2 x double], [2 x double], double, i32, i32, i32, i32, i32, [2 x i32], i32, i32 }
%struct.OuterSolveAttributes_t = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, double, double, double, i8, i8, i8, i32, i32, i32 }
%struct.DomainOptions_t = type { ptr, double, double, double, i8, i8, i32 }
%struct.Vessel_t = type { %struct.EulerAngle_t, ptr, ptr, ptr, %struct.Point_t, %struct.Point_t, %struct.Force_t }
%struct.EulerAngle_t = type { %struct.VarType_t, %struct.VarType_t, %struct.VarType_t }
%struct.VarType_t = type { ptr, ptr, double, i8, i8, i32, i32 }
%struct.Point_t = type { %struct.VarType_t, %struct.VarType_t, %struct.VarType_t }
%struct.Force_t = type { %struct.VarType_t, %struct.VarType_t, %struct.VarType_t }
%struct.list_t = type { ptr, ptr, ptr, i32, ptr, i32, i32, i32, ptr, %struct.list_attributes_s }
%struct.list_attributes_s = type { ptr, ptr, ptr, i32, ptr, ptr, ptr }

@.str.34 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [11 x i8], align 1

declare void @set_universal_error(ptr noundef, ptr noundef, i32 noundef) #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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_help_flag(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_f_tol_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_g_tol_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_x_tol_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_max_its_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_max_its_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_tol_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_epsilon_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_integration_dt_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_kb_default_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_krylov_accelerator_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_powell_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_cb_default_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_bd_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_cd_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_fd_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_wave_kinematics_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_lm_model_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_pg_cooked_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_repeat_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_ref_position_flag(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_uncaught_flag(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @set_model_options_list(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca %struct.tagbstring, align 8
  %15 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %16 = load ptr, ptr %7, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.InitializationData_t, ptr %16, i32 0, i32 3
  %18 = load ptr, ptr %17, align 8, !tbaa !11
  %19 = getelementptr inbounds %struct.bstrList, ptr %18, i32 0, i32 0
  %20 = load i32, ptr %19, align 8, !tbaa !13
  %21 = sub nsw i32 %20, 1
  store i32 %21, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #4
  br label %22

22:                                               ; preds = %4
  %23 = getelementptr inbounds %struct.tagbstring, ptr %14, i32 0, i32 2
  store ptr @.str.34, ptr %23, align 8, !tbaa !15
  %24 = getelementptr inbounds %struct.tagbstring, ptr %14, i32 0, i32 2
  %25 = load ptr, ptr %24, align 8, !tbaa !15
  %26 = icmp ne ptr %25, null
  br i1 %26, label %27, label %32

27:                                               ; preds = %22
  %28 = getelementptr inbounds %struct.tagbstring, ptr %14, i32 0, i32 2
  %29 = load ptr, ptr %28, align 8, !tbaa !15
  %30 = call i64 @strlen(ptr noundef %29) #5
  %31 = trunc i64 %30 to i32
  br label %33

32:                                               ; preds = %22
  br label %33

33:                                               ; preds = %32, %27
  %34 = phi i32 [ %31, %27 ], [ 0, %32 ]
  %35 = getelementptr inbounds %struct.tagbstring, ptr %14, i32 0, i32 1
  store i32 %34, ptr %35, align 4, !tbaa !17
  %36 = getelementptr inbounds %struct.tagbstring, ptr %14, i32 0, i32 0
  store i32 -1, ptr %36, align 8, !tbaa !18
  br label %37

37:                                               ; preds = %33
  br label %38

38:                                               ; preds = %37
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %284, %38
  %40 = load i32, ptr %11, align 4, !tbaa !9
  %41 = load i32, ptr %12, align 4, !tbaa !9
  %42 = icmp sle i32 %40, %41
  br i1 %42, label %43, label %287

43:                                               ; preds = %39
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.InitializationData_t, ptr %44, i32 0, i32 3
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = getelementptr inbounds %struct.bstrList, ptr %46, i32 0, i32 2
  %48 = load ptr, ptr %47, align 8, !tbaa !19
  %49 = load i32, ptr %11, align 4, !tbaa !9
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds ptr, ptr %48, i64 %50
  %52 = load ptr, ptr %51, align 8, !tbaa !5
  %53 = call ptr @bsplits(ptr noundef %52, ptr noundef %14)
  store ptr %53, ptr %13, align 8, !tbaa !5
  br label %54

54:                                               ; preds = %43
  %55 = load ptr, ptr %13, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.bstrList, ptr %55, i32 0, i32 2
  %57 = load ptr, ptr %56, align 8, !tbaa !19
  %58 = getelementptr inbounds ptr, ptr %57, i64 0
  %59 = load ptr, ptr %58, align 8, !tbaa !5
  %60 = call i32 @check_help_flag(ptr noundef %59)
  store i32 %60, ptr %10, align 4, !tbaa !9
  %61 = load i32, ptr %10, align 4, !tbaa !9
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %66

63:                                               ; preds = %54
  %64 = load ptr, ptr %8, align 8, !tbaa !5
  %65 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %64, ptr noundef %65, i32 noundef 85)
  br label %281

66:                                               ; preds = %54
  %67 = load ptr, ptr %13, align 8, !tbaa !5
  %68 = load ptr, ptr %6, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.Domain_t, ptr %68, i32 0, i32 0
  %70 = getelementptr inbounds %struct.InnerSolveAttributes_t, ptr %69, i32 0, i32 1
  %71 = call i32 @check_inner_f_tol_flag(ptr noundef %67, ptr noundef %70)
  store i32 %71, ptr %10, align 4, !tbaa !9
  %72 = load i32, ptr %10, align 4, !tbaa !9
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %77

74:                                               ; preds = %66
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %75, ptr noundef %76, i32 noundef 100)
  br label %77

77:                                               ; preds = %74, %66
  %78 = load ptr, ptr %13, align 8, !tbaa !5
  %79 = load ptr, ptr %6, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.Domain_t, ptr %79, i32 0, i32 1
  %81 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %80, i32 0, i32 23
  %82 = call i32 @check_outer_max_its_flag(ptr noundef %78, ptr noundef %81)
  store i32 %82, ptr %10, align 4, !tbaa !9
  %83 = load i32, ptr %10, align 4, !tbaa !9
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %85, label %88

85:                                               ; preds = %77
  %86 = load ptr, ptr %8, align 8, !tbaa !5
  %87 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %86, ptr noundef %87, i32 noundef 101)
  br label %88

88:                                               ; preds = %85, %77
  %89 = load ptr, ptr %13, align 8, !tbaa !5
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.Domain_t, ptr %90, i32 0, i32 0
  %92 = getelementptr inbounds %struct.InnerSolveAttributes_t, ptr %91, i32 0, i32 14
  %93 = call i32 @check_inner_max_its_flag(ptr noundef %89, ptr noundef %92)
  store i32 %93, ptr %10, align 4, !tbaa !9
  %94 = load i32, ptr %10, align 4, !tbaa !9
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %96, label %99

96:                                               ; preds = %88
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  %98 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %97, ptr noundef %98, i32 noundef 102)
  br label %99

99:                                               ; preds = %96, %88
  %100 = load ptr, ptr %13, align 8, !tbaa !5
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.Domain_t, ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds %struct.InnerSolveAttributes_t, ptr %102, i32 0, i32 2
  %104 = call i32 @check_inner_g_tol_flag(ptr noundef %100, ptr noundef %103)
  store i32 %104, ptr %10, align 4, !tbaa !9
  %105 = load i32, ptr %10, align 4, !tbaa !9
  %106 = icmp ne i32 %105, 0
  br i1 %106, label %107, label %110

107:                                              ; preds = %99
  %108 = load ptr, ptr %8, align 8, !tbaa !5
  %109 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %108, ptr noundef %109, i32 noundef 107)
  br label %110

110:                                              ; preds = %107, %99
  %111 = load ptr, ptr %13, align 8, !tbaa !5
  %112 = load ptr, ptr %6, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.Domain_t, ptr %112, i32 0, i32 0
  %114 = getelementptr inbounds %struct.InnerSolveAttributes_t, ptr %113, i32 0, i32 3
  %115 = call i32 @check_inner_x_tol_flag(ptr noundef %111, ptr noundef %114)
  store i32 %115, ptr %10, align 4, !tbaa !9
  %116 = load i32, ptr %10, align 4, !tbaa !9
  %117 = icmp ne i32 %116, 0
  br i1 %117, label %118, label %121

118:                                              ; preds = %110
  %119 = load ptr, ptr %8, align 8, !tbaa !5
  %120 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %119, ptr noundef %120, i32 noundef 108)
  br label %121

121:                                              ; preds = %118, %110
  %122 = load ptr, ptr %13, align 8, !tbaa !5
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.Domain_t, ptr %123, i32 0, i32 1
  %125 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %124, i32 0, i32 17
  %126 = call i32 @check_outer_tol_flag(ptr noundef %122, ptr noundef %125)
  store i32 %126, ptr %10, align 4, !tbaa !9
  %127 = load i32, ptr %10, align 4, !tbaa !9
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %129, label %132

129:                                              ; preds = %121
  %130 = load ptr, ptr %8, align 8, !tbaa !5
  %131 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %130, ptr noundef %131, i32 noundef 101)
  br label %132

132:                                              ; preds = %129, %121
  %133 = load ptr, ptr %13, align 8, !tbaa !5
  %134 = load ptr, ptr %6, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.Domain_t, ptr %134, i32 0, i32 1
  %136 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %135, i32 0, i32 15
  %137 = call i32 @check_outer_epsilon_flag(ptr noundef %133, ptr noundef %136)
  store i32 %137, ptr %10, align 4, !tbaa !9
  %138 = load i32, ptr %10, align 4, !tbaa !9
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %143

140:                                              ; preds = %132
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  %142 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %141, ptr noundef %142, i32 noundef 101)
  br label %143

143:                                              ; preds = %140, %132
  %144 = load ptr, ptr %13, align 8, !tbaa !5
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.Domain_t, ptr %145, i32 0, i32 2
  %147 = getelementptr inbounds %struct.DomainOptions_t, ptr %146, i32 0, i32 1
  %148 = call i32 @check_integration_dt_flag(ptr noundef %144, ptr noundef %147)
  store i32 %148, ptr %10, align 4, !tbaa !9
  %149 = load i32, ptr %10, align 4, !tbaa !9
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %154

151:                                              ; preds = %143
  %152 = load ptr, ptr %8, align 8, !tbaa !5
  %153 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %152, ptr noundef %153, i32 noundef 113)
  br label %154

154:                                              ; preds = %151, %143
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  %156 = load ptr, ptr %6, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.Domain_t, ptr %156, i32 0, i32 2
  %158 = getelementptr inbounds %struct.DomainOptions_t, ptr %157, i32 0, i32 2
  %159 = call i32 @check_kb_default_flag(ptr noundef %155, ptr noundef %158)
  store i32 %159, ptr %10, align 4, !tbaa !9
  %160 = load i32, ptr %10, align 4, !tbaa !9
  %161 = icmp ne i32 %160, 0
  br i1 %161, label %162, label %165

162:                                              ; preds = %154
  %163 = load ptr, ptr %8, align 8, !tbaa !5
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %163, ptr noundef %164, i32 noundef 114)
  br label %165

165:                                              ; preds = %162, %154
  %166 = load ptr, ptr %13, align 8, !tbaa !5
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.Domain_t, ptr %167, i32 0, i32 2
  %169 = getelementptr inbounds %struct.DomainOptions_t, ptr %168, i32 0, i32 3
  %170 = call i32 @check_cb_default_flag(ptr noundef %166, ptr noundef %169)
  store i32 %170, ptr %10, align 4, !tbaa !9
  %171 = load i32, ptr %10, align 4, !tbaa !9
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %176

173:                                              ; preds = %165
  %174 = load ptr, ptr %8, align 8, !tbaa !5
  %175 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %174, ptr noundef %175, i32 noundef 115)
  br label %176

176:                                              ; preds = %173, %165
  %177 = load ptr, ptr %13, align 8, !tbaa !5
  %178 = load ptr, ptr %6, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.Domain_t, ptr %178, i32 0, i32 1
  %180 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %179, i32 0, i32 0
  %181 = call i32 @check_outer_bd_flag(ptr noundef %177, ptr noundef %180)
  store i32 %181, ptr %10, align 4, !tbaa !9
  %182 = load ptr, ptr %13, align 8, !tbaa !5
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.Domain_t, ptr %183, i32 0, i32 1
  %185 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %184, i32 0, i32 0
  %186 = call i32 @check_outer_cd_flag(ptr noundef %182, ptr noundef %185)
  store i32 %186, ptr %10, align 4, !tbaa !9
  %187 = load ptr, ptr %13, align 8, !tbaa !5
  %188 = load ptr, ptr %6, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.Domain_t, ptr %188, i32 0, i32 1
  %190 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %189, i32 0, i32 0
  %191 = call i32 @check_outer_fd_flag(ptr noundef %187, ptr noundef %190)
  store i32 %191, ptr %10, align 4, !tbaa !9
  %192 = load ptr, ptr %13, align 8, !tbaa !5
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.Domain_t, ptr %193, i32 0, i32 2
  %195 = getelementptr inbounds %struct.DomainOptions_t, ptr %194, i32 0, i32 4
  %196 = call i32 @check_wave_kinematics_flag(ptr noundef %192, ptr noundef %195)
  store i32 %196, ptr %10, align 4, !tbaa !9
  %197 = load i32, ptr %10, align 4, !tbaa !9
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %199, label %202

199:                                              ; preds = %176
  %200 = load ptr, ptr %8, align 8, !tbaa !5
  %201 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %200, ptr noundef %201, i32 noundef 126)
  br label %202

202:                                              ; preds = %199, %176
  %203 = load ptr, ptr %13, align 8, !tbaa !5
  %204 = load ptr, ptr %6, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.Domain_t, ptr %204, i32 0, i32 2
  %206 = getelementptr inbounds %struct.DomainOptions_t, ptr %205, i32 0, i32 5
  %207 = call i32 @check_lm_model_flag(ptr noundef %203, ptr noundef %206)
  store i32 %207, ptr %10, align 4, !tbaa !9
  %208 = load i32, ptr %10, align 4, !tbaa !9
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %210, label %213

210:                                              ; preds = %202
  %211 = load ptr, ptr %8, align 8, !tbaa !5
  %212 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %211, ptr noundef %212, i32 noundef 127)
  br label %213

213:                                              ; preds = %210, %202
  %214 = load ptr, ptr %13, align 8, !tbaa !5
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.Domain_t, ptr %215, i32 0, i32 1
  %217 = call i32 @check_pg_cooked_flag(ptr noundef %214, ptr noundef %216)
  store i32 %217, ptr %10, align 4, !tbaa !9
  %218 = load i32, ptr %10, align 4, !tbaa !9
  %219 = icmp ne i32 %218, 0
  br i1 %219, label %220, label %223

220:                                              ; preds = %213
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %221, ptr noundef %222, i32 noundef 124)
  br label %223

223:                                              ; preds = %220, %213
  %224 = load ptr, ptr %13, align 8, !tbaa !5
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.Domain_t, ptr %225, i32 0, i32 1
  %227 = call i32 @check_krylov_accelerator_flag(ptr noundef %224, ptr noundef %226)
  store i32 %227, ptr %10, align 4, !tbaa !9
  %228 = load i32, ptr %10, align 4, !tbaa !9
  %229 = icmp ne i32 %228, 0
  br i1 %229, label %230, label %233

230:                                              ; preds = %223
  %231 = load ptr, ptr %8, align 8, !tbaa !5
  %232 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %231, ptr noundef %232, i32 noundef 128)
  br label %233

233:                                              ; preds = %230, %223
  %234 = load ptr, ptr %13, align 8, !tbaa !5
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.Domain_t, ptr %235, i32 0, i32 1
  %237 = call i32 @check_powell_flag(ptr noundef %234, ptr noundef %236)
  store i32 %237, ptr %10, align 4, !tbaa !9
  %238 = load i32, ptr %10, align 4, !tbaa !9
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %240, label %243

240:                                              ; preds = %233
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  %242 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %241, ptr noundef %242, i32 noundef 130)
  br label %243

243:                                              ; preds = %240, %233
  %244 = load ptr, ptr %13, align 8, !tbaa !5
  %245 = load ptr, ptr %6, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.Domain_t, ptr %245, i32 0, i32 2
  %247 = call i32 @check_repeat_flag(ptr noundef %244, ptr noundef %246)
  store i32 %247, ptr %10, align 4, !tbaa !9
  %248 = load i32, ptr %10, align 4, !tbaa !9
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %250, label %253

250:                                              ; preds = %243
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  %252 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %251, ptr noundef %252, i32 noundef 34)
  br label %281

253:                                              ; preds = %243
  %254 = load ptr, ptr %13, align 8, !tbaa !5
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.Domain_t, ptr %255, i32 0, i32 5
  %257 = getelementptr inbounds %struct.Vessel_t, ptr %256, i32 0, i32 5
  %258 = call i32 @check_ref_position_flag(ptr noundef %254, ptr noundef %257)
  store i32 %258, ptr %10, align 4, !tbaa !9
  %259 = load i32, ptr %10, align 4, !tbaa !9
  %260 = icmp ne i32 %259, 0
  br i1 %260, label %261, label %264

261:                                              ; preds = %253
  %262 = load ptr, ptr %8, align 8, !tbaa !5
  %263 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %262, ptr noundef %263, i32 noundef 36)
  br label %281

264:                                              ; preds = %253
  %265 = load ptr, ptr %13, align 8, !tbaa !5
  %266 = call i32 @check_uncaught_flag(ptr noundef %265)
  store i32 %266, ptr %10, align 4, !tbaa !9
  %267 = load i32, ptr %10, align 4, !tbaa !9
  %268 = icmp ne i32 %267, 0
  br i1 %268, label %269, label %279

269:                                              ; preds = %264
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = load ptr, ptr %9, align 8, !tbaa !5
  %272 = load ptr, ptr %13, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.bstrList, ptr %272, i32 0, i32 2
  %274 = load ptr, ptr %273, align 8, !tbaa !19
  %275 = getelementptr inbounds ptr, ptr %274, i64 0
  %276 = load ptr, ptr %275, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.tagbstring, ptr %276, i32 0, i32 2
  %278 = load ptr, ptr %277, align 8, !tbaa !15
  call void (ptr, ptr, i32, ptr, ...) @set_universal_error_with_message(ptr noundef %270, ptr noundef %271, i32 noundef 117, ptr noundef @.str.35, ptr noundef %278)
  br label %279

279:                                              ; preds = %269, %264
  br label %280

280:                                              ; preds = %279
  br label %281

281:                                              ; preds = %280, %261, %250, %63
  %282 = load ptr, ptr %13, align 8, !tbaa !5
  %283 = call i32 @bstrListDestroy(ptr noundef %282)
  store i32 %283, ptr %10, align 4, !tbaa !9
  br label %284

284:                                              ; preds = %281
  %285 = load i32, ptr %11, align 4, !tbaa !9
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %11, align 4, !tbaa !9
  br label %39, !llvm.loop !20

287:                                              ; preds = %39
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.Domain_t, ptr %288, i32 0, i32 1
  %290 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %289, i32 0, i32 19
  %291 = load i8, ptr %290, align 8, !tbaa !22, !range !36, !noundef !37
  %292 = trunc i8 %291 to i1
  br i1 %292, label %293, label %305

293:                                              ; preds = %287
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.Domain_t, ptr %294, i32 0, i32 1
  %296 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %295, i32 0, i32 20
  %297 = load i8, ptr %296, align 1, !tbaa !38, !range !36, !noundef !37
  %298 = trunc i8 %297 to i1
  br i1 %298, label %299, label %305

299:                                              ; preds = %293
  %300 = load ptr, ptr %8, align 8, !tbaa !5
  %301 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %300, ptr noundef %301, i32 noundef 129)
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.Domain_t, ptr %302, i32 0, i32 1
  %304 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %303, i32 0, i32 20
  store i8 0, ptr %304, align 1, !tbaa !38
  br label %305

305:                                              ; preds = %299, %293, %287
  %306 = load ptr, ptr %6, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.Domain_t, ptr %306, i32 0, i32 1
  %308 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %307, i32 0, i32 21
  %309 = load i8, ptr %308, align 2, !tbaa !39, !range !36, !noundef !37
  %310 = trunc i8 %309 to i1
  br i1 %310, label %311, label %317

311:                                              ; preds = %305
  %312 = load ptr, ptr %6, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.Domain_t, ptr %312, i32 0, i32 1
  %314 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %313, i32 0, i32 20
  %315 = load i8, ptr %314, align 1, !tbaa !38, !range !36, !noundef !37
  %316 = trunc i8 %315 to i1
  br i1 %316, label %329, label %317

317:                                              ; preds = %311, %305
  %318 = load ptr, ptr %6, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.Domain_t, ptr %318, i32 0, i32 1
  %320 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %319, i32 0, i32 21
  %321 = load i8, ptr %320, align 2, !tbaa !39, !range !36, !noundef !37
  %322 = trunc i8 %321 to i1
  br i1 %322, label %323, label %335

323:                                              ; preds = %317
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.Domain_t, ptr %324, i32 0, i32 1
  %326 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %325, i32 0, i32 19
  %327 = load i8, ptr %326, align 8, !tbaa !22, !range !36, !noundef !37
  %328 = trunc i8 %327 to i1
  br i1 %328, label %329, label %335

329:                                              ; preds = %323, %311
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %330, ptr noundef %331, i32 noundef 130)
  %332 = load ptr, ptr %6, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.Domain_t, ptr %332, i32 0, i32 1
  %334 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %333, i32 0, i32 20
  store i8 0, ptr %334, align 1, !tbaa !38
  br label %335

335:                                              ; preds = %329, %323, %317
  %336 = load ptr, ptr %9, align 8, !tbaa !5
  %337 = load i32, ptr %336, align 4, !tbaa !9
  %338 = icmp eq i32 %337, 0
  br i1 %338, label %339, label %340

339:                                              ; preds = %335
  store i32 0, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %346

340:                                              ; preds = %335
  %341 = load ptr, ptr %9, align 8, !tbaa !5
  %342 = load i32, ptr %341, align 4, !tbaa !9
  %343 = icmp eq i32 %342, 2
  br i1 %343, label %344, label %345

344:                                              ; preds = %340
  store i32 2, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %346

345:                                              ; preds = %340
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %346

346:                                              ; preds = %345, %344, %339
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %347 = load i32, ptr %5, align 4
  ret i32 %347
}

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #3

declare ptr @bsplits(ptr noundef, ptr noundef) #0

declare void @set_universal_error_with_message(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ...) #0

declare i32 @bstrListDestroy(ptr noundef) #0

attributes #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 = { 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 #3 = { nounwind willreturn memory(read) "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 = { nounwind }
attributes #5 = { nounwind willreturn memory(read) }

!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, !6, i64 24}
!12 = !{!"InitializationData_t", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!13 = !{!14, !10, i64 0}
!14 = !{!"bstrList", !10, i64 0, !10, i64 4, !6, i64 8}
!15 = !{!16, !6, i64 8}
!16 = !{!"tagbstring", !10, i64 0, !10, i64 4, !6, i64 8}
!17 = !{!16, !10, i64 4}
!18 = !{!16, !10, i64 0}
!19 = !{!14, !6, i64 8}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!23, !27, i64 392}
!23 = !{!"Domain_t", !24, i64 0, !26, i64 240, !28, i64 408, !6, i64 448, !10, i64 456, !29, i64 464, !34, i64 968, !34, i64 1088, !34, i64 1208, !34, i64 1328, !6, i64 1448}
!24 = !{!"InnerSolveAttributes_t", !6, i64 0, !25, i64 8, !25, i64 16, !25, i64 24, !7, i64 32, !7, i64 48, !7, i64 64, !7, i64 96, !7, i64 112, !7, i64 128, !7, i64 144, !7, i64 160, !7, i64 176, !25, i64 192, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !7, i64 220, !10, i64 228, !10, i64 232}
!25 = !{!"double", !7, i64 0}
!26 = !{!"OuterSolveAttributes_t", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !25, i64 104, !25, i64 112, !25, i64 120, !25, i64 128, !25, i64 136, !25, i64 144, !27, i64 152, !27, i64 153, !27, i64 154, !10, i64 156, !10, i64 160, !10, i64 164}
!27 = !{!"_Bool", !7, i64 0}
!28 = !{!"DomainOptions_t", !6, i64 0, !25, i64 8, !25, i64 16, !25, i64 24, !27, i64 32, !27, i64 33, !10, i64 36}
!29 = !{!"Vessel_t", !30, i64 0, !6, i64 120, !6, i64 128, !6, i64 136, !32, i64 144, !32, i64 264, !33, i64 384}
!30 = !{!"EulerAngle_t", !31, i64 0, !31, i64 40, !31, i64 80}
!31 = !{!"VarType_t", !6, i64 0, !6, i64 8, !25, i64 16, !27, i64 24, !27, i64 25, !10, i64 28, !10, i64 32}
!32 = !{!"Point_t", !31, i64 0, !31, i64 40, !31, i64 80}
!33 = !{!"Force_t", !31, i64 0, !31, i64 40, !31, i64 80}
!34 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !10, i64 24, !6, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !6, i64 56, !35, i64 64}
!35 = !{!"list_attributes_s", !6, i64 0, !6, i64 8, !6, i64 16, !10, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!36 = !{i8 0, i8 2}
!37 = !{}
!38 = !{!23, !27, i64 393}
!39 = !{!23, !27, i64 394}


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

%struct.tagbstring = type { i32, i32, ptr }

@.str.34 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [11 x i8], align 1

declare void @set_universal_error(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_help_flag(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_f_tol_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_g_tol_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_x_tol_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_inner_max_its_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_max_its_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_tol_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_epsilon_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_integration_dt_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_kb_default_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_krylov_accelerator_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_powell_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_cb_default_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_bd_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_cd_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_outer_fd_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_wave_kinematics_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_lm_model_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_pg_cooked_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_repeat_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_ref_position_flag(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local i32 @check_uncaught_flag(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 4) i32 @set_model_options_list(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #2 {
  %5 = alloca %struct.tagbstring, align 8
  %6 = getelementptr inbounds i8, ptr %1, i64 24
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = load i32, ptr %7, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #4
  %9 = getelementptr inbounds i8, ptr %5, i64 8
  store ptr @.str.34, ptr %9, align 8, !tbaa !13
  %10 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) @.str.34) #5
  %11 = trunc i64 %10 to i32
  %12 = getelementptr inbounds i8, ptr %5, i64 4
  store i32 %11, ptr %12, align 4, !tbaa !15
  store i32 -1, ptr %5, align 8, !tbaa !16
  %.not.not143 = icmp sgt i32 %8, 0
  br i1 %.not.not143, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %4
  %13 = getelementptr inbounds i8, ptr %0, i64 8
  %14 = getelementptr inbounds i8, ptr %0, i64 240
  %15 = getelementptr inbounds i8, ptr %0, i64 400
  %16 = getelementptr inbounds i8, ptr %0, i64 200
  %17 = getelementptr inbounds i8, ptr %0, i64 16
  %18 = getelementptr inbounds i8, ptr %0, i64 24
  %19 = getelementptr inbounds i8, ptr %0, i64 376
  %20 = getelementptr inbounds i8, ptr %0, i64 360
  %21 = getelementptr inbounds i8, ptr %0, i64 408
  %22 = getelementptr inbounds i8, ptr %0, i64 416
  %23 = getelementptr inbounds i8, ptr %0, i64 424
  %24 = getelementptr inbounds i8, ptr %0, i64 432
  %25 = getelementptr inbounds i8, ptr %0, i64 440
  %26 = getelementptr inbounds i8, ptr %0, i64 441
  %27 = getelementptr inbounds i8, ptr %0, i64 728
  %wide.trip.count = zext nneg i32 %8 to i64
  br label %28

28:                                               ; preds = %.lr.ph, %101
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %101 ]
  %29 = load ptr, ptr %6, align 8, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %29, i64 8
  %31 = load ptr, ptr %30, align 8, !tbaa !17
  %32 = getelementptr inbounds ptr, ptr %31, i64 %indvars.iv
  %33 = load ptr, ptr %32, align 8, !tbaa !18
  %34 = call ptr @bsplits(ptr noundef %33, ptr noundef nonnull %5) #4
  %35 = getelementptr inbounds i8, ptr %34, i64 8
  %36 = load ptr, ptr %35, align 8, !tbaa !17
  %37 = load ptr, ptr %36, align 8, !tbaa !18
  %38 = call i32 @check_help_flag(ptr noundef %37)
  %.not = icmp eq i32 %38, 0
  br i1 %.not, label %40, label %39

39:                                               ; preds = %28
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 85) #4
  br label %101

40:                                               ; preds = %28
  %41 = call i32 @check_inner_f_tol_flag(ptr noundef nonnull %34, ptr noundef nonnull %13)
  %.not123 = icmp eq i32 %41, 0
  br i1 %.not123, label %43, label %42

42:                                               ; preds = %40
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 100) #4
  br label %43

43:                                               ; preds = %42, %40
  %44 = call i32 @check_outer_max_its_flag(ptr noundef nonnull %34, ptr noundef nonnull %15)
  %.not124 = icmp eq i32 %44, 0
  br i1 %.not124, label %46, label %45

45:                                               ; preds = %43
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 101) #4
  br label %46

46:                                               ; preds = %45, %43
  %47 = call i32 @check_inner_max_its_flag(ptr noundef nonnull %34, ptr noundef nonnull %16)
  %.not125 = icmp eq i32 %47, 0
  br i1 %.not125, label %49, label %48

48:                                               ; preds = %46
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 102) #4
  br label %49

49:                                               ; preds = %48, %46
  %50 = call i32 @check_inner_g_tol_flag(ptr noundef nonnull %34, ptr noundef nonnull %17)
  %.not126 = icmp eq i32 %50, 0
  br i1 %.not126, label %52, label %51

51:                                               ; preds = %49
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 107) #4
  br label %52

52:                                               ; preds = %51, %49
  %53 = call i32 @check_inner_x_tol_flag(ptr noundef nonnull %34, ptr noundef nonnull %18)
  %.not127 = icmp eq i32 %53, 0
  br i1 %.not127, label %55, label %54

54:                                               ; preds = %52
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 108) #4
  br label %55

55:                                               ; preds = %54, %52
  %56 = call i32 @check_outer_tol_flag(ptr noundef nonnull %34, ptr noundef nonnull %19)
  %.not128 = icmp eq i32 %56, 0
  br i1 %.not128, label %58, label %57

57:                                               ; preds = %55
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 101) #4
  br label %58

58:                                               ; preds = %57, %55
  %59 = call i32 @check_outer_epsilon_flag(ptr noundef nonnull %34, ptr noundef nonnull %20)
  %.not129 = icmp eq i32 %59, 0
  br i1 %.not129, label %61, label %60

60:                                               ; preds = %58
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 101) #4
  br label %61

61:                                               ; preds = %60, %58
  %62 = call i32 @check_integration_dt_flag(ptr noundef nonnull %34, ptr noundef nonnull %22)
  %.not130 = icmp eq i32 %62, 0
  br i1 %.not130, label %64, label %63

63:                                               ; preds = %61
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 113) #4
  br label %64

64:                                               ; preds = %63, %61
  %65 = call i32 @check_kb_default_flag(ptr noundef nonnull %34, ptr noundef nonnull %23)
  %.not131 = icmp eq i32 %65, 0
  br i1 %.not131, label %67, label %66

66:                                               ; preds = %64
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 114) #4
  br label %67

67:                                               ; preds = %66, %64
  %68 = call i32 @check_cb_default_flag(ptr noundef nonnull %34, ptr noundef nonnull %24)
  %.not132 = icmp eq i32 %68, 0
  br i1 %.not132, label %70, label %69

69:                                               ; preds = %67
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 115) #4
  br label %70

70:                                               ; preds = %69, %67
  %71 = call i32 @check_outer_bd_flag(ptr noundef nonnull %34, ptr noundef nonnull %14)
  %72 = call i32 @check_outer_cd_flag(ptr noundef nonnull %34, ptr noundef nonnull %14)
  %73 = call i32 @check_outer_fd_flag(ptr noundef nonnull %34, ptr noundef nonnull %14)
  %74 = call i32 @check_wave_kinematics_flag(ptr noundef nonnull %34, ptr noundef nonnull %25)
  %.not133 = icmp eq i32 %74, 0
  br i1 %.not133, label %76, label %75

75:                                               ; preds = %70
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 126) #4
  br label %76

76:                                               ; preds = %75, %70
  %77 = call i32 @check_lm_model_flag(ptr noundef nonnull %34, ptr noundef nonnull %26)
  %.not134 = icmp eq i32 %77, 0
  br i1 %.not134, label %79, label %78

78:                                               ; preds = %76
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 127) #4
  br label %79

79:                                               ; preds = %78, %76
  %80 = call i32 @check_pg_cooked_flag(ptr noundef nonnull %34, ptr noundef nonnull %14)
  %.not135 = icmp eq i32 %80, 0
  br i1 %.not135, label %82, label %81

81:                                               ; preds = %79
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 124) #4
  br label %82

82:                                               ; preds = %81, %79
  %83 = call i32 @check_krylov_accelerator_flag(ptr noundef nonnull %34, ptr noundef nonnull %14)
  %.not136 = icmp eq i32 %83, 0
  br i1 %.not136, label %85, label %84

84:                                               ; preds = %82
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 128) #4
  br label %85

85:                                               ; preds = %84, %82
  %86 = call i32 @check_powell_flag(ptr noundef nonnull %34, ptr noundef nonnull %14)
  %.not137 = icmp eq i32 %86, 0
  br i1 %.not137, label %88, label %87

87:                                               ; preds = %85
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 130) #4
  br label %88

88:                                               ; preds = %87, %85
  %89 = call i32 @check_repeat_flag(ptr noundef nonnull %34, ptr noundef nonnull %21)
  %.not138 = icmp eq i32 %89, 0
  br i1 %.not138, label %91, label %90

90:                                               ; preds = %88
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 34) #4
  br label %101

91:                                               ; preds = %88
  %92 = call i32 @check_ref_position_flag(ptr noundef nonnull %34, ptr noundef nonnull %27)
  %.not139 = icmp eq i32 %92, 0
  br i1 %.not139, label %94, label %93

93:                                               ; preds = %91
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 36) #4
  br label %101

94:                                               ; preds = %91
  %95 = call i32 @check_uncaught_flag(ptr noundef nonnull %34)
  %.not140 = icmp eq i32 %95, 0
  br i1 %.not140, label %101, label %96

96:                                               ; preds = %94
  %97 = load ptr, ptr %35, align 8, !tbaa !17
  %98 = load ptr, ptr %97, align 8, !tbaa !18
  %99 = getelementptr inbounds i8, ptr %98, i64 8
  %100 = load ptr, ptr %99, align 8, !tbaa !13
  call void (ptr, ptr, i32, ptr, ...) @set_universal_error_with_message(ptr noundef %2, ptr noundef %3, i32 noundef 117, ptr noundef nonnull @.str.35, ptr noundef %100) #4
  br label %101

101:                                              ; preds = %96, %94, %93, %90, %39
  %102 = call i32 @bstrListDestroy(ptr noundef nonnull %34) #4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %28, !llvm.loop !19

._crit_edge:                                      ; preds = %101, %4
  %103 = getelementptr inbounds i8, ptr %0, i64 392
  %104 = load i8, ptr %103, align 8, !tbaa !21, !range !35, !noundef !36
  %105 = trunc nuw i8 %104 to i1
  br i1 %105, label %106, label %111

106:                                              ; preds = %._crit_edge
  %107 = getelementptr inbounds i8, ptr %0, i64 393
  %108 = load i8, ptr %107, align 1, !tbaa !37, !range !35, !noundef !36
  %109 = trunc nuw i8 %108 to i1
  br i1 %109, label %110, label %111

110:                                              ; preds = %106
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 129) #4
  store i8 0, ptr %107, align 1, !tbaa !37
  br label %111

111:                                              ; preds = %110, %106, %._crit_edge
  %112 = getelementptr inbounds i8, ptr %0, i64 394
  %113 = load i8, ptr %112, align 2, !tbaa !38, !range !35, !noundef !36
  %114 = trunc nuw i8 %113 to i1
  br i1 %114, label %115, label %123

115:                                              ; preds = %111
  %116 = getelementptr inbounds i8, ptr %0, i64 393
  %117 = load i8, ptr %116, align 1, !tbaa !37, !range !35, !noundef !36
  %118 = trunc nuw i8 %117 to i1
  br i1 %118, label %122, label %119

119:                                              ; preds = %115
  %120 = load i8, ptr %103, align 8, !tbaa !21, !range !35, !noundef !36
  %121 = trunc nuw i8 %120 to i1
  br i1 %121, label %122, label %123

122:                                              ; preds = %119, %115
  call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 130) #4
  store i8 0, ptr %116, align 1, !tbaa !37
  br label %123

123:                                              ; preds = %111, %122, %119
  %124 = load i32, ptr %3, align 4, !tbaa !39
  %switch.selectcmp = icmp eq i32 %124, 2
  %switch.select = select i1 %switch.selectcmp, i32 2, i32 3
  %switch.selectcmp141 = icmp eq i32 %124, 0
  %switch.select142 = select i1 %switch.selectcmp141, i32 0, i32 %switch.select
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #4
  ret i32 %switch.select142
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #3

declare ptr @bsplits(ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @set_universal_error_with_message(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ...) local_unnamed_addr #0

declare i32 @bstrListDestroy(ptr noundef) local_unnamed_addr #0

attributes #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 = { 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 #3 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 = { nounwind }
attributes #5 = { nounwind willreturn memory(read) }

!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, !7, i64 24}
!6 = !{!"InitializationData_t", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !12, i64 0}
!11 = !{!"bstrList", !12, i64 0, !12, i64 4, !7, i64 8}
!12 = !{!"int", !8, i64 0}
!13 = !{!14, !7, i64 8}
!14 = !{!"tagbstring", !12, i64 0, !12, i64 4, !7, i64 8}
!15 = !{!14, !12, i64 4}
!16 = !{!14, !12, i64 0}
!17 = !{!11, !7, i64 8}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !26, i64 392}
!22 = !{!"Domain_t", !23, i64 0, !25, i64 240, !27, i64 408, !7, i64 448, !12, i64 456, !28, i64 464, !33, i64 968, !33, i64 1088, !33, i64 1208, !33, i64 1328, !7, i64 1448}
!23 = !{!"InnerSolveAttributes_t", !7, i64 0, !24, i64 8, !24, i64 16, !24, i64 24, !8, i64 32, !8, i64 48, !8, i64 64, !8, i64 96, !8, i64 112, !8, i64 128, !8, i64 144, !8, i64 160, !8, i64 176, !24, i64 192, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !8, i64 220, !12, i64 228, !12, i64 232}
!24 = !{!"double", !8, i64 0}
!25 = !{!"OuterSolveAttributes_t", !12, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !24, i64 104, !24, i64 112, !24, i64 120, !24, i64 128, !24, i64 136, !24, i64 144, !26, i64 152, !26, i64 153, !26, i64 154, !12, i64 156, !12, i64 160, !12, i64 164}
!26 = !{!"_Bool", !8, i64 0}
!27 = !{!"DomainOptions_t", !7, i64 0, !24, i64 8, !24, i64 16, !24, i64 24, !26, i64 32, !26, i64 33, !12, i64 36}
!28 = !{!"Vessel_t", !29, i64 0, !7, i64 120, !7, i64 128, !7, i64 136, !31, i64 144, !31, i64 264, !32, i64 384}
!29 = !{!"EulerAngle_t", !30, i64 0, !30, i64 40, !30, i64 80}
!30 = !{!"VarType_t", !7, i64 0, !7, i64 8, !24, i64 16, !26, i64 24, !26, i64 25, !12, i64 28, !12, i64 32}
!31 = !{!"Point_t", !30, i64 0, !30, i64 40, !30, i64 80}
!32 = !{!"Force_t", !30, i64 0, !30, i64 40, !30, i64 80}
!33 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !12, i64 24, !7, i64 32, !12, i64 40, !12, i64 44, !12, i64 48, !7, i64 56, !34, i64 64}
!34 = !{!"list_attributes_s", !7, i64 0, !7, i64 8, !7, i64 16, !12, i64 24, !7, i64 32, !7, i64 40, !7, i64 48}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = !{!22, !26, i64 393}
!38 = !{!22, !26, i64 394}
!39 = !{!12, !12, i64 0}


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