; LLVM IR from Tencent-RoboticsX/jbdl :: src/jbdl/experimental/qpoases/src (QProblemB)

; 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.qpOASES::QProblemB" = type { ptr, i32, ptr, ptr, ptr, ptr, %"class.qpOASES::Bounds", ptr, i32, ptr, ptr, double, i32, i32, i32, i32, double, i32, ptr, double, double, i32, [4 x i8], %"class.qpOASES::Options", %"class.qpOASES::Flipper", %"struct.qpOASES::TabularOutput" }
%"class.qpOASES::Bounds" = type { %"class.qpOASES::SubjectTo", %"class.qpOASES::Indexlist", %"class.qpOASES::Indexlist" }
%"class.qpOASES::SubjectTo" = type { ptr, i32, ptr, ptr, i32, i32 }
%"class.qpOASES::Indexlist" = type <{ ptr, ptr, i32, i32, i32, i32, i32, [4 x i8] }>
%"class.qpOASES::Options" = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, i32, [4 x i8], double, i32, [4 x i8], double, i32, [4 x i8], double, double, double, double, i32, i32, i32, i32, i32, [4 x i8] }>
%"class.qpOASES::Flipper" = type { i32, i32, %"class.qpOASES::Bounds", %"class.qpOASES::Constraints", ptr, ptr, ptr }
%"class.qpOASES::Constraints" = type { %"class.qpOASES::SubjectTo", %"class.qpOASES::Indexlist", %"class.qpOASES::Indexlist" }
%"struct.qpOASES::TabularOutput" = type { i32, i32, i32, i32, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [104 x i8], align 1

declare noundef ptr @_ZN7qpOASES23getGlobalMessageHandlerEv() #0

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

declare noundef i32 @_ZN7qpOASES15MessageHandling10throwErrorENS_11returnValueEPKcS3_S3_mNS_16VisibilityStatusE(ptr noundef nonnull align 8 dereferenceable(28), i32 noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) #0

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9SubjectTo9getStatusEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZN7qpOASES6getAbsEd(double noundef) #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9QProblemB6getNFREv(ptr noundef nonnull align 8 dereferenceable(800)) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9QProblemB19usingRegularisationEv(ptr noundef nonnull align 8 dereferenceable(800)) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120)) #2 align 2

declare noundef i32 @_ZNK7qpOASES9Indexlist14getNumberArrayEPPi(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef) #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9QProblemB6getNFXEv(ptr noundef nonnull align 8 dereferenceable(800)) #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120)) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7qpOASES9QProblemB22determineStepDirectionEPKdS2_S2_NS_11BooleanTypeEPdS4_S4_(ptr noundef nonnull align 8 dereferenceable(800) %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) #5 align 2 {
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca double, align 8
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store i32 %4, ptr %14, align 4, !tbaa !9
  store ptr %5, ptr %15, align 8, !tbaa !5
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  %27 = load ptr, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %28 = call noundef i32 @_ZNK7qpOASES9QProblemB6getNFREv(ptr noundef nonnull align 8 dereferenceable(800) %27)
  store i32 %28, ptr %21, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %29 = call noundef i32 @_ZNK7qpOASES9QProblemB6getNFXEv(ptr noundef nonnull align 8 dereferenceable(800) %27)
  store i32 %29, ptr %22, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %30 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %31 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %30)
  %32 = call noundef i32 @_ZNK7qpOASES9Indexlist14getNumberArrayEPPi(ptr noundef nonnull align 8 dereferenceable(36) %31, ptr noundef %23)
  %33 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %34 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %33)
  %35 = call noundef i32 @_ZNK7qpOASES9Indexlist14getNumberArrayEPPi(ptr noundef nonnull align 8 dereferenceable(36) %34, ptr noundef %24)
  %36 = load i32, ptr %14, align 4, !tbaa !9
  %37 = icmp eq i32 %36, 0
  br i1 %37, label %38, label %78

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

39:                                               ; preds = %74, %38
  %40 = load i32, ptr %18, align 4, !tbaa !11
  %41 = load i32, ptr %22, align 4, !tbaa !11
  %42 = icmp slt i32 %40, %41
  br i1 %42, label %43, label %77

43:                                               ; preds = %39
  %44 = load ptr, ptr %24, align 8, !tbaa !5
  %45 = load i32, ptr %18, align 4, !tbaa !11
  %46 = sext i32 %45 to i64
  %47 = getelementptr inbounds i32, ptr %44, i64 %46
  %48 = load i32, ptr %47, align 4, !tbaa !11
  store i32 %48, ptr %19, align 4, !tbaa !11
  %49 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %50 = load i32, ptr %19, align 4, !tbaa !11
  %51 = call noundef i32 @_ZNK7qpOASES9SubjectTo9getStatusEi(ptr noundef nonnull align 8 dereferenceable(40) %49, i32 noundef %50)
  %52 = icmp eq i32 %51, -1
  br i1 %52, label %53, label %63

53:                                               ; preds = %43
  %54 = load ptr, ptr %12, align 8, !tbaa !5
  %55 = load i32, ptr %19, align 4, !tbaa !11
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds double, ptr %54, i64 %56
  %58 = load double, ptr %57, align 8, !tbaa !13
  %59 = load ptr, ptr %15, align 8, !tbaa !5
  %60 = load i32, ptr %18, align 4, !tbaa !11
  %61 = sext i32 %60 to i64
  %62 = getelementptr inbounds double, ptr %59, i64 %61
  store double %58, ptr %62, align 8, !tbaa !13
  br label %73

63:                                               ; preds = %43
  %64 = load ptr, ptr %13, align 8, !tbaa !5
  %65 = load i32, ptr %19, align 4, !tbaa !11
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds double, ptr %64, i64 %66
  %68 = load double, ptr %67, align 8, !tbaa !13
  %69 = load ptr, ptr %15, align 8, !tbaa !5
  %70 = load i32, ptr %18, align 4, !tbaa !11
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds double, ptr %69, i64 %71
  store double %68, ptr %72, align 8, !tbaa !13
  br label %73

73:                                               ; preds = %63, %53
  br label %74

74:                                               ; preds = %73
  %75 = load i32, ptr %18, align 4, !tbaa !11
  %76 = add nsw i32 %75, 1
  store i32 %76, ptr %18, align 4, !tbaa !11
  br label %39, !llvm.loop !15

77:                                               ; preds = %39
  br label %92

78:                                               ; preds = %8
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %79

79:                                               ; preds = %88, %78
  %80 = load i32, ptr %18, align 4, !tbaa !11
  %81 = load i32, ptr %22, align 4, !tbaa !11
  %82 = icmp slt i32 %80, %81
  br i1 %82, label %83, label %91

83:                                               ; preds = %79
  %84 = load ptr, ptr %15, align 8, !tbaa !5
  %85 = load i32, ptr %18, align 4, !tbaa !11
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds double, ptr %84, i64 %86
  store double 0.000000e+00, ptr %87, align 8, !tbaa !13
  br label %88

88:                                               ; preds = %83
  %89 = load i32, ptr %18, align 4, !tbaa !11
  %90 = add nsw i32 %89, 1
  store i32 %90, ptr %18, align 4, !tbaa !11
  br label %79, !llvm.loop !17

91:                                               ; preds = %79
  br label %92

92:                                               ; preds = %91, %77
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %93

93:                                               ; preds = %118, %92
  %94 = load i32, ptr %18, align 4, !tbaa !11
  %95 = load i32, ptr %21, align 4, !tbaa !11
  %96 = icmp slt i32 %94, %95
  br i1 %96, label %97, label %121

97:                                               ; preds = %93
  %98 = load ptr, ptr %23, align 8, !tbaa !5
  %99 = load i32, ptr %18, align 4, !tbaa !11
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i32, ptr %98, i64 %100
  %102 = load i32, ptr %101, align 4, !tbaa !11
  store i32 %102, ptr %19, align 4, !tbaa !11
  %103 = load ptr, ptr %11, align 8, !tbaa !5
  %104 = load i32, ptr %19, align 4, !tbaa !11
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds double, ptr %103, i64 %105
  %107 = load double, ptr %106, align 8, !tbaa !13
  %108 = fneg double %107
  %109 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %110 = load ptr, ptr %109, align 8, !tbaa !18
  %111 = load i32, ptr %18, align 4, !tbaa !11
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds double, ptr %110, i64 %112
  store double %108, ptr %113, align 8, !tbaa !13
  %114 = load ptr, ptr %16, align 8, !tbaa !5
  %115 = load i32, ptr %18, align 4, !tbaa !11
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds double, ptr %114, i64 %116
  store double 0.000000e+00, ptr %117, align 8, !tbaa !13
  br label %118

118:                                              ; preds = %97
  %119 = load i32, ptr %18, align 4, !tbaa !11
  %120 = add nsw i32 %119, 1
  store i32 %120, ptr %18, align 4, !tbaa !11
  br label %93, !llvm.loop !31

121:                                              ; preds = %93
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %122

122:                                              ; preds = %364, %121
  %123 = load i32, ptr %20, align 4, !tbaa !11
  %124 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 23
  %125 = getelementptr inbounds %"class.qpOASES::Options", ptr %124, i32 0, i32 27
  %126 = load i32, ptr %125, align 8, !tbaa !32
  %127 = icmp sle i32 %123, %126
  br i1 %127, label %128, label %367

128:                                              ; preds = %122
  %129 = load i32, ptr %21, align 4, !tbaa !11
  %130 = icmp sgt i32 %129, 0
  br i1 %130, label %131, label %192

131:                                              ; preds = %128
  %132 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 15
  %133 = load i32, ptr %132, align 4, !tbaa !33
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %135, label %165

135:                                              ; preds = %131
  %136 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 15
  %137 = load i32, ptr %136, align 4, !tbaa !33
  %138 = icmp ne i32 %137, 1
  br i1 %138, label %139, label %165

139:                                              ; preds = %135
  %140 = load i32, ptr %14, align 4, !tbaa !9
  %141 = icmp eq i32 %140, 0
  br i1 %141, label %142, label %165

142:                                              ; preds = %139
  %143 = load i32, ptr %20, align 4, !tbaa !11
  %144 = icmp eq i32 %143, 0
  br i1 %144, label %145, label %165

145:                                              ; preds = %142
  %146 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 2
  %147 = load ptr, ptr %146, align 8, !tbaa !34
  %148 = load ptr, ptr %147, align 8, !tbaa !35
  %149 = getelementptr i8, ptr %148, i64 -24
  %150 = load i64, ptr %149, align 8
  %151 = getelementptr inbounds i8, ptr %147, i64 %150
  %152 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %153 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %152)
  %154 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %155 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %154)
  %156 = load ptr, ptr %15, align 8, !tbaa !5
  %157 = load i32, ptr %22, align 4, !tbaa !11
  %158 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %159 = load ptr, ptr %158, align 8, !tbaa !18
  %160 = load i32, ptr %21, align 4, !tbaa !11
  %161 = load ptr, ptr %151, align 8, !tbaa !35
  %162 = getelementptr inbounds ptr, ptr %161, i64 17
  %163 = load ptr, ptr %162, align 8
  %164 = call noundef i32 %163(ptr noundef nonnull align 8 dereferenceable(12) %151, ptr noundef %153, ptr noundef %155, i32 noundef 1, double noundef -1.000000e+00, ptr noundef %156, i32 noundef %157, double noundef 1.000000e+00, ptr noundef %159, i32 noundef %160, i32 noundef 1)
  br label %165

165:                                              ; preds = %145, %142, %139, %135, %131
  %166 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %167 = load ptr, ptr %166, align 8, !tbaa !18
  %168 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %169 = load ptr, ptr %168, align 8, !tbaa !18
  %170 = load ptr, ptr %27, align 8, !tbaa !35
  %171 = getelementptr inbounds ptr, ptr %170, i64 14
  %172 = load ptr, ptr %171, align 8
  %173 = call noundef i32 %172(ptr noundef nonnull align 8 dereferenceable(800) %27, ptr noundef %167, i32 noundef 1, ptr noundef %169)
  %174 = icmp ne i32 %173, 0
  br i1 %174, label %175, label %178

175:                                              ; preds = %165
  %176 = call noundef ptr @_ZN7qpOASES23getGlobalMessageHandlerEv()
  %177 = call noundef i32 @_ZN7qpOASES15MessageHandling10throwErrorENS_11returnValueEPKcS3_S3_mNS_16VisibilityStatusE(ptr noundef nonnull align 8 dereferenceable(28) %176, i32 noundef 69, ptr noundef null, ptr noundef @.str, ptr noundef @.str.1, i64 noundef 3109, i32 noundef 1)
  store i32 %177, ptr %9, align 4
  store i32 1, ptr %25, align 4
  br label %502

178:                                              ; preds = %165
  %179 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %180 = load ptr, ptr %179, align 8, !tbaa !18
  %181 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %182 = load ptr, ptr %181, align 8, !tbaa !18
  %183 = load ptr, ptr %27, align 8, !tbaa !35
  %184 = getelementptr inbounds ptr, ptr %183, i64 14
  %185 = load ptr, ptr %184, align 8
  %186 = call noundef i32 %185(ptr noundef nonnull align 8 dereferenceable(800) %27, ptr noundef %180, i32 noundef 0, ptr noundef %182)
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %191

188:                                              ; preds = %178
  %189 = call noundef ptr @_ZN7qpOASES23getGlobalMessageHandlerEv()
  %190 = call noundef i32 @_ZN7qpOASES15MessageHandling10throwErrorENS_11returnValueEPKcS3_S3_mNS_16VisibilityStatusE(ptr noundef nonnull align 8 dereferenceable(28) %189, i32 noundef 69, ptr noundef null, ptr noundef @.str, ptr noundef @.str.1, i64 noundef 3113, i32 noundef 1)
  store i32 %190, ptr %9, align 4
  store i32 1, ptr %25, align 4
  br label %502

191:                                              ; preds = %178
  br label %192

192:                                              ; preds = %191, %128
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %193

193:                                              ; preds = %210, %192
  %194 = load i32, ptr %18, align 4, !tbaa !11
  %195 = load i32, ptr %21, align 4, !tbaa !11
  %196 = icmp slt i32 %194, %195
  br i1 %196, label %197, label %213

197:                                              ; preds = %193
  %198 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %199 = load ptr, ptr %198, align 8, !tbaa !18
  %200 = load i32, ptr %18, align 4, !tbaa !11
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds double, ptr %199, i64 %201
  %203 = load double, ptr %202, align 8, !tbaa !13
  %204 = load ptr, ptr %16, align 8, !tbaa !5
  %205 = load i32, ptr %18, align 4, !tbaa !11
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds double, ptr %204, i64 %206
  %208 = load double, ptr %207, align 8, !tbaa !13
  %209 = fadd double %208, %203
  store double %209, ptr %207, align 8, !tbaa !13
  br label %210

210:                                              ; preds = %197
  %211 = load i32, ptr %18, align 4, !tbaa !11
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %18, align 4, !tbaa !11
  br label %193, !llvm.loop !37

213:                                              ; preds = %193
  %214 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 23
  %215 = getelementptr inbounds %"class.qpOASES::Options", ptr %214, i32 0, i32 27
  %216 = load i32, ptr %215, align 8, !tbaa !32
  %217 = icmp sgt i32 %216, 0
  br i1 %217, label %218, label %363

218:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  store double 0.000000e+00, ptr %26, align 8, !tbaa !13
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %219

219:                                              ; preds = %240, %218
  %220 = load i32, ptr %18, align 4, !tbaa !11
  %221 = load i32, ptr %21, align 4, !tbaa !11
  %222 = icmp slt i32 %220, %221
  br i1 %222, label %223, label %243

223:                                              ; preds = %219
  %224 = load ptr, ptr %23, align 8, !tbaa !5
  %225 = load i32, ptr %18, align 4, !tbaa !11
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds i32, ptr %224, i64 %226
  %228 = load i32, ptr %227, align 4, !tbaa !11
  store i32 %228, ptr %19, align 4, !tbaa !11
  %229 = load ptr, ptr %11, align 8, !tbaa !5
  %230 = load i32, ptr %19, align 4, !tbaa !11
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds double, ptr %229, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !13
  %234 = fneg double %233
  %235 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %236 = load ptr, ptr %235, align 8, !tbaa !18
  %237 = load i32, ptr %18, align 4, !tbaa !11
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds double, ptr %236, i64 %238
  store double %234, ptr %239, align 8, !tbaa !13
  br label %240

240:                                              ; preds = %223
  %241 = load i32, ptr %18, align 4, !tbaa !11
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %18, align 4, !tbaa !11
  br label %219, !llvm.loop !38

243:                                              ; preds = %219
  %244 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 15
  %245 = load i32, ptr %244, align 4, !tbaa !33
  switch i32 %245, label %286 [
    i32 0, label %352
    i32 1, label %246
  ]

246:                                              ; preds = %243
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %247

247:                                              ; preds = %282, %246
  %248 = load i32, ptr %18, align 4, !tbaa !11
  %249 = load i32, ptr %21, align 4, !tbaa !11
  %250 = icmp slt i32 %248, %249
  br i1 %250, label %251, label %285

251:                                              ; preds = %247
  %252 = load ptr, ptr %16, align 8, !tbaa !5
  %253 = load i32, ptr %18, align 4, !tbaa !11
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds double, ptr %252, i64 %254
  %256 = load double, ptr %255, align 8, !tbaa !13
  %257 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %258 = load ptr, ptr %257, align 8, !tbaa !18
  %259 = load i32, ptr %18, align 4, !tbaa !11
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds double, ptr %258, i64 %260
  %262 = load double, ptr %261, align 8, !tbaa !13
  %263 = fsub double %262, %256
  store double %263, ptr %261, align 8, !tbaa !13
  %264 = load double, ptr %26, align 8, !tbaa !13
  %265 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %266 = load ptr, ptr %265, align 8, !tbaa !18
  %267 = load i32, ptr %18, align 4, !tbaa !11
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds double, ptr %266, i64 %268
  %270 = load double, ptr %269, align 8, !tbaa !13
  %271 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %270)
  %272 = fcmp olt double %264, %271
  br i1 %272, label %273, label %281

273:                                              ; preds = %251
  %274 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %275 = load ptr, ptr %274, align 8, !tbaa !18
  %276 = load i32, ptr %18, align 4, !tbaa !11
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds double, ptr %275, i64 %277
  %279 = load double, ptr %278, align 8, !tbaa !13
  %280 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %279)
  store double %280, ptr %26, align 8, !tbaa !13
  br label %281

281:                                              ; preds = %273, %251
  br label %282

282:                                              ; preds = %281
  %283 = load i32, ptr %18, align 4, !tbaa !11
  %284 = add nsw i32 %283, 1
  store i32 %284, ptr %18, align 4, !tbaa !11
  br label %247, !llvm.loop !39

285:                                              ; preds = %247
  br label %352

286:                                              ; preds = %243
  %287 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 2
  %288 = load ptr, ptr %287, align 8, !tbaa !34
  %289 = load ptr, ptr %288, align 8, !tbaa !35
  %290 = getelementptr i8, ptr %289, i64 -24
  %291 = load i64, ptr %290, align 8
  %292 = getelementptr inbounds i8, ptr %288, i64 %291
  %293 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %294 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %293)
  %295 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %296 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %295)
  %297 = load ptr, ptr %16, align 8, !tbaa !5
  %298 = load i32, ptr %21, align 4, !tbaa !11
  %299 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %300 = load ptr, ptr %299, align 8, !tbaa !18
  %301 = load i32, ptr %21, align 4, !tbaa !11
  %302 = load ptr, ptr %292, align 8, !tbaa !35
  %303 = getelementptr inbounds ptr, ptr %302, i64 17
  %304 = load ptr, ptr %303, align 8
  %305 = call noundef i32 %304(ptr noundef nonnull align 8 dereferenceable(12) %292, ptr noundef %294, ptr noundef %296, i32 noundef 1, double noundef -1.000000e+00, ptr noundef %297, i32 noundef %298, double noundef 1.000000e+00, ptr noundef %300, i32 noundef %301, i32 noundef 1)
  %306 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 2
  %307 = load ptr, ptr %306, align 8, !tbaa !34
  %308 = load ptr, ptr %307, align 8, !tbaa !35
  %309 = getelementptr i8, ptr %308, i64 -24
  %310 = load i64, ptr %309, align 8
  %311 = getelementptr inbounds i8, ptr %307, i64 %310
  %312 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %313 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %312)
  %314 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %315 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %314)
  %316 = load ptr, ptr %15, align 8, !tbaa !5
  %317 = load i32, ptr %22, align 4, !tbaa !11
  %318 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %319 = load ptr, ptr %318, align 8, !tbaa !18
  %320 = load i32, ptr %21, align 4, !tbaa !11
  %321 = load ptr, ptr %311, align 8, !tbaa !35
  %322 = getelementptr inbounds ptr, ptr %321, i64 17
  %323 = load ptr, ptr %322, align 8
  %324 = call noundef i32 %323(ptr noundef nonnull align 8 dereferenceable(12) %311, ptr noundef %313, ptr noundef %315, i32 noundef 1, double noundef -1.000000e+00, ptr noundef %316, i32 noundef %317, double noundef 1.000000e+00, ptr noundef %319, i32 noundef %320, i32 noundef 1)
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %325

325:                                              ; preds = %348, %286
  %326 = load i32, ptr %18, align 4, !tbaa !11
  %327 = load i32, ptr %21, align 4, !tbaa !11
  %328 = icmp slt i32 %326, %327
  br i1 %328, label %329, label %351

329:                                              ; preds = %325
  %330 = load double, ptr %26, align 8, !tbaa !13
  %331 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %332 = load ptr, ptr %331, align 8, !tbaa !18
  %333 = load i32, ptr %18, align 4, !tbaa !11
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %332, i64 %334
  %336 = load double, ptr %335, align 8, !tbaa !13
  %337 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %336)
  %338 = fcmp olt double %330, %337
  br i1 %338, label %339, label %347

339:                                              ; preds = %329
  %340 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 18
  %341 = load ptr, ptr %340, align 8, !tbaa !18
  %342 = load i32, ptr %18, align 4, !tbaa !11
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds double, ptr %341, i64 %343
  %345 = load double, ptr %344, align 8, !tbaa !13
  %346 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %345)
  store double %346, ptr %26, align 8, !tbaa !13
  br label %347

347:                                              ; preds = %339, %329
  br label %348

348:                                              ; preds = %347
  %349 = load i32, ptr %18, align 4, !tbaa !11
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %18, align 4, !tbaa !11
  br label %325, !llvm.loop !40

351:                                              ; preds = %325
  br label %352

352:                                              ; preds = %351, %285, %243
  %353 = load double, ptr %26, align 8, !tbaa !13
  %354 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 23
  %355 = getelementptr inbounds %"class.qpOASES::Options", ptr %354, i32 0, i32 29
  %356 = load double, ptr %355, align 8, !tbaa !41
  %357 = fcmp olt double %353, %356
  br i1 %357, label %358, label %359

358:                                              ; preds = %352
  store i32 11, ptr %25, align 4
  br label %360

359:                                              ; preds = %352
  store i32 0, ptr %25, align 4
  br label %360

360:                                              ; preds = %359, %358
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  %361 = load i32, ptr %25, align 4
  switch i32 %361, label %504 [
    i32 0, label %362
    i32 11, label %367
  ]

362:                                              ; preds = %360
  br label %363

363:                                              ; preds = %362, %213
  br label %364

364:                                              ; preds = %363
  %365 = load i32, ptr %20, align 4, !tbaa !11
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %20, align 4, !tbaa !11
  br label %122, !llvm.loop !42

367:                                              ; preds = %360, %122
  %368 = load i32, ptr %22, align 4, !tbaa !11
  %369 = icmp sgt i32 %368, 0
  br i1 %369, label %370, label %501

370:                                              ; preds = %367
  %371 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 15
  %372 = load i32, ptr %371, align 4, !tbaa !33
  %373 = icmp eq i32 %372, 0
  br i1 %373, label %378, label %374

374:                                              ; preds = %370
  %375 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 15
  %376 = load i32, ptr %375, align 4, !tbaa !33
  %377 = icmp eq i32 %376, 1
  br i1 %377, label %378, label %436

378:                                              ; preds = %374, %370
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %379

379:                                              ; preds = %432, %378
  %380 = load i32, ptr %18, align 4, !tbaa !11
  %381 = load i32, ptr %22, align 4, !tbaa !11
  %382 = icmp slt i32 %380, %381
  br i1 %382, label %383, label %435

383:                                              ; preds = %379
  %384 = load ptr, ptr %24, align 8, !tbaa !5
  %385 = load i32, ptr %18, align 4, !tbaa !11
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %384, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !11
  store i32 %388, ptr %19, align 4, !tbaa !11
  %389 = load ptr, ptr %11, align 8, !tbaa !5
  %390 = load i32, ptr %19, align 4, !tbaa !11
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds double, ptr %389, i64 %391
  %393 = load double, ptr %392, align 8, !tbaa !13
  %394 = load ptr, ptr %17, align 8, !tbaa !5
  %395 = load i32, ptr %18, align 4, !tbaa !11
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds double, ptr %394, i64 %396
  store double %393, ptr %397, align 8, !tbaa !13
  %398 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 15
  %399 = load i32, ptr %398, align 4, !tbaa !33
  %400 = icmp eq i32 %399, 0
  br i1 %400, label %401, label %419

401:                                              ; preds = %383
  %402 = call noundef i32 @_ZNK7qpOASES9QProblemB19usingRegularisationEv(ptr noundef nonnull align 8 dereferenceable(800) %27)
  %403 = icmp eq i32 %402, 1
  br i1 %403, label %404, label %418

404:                                              ; preds = %401
  %405 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 16
  %406 = load double, ptr %405, align 8, !tbaa !43
  %407 = load ptr, ptr %15, align 8, !tbaa !5
  %408 = load i32, ptr %18, align 4, !tbaa !11
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds double, ptr %407, i64 %409
  %411 = load double, ptr %410, align 8, !tbaa !13
  %412 = load ptr, ptr %17, align 8, !tbaa !5
  %413 = load i32, ptr %18, align 4, !tbaa !11
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds double, ptr %412, i64 %414
  %416 = load double, ptr %415, align 8, !tbaa !13
  %417 = call double @llvm.fmuladd.f64(double %406, double %411, double %416)
  store double %417, ptr %415, align 8, !tbaa !13
  br label %418

418:                                              ; preds = %404, %401
  br label %431

419:                                              ; preds = %383
  %420 = load ptr, ptr %15, align 8, !tbaa !5
  %421 = load i32, ptr %18, align 4, !tbaa !11
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds double, ptr %420, i64 %422
  %424 = load double, ptr %423, align 8, !tbaa !13
  %425 = load ptr, ptr %17, align 8, !tbaa !5
  %426 = load i32, ptr %18, align 4, !tbaa !11
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds double, ptr %425, i64 %427
  %429 = load double, ptr %428, align 8, !tbaa !13
  %430 = fadd double %429, %424
  store double %430, ptr %428, align 8, !tbaa !13
  br label %431

431:                                              ; preds = %419, %418
  br label %432

432:                                              ; preds = %431
  %433 = load i32, ptr %18, align 4, !tbaa !11
  %434 = add nsw i32 %433, 1
  store i32 %434, ptr %18, align 4, !tbaa !11
  br label %379, !llvm.loop !44

435:                                              ; preds = %379
  br label %500

436:                                              ; preds = %374
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %437

437:                                              ; preds = %456, %436
  %438 = load i32, ptr %18, align 4, !tbaa !11
  %439 = load i32, ptr %22, align 4, !tbaa !11
  %440 = icmp slt i32 %438, %439
  br i1 %440, label %441, label %459

441:                                              ; preds = %437
  %442 = load ptr, ptr %24, align 8, !tbaa !5
  %443 = load i32, ptr %18, align 4, !tbaa !11
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i32, ptr %442, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !11
  store i32 %446, ptr %19, align 4, !tbaa !11
  %447 = load ptr, ptr %11, align 8, !tbaa !5
  %448 = load i32, ptr %19, align 4, !tbaa !11
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %447, i64 %449
  %451 = load double, ptr %450, align 8, !tbaa !13
  %452 = load ptr, ptr %17, align 8, !tbaa !5
  %453 = load i32, ptr %18, align 4, !tbaa !11
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds double, ptr %452, i64 %454
  store double %451, ptr %455, align 8, !tbaa !13
  br label %456

456:                                              ; preds = %441
  %457 = load i32, ptr %18, align 4, !tbaa !11
  %458 = add nsw i32 %457, 1
  store i32 %458, ptr %18, align 4, !tbaa !11
  br label %437, !llvm.loop !45

459:                                              ; preds = %437
  %460 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 2
  %461 = load ptr, ptr %460, align 8, !tbaa !34
  %462 = load ptr, ptr %461, align 8, !tbaa !35
  %463 = getelementptr i8, ptr %462, i64 -24
  %464 = load i64, ptr %463, align 8
  %465 = getelementptr inbounds i8, ptr %461, i64 %464
  %466 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %467 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %466)
  %468 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %469 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %468)
  %470 = load ptr, ptr %16, align 8, !tbaa !5
  %471 = load i32, ptr %21, align 4, !tbaa !11
  %472 = load ptr, ptr %17, align 8, !tbaa !5
  %473 = load i32, ptr %22, align 4, !tbaa !11
  %474 = load ptr, ptr %465, align 8, !tbaa !35
  %475 = getelementptr inbounds ptr, ptr %474, i64 17
  %476 = load ptr, ptr %475, align 8
  %477 = call noundef i32 %476(ptr noundef nonnull align 8 dereferenceable(12) %465, ptr noundef %467, ptr noundef %469, i32 noundef 1, double noundef 1.000000e+00, ptr noundef %470, i32 noundef %471, double noundef 1.000000e+00, ptr noundef %472, i32 noundef %473, i32 noundef 1)
  %478 = load i32, ptr %14, align 4, !tbaa !9
  %479 = icmp eq i32 %478, 0
  br i1 %479, label %480, label %499

480:                                              ; preds = %459
  %481 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 2
  %482 = load ptr, ptr %481, align 8, !tbaa !34
  %483 = load ptr, ptr %482, align 8, !tbaa !35
  %484 = getelementptr i8, ptr %483, i64 -24
  %485 = load i64, ptr %484, align 8
  %486 = getelementptr inbounds i8, ptr %482, i64 %485
  %487 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %488 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %487)
  %489 = getelementptr inbounds %"class.qpOASES::QProblemB", ptr %27, i32 0, i32 6
  %490 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %489)
  %491 = load ptr, ptr %15, align 8, !tbaa !5
  %492 = load i32, ptr %22, align 4, !tbaa !11
  %493 = load ptr, ptr %17, align 8, !tbaa !5
  %494 = load i32, ptr %22, align 4, !tbaa !11
  %495 = load ptr, ptr %486, align 8, !tbaa !35
  %496 = getelementptr inbounds ptr, ptr %495, i64 17
  %497 = load ptr, ptr %496, align 8
  %498 = call noundef i32 %497(ptr noundef nonnull align 8 dereferenceable(12) %486, ptr noundef %488, ptr noundef %490, i32 noundef 1, double noundef 1.000000e+00, ptr noundef %491, i32 noundef %492, double noundef 1.000000e+00, ptr noundef %493, i32 noundef %494, i32 noundef 1)
  br label %499

499:                                              ; preds = %480, %459
  br label %500

500:                                              ; preds = %499, %435
  br label %501

501:                                              ; preds = %500, %367
  store i32 0, ptr %9, align 4
  store i32 1, ptr %25, align 4
  br label %502

502:                                              ; preds = %501, %188, %175
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  %503 = load i32, ptr %9, align 4
  ret i32 %503

504:                                              ; preds = %360
  unreachable
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTSN7qpOASES11BooleanTypeE", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = !{!19, !6, i64 240}
!19 = !{!"_ZTSN7qpOASES9QProblemBE", !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !20, i64 48, !6, i64 168, !10, i64 176, !6, i64 184, !6, i64 192, !14, i64 200, !23, i64 208, !10, i64 212, !10, i64 216, !24, i64 220, !14, i64 224, !12, i64 232, !6, i64 240, !14, i64 248, !14, i64 256, !12, i64 264, !25, i64 272, !28, i64 496, !30, i64 768}
!20 = !{!"_ZTSN7qpOASES6BoundsE", !21, i64 0, !22, i64 40, !22, i64 80}
!21 = !{!"_ZTSN7qpOASES9SubjectToE", !12, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 36}
!22 = !{!"_ZTSN7qpOASES9IndexlistE", !6, i64 0, !6, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32}
!23 = !{!"_ZTSN7qpOASES14QProblemStatusE", !7, i64 0}
!24 = !{!"_ZTSN7qpOASES11HessianTypeE", !7, i64 0}
!25 = !{!"_ZTSN7qpOASES7OptionsE", !26, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !12, i64 28, !12, i64 32, !10, i64 36, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !14, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !27, i64 128, !14, i64 136, !12, i64 144, !14, i64 152, !12, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !10, i64 200, !10, i64 204, !12, i64 208, !12, i64 212, !12, i64 216}
!26 = !{!"_ZTSN7qpOASES10PrintLevelE", !7, i64 0}
!27 = !{!"_ZTSN7qpOASES15SubjectToStatusE", !7, i64 0}
!28 = !{!"_ZTSN7qpOASES7FlipperE", !12, i64 0, !12, i64 4, !20, i64 8, !29, i64 128, !6, i64 248, !6, i64 256, !6, i64 264}
!29 = !{!"_ZTSN7qpOASES11ConstraintsE", !21, i64 0, !22, i64 40, !22, i64 80}
!30 = !{!"_ZTSN7qpOASES13TabularOutputE", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28}
!31 = distinct !{!31, !16}
!32 = !{!19, !12, i64 432}
!33 = !{!19, !24, i64 220}
!34 = !{!19, !6, i64 16}
!35 = !{!36, !36, i64 0}
!36 = !{!"vtable pointer", !8, i64 0}
!37 = distinct !{!37, !16}
!38 = distinct !{!38, !16}
!39 = distinct !{!39, !16}
!40 = distinct !{!40, !16}
!41 = !{!19, !14, i64 440}
!42 = distinct !{!42, !16}
!43 = !{!19, !14, i64 224}
!44 = distinct !{!44, !16}
!45 = distinct !{!45, !16}


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

@.str = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [104 x i8], align 1

declare noundef ptr @_ZN7qpOASES23getGlobalMessageHandlerEv() 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

declare noundef i32 @_ZN7qpOASES15MessageHandling10throwErrorENS_11returnValueEPKcS3_S3_mNS_16VisibilityStatusE(ptr noundef nonnull align 8 dereferenceable(28), i32 noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #0

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9SubjectTo9getStatusEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZN7qpOASES6getAbsEd(double noundef) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9QProblemB6getNFREv(ptr noundef nonnull align 8 dereferenceable(800)) local_unnamed_addr #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9QProblemB19usingRegularisationEv(ptr noundef nonnull align 8 dereferenceable(800)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #2 align 2

declare noundef i32 @_ZNK7qpOASES9Indexlist14getNumberArrayEPPi(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_ZNK7qpOASES9QProblemB6getNFXEv(ptr noundef nonnull align 8 dereferenceable(800)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7qpOASES9QProblemB22determineStepDirectionEPKdS2_S2_NS_11BooleanTypeEPdS4_S4_(ptr noundef nonnull align 8 dereferenceable(800) %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) local_unnamed_addr #5 align 2 {
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = tail call noundef i32 @_ZNK7qpOASES9QProblemB6getNFREv(ptr noundef nonnull align 8 dereferenceable(800) %0)
  %12 = tail call noundef i32 @_ZNK7qpOASES9QProblemB6getNFXEv(ptr noundef nonnull align 8 dereferenceable(800) %0)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %13 = getelementptr inbounds i8, ptr %0, i64 48
  %14 = tail call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %15 = call noundef i32 @_ZNK7qpOASES9Indexlist14getNumberArrayEPPi(ptr noundef nonnull align 8 dereferenceable(36) %14, ptr noundef nonnull %9)
  %16 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %17 = call noundef i32 @_ZNK7qpOASES9Indexlist14getNumberArrayEPPi(ptr noundef nonnull align 8 dereferenceable(36) %16, ptr noundef nonnull %10)
  %18 = icmp eq i32 %4, 0
  %19 = icmp sgt i32 %12, 0
  br i1 %18, label %.preheader131, label %.preheader133

.preheader133:                                    ; preds = %8
  br i1 %19, label %.lr.ph.preheader, label %.loopexit132

.lr.ph.preheader:                                 ; preds = %.preheader133
  %20 = zext nneg i32 %12 to i64
  %21 = shl nuw nsw i64 %20, 3
  call void @llvm.memset.p0.i64(ptr align 8 %5, i8 0, i64 %21, i1 false), !tbaa !5
  br label %.loopexit132

.preheader131:                                    ; preds = %8
  br i1 %19, label %.lr.ph137.preheader, label %.loopexit132

.lr.ph137.preheader:                              ; preds = %.preheader131
  %wide.trip.count = zext nneg i32 %12 to i64
  br label %.lr.ph137

.lr.ph137:                                        ; preds = %.lr.ph137.preheader, %.lr.ph137
  %indvars.iv = phi i64 [ 0, %.lr.ph137.preheader ], [ %indvars.iv.next, %.lr.ph137 ]
  %22 = load ptr, ptr %10, align 8, !tbaa !9
  %23 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv
  %24 = load i32, ptr %23, align 4, !tbaa !11
  %25 = call noundef i32 @_ZNK7qpOASES9SubjectTo9getStatusEi(ptr noundef nonnull align 8 dereferenceable(40) %13, i32 noundef %24)
  %26 = icmp eq i32 %25, -1
  %27 = sext i32 %24 to i64
  %. = select i1 %26, ptr %2, ptr %3
  %28 = getelementptr inbounds double, ptr %., i64 %27
  %.sink = load double, ptr %28, align 8, !tbaa !5
  %29 = getelementptr inbounds double, ptr %5, i64 %indvars.iv
  store double %.sink, ptr %29, align 8
  %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 %.loopexit132, label %.lr.ph137, !llvm.loop !13

.loopexit132:                                     ; preds = %.lr.ph137, %.lr.ph.preheader, %.preheader133, %.preheader131
  %30 = icmp sgt i32 %11, 0
  br i1 %30, label %.lr.ph139, label %.preheader130

.lr.ph139:                                        ; preds = %.loopexit132
  %31 = load ptr, ptr %9, align 8, !tbaa !9
  %32 = getelementptr inbounds i8, ptr %0, i64 240
  %33 = load ptr, ptr %32, align 8, !tbaa !15
  %wide.trip.count172 = zext nneg i32 %11 to i64
  %xtraiter = and i64 %wide.trip.count172, 1
  %34 = icmp eq i32 %11, 1
  br i1 %34, label %.preheader130.loopexit.unr-lcssa, label %.lr.ph139.new

.lr.ph139.new:                                    ; preds = %.lr.ph139
  %unroll_iter = and i64 %wide.trip.count172, 2147483646
  br label %51

.preheader130.loopexit.unr-lcssa:                 ; preds = %51, %.lr.ph139
  %indvars.iv169.unr = phi i64 [ 0, %.lr.ph139 ], [ %indvars.iv.next170.1, %51 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader130, label %.preheader130.loopexit.epilog-lcssa

.preheader130.loopexit.epilog-lcssa:              ; preds = %.preheader130.loopexit.unr-lcssa
  %35 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv169.unr
  %36 = load i32, ptr %35, align 4, !tbaa !11
  %37 = sext i32 %36 to i64
  %38 = getelementptr inbounds double, ptr %1, i64 %37
  %39 = load double, ptr %38, align 8, !tbaa !5
  %40 = fneg double %39
  %41 = getelementptr inbounds double, ptr %33, i64 %indvars.iv169.unr
  store double %40, ptr %41, align 8, !tbaa !5
  %42 = getelementptr inbounds double, ptr %6, i64 %indvars.iv169.unr
  store double 0.000000e+00, ptr %42, align 8, !tbaa !5
  br label %.preheader130

.preheader130:                                    ; preds = %.preheader130.loopexit.epilog-lcssa, %.preheader130.loopexit.unr-lcssa, %.loopexit132
  %43 = getelementptr inbounds i8, ptr %0, i64 432
  %44 = load i32, ptr %43, align 8, !tbaa !29
  %.not153 = icmp slt i32 %44, 0
  br i1 %.not153, label %._crit_edge157, label %.lr.ph156

.lr.ph156:                                        ; preds = %.preheader130
  %45 = getelementptr inbounds i8, ptr %0, i64 220
  %46 = getelementptr inbounds i8, ptr %0, i64 16
  %47 = getelementptr inbounds i8, ptr %0, i64 240
  %48 = getelementptr inbounds i8, ptr %0, i64 440
  %wide.trip.count177 = zext i32 %11 to i64
  %wide.trip.count187 = zext i32 %11 to i64
  %wide.trip.count192 = zext nneg i32 %11 to i64
  %49 = shl nuw nsw i64 %wide.trip.count177, 3
  %scevgep = getelementptr i8, ptr %6, i64 %49
  %min.iters.check = icmp ult i32 %11, 4
  %n.vec = and i64 %wide.trip.count177, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count177
  %xtraiter221 = and i64 %wide.trip.count187, 3
  %lcmp.mod222.not = icmp eq i64 %xtraiter221, 0
  %xtraiter224 = and i64 %wide.trip.count187, 3
  %50 = icmp ult i32 %11, 4
  %unroll_iter226 = and i64 %wide.trip.count187, 2147483644
  %lcmp.mod225.not = icmp eq i64 %xtraiter224, 0
  br label %68

51:                                               ; preds = %51, %.lr.ph139.new
  %indvars.iv169 = phi i64 [ 0, %.lr.ph139.new ], [ %indvars.iv.next170.1, %51 ]
  %niter = phi i64 [ 0, %.lr.ph139.new ], [ %niter.next.1, %51 ]
  %52 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv169
  %53 = load i32, ptr %52, align 4, !tbaa !11
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds double, ptr %1, i64 %54
  %56 = load double, ptr %55, align 8, !tbaa !5
  %57 = fneg double %56
  %58 = getelementptr inbounds double, ptr %33, i64 %indvars.iv169
  store double %57, ptr %58, align 8, !tbaa !5
  %59 = getelementptr inbounds double, ptr %6, i64 %indvars.iv169
  store double 0.000000e+00, ptr %59, align 8, !tbaa !5
  %indvars.iv.next170 = or disjoint i64 %indvars.iv169, 1
  %60 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next170
  %61 = load i32, ptr %60, align 4, !tbaa !11
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds double, ptr %1, i64 %62
  %64 = load double, ptr %63, align 8, !tbaa !5
  %65 = fneg double %64
  %66 = getelementptr inbounds double, ptr %33, i64 %indvars.iv.next170
  store double %65, ptr %66, align 8, !tbaa !5
  %67 = getelementptr inbounds double, ptr %6, i64 %indvars.iv.next170
  store double 0.000000e+00, ptr %67, align 8, !tbaa !5
  %indvars.iv.next170.1 = add nuw nsw i64 %indvars.iv169, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader130.loopexit.unr-lcssa, label %51, !llvm.loop !30

68:                                               ; preds = %.lr.ph156, %235
  %.0117154 = phi i32 [ 0, %.lr.ph156 ], [ %237, %235 ]
  br i1 %30, label %69, label %._crit_edge.thread

69:                                               ; preds = %68
  %70 = load i32, ptr %45, align 4, !tbaa !31
  %.not122 = icmp eq i32 %70, 0
  br i1 %.not122, label %88, label %71

71:                                               ; preds = %69
  %72 = icmp ne i32 %70, 1
  %73 = or i32 %.0117154, %4
  %74 = icmp eq i32 %73, 0
  %or.cond3 = and i1 %74, %72
  br i1 %or.cond3, label %75, label %88

75:                                               ; preds = %71
  %76 = load ptr, ptr %46, align 8, !tbaa !32
  %77 = load ptr, ptr %76, align 8, !tbaa !33
  %78 = getelementptr i8, ptr %77, i64 -24
  %79 = load i64, ptr %78, align 8
  %80 = getelementptr inbounds i8, ptr %76, i64 %79
  %81 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %82 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %83 = load ptr, ptr %47, align 8, !tbaa !15
  %84 = load ptr, ptr %80, align 8, !tbaa !33
  %85 = getelementptr inbounds i8, ptr %84, i64 136
  %86 = load ptr, ptr %85, align 8
  %87 = call noundef i32 %86(ptr noundef nonnull align 8 dereferenceable(12) %80, ptr noundef %81, ptr noundef %82, i32 noundef 1, double noundef -1.000000e+00, ptr noundef %5, i32 noundef %12, double noundef 1.000000e+00, ptr noundef %83, i32 noundef %11, i32 noundef 1)
  br label %88

88:                                               ; preds = %75, %71, %69
  %89 = load ptr, ptr %47, align 8, !tbaa !15
  %90 = load ptr, ptr %0, align 8, !tbaa !33
  %91 = getelementptr inbounds i8, ptr %90, i64 112
  %92 = load ptr, ptr %91, align 8
  %93 = call noundef i32 %92(ptr noundef nonnull align 8 dereferenceable(800) %0, ptr noundef %89, i32 noundef 1, ptr noundef %89)
  %.not123 = icmp eq i32 %93, 0
  br i1 %.not123, label %97, label %94

94:                                               ; preds = %88
  %95 = call noundef ptr @_ZN7qpOASES23getGlobalMessageHandlerEv()
  %96 = call noundef i32 @_ZN7qpOASES15MessageHandling10throwErrorENS_11returnValueEPKcS3_S3_mNS_16VisibilityStatusE(ptr noundef nonnull align 8 dereferenceable(28) %95, i32 noundef 69, ptr noundef null, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i64 noundef 3109, i32 noundef 1)
  br label %.loopexit

97:                                               ; preds = %88
  %98 = load ptr, ptr %47, align 8, !tbaa !15
  %99 = load ptr, ptr %0, align 8, !tbaa !33
  %100 = getelementptr inbounds i8, ptr %99, i64 112
  %101 = load ptr, ptr %100, align 8
  %102 = call noundef i32 %101(ptr noundef nonnull align 8 dereferenceable(800) %0, ptr noundef %98, i32 noundef 0, ptr noundef %98)
  %.not124 = icmp eq i32 %102, 0
  br i1 %.not124, label %.lr.ph141, label %103

103:                                              ; preds = %97
  %104 = call noundef ptr @_ZN7qpOASES23getGlobalMessageHandlerEv()
  %105 = call noundef i32 @_ZN7qpOASES15MessageHandling10throwErrorENS_11returnValueEPKcS3_S3_mNS_16VisibilityStatusE(ptr noundef nonnull align 8 dereferenceable(28) %104, i32 noundef 69, ptr noundef null, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i64 noundef 3113, i32 noundef 1)
  br label %.loopexit

.lr.ph141:                                        ; preds = %97
  %106 = load ptr, ptr %47, align 8, !tbaa !15
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph141
  %scevgep215 = getelementptr i8, ptr %106, i64 %49
  %bound0 = icmp ugt ptr %scevgep215, %6
  %bound1 = icmp ult ptr %106, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %107 = getelementptr inbounds double, ptr %106, i64 %index
  %108 = getelementptr inbounds i8, ptr %107, i64 16
  %wide.load = load <2 x double>, ptr %107, align 8, !tbaa !5, !alias.scope !35
  %wide.load216 = load <2 x double>, ptr %108, align 8, !tbaa !5, !alias.scope !35
  %109 = getelementptr inbounds double, ptr %6, i64 %index
  %110 = getelementptr inbounds i8, ptr %109, i64 16
  %wide.load217 = load <2 x double>, ptr %109, align 8, !tbaa !5, !alias.scope !38, !noalias !35
  %wide.load218 = load <2 x double>, ptr %110, align 8, !tbaa !5, !alias.scope !38, !noalias !35
  %111 = fadd <2 x double> %wide.load, %wide.load217
  %112 = fadd <2 x double> %wide.load216, %wide.load218
  store <2 x double> %111, ptr %109, align 8, !tbaa !5, !alias.scope !38, !noalias !35
  store <2 x double> %112, ptr %110, align 8, !tbaa !5, !alias.scope !38, !noalias !35
  %index.next = add nuw i64 %index, 4
  %113 = icmp eq i64 %index.next, %n.vec
  br i1 %113, label %middle.block, label %vector.body, !llvm.loop !40

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.memcheck, %.lr.ph141
  %indvars.iv174.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph141 ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod222.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv174.prol = phi i64 [ %indvars.iv.next175.prol, %scalar.ph.prol ], [ %indvars.iv174.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %114 = getelementptr inbounds double, ptr %106, i64 %indvars.iv174.prol
  %115 = load double, ptr %114, align 8, !tbaa !5
  %116 = getelementptr inbounds double, ptr %6, i64 %indvars.iv174.prol
  %117 = load double, ptr %116, align 8, !tbaa !5
  %118 = fadd double %115, %117
  store double %118, ptr %116, align 8, !tbaa !5
  %indvars.iv.next175.prol = add nuw nsw i64 %indvars.iv174.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter221
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !43

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv174.unr = phi i64 [ %indvars.iv174.ph, %scalar.ph.preheader ], [ %indvars.iv.next175.prol, %scalar.ph.prol ]
  %119 = sub nsw i64 %indvars.iv174.ph, %wide.trip.count187
  %120 = icmp ugt i64 %119, -4
  br i1 %120, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv174 = phi i64 [ %indvars.iv.next175.3, %scalar.ph ], [ %indvars.iv174.unr, %scalar.ph.prol.loopexit ]
  %121 = getelementptr inbounds double, ptr %106, i64 %indvars.iv174
  %122 = load double, ptr %121, align 8, !tbaa !5
  %123 = getelementptr inbounds double, ptr %6, i64 %indvars.iv174
  %124 = load double, ptr %123, align 8, !tbaa !5
  %125 = fadd double %122, %124
  store double %125, ptr %123, align 8, !tbaa !5
  %indvars.iv.next175 = add nuw nsw i64 %indvars.iv174, 1
  %126 = getelementptr inbounds double, ptr %106, i64 %indvars.iv.next175
  %127 = load double, ptr %126, align 8, !tbaa !5
  %128 = getelementptr inbounds double, ptr %6, i64 %indvars.iv.next175
  %129 = load double, ptr %128, align 8, !tbaa !5
  %130 = fadd double %127, %129
  store double %130, ptr %128, align 8, !tbaa !5
  %indvars.iv.next175.1 = add nuw nsw i64 %indvars.iv174, 2
  %131 = getelementptr inbounds double, ptr %106, i64 %indvars.iv.next175.1
  %132 = load double, ptr %131, align 8, !tbaa !5
  %133 = getelementptr inbounds double, ptr %6, i64 %indvars.iv.next175.1
  %134 = load double, ptr %133, align 8, !tbaa !5
  %135 = fadd double %132, %134
  store double %135, ptr %133, align 8, !tbaa !5
  %indvars.iv.next175.2 = add nuw nsw i64 %indvars.iv174, 3
  %136 = getelementptr inbounds double, ptr %106, i64 %indvars.iv.next175.2
  %137 = load double, ptr %136, align 8, !tbaa !5
  %138 = getelementptr inbounds double, ptr %6, i64 %indvars.iv.next175.2
  %139 = load double, ptr %138, align 8, !tbaa !5
  %140 = fadd double %137, %139
  store double %140, ptr %138, align 8, !tbaa !5
  %indvars.iv.next175.3 = add nuw nsw i64 %indvars.iv174, 4
  %exitcond178.not.3 = icmp eq i64 %indvars.iv.next175.3, %wide.trip.count177
  br i1 %exitcond178.not.3, label %._crit_edge, label %scalar.ph, !llvm.loop !45

._crit_edge:                                      ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %141 = load i32, ptr %43, align 8, !tbaa !29
  %142 = icmp sgt i32 %141, 0
  br i1 %142, label %.preheader129, label %235

._crit_edge.thread:                               ; preds = %68
  %143 = load i32, ptr %43, align 8, !tbaa !29
  %144 = icmp sgt i32 %143, 0
  br i1 %144, label %._crit_edge144, label %235

.preheader129:                                    ; preds = %._crit_edge
  br i1 %30, label %.lr.ph143, label %._crit_edge144

.lr.ph143:                                        ; preds = %.preheader129
  %145 = load ptr, ptr %9, align 8, !tbaa !9
  %146 = load ptr, ptr %47, align 8, !tbaa !15
  br i1 %50, label %._crit_edge144.loopexit.unr-lcssa, label %.lr.ph143.new

.lr.ph143.new:                                    ; preds = %.lr.ph143, %.lr.ph143.new
  %indvars.iv179 = phi i64 [ %indvars.iv.next180.3, %.lr.ph143.new ], [ 0, %.lr.ph143 ]
  %niter227 = phi i64 [ %niter227.next.3, %.lr.ph143.new ], [ 0, %.lr.ph143 ]
  %147 = getelementptr inbounds i32, ptr %145, i64 %indvars.iv179
  %148 = load i32, ptr %147, align 4, !tbaa !11
  %149 = sext i32 %148 to i64
  %150 = getelementptr inbounds double, ptr %1, i64 %149
  %151 = load double, ptr %150, align 8, !tbaa !5
  %152 = fneg double %151
  %153 = getelementptr inbounds double, ptr %146, i64 %indvars.iv179
  store double %152, ptr %153, align 8, !tbaa !5
  %indvars.iv.next180 = or disjoint i64 %indvars.iv179, 1
  %154 = getelementptr inbounds i32, ptr %145, i64 %indvars.iv.next180
  %155 = load i32, ptr %154, align 4, !tbaa !11
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds double, ptr %1, i64 %156
  %158 = load double, ptr %157, align 8, !tbaa !5
  %159 = fneg double %158
  %160 = getelementptr inbounds double, ptr %146, i64 %indvars.iv.next180
  store double %159, ptr %160, align 8, !tbaa !5
  %indvars.iv.next180.1 = or disjoint i64 %indvars.iv179, 2
  %161 = getelementptr inbounds i32, ptr %145, i64 %indvars.iv.next180.1
  %162 = load i32, ptr %161, align 4, !tbaa !11
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds double, ptr %1, i64 %163
  %165 = load double, ptr %164, align 8, !tbaa !5
  %166 = fneg double %165
  %167 = getelementptr inbounds double, ptr %146, i64 %indvars.iv.next180.1
  store double %166, ptr %167, align 8, !tbaa !5
  %indvars.iv.next180.2 = or disjoint i64 %indvars.iv179, 3
  %168 = getelementptr inbounds i32, ptr %145, i64 %indvars.iv.next180.2
  %169 = load i32, ptr %168, align 4, !tbaa !11
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds double, ptr %1, i64 %170
  %172 = load double, ptr %171, align 8, !tbaa !5
  %173 = fneg double %172
  %174 = getelementptr inbounds double, ptr %146, i64 %indvars.iv.next180.2
  store double %173, ptr %174, align 8, !tbaa !5
  %indvars.iv.next180.3 = add nuw nsw i64 %indvars.iv179, 4
  %niter227.next.3 = add i64 %niter227, 4
  %niter227.ncmp.3 = icmp eq i64 %niter227.next.3, %unroll_iter226
  br i1 %niter227.ncmp.3, label %._crit_edge144.loopexit.unr-lcssa, label %.lr.ph143.new, !llvm.loop !46

._crit_edge144.loopexit.unr-lcssa:                ; preds = %.lr.ph143.new, %.lr.ph143
  %indvars.iv179.unr = phi i64 [ 0, %.lr.ph143 ], [ %indvars.iv.next180.3, %.lr.ph143.new ]
  br i1 %lcmp.mod225.not, label %._crit_edge144, label %.epil.preheader223

.epil.preheader223:                               ; preds = %._crit_edge144.loopexit.unr-lcssa, %.epil.preheader223
  %indvars.iv179.epil = phi i64 [ %indvars.iv.next180.epil, %.epil.preheader223 ], [ %indvars.iv179.unr, %._crit_edge144.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader223 ], [ 0, %._crit_edge144.loopexit.unr-lcssa ]
  %175 = getelementptr inbounds i32, ptr %145, i64 %indvars.iv179.epil
  %176 = load i32, ptr %175, align 4, !tbaa !11
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %1, i64 %177
  %179 = load double, ptr %178, align 8, !tbaa !5
  %180 = fneg double %179
  %181 = getelementptr inbounds double, ptr %146, i64 %indvars.iv179.epil
  store double %180, ptr %181, align 8, !tbaa !5
  %indvars.iv.next180.epil = add nuw nsw i64 %indvars.iv179.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter224
  br i1 %epil.iter.cmp.not, label %._crit_edge144, label %.epil.preheader223, !llvm.loop !47

._crit_edge144:                                   ; preds = %._crit_edge144.loopexit.unr-lcssa, %.epil.preheader223, %._crit_edge.thread, %.preheader129
  %182 = load i32, ptr %45, align 4, !tbaa !31
  switch i32 %182, label %197 [
    i32 0, label %.loopexit126
    i32 1, label %.preheader127
  ]

.preheader127:                                    ; preds = %._crit_edge144
  br i1 %30, label %.lr.ph147, label %.loopexit126

.lr.ph147:                                        ; preds = %.preheader127, %196
  %indvars.iv184 = phi i64 [ %indvars.iv.next185, %196 ], [ 0, %.preheader127 ]
  %.0146 = phi double [ %.1, %196 ], [ 0.000000e+00, %.preheader127 ]
  %183 = getelementptr inbounds double, ptr %6, i64 %indvars.iv184
  %184 = load double, ptr %183, align 8, !tbaa !5
  %185 = load ptr, ptr %47, align 8, !tbaa !15
  %186 = getelementptr inbounds double, ptr %185, i64 %indvars.iv184
  %187 = load double, ptr %186, align 8, !tbaa !5
  %188 = fsub double %187, %184
  store double %188, ptr %186, align 8, !tbaa !5
  %189 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %188)
  %190 = fcmp olt double %.0146, %189
  br i1 %190, label %191, label %196

191:                                              ; preds = %.lr.ph147
  %192 = load ptr, ptr %47, align 8, !tbaa !15
  %193 = getelementptr inbounds double, ptr %192, i64 %indvars.iv184
  %194 = load double, ptr %193, align 8, !tbaa !5
  %195 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %194)
  br label %196

196:                                              ; preds = %.lr.ph147, %191
  %.1 = phi double [ %195, %191 ], [ %.0146, %.lr.ph147 ]
  %indvars.iv.next185 = add nuw nsw i64 %indvars.iv184, 1
  %exitcond188.not = icmp eq i64 %indvars.iv.next185, %wide.trip.count187
  br i1 %exitcond188.not, label %.loopexit126, label %.lr.ph147, !llvm.loop !48

197:                                              ; preds = %._crit_edge144
  %198 = load ptr, ptr %46, align 8, !tbaa !32
  %199 = load ptr, ptr %198, align 8, !tbaa !33
  %200 = getelementptr i8, ptr %199, i64 -24
  %201 = load i64, ptr %200, align 8
  %202 = getelementptr inbounds i8, ptr %198, i64 %201
  %203 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %204 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %205 = load ptr, ptr %47, align 8, !tbaa !15
  %206 = load ptr, ptr %202, align 8, !tbaa !33
  %207 = getelementptr inbounds i8, ptr %206, i64 136
  %208 = load ptr, ptr %207, align 8
  %209 = call noundef i32 %208(ptr noundef nonnull align 8 dereferenceable(12) %202, ptr noundef %203, ptr noundef %204, i32 noundef 1, double noundef -1.000000e+00, ptr noundef %6, i32 noundef %11, double noundef 1.000000e+00, ptr noundef %205, i32 noundef %11, i32 noundef 1)
  %210 = load ptr, ptr %46, align 8, !tbaa !32
  %211 = load ptr, ptr %210, align 8, !tbaa !33
  %212 = getelementptr i8, ptr %211, i64 -24
  %213 = load i64, ptr %212, align 8
  %214 = getelementptr inbounds i8, ptr %210, i64 %213
  %215 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %216 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %217 = load ptr, ptr %47, align 8, !tbaa !15
  %218 = load ptr, ptr %214, align 8, !tbaa !33
  %219 = getelementptr inbounds i8, ptr %218, i64 136
  %220 = load ptr, ptr %219, align 8
  %221 = call noundef i32 %220(ptr noundef nonnull align 8 dereferenceable(12) %214, ptr noundef %215, ptr noundef %216, i32 noundef 1, double noundef -1.000000e+00, ptr noundef %5, i32 noundef %12, double noundef 1.000000e+00, ptr noundef %217, i32 noundef %11, i32 noundef 1)
  br i1 %30, label %.lr.ph151, label %.loopexit126

.lr.ph151:                                        ; preds = %197, %232
  %indvars.iv189 = phi i64 [ %indvars.iv.next190, %232 ], [ 0, %197 ]
  %.2149 = phi double [ %.3, %232 ], [ 0.000000e+00, %197 ]
  %222 = load ptr, ptr %47, align 8, !tbaa !15
  %223 = getelementptr inbounds double, ptr %222, i64 %indvars.iv189
  %224 = load double, ptr %223, align 8, !tbaa !5
  %225 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %224)
  %226 = fcmp olt double %.2149, %225
  br i1 %226, label %227, label %232

227:                                              ; preds = %.lr.ph151
  %228 = load ptr, ptr %47, align 8, !tbaa !15
  %229 = getelementptr inbounds double, ptr %228, i64 %indvars.iv189
  %230 = load double, ptr %229, align 8, !tbaa !5
  %231 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %230)
  br label %232

232:                                              ; preds = %.lr.ph151, %227
  %.3 = phi double [ %231, %227 ], [ %.2149, %.lr.ph151 ]
  %indvars.iv.next190 = add nuw nsw i64 %indvars.iv189, 1
  %exitcond193.not = icmp eq i64 %indvars.iv.next190, %wide.trip.count192
  br i1 %exitcond193.not, label %.loopexit126, label %.lr.ph151, !llvm.loop !49

.loopexit126:                                     ; preds = %196, %232, %.preheader127, %197, %._crit_edge144
  %.4 = phi double [ 0.000000e+00, %._crit_edge144 ], [ 0.000000e+00, %197 ], [ 0.000000e+00, %.preheader127 ], [ %.3, %232 ], [ %.1, %196 ]
  %233 = load double, ptr %48, align 8, !tbaa !50
  %234 = fcmp olt double %.4, %233
  br i1 %234, label %._crit_edge157, label %.loopexit126._crit_edge

.loopexit126._crit_edge:                          ; preds = %.loopexit126
  %.pre = load i32, ptr %43, align 8, !tbaa !29
  br label %235

235:                                              ; preds = %._crit_edge.thread, %.loopexit126._crit_edge, %._crit_edge
  %236 = phi i32 [ %.pre, %.loopexit126._crit_edge ], [ %141, %._crit_edge ], [ %143, %._crit_edge.thread ]
  %237 = add nuw nsw i32 %.0117154, 1
  %.not.not = icmp slt i32 %.0117154, %236
  br i1 %.not.not, label %68, label %._crit_edge157, !llvm.loop !51

._crit_edge157:                                   ; preds = %235, %.loopexit126, %.preheader130
  %238 = icmp sgt i32 %12, 0
  br i1 %238, label %239, label %.loopexit

239:                                              ; preds = %._crit_edge157
  %240 = getelementptr inbounds i8, ptr %0, i64 220
  %241 = load i32, ptr %240, align 4, !tbaa !31
  %switch = icmp ult i32 %241, 2
  br i1 %switch, label %.lr.ph163, label %.lr.ph160

.lr.ph160:                                        ; preds = %239
  %242 = load ptr, ptr %10, align 8, !tbaa !9
  %wide.trip.count197 = zext nneg i32 %12 to i64
  %xtraiter229 = and i64 %wide.trip.count197, 3
  %243 = icmp ult i32 %12, 4
  br i1 %243, label %._crit_edge161.unr-lcssa, label %.lr.ph160.new

.lr.ph160.new:                                    ; preds = %.lr.ph160
  %unroll_iter232 = and i64 %wide.trip.count197, 2147483644
  br label %290

.lr.ph163:                                        ; preds = %239
  %244 = getelementptr inbounds i8, ptr %0, i64 224
  %245 = icmp eq i32 %241, 0
  br i1 %245, label %.lr.ph163.split.preheader, label %.lr.ph163.split.us

.lr.ph163.split.preheader:                        ; preds = %.lr.ph163
  %wide.trip.count207 = zext nneg i32 %12 to i64
  br label %.lr.ph163.split

.lr.ph163.split.us:                               ; preds = %.lr.ph163
  %246 = load ptr, ptr %10, align 8, !tbaa !9
  %wide.trip.count202 = zext nneg i32 %12 to i64
  %xtraiter235 = and i64 %wide.trip.count202, 1
  %247 = icmp eq i32 %12, 1
  br i1 %247, label %.loopexit.loopexit219.unr-lcssa, label %.lr.ph163.split.us.new

.lr.ph163.split.us.new:                           ; preds = %.lr.ph163.split.us
  %unroll_iter238 = and i64 %wide.trip.count202, 2147483646
  br label %248

248:                                              ; preds = %248, %.lr.ph163.split.us.new
  %indvars.iv199 = phi i64 [ 0, %.lr.ph163.split.us.new ], [ %indvars.iv.next200.1, %248 ]
  %niter239 = phi i64 [ 0, %.lr.ph163.split.us.new ], [ %niter239.next.1, %248 ]
  %249 = getelementptr inbounds i32, ptr %246, i64 %indvars.iv199
  %250 = load i32, ptr %249, align 4, !tbaa !11
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds double, ptr %1, i64 %251
  %253 = load double, ptr %252, align 8, !tbaa !5
  %254 = getelementptr inbounds double, ptr %7, i64 %indvars.iv199
  store double %253, ptr %254, align 8, !tbaa !5
  %255 = getelementptr inbounds double, ptr %5, i64 %indvars.iv199
  %256 = load double, ptr %255, align 8, !tbaa !5
  %257 = fadd double %253, %256
  store double %257, ptr %254, align 8, !tbaa !5
  %indvars.iv.next200 = or disjoint i64 %indvars.iv199, 1
  %258 = getelementptr inbounds i32, ptr %246, i64 %indvars.iv.next200
  %259 = load i32, ptr %258, align 4, !tbaa !11
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds double, ptr %1, i64 %260
  %262 = load double, ptr %261, align 8, !tbaa !5
  %263 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next200
  store double %262, ptr %263, align 8, !tbaa !5
  %264 = getelementptr inbounds double, ptr %5, i64 %indvars.iv.next200
  %265 = load double, ptr %264, align 8, !tbaa !5
  %266 = fadd double %262, %265
  store double %266, ptr %263, align 8, !tbaa !5
  %indvars.iv.next200.1 = add nuw nsw i64 %indvars.iv199, 2
  %niter239.next.1 = add i64 %niter239, 2
  %niter239.ncmp.1 = icmp eq i64 %niter239.next.1, %unroll_iter238
  br i1 %niter239.ncmp.1, label %.loopexit.loopexit219.unr-lcssa, label %248, !llvm.loop !52

.lr.ph163.split:                                  ; preds = %.lr.ph163.split.preheader, %289
  %indvars.iv204 = phi i64 [ 0, %.lr.ph163.split.preheader ], [ %indvars.iv.next205, %289 ]
  %267 = load ptr, ptr %10, align 8, !tbaa !9
  %268 = getelementptr inbounds i32, ptr %267, i64 %indvars.iv204
  %269 = load i32, ptr %268, align 4, !tbaa !11
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds double, ptr %1, i64 %270
  %272 = load double, ptr %271, align 8, !tbaa !5
  %273 = getelementptr inbounds double, ptr %7, i64 %indvars.iv204
  store double %272, ptr %273, align 8, !tbaa !5
  %274 = load i32, ptr %240, align 4, !tbaa !31
  %275 = icmp eq i32 %274, 0
  br i1 %275, label %276, label %285

276:                                              ; preds = %.lr.ph163.split
  %277 = call noundef i32 @_ZNK7qpOASES9QProblemB19usingRegularisationEv(ptr noundef nonnull align 8 dereferenceable(800) %0)
  %278 = icmp eq i32 %277, 1
  br i1 %278, label %279, label %289

279:                                              ; preds = %276
  %280 = load double, ptr %244, align 8, !tbaa !53
  %281 = getelementptr inbounds double, ptr %5, i64 %indvars.iv204
  %282 = load double, ptr %281, align 8, !tbaa !5
  %283 = load double, ptr %273, align 8, !tbaa !5
  %284 = call double @llvm.fmuladd.f64(double %280, double %282, double %283)
  br label %.sink.split

285:                                              ; preds = %.lr.ph163.split
  %286 = getelementptr inbounds double, ptr %5, i64 %indvars.iv204
  %287 = load double, ptr %286, align 8, !tbaa !5
  %288 = fadd double %272, %287
  br label %.sink.split

.sink.split:                                      ; preds = %279, %285
  %.sink212 = phi double [ %288, %285 ], [ %284, %279 ]
  store double %.sink212, ptr %273, align 8, !tbaa !5
  br label %289

289:                                              ; preds = %.sink.split, %276
  %indvars.iv.next205 = add nuw nsw i64 %indvars.iv204, 1
  %exitcond208.not = icmp eq i64 %indvars.iv.next205, %wide.trip.count207
  br i1 %exitcond208.not, label %.loopexit, label %.lr.ph163.split, !llvm.loop !54

290:                                              ; preds = %290, %.lr.ph160.new
  %indvars.iv194 = phi i64 [ 0, %.lr.ph160.new ], [ %indvars.iv.next195.3, %290 ]
  %niter233 = phi i64 [ 0, %.lr.ph160.new ], [ %niter233.next.3, %290 ]
  %291 = getelementptr inbounds i32, ptr %242, i64 %indvars.iv194
  %292 = load i32, ptr %291, align 4, !tbaa !11
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds double, ptr %1, i64 %293
  %295 = load double, ptr %294, align 8, !tbaa !5
  %296 = getelementptr inbounds double, ptr %7, i64 %indvars.iv194
  store double %295, ptr %296, align 8, !tbaa !5
  %indvars.iv.next195 = or disjoint i64 %indvars.iv194, 1
  %297 = getelementptr inbounds i32, ptr %242, i64 %indvars.iv.next195
  %298 = load i32, ptr %297, align 4, !tbaa !11
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds double, ptr %1, i64 %299
  %301 = load double, ptr %300, align 8, !tbaa !5
  %302 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next195
  store double %301, ptr %302, align 8, !tbaa !5
  %indvars.iv.next195.1 = or disjoint i64 %indvars.iv194, 2
  %303 = getelementptr inbounds i32, ptr %242, i64 %indvars.iv.next195.1
  %304 = load i32, ptr %303, align 4, !tbaa !11
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds double, ptr %1, i64 %305
  %307 = load double, ptr %306, align 8, !tbaa !5
  %308 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next195.1
  store double %307, ptr %308, align 8, !tbaa !5
  %indvars.iv.next195.2 = or disjoint i64 %indvars.iv194, 3
  %309 = getelementptr inbounds i32, ptr %242, i64 %indvars.iv.next195.2
  %310 = load i32, ptr %309, align 4, !tbaa !11
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds double, ptr %1, i64 %311
  %313 = load double, ptr %312, align 8, !tbaa !5
  %314 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next195.2
  store double %313, ptr %314, align 8, !tbaa !5
  %indvars.iv.next195.3 = add nuw nsw i64 %indvars.iv194, 4
  %niter233.next.3 = add i64 %niter233, 4
  %niter233.ncmp.3 = icmp eq i64 %niter233.next.3, %unroll_iter232
  br i1 %niter233.ncmp.3, label %._crit_edge161.unr-lcssa, label %290, !llvm.loop !56

._crit_edge161.unr-lcssa:                         ; preds = %290, %.lr.ph160
  %indvars.iv194.unr = phi i64 [ 0, %.lr.ph160 ], [ %indvars.iv.next195.3, %290 ]
  %lcmp.mod231.not = icmp eq i64 %xtraiter229, 0
  br i1 %lcmp.mod231.not, label %._crit_edge161, label %.epil.preheader228

.epil.preheader228:                               ; preds = %._crit_edge161.unr-lcssa, %.epil.preheader228
  %indvars.iv194.epil = phi i64 [ %indvars.iv.next195.epil, %.epil.preheader228 ], [ %indvars.iv194.unr, %._crit_edge161.unr-lcssa ]
  %epil.iter230 = phi i64 [ %epil.iter230.next, %.epil.preheader228 ], [ 0, %._crit_edge161.unr-lcssa ]
  %315 = getelementptr inbounds i32, ptr %242, i64 %indvars.iv194.epil
  %316 = load i32, ptr %315, align 4, !tbaa !11
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds double, ptr %1, i64 %317
  %319 = load double, ptr %318, align 8, !tbaa !5
  %320 = getelementptr inbounds double, ptr %7, i64 %indvars.iv194.epil
  store double %319, ptr %320, align 8, !tbaa !5
  %indvars.iv.next195.epil = add nuw nsw i64 %indvars.iv194.epil, 1
  %epil.iter230.next = add i64 %epil.iter230, 1
  %epil.iter230.cmp.not = icmp eq i64 %epil.iter230.next, %xtraiter229
  br i1 %epil.iter230.cmp.not, label %._crit_edge161, label %.epil.preheader228, !llvm.loop !57

._crit_edge161:                                   ; preds = %.epil.preheader228, %._crit_edge161.unr-lcssa
  %321 = getelementptr inbounds i8, ptr %0, i64 16
  %322 = load ptr, ptr %321, align 8, !tbaa !32
  %323 = load ptr, ptr %322, align 8, !tbaa !33
  %324 = getelementptr i8, ptr %323, i64 -24
  %325 = load i64, ptr %324, align 8
  %326 = getelementptr inbounds i8, ptr %322, i64 %325
  %327 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %328 = call noundef ptr @_ZN7qpOASES6Bounds7getFreeEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %329 = load ptr, ptr %326, align 8, !tbaa !33
  %330 = getelementptr inbounds i8, ptr %329, i64 136
  %331 = load ptr, ptr %330, align 8
  %332 = call noundef i32 %331(ptr noundef nonnull align 8 dereferenceable(12) %326, ptr noundef %327, ptr noundef %328, i32 noundef 1, double noundef 1.000000e+00, ptr noundef %6, i32 noundef %11, double noundef 1.000000e+00, ptr noundef nonnull %7, i32 noundef %12, i32 noundef 1)
  br i1 %18, label %333, label %.loopexit

333:                                              ; preds = %._crit_edge161
  %334 = load ptr, ptr %321, align 8, !tbaa !32
  %335 = load ptr, ptr %334, align 8, !tbaa !33
  %336 = getelementptr i8, ptr %335, i64 -24
  %337 = load i64, ptr %336, align 8
  %338 = getelementptr inbounds i8, ptr %334, i64 %337
  %339 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %340 = call noundef ptr @_ZN7qpOASES6Bounds8getFixedEv(ptr noundef nonnull align 8 dereferenceable(120) %13)
  %341 = load ptr, ptr %338, align 8, !tbaa !33
  %342 = getelementptr inbounds i8, ptr %341, i64 136
  %343 = load ptr, ptr %342, align 8
  %344 = call noundef i32 %343(ptr noundef nonnull align 8 dereferenceable(12) %338, ptr noundef %339, ptr noundef %340, i32 noundef 1, double noundef 1.000000e+00, ptr noundef %5, i32 noundef %12, double noundef 1.000000e+00, ptr noundef nonnull %7, i32 noundef %12, i32 noundef 1)
  br label %.loopexit

.loopexit.loopexit219.unr-lcssa:                  ; preds = %248, %.lr.ph163.split.us
  %indvars.iv199.unr = phi i64 [ 0, %.lr.ph163.split.us ], [ %indvars.iv.next200.1, %248 ]
  %lcmp.mod237.not = icmp eq i64 %xtraiter235, 0
  br i1 %lcmp.mod237.not, label %.loopexit, label %.loopexit.loopexit219.epilog-lcssa

.loopexit.loopexit219.epilog-lcssa:               ; preds = %.loopexit.loopexit219.unr-lcssa
  %345 = getelementptr inbounds i32, ptr %246, i64 %indvars.iv199.unr
  %346 = load i32, ptr %345, align 4, !tbaa !11
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds double, ptr %1, i64 %347
  %349 = load double, ptr %348, align 8, !tbaa !5
  %350 = getelementptr inbounds double, ptr %7, i64 %indvars.iv199.unr
  store double %349, ptr %350, align 8, !tbaa !5
  %351 = getelementptr inbounds double, ptr %5, i64 %indvars.iv199.unr
  %352 = load double, ptr %351, align 8, !tbaa !5
  %353 = fadd double %349, %352
  store double %353, ptr %350, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit219.epilog-lcssa, %.loopexit.loopexit219.unr-lcssa, %289, %._crit_edge157, %._crit_edge161, %333, %103, %94
  %.0111 = phi i32 [ %96, %94 ], [ %105, %103 ], [ 0, %333 ], [ 0, %._crit_edge161 ], [ 0, %._crit_edge157 ], [ 0, %289 ], [ 0, %.loopexit.loopexit219.unr-lcssa ], [ 0, %.loopexit.loopexit219.epilog-lcssa ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #7
  ret i32 %.0111
}

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

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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"double", !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 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !10, i64 240}
!16 = !{!"_ZTSN7qpOASES9QProblemBE", !17, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !18, i64 48, !10, i64 168, !17, i64 176, !10, i64 184, !10, i64 192, !6, i64 200, !21, i64 208, !17, i64 212, !17, i64 216, !22, i64 220, !6, i64 224, !12, i64 232, !10, i64 240, !6, i64 248, !6, i64 256, !12, i64 264, !23, i64 272, !26, i64 496, !28, i64 768}
!17 = !{!"_ZTSN7qpOASES11BooleanTypeE", !7, i64 0}
!18 = !{!"_ZTSN7qpOASES6BoundsE", !19, i64 0, !20, i64 40, !20, i64 80}
!19 = !{!"_ZTSN7qpOASES9SubjectToE", !12, i64 8, !10, i64 16, !10, i64 24, !17, i64 32, !17, i64 36}
!20 = !{!"_ZTSN7qpOASES9IndexlistE", !10, i64 0, !10, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32}
!21 = !{!"_ZTSN7qpOASES14QProblemStatusE", !7, i64 0}
!22 = !{!"_ZTSN7qpOASES11HessianTypeE", !7, i64 0}
!23 = !{!"_ZTSN7qpOASES7OptionsE", !24, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !17, i64 24, !12, i64 28, !12, i64 32, !17, i64 36, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !25, i64 128, !6, i64 136, !12, i64 144, !6, i64 152, !12, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !17, i64 200, !17, i64 204, !12, i64 208, !12, i64 212, !12, i64 216}
!24 = !{!"_ZTSN7qpOASES10PrintLevelE", !7, i64 0}
!25 = !{!"_ZTSN7qpOASES15SubjectToStatusE", !7, i64 0}
!26 = !{!"_ZTSN7qpOASES7FlipperE", !12, i64 0, !12, i64 4, !18, i64 8, !27, i64 128, !10, i64 248, !10, i64 256, !10, i64 264}
!27 = !{!"_ZTSN7qpOASES11ConstraintsE", !19, i64 0, !20, i64 40, !20, i64 80}
!28 = !{!"_ZTSN7qpOASES13TabularOutputE", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28}
!29 = !{!16, !12, i64 432}
!30 = distinct !{!30, !14}
!31 = !{!16, !22, i64 220}
!32 = !{!16, !10, i64 16}
!33 = !{!34, !34, i64 0}
!34 = !{!"vtable pointer", !8, i64 0}
!35 = !{!36}
!36 = distinct !{!36, !37}
!37 = distinct !{!37, !"LVerDomain"}
!38 = !{!39}
!39 = distinct !{!39, !37}
!40 = distinct !{!40, !14, !41, !42}
!41 = !{!"llvm.loop.isvectorized", i32 1}
!42 = !{!"llvm.loop.unroll.runtime.disable"}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.unroll.disable"}
!45 = distinct !{!45, !14, !41}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !44}
!48 = distinct !{!48, !14}
!49 = distinct !{!49, !14}
!50 = !{!16, !6, i64 440}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14}
!53 = !{!16, !6, i64 224}
!54 = distinct !{!54, !14, !55}
!55 = !{!"llvm.loop.unswitch.partial.disable"}
!56 = distinct !{!56, !14}
!57 = distinct !{!57, !44}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass