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

; 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::Indexlist" = type <{ ptr, ptr, i32, i32, i32, i32, i32, [4 x i8] }>
%"class.qpOASES::SparseMatrix" = type { ptr, i32, i32, ptr, ptr, ptr, ptr, %"class.qpOASES::Matrix.base" }
%"class.qpOASES::Matrix.base" = type <{ ptr, i32 }>

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

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef, double noundef, double noundef) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef, double noundef) #4

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZNK7qpOASES12SparseMatrix5timesEPKNS_9IndexlistES3_idPKdidPdiNS_11BooleanTypeE(ptr noundef nonnull align 8 dereferenceable(48) %0, ptr noundef %1, ptr noundef %2, i32 noundef %3, double noundef %4, ptr noundef %5, i32 noundef %6, double noundef %7, ptr noundef %8, i32 noundef %9, i32 noundef %10) unnamed_addr #5 align 2 {
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca double, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca double, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca double, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca double, align 8
  %35 = alloca ptr, align 8
  %36 = alloca double, align 8
  store ptr %0, ptr %13, align 8, !tbaa !5
  store ptr %1, ptr %14, align 8, !tbaa !5
  store ptr %2, ptr %15, align 8, !tbaa !5
  store i32 %3, ptr %16, align 4, !tbaa !9
  store double %4, ptr %17, align 8, !tbaa !11
  store ptr %5, ptr %18, align 8, !tbaa !5
  store i32 %6, ptr %19, align 4, !tbaa !9
  store double %7, ptr %20, align 8, !tbaa !11
  store ptr %8, ptr %21, align 8, !tbaa !5
  store i32 %9, ptr %22, align 4, !tbaa !9
  store i32 %10, ptr %23, align 4, !tbaa !13
  %37 = load ptr, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %38 = load double, ptr %17, align 8, !tbaa !11
  %39 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %38, double noundef 0.000000e+00, double noundef 1.000000e-25)
  %40 = icmp eq i32 %39, 1
  br i1 %40, label %41, label %311

41:                                               ; preds = %11
  %42 = load i32, ptr %23, align 4, !tbaa !13
  %43 = icmp eq i32 %42, 1
  br i1 %43, label %44, label %165

44:                                               ; preds = %41
  %45 = load double, ptr %20, align 8, !tbaa !11
  %46 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %45, double noundef 1.000000e-25)
  %47 = icmp eq i32 %46, 1
  br i1 %47, label %48, label %79

48:                                               ; preds = %44
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %49

49:                                               ; preds = %75, %48
  %50 = load i64, ptr %26, align 8, !tbaa !15
  %51 = load i32, ptr %16, align 4, !tbaa !9
  %52 = sext i32 %51 to i64
  %53 = icmp slt i64 %50, %52
  br i1 %53, label %54, label %78

54:                                               ; preds = %49
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %55

55:                                               ; preds = %71, %54
  %56 = load i64, ptr %25, align 8, !tbaa !15
  %57 = load ptr, ptr %14, align 8, !tbaa !5
  %58 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %57, i32 0, i32 2
  %59 = load i32, ptr %58, align 8, !tbaa !17
  %60 = sext i32 %59 to i64
  %61 = icmp slt i64 %56, %60
  br i1 %61, label %62, label %74

62:                                               ; preds = %55
  %63 = load ptr, ptr %21, align 8, !tbaa !5
  %64 = load i64, ptr %25, align 8, !tbaa !15
  %65 = load i64, ptr %26, align 8, !tbaa !15
  %66 = load i32, ptr %22, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = mul nsw i64 %65, %67
  %69 = add nsw i64 %64, %68
  %70 = getelementptr inbounds double, ptr %63, i64 %69
  store double 0.000000e+00, ptr %70, align 8, !tbaa !11
  br label %71

71:                                               ; preds = %62
  %72 = load i64, ptr %25, align 8, !tbaa !15
  %73 = add nsw i64 %72, 1
  store i64 %73, ptr %25, align 8, !tbaa !15
  br label %55, !llvm.loop !19

74:                                               ; preds = %55
  br label %75

75:                                               ; preds = %74
  %76 = load i64, ptr %26, align 8, !tbaa !15
  %77 = add nsw i64 %76, 1
  store i64 %77, ptr %26, align 8, !tbaa !15
  br label %49, !llvm.loop !21

78:                                               ; preds = %49
  br label %164

79:                                               ; preds = %44
  %80 = load double, ptr %20, align 8, !tbaa !11
  %81 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %80, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %82 = icmp eq i32 %81, 1
  br i1 %82, label %83, label %124

83:                                               ; preds = %79
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %84

84:                                               ; preds = %120, %83
  %85 = load i64, ptr %26, align 8, !tbaa !15
  %86 = load i32, ptr %16, align 4, !tbaa !9
  %87 = sext i32 %86 to i64
  %88 = icmp slt i64 %85, %87
  br i1 %88, label %89, label %123

89:                                               ; preds = %84
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %90

90:                                               ; preds = %116, %89
  %91 = load i64, ptr %25, align 8, !tbaa !15
  %92 = load ptr, ptr %14, align 8, !tbaa !5
  %93 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %92, i32 0, i32 2
  %94 = load i32, ptr %93, align 8, !tbaa !17
  %95 = sext i32 %94 to i64
  %96 = icmp slt i64 %91, %95
  br i1 %96, label %97, label %119

97:                                               ; preds = %90
  %98 = load ptr, ptr %21, align 8, !tbaa !5
  %99 = load i64, ptr %25, align 8, !tbaa !15
  %100 = load i64, ptr %26, align 8, !tbaa !15
  %101 = load i32, ptr %22, align 4, !tbaa !9
  %102 = sext i32 %101 to i64
  %103 = mul nsw i64 %100, %102
  %104 = add nsw i64 %99, %103
  %105 = getelementptr inbounds double, ptr %98, i64 %104
  %106 = load double, ptr %105, align 8, !tbaa !11
  %107 = fneg double %106
  %108 = load ptr, ptr %21, align 8, !tbaa !5
  %109 = load i64, ptr %25, align 8, !tbaa !15
  %110 = load i64, ptr %26, align 8, !tbaa !15
  %111 = load i32, ptr %22, align 4, !tbaa !9
  %112 = sext i32 %111 to i64
  %113 = mul nsw i64 %110, %112
  %114 = add nsw i64 %109, %113
  %115 = getelementptr inbounds double, ptr %108, i64 %114
  store double %107, ptr %115, align 8, !tbaa !11
  br label %116

116:                                              ; preds = %97
  %117 = load i64, ptr %25, align 8, !tbaa !15
  %118 = add nsw i64 %117, 1
  store i64 %118, ptr %25, align 8, !tbaa !15
  br label %90, !llvm.loop !22

119:                                              ; preds = %90
  br label %120

120:                                              ; preds = %119
  %121 = load i64, ptr %26, align 8, !tbaa !15
  %122 = add nsw i64 %121, 1
  store i64 %122, ptr %26, align 8, !tbaa !15
  br label %84, !llvm.loop !23

123:                                              ; preds = %84
  br label %163

124:                                              ; preds = %79
  %125 = load double, ptr %20, align 8, !tbaa !11
  %126 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %125, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %127 = icmp eq i32 %126, 0
  br i1 %127, label %128, label %162

128:                                              ; preds = %124
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %129

129:                                              ; preds = %158, %128
  %130 = load i64, ptr %26, align 8, !tbaa !15
  %131 = load i32, ptr %16, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = icmp slt i64 %130, %132
  br i1 %133, label %134, label %161

134:                                              ; preds = %129
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %135

135:                                              ; preds = %154, %134
  %136 = load i64, ptr %25, align 8, !tbaa !15
  %137 = load ptr, ptr %14, align 8, !tbaa !5
  %138 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %137, i32 0, i32 2
  %139 = load i32, ptr %138, align 8, !tbaa !17
  %140 = sext i32 %139 to i64
  %141 = icmp slt i64 %136, %140
  br i1 %141, label %142, label %157

142:                                              ; preds = %135
  %143 = load double, ptr %20, align 8, !tbaa !11
  %144 = load ptr, ptr %21, align 8, !tbaa !5
  %145 = load i64, ptr %25, align 8, !tbaa !15
  %146 = load i64, ptr %26, align 8, !tbaa !15
  %147 = load i32, ptr %22, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = mul nsw i64 %146, %148
  %150 = add nsw i64 %145, %149
  %151 = getelementptr inbounds double, ptr %144, i64 %150
  %152 = load double, ptr %151, align 8, !tbaa !11
  %153 = fmul double %152, %143
  store double %153, ptr %151, align 8, !tbaa !11
  br label %154

154:                                              ; preds = %142
  %155 = load i64, ptr %25, align 8, !tbaa !15
  %156 = add nsw i64 %155, 1
  store i64 %156, ptr %25, align 8, !tbaa !15
  br label %135, !llvm.loop !24

157:                                              ; preds = %135
  br label %158

158:                                              ; preds = %157
  %159 = load i64, ptr %26, align 8, !tbaa !15
  %160 = add nsw i64 %159, 1
  store i64 %160, ptr %26, align 8, !tbaa !15
  br label %129, !llvm.loop !25

161:                                              ; preds = %129
  br label %162

162:                                              ; preds = %161, %124
  br label %163

163:                                              ; preds = %162, %123
  br label %164

164:                                              ; preds = %163, %78
  br label %310

165:                                              ; preds = %41
  %166 = load double, ptr %20, align 8, !tbaa !11
  %167 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %166, double noundef 1.000000e-25)
  %168 = icmp eq i32 %167, 1
  br i1 %168, label %169, label %206

169:                                              ; preds = %165
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %170

170:                                              ; preds = %202, %169
  %171 = load i64, ptr %26, align 8, !tbaa !15
  %172 = load i32, ptr %16, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = icmp slt i64 %171, %173
  br i1 %174, label %175, label %205

175:                                              ; preds = %170
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %176

176:                                              ; preds = %198, %175
  %177 = load i64, ptr %25, align 8, !tbaa !15
  %178 = load ptr, ptr %14, align 8, !tbaa !5
  %179 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %178, i32 0, i32 2
  %180 = load i32, ptr %179, align 8, !tbaa !17
  %181 = sext i32 %180 to i64
  %182 = icmp slt i64 %177, %181
  br i1 %182, label %183, label %201

183:                                              ; preds = %176
  %184 = load ptr, ptr %21, align 8, !tbaa !5
  %185 = load ptr, ptr %14, align 8, !tbaa !5
  %186 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %185, i32 0, i32 0
  %187 = load ptr, ptr %186, align 8, !tbaa !26
  %188 = load i64, ptr %25, align 8, !tbaa !15
  %189 = getelementptr inbounds i32, ptr %187, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = load i64, ptr %26, align 8, !tbaa !15
  %193 = load i32, ptr %22, align 4, !tbaa !9
  %194 = sext i32 %193 to i64
  %195 = mul nsw i64 %192, %194
  %196 = add nsw i64 %191, %195
  %197 = getelementptr inbounds double, ptr %184, i64 %196
  store double 0.000000e+00, ptr %197, align 8, !tbaa !11
  br label %198

198:                                              ; preds = %183
  %199 = load i64, ptr %25, align 8, !tbaa !15
  %200 = add nsw i64 %199, 1
  store i64 %200, ptr %25, align 8, !tbaa !15
  br label %176, !llvm.loop !27

201:                                              ; preds = %176
  br label %202

202:                                              ; preds = %201
  %203 = load i64, ptr %26, align 8, !tbaa !15
  %204 = add nsw i64 %203, 1
  store i64 %204, ptr %26, align 8, !tbaa !15
  br label %170, !llvm.loop !28

205:                                              ; preds = %170
  br label %309

206:                                              ; preds = %165
  %207 = load double, ptr %20, align 8, !tbaa !11
  %208 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %207, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %209 = icmp eq i32 %208, 1
  br i1 %209, label %210, label %263

210:                                              ; preds = %206
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %211

211:                                              ; preds = %259, %210
  %212 = load i64, ptr %26, align 8, !tbaa !15
  %213 = load i32, ptr %16, align 4, !tbaa !9
  %214 = sext i32 %213 to i64
  %215 = icmp slt i64 %212, %214
  br i1 %215, label %216, label %262

216:                                              ; preds = %211
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %217

217:                                              ; preds = %255, %216
  %218 = load i64, ptr %25, align 8, !tbaa !15
  %219 = load ptr, ptr %14, align 8, !tbaa !5
  %220 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %219, i32 0, i32 2
  %221 = load i32, ptr %220, align 8, !tbaa !17
  %222 = sext i32 %221 to i64
  %223 = icmp slt i64 %218, %222
  br i1 %223, label %224, label %258

224:                                              ; preds = %217
  %225 = load ptr, ptr %21, align 8, !tbaa !5
  %226 = load ptr, ptr %14, align 8, !tbaa !5
  %227 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %226, i32 0, i32 0
  %228 = load ptr, ptr %227, align 8, !tbaa !26
  %229 = load i64, ptr %25, align 8, !tbaa !15
  %230 = getelementptr inbounds i32, ptr %228, i64 %229
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = sext i32 %231 to i64
  %233 = load i64, ptr %26, align 8, !tbaa !15
  %234 = load i32, ptr %22, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = mul nsw i64 %233, %235
  %237 = add nsw i64 %232, %236
  %238 = getelementptr inbounds double, ptr %225, i64 %237
  %239 = load double, ptr %238, align 8, !tbaa !11
  %240 = fneg double %239
  %241 = load ptr, ptr %21, align 8, !tbaa !5
  %242 = load ptr, ptr %14, align 8, !tbaa !5
  %243 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %242, i32 0, i32 0
  %244 = load ptr, ptr %243, align 8, !tbaa !26
  %245 = load i64, ptr %25, align 8, !tbaa !15
  %246 = getelementptr inbounds i32, ptr %244, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !9
  %248 = sext i32 %247 to i64
  %249 = load i64, ptr %26, align 8, !tbaa !15
  %250 = load i32, ptr %22, align 4, !tbaa !9
  %251 = sext i32 %250 to i64
  %252 = mul nsw i64 %249, %251
  %253 = add nsw i64 %248, %252
  %254 = getelementptr inbounds double, ptr %241, i64 %253
  store double %240, ptr %254, align 8, !tbaa !11
  br label %255

255:                                              ; preds = %224
  %256 = load i64, ptr %25, align 8, !tbaa !15
  %257 = add nsw i64 %256, 1
  store i64 %257, ptr %25, align 8, !tbaa !15
  br label %217, !llvm.loop !29

258:                                              ; preds = %217
  br label %259

259:                                              ; preds = %258
  %260 = load i64, ptr %26, align 8, !tbaa !15
  %261 = add nsw i64 %260, 1
  store i64 %261, ptr %26, align 8, !tbaa !15
  br label %211, !llvm.loop !30

262:                                              ; preds = %211
  br label %308

263:                                              ; preds = %206
  %264 = load double, ptr %20, align 8, !tbaa !11
  %265 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %264, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %266 = icmp eq i32 %265, 0
  br i1 %266, label %267, label %307

267:                                              ; preds = %263
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %268

268:                                              ; preds = %303, %267
  %269 = load i64, ptr %26, align 8, !tbaa !15
  %270 = load i32, ptr %16, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = icmp slt i64 %269, %271
  br i1 %272, label %273, label %306

273:                                              ; preds = %268
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %274

274:                                              ; preds = %299, %273
  %275 = load i64, ptr %25, align 8, !tbaa !15
  %276 = load ptr, ptr %14, align 8, !tbaa !5
  %277 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %276, i32 0, i32 2
  %278 = load i32, ptr %277, align 8, !tbaa !17
  %279 = sext i32 %278 to i64
  %280 = icmp slt i64 %275, %279
  br i1 %280, label %281, label %302

281:                                              ; preds = %274
  %282 = load double, ptr %20, align 8, !tbaa !11
  %283 = load ptr, ptr %21, align 8, !tbaa !5
  %284 = load ptr, ptr %14, align 8, !tbaa !5
  %285 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %284, i32 0, i32 0
  %286 = load ptr, ptr %285, align 8, !tbaa !26
  %287 = load i64, ptr %25, align 8, !tbaa !15
  %288 = getelementptr inbounds i32, ptr %286, i64 %287
  %289 = load i32, ptr %288, align 4, !tbaa !9
  %290 = sext i32 %289 to i64
  %291 = load i64, ptr %26, align 8, !tbaa !15
  %292 = load i32, ptr %22, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = mul nsw i64 %291, %293
  %295 = add nsw i64 %290, %294
  %296 = getelementptr inbounds double, ptr %283, i64 %295
  %297 = load double, ptr %296, align 8, !tbaa !11
  %298 = fmul double %297, %282
  store double %298, ptr %296, align 8, !tbaa !11
  br label %299

299:                                              ; preds = %281
  %300 = load i64, ptr %25, align 8, !tbaa !15
  %301 = add nsw i64 %300, 1
  store i64 %301, ptr %25, align 8, !tbaa !15
  br label %274, !llvm.loop !31

302:                                              ; preds = %274
  br label %303

303:                                              ; preds = %302
  %304 = load i64, ptr %26, align 8, !tbaa !15
  %305 = add nsw i64 %304, 1
  store i64 %305, ptr %26, align 8, !tbaa !15
  br label %268, !llvm.loop !32

306:                                              ; preds = %268
  br label %307

307:                                              ; preds = %306, %263
  br label %308

308:                                              ; preds = %307, %262
  br label %309

309:                                              ; preds = %308, %205
  br label %310

310:                                              ; preds = %309, %164
  store i32 0, ptr %12, align 4
  store i32 1, ptr %30, align 4
  br label %1226

311:                                              ; preds = %11
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %312 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 1
  %313 = load i32, ptr %312, align 8, !tbaa !33
  store i32 %313, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %314 = load i32, ptr %16, align 4, !tbaa !9
  %315 = load i32, ptr %31, align 4, !tbaa !9
  %316 = mul nsw i32 %314, %315
  %317 = sext i32 %316 to i64
  %318 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %317, i64 8)
  %319 = extractvalue { i64, i1 } %318, 1
  %320 = extractvalue { i64, i1 } %318, 0
  %321 = select i1 %319, i64 -1, i64 %320
  %322 = call noalias noundef nonnull ptr @_Znam(i64 noundef %321) #7
  store ptr %322, ptr %32, align 8, !tbaa !5
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %323

323:                                              ; preds = %334, %311
  %324 = load i64, ptr %26, align 8, !tbaa !15
  %325 = load i32, ptr %16, align 4, !tbaa !9
  %326 = load i32, ptr %31, align 4, !tbaa !9
  %327 = mul nsw i32 %325, %326
  %328 = sext i32 %327 to i64
  %329 = icmp slt i64 %324, %328
  br i1 %329, label %330, label %337

330:                                              ; preds = %323
  %331 = load ptr, ptr %32, align 8, !tbaa !5
  %332 = load i64, ptr %26, align 8, !tbaa !15
  %333 = getelementptr inbounds double, ptr %331, i64 %332
  store double 0.000000e+00, ptr %333, align 8, !tbaa !11
  br label %334

334:                                              ; preds = %330
  %335 = load i64, ptr %26, align 8, !tbaa !15
  %336 = add nsw i64 %335, 1
  store i64 %336, ptr %26, align 8, !tbaa !15
  br label %323, !llvm.loop !35

337:                                              ; preds = %323
  %338 = load ptr, ptr %15, align 8, !tbaa !5
  %339 = icmp ne ptr %338, null
  br i1 %339, label %340, label %544

340:                                              ; preds = %337
  %341 = load i32, ptr %16, align 4, !tbaa !9
  %342 = icmp eq i32 %341, 1
  br i1 %342, label %343, label %416

343:                                              ; preds = %340
  store i64 0, ptr %27, align 8, !tbaa !15
  br label %344

344:                                              ; preds = %412, %343
  %345 = load i64, ptr %27, align 8, !tbaa !15
  %346 = load ptr, ptr %15, align 8, !tbaa !5
  %347 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %346, i32 0, i32 2
  %348 = load i32, ptr %347, align 8, !tbaa !17
  %349 = sext i32 %348 to i64
  %350 = icmp slt i64 %345, %349
  br i1 %350, label %351, label %415

351:                                              ; preds = %344
  %352 = load ptr, ptr %15, align 8, !tbaa !5
  %353 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %352, i32 0, i32 1
  %354 = load ptr, ptr %353, align 8, !tbaa !36
  %355 = load i64, ptr %27, align 8, !tbaa !15
  %356 = getelementptr inbounds i32, ptr %354, i64 %355
  %357 = load i32, ptr %356, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  store i64 %358, ptr %28, align 8, !tbaa !15
  %359 = load ptr, ptr %18, align 8, !tbaa !5
  %360 = load i64, ptr %28, align 8, !tbaa !15
  %361 = getelementptr inbounds double, ptr %359, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !11
  store double %362, ptr %29, align 8, !tbaa !11
  %363 = load double, ptr %29, align 8, !tbaa !11
  %364 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %363, double noundef 1.000000e-25)
  %365 = icmp eq i32 %364, 0
  br i1 %365, label %366, label %411

366:                                              ; preds = %351
  %367 = load ptr, ptr %15, align 8, !tbaa !5
  %368 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %367, i32 0, i32 0
  %369 = load ptr, ptr %368, align 8, !tbaa !26
  %370 = load i64, ptr %28, align 8, !tbaa !15
  %371 = getelementptr inbounds i32, ptr %369, i64 %370
  %372 = load i32, ptr %371, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  store i64 %373, ptr %25, align 8, !tbaa !15
  %374 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %375 = load ptr, ptr %374, align 8, !tbaa !37
  %376 = load i64, ptr %25, align 8, !tbaa !15
  %377 = getelementptr inbounds i32, ptr %375, i64 %376
  %378 = load i32, ptr %377, align 4, !tbaa !9
  %379 = sext i32 %378 to i64
  store i64 %379, ptr %24, align 8, !tbaa !15
  br label %380

380:                                              ; preds = %407, %366
  %381 = load i64, ptr %24, align 8, !tbaa !15
  %382 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %383 = load ptr, ptr %382, align 8, !tbaa !37
  %384 = load i64, ptr %25, align 8, !tbaa !15
  %385 = add nsw i64 %384, 1
  %386 = getelementptr inbounds i32, ptr %383, i64 %385
  %387 = load i32, ptr %386, align 4, !tbaa !9
  %388 = sext i32 %387 to i64
  %389 = icmp slt i64 %381, %388
  br i1 %389, label %390, label %410

390:                                              ; preds = %380
  %391 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 6
  %392 = load ptr, ptr %391, align 8, !tbaa !38
  %393 = load i64, ptr %24, align 8, !tbaa !15
  %394 = getelementptr inbounds double, ptr %392, i64 %393
  %395 = load double, ptr %394, align 8, !tbaa !11
  %396 = load double, ptr %29, align 8, !tbaa !11
  %397 = load ptr, ptr %32, align 8, !tbaa !5
  %398 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 3
  %399 = load ptr, ptr %398, align 8, !tbaa !39
  %400 = load i64, ptr %24, align 8, !tbaa !15
  %401 = getelementptr inbounds i32, ptr %399, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !9
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds double, ptr %397, i64 %403
  %405 = load double, ptr %404, align 8, !tbaa !11
  %406 = call double @llvm.fmuladd.f64(double %395, double %396, double %405)
  store double %406, ptr %404, align 8, !tbaa !11
  br label %407

407:                                              ; preds = %390
  %408 = load i64, ptr %24, align 8, !tbaa !15
  %409 = add nsw i64 %408, 1
  store i64 %409, ptr %24, align 8, !tbaa !15
  br label %380, !llvm.loop !40

410:                                              ; preds = %380
  br label %411

411:                                              ; preds = %410, %351
  br label %412

412:                                              ; preds = %411
  %413 = load i64, ptr %27, align 8, !tbaa !15
  %414 = add nsw i64 %413, 1
  store i64 %414, ptr %27, align 8, !tbaa !15
  br label %344, !llvm.loop !41

415:                                              ; preds = %344
  br label %543

416:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %417 = load i32, ptr %16, align 4, !tbaa !9
  %418 = sext i32 %417 to i64
  %419 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %418, i64 8)
  %420 = extractvalue { i64, i1 } %419, 1
  %421 = extractvalue { i64, i1 } %419, 0
  %422 = select i1 %420, i64 -1, i64 %421
  %423 = call noalias noundef nonnull ptr @_Znam(i64 noundef %422) #7
  store ptr %423, ptr %33, align 8, !tbaa !5
  store i64 0, ptr %27, align 8, !tbaa !15
  br label %424

424:                                              ; preds = %535, %416
  %425 = load i64, ptr %27, align 8, !tbaa !15
  %426 = load ptr, ptr %15, align 8, !tbaa !5
  %427 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %426, i32 0, i32 2
  %428 = load i32, ptr %427, align 8, !tbaa !17
  %429 = sext i32 %428 to i64
  %430 = icmp slt i64 %425, %429
  br i1 %430, label %431, label %538

431:                                              ; preds = %424
  %432 = load ptr, ptr %15, align 8, !tbaa !5
  %433 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %432, i32 0, i32 1
  %434 = load ptr, ptr %433, align 8, !tbaa !36
  %435 = load i64, ptr %27, align 8, !tbaa !15
  %436 = getelementptr inbounds i32, ptr %434, i64 %435
  %437 = load i32, ptr %436, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  store i64 %438, ptr %28, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  store double 0.000000e+00, ptr %34, align 8, !tbaa !11
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %439

439:                                              ; preds = %464, %431
  %440 = load i64, ptr %26, align 8, !tbaa !15
  %441 = load i32, ptr %16, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = icmp slt i64 %440, %442
  br i1 %443, label %444, label %467

444:                                              ; preds = %439
  %445 = load ptr, ptr %18, align 8, !tbaa !5
  %446 = load i64, ptr %26, align 8, !tbaa !15
  %447 = load i32, ptr %19, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  %449 = mul nsw i64 %446, %448
  %450 = load i64, ptr %28, align 8, !tbaa !15
  %451 = add nsw i64 %449, %450
  %452 = getelementptr inbounds double, ptr %445, i64 %451
  %453 = load double, ptr %452, align 8, !tbaa !11
  %454 = load ptr, ptr %33, align 8, !tbaa !5
  %455 = load i64, ptr %26, align 8, !tbaa !15
  %456 = getelementptr inbounds double, ptr %454, i64 %455
  store double %453, ptr %456, align 8, !tbaa !11
  %457 = load double, ptr %34, align 8, !tbaa !11
  %458 = load ptr, ptr %33, align 8, !tbaa !5
  %459 = load i64, ptr %26, align 8, !tbaa !15
  %460 = getelementptr inbounds double, ptr %458, i64 %459
  %461 = load double, ptr %460, align 8, !tbaa !11
  %462 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %461)
  %463 = call noundef double @_ZN7qpOASES6getMaxEdd(double noundef %457, double noundef %462)
  store double %463, ptr %34, align 8, !tbaa !11
  br label %464

464:                                              ; preds = %444
  %465 = load i64, ptr %26, align 8, !tbaa !15
  %466 = add nsw i64 %465, 1
  store i64 %466, ptr %26, align 8, !tbaa !15
  br label %439, !llvm.loop !42

467:                                              ; preds = %439
  %468 = load double, ptr %34, align 8, !tbaa !11
  %469 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %468, double noundef 1.000000e-25)
  %470 = icmp eq i32 %469, 0
  br i1 %470, label %471, label %534

471:                                              ; preds = %467
  %472 = load ptr, ptr %15, align 8, !tbaa !5
  %473 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %472, i32 0, i32 0
  %474 = load ptr, ptr %473, align 8, !tbaa !26
  %475 = load i64, ptr %28, align 8, !tbaa !15
  %476 = getelementptr inbounds i32, ptr %474, i64 %475
  %477 = load i32, ptr %476, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  store i64 %478, ptr %25, align 8, !tbaa !15
  %479 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %480 = load ptr, ptr %479, align 8, !tbaa !37
  %481 = load i64, ptr %25, align 8, !tbaa !15
  %482 = getelementptr inbounds i32, ptr %480, i64 %481
  %483 = load i32, ptr %482, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  store i64 %484, ptr %24, align 8, !tbaa !15
  br label %485

485:                                              ; preds = %530, %471
  %486 = load i64, ptr %24, align 8, !tbaa !15
  %487 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %488 = load ptr, ptr %487, align 8, !tbaa !37
  %489 = load i64, ptr %25, align 8, !tbaa !15
  %490 = add nsw i64 %489, 1
  %491 = getelementptr inbounds i32, ptr %488, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !9
  %493 = sext i32 %492 to i64
  %494 = icmp slt i64 %486, %493
  br i1 %494, label %495, label %533

495:                                              ; preds = %485
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %496

496:                                              ; preds = %526, %495
  %497 = load i64, ptr %26, align 8, !tbaa !15
  %498 = load i32, ptr %16, align 4, !tbaa !9
  %499 = sext i32 %498 to i64
  %500 = icmp slt i64 %497, %499
  br i1 %500, label %501, label %529

501:                                              ; preds = %496
  %502 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 6
  %503 = load ptr, ptr %502, align 8, !tbaa !38
  %504 = load i64, ptr %24, align 8, !tbaa !15
  %505 = getelementptr inbounds double, ptr %503, i64 %504
  %506 = load double, ptr %505, align 8, !tbaa !11
  %507 = load ptr, ptr %33, align 8, !tbaa !5
  %508 = load i64, ptr %26, align 8, !tbaa !15
  %509 = getelementptr inbounds double, ptr %507, i64 %508
  %510 = load double, ptr %509, align 8, !tbaa !11
  %511 = load ptr, ptr %32, align 8, !tbaa !5
  %512 = load i64, ptr %26, align 8, !tbaa !15
  %513 = load i32, ptr %31, align 4, !tbaa !9
  %514 = sext i32 %513 to i64
  %515 = mul nsw i64 %512, %514
  %516 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 3
  %517 = load ptr, ptr %516, align 8, !tbaa !39
  %518 = load i64, ptr %24, align 8, !tbaa !15
  %519 = getelementptr inbounds i32, ptr %517, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = add nsw i64 %515, %521
  %523 = getelementptr inbounds double, ptr %511, i64 %522
  %524 = load double, ptr %523, align 8, !tbaa !11
  %525 = call double @llvm.fmuladd.f64(double %506, double %510, double %524)
  store double %525, ptr %523, align 8, !tbaa !11
  br label %526

526:                                              ; preds = %501
  %527 = load i64, ptr %26, align 8, !tbaa !15
  %528 = add nsw i64 %527, 1
  store i64 %528, ptr %26, align 8, !tbaa !15
  br label %496, !llvm.loop !43

529:                                              ; preds = %496
  br label %530

530:                                              ; preds = %529
  %531 = load i64, ptr %24, align 8, !tbaa !15
  %532 = add nsw i64 %531, 1
  store i64 %532, ptr %24, align 8, !tbaa !15
  br label %485, !llvm.loop !44

533:                                              ; preds = %485
  br label %534

534:                                              ; preds = %533, %467
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %535

535:                                              ; preds = %534
  %536 = load i64, ptr %27, align 8, !tbaa !15
  %537 = add nsw i64 %536, 1
  store i64 %537, ptr %27, align 8, !tbaa !15
  br label %424, !llvm.loop !45

538:                                              ; preds = %424
  %539 = load ptr, ptr %33, align 8, !tbaa !5
  %540 = icmp eq ptr %539, null
  br i1 %540, label %542, label %541

541:                                              ; preds = %538
  call void @_ZdaPv(ptr noundef %539) #8
  br label %542

542:                                              ; preds = %541, %538
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %543

543:                                              ; preds = %542, %415
  br label %718

544:                                              ; preds = %337
  %545 = load i32, ptr %16, align 4, !tbaa !9
  %546 = icmp eq i32 %545, 1
  br i1 %546, label %547, label %605

547:                                              ; preds = %544
  store i64 0, ptr %28, align 8, !tbaa !15
  br label %548

548:                                              ; preds = %601, %547
  %549 = load i64, ptr %28, align 8, !tbaa !15
  %550 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 2
  %551 = load i32, ptr %550, align 4, !tbaa !46
  %552 = sext i32 %551 to i64
  %553 = icmp slt i64 %549, %552
  br i1 %553, label %554, label %604

554:                                              ; preds = %548
  %555 = load ptr, ptr %18, align 8, !tbaa !5
  %556 = load i64, ptr %28, align 8, !tbaa !15
  %557 = getelementptr inbounds double, ptr %555, i64 %556
  %558 = load double, ptr %557, align 8, !tbaa !11
  store double %558, ptr %29, align 8, !tbaa !11
  %559 = load double, ptr %29, align 8, !tbaa !11
  %560 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %559, double noundef 1.000000e-25)
  %561 = icmp eq i32 %560, 0
  br i1 %561, label %562, label %600

562:                                              ; preds = %554
  %563 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %564 = load ptr, ptr %563, align 8, !tbaa !37
  %565 = load i64, ptr %28, align 8, !tbaa !15
  %566 = getelementptr inbounds i32, ptr %564, i64 %565
  %567 = load i32, ptr %566, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  store i64 %568, ptr %24, align 8, !tbaa !15
  br label %569

569:                                              ; preds = %596, %562
  %570 = load i64, ptr %24, align 8, !tbaa !15
  %571 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %572 = load ptr, ptr %571, align 8, !tbaa !37
  %573 = load i64, ptr %28, align 8, !tbaa !15
  %574 = add nsw i64 %573, 1
  %575 = getelementptr inbounds i32, ptr %572, i64 %574
  %576 = load i32, ptr %575, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = icmp slt i64 %570, %577
  br i1 %578, label %579, label %599

579:                                              ; preds = %569
  %580 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 6
  %581 = load ptr, ptr %580, align 8, !tbaa !38
  %582 = load i64, ptr %24, align 8, !tbaa !15
  %583 = getelementptr inbounds double, ptr %581, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !11
  %585 = load double, ptr %29, align 8, !tbaa !11
  %586 = load ptr, ptr %32, align 8, !tbaa !5
  %587 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 3
  %588 = load ptr, ptr %587, align 8, !tbaa !39
  %589 = load i64, ptr %24, align 8, !tbaa !15
  %590 = getelementptr inbounds i32, ptr %588, i64 %589
  %591 = load i32, ptr %590, align 4, !tbaa !9
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds double, ptr %586, i64 %592
  %594 = load double, ptr %593, align 8, !tbaa !11
  %595 = call double @llvm.fmuladd.f64(double %584, double %585, double %594)
  store double %595, ptr %593, align 8, !tbaa !11
  br label %596

596:                                              ; preds = %579
  %597 = load i64, ptr %24, align 8, !tbaa !15
  %598 = add nsw i64 %597, 1
  store i64 %598, ptr %24, align 8, !tbaa !15
  br label %569, !llvm.loop !47

599:                                              ; preds = %569
  br label %600

600:                                              ; preds = %599, %554
  br label %601

601:                                              ; preds = %600
  %602 = load i64, ptr %28, align 8, !tbaa !15
  %603 = add nsw i64 %602, 1
  store i64 %603, ptr %28, align 8, !tbaa !15
  br label %548, !llvm.loop !48

604:                                              ; preds = %548
  br label %717

605:                                              ; preds = %544
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %606 = load i32, ptr %16, align 4, !tbaa !9
  %607 = sext i32 %606 to i64
  %608 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %607, i64 8)
  %609 = extractvalue { i64, i1 } %608, 1
  %610 = extractvalue { i64, i1 } %608, 0
  %611 = select i1 %609, i64 -1, i64 %610
  %612 = call noalias noundef nonnull ptr @_Znam(i64 noundef %611) #7
  store ptr %612, ptr %35, align 8, !tbaa !5
  store i64 0, ptr %28, align 8, !tbaa !15
  br label %613

613:                                              ; preds = %713, %605
  %614 = load i64, ptr %28, align 8, !tbaa !15
  %615 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 2
  %616 = load i32, ptr %615, align 4, !tbaa !46
  %617 = sext i32 %616 to i64
  %618 = icmp slt i64 %614, %617
  br i1 %618, label %619, label %716

619:                                              ; preds = %613
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  store double 0.000000e+00, ptr %36, align 8, !tbaa !11
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %620

620:                                              ; preds = %645, %619
  %621 = load i64, ptr %26, align 8, !tbaa !15
  %622 = load i32, ptr %16, align 4, !tbaa !9
  %623 = sext i32 %622 to i64
  %624 = icmp slt i64 %621, %623
  br i1 %624, label %625, label %648

625:                                              ; preds = %620
  %626 = load ptr, ptr %18, align 8, !tbaa !5
  %627 = load i64, ptr %26, align 8, !tbaa !15
  %628 = load i32, ptr %19, align 4, !tbaa !9
  %629 = sext i32 %628 to i64
  %630 = mul nsw i64 %627, %629
  %631 = load i64, ptr %28, align 8, !tbaa !15
  %632 = add nsw i64 %630, %631
  %633 = getelementptr inbounds double, ptr %626, i64 %632
  %634 = load double, ptr %633, align 8, !tbaa !11
  %635 = load ptr, ptr %35, align 8, !tbaa !5
  %636 = load i64, ptr %26, align 8, !tbaa !15
  %637 = getelementptr inbounds double, ptr %635, i64 %636
  store double %634, ptr %637, align 8, !tbaa !11
  %638 = load double, ptr %36, align 8, !tbaa !11
  %639 = load ptr, ptr %35, align 8, !tbaa !5
  %640 = load i64, ptr %26, align 8, !tbaa !15
  %641 = getelementptr inbounds double, ptr %639, i64 %640
  %642 = load double, ptr %641, align 8, !tbaa !11
  %643 = call noundef double @_ZN7qpOASES6getAbsEd(double noundef %642)
  %644 = call noundef double @_ZN7qpOASES6getMaxEdd(double noundef %638, double noundef %643)
  store double %644, ptr %36, align 8, !tbaa !11
  br label %645

645:                                              ; preds = %625
  %646 = load i64, ptr %26, align 8, !tbaa !15
  %647 = add nsw i64 %646, 1
  store i64 %647, ptr %26, align 8, !tbaa !15
  br label %620, !llvm.loop !49

648:                                              ; preds = %620
  %649 = load double, ptr %36, align 8, !tbaa !11
  %650 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %649, double noundef 1.000000e-25)
  %651 = icmp eq i32 %650, 0
  br i1 %651, label %652, label %708

652:                                              ; preds = %648
  %653 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %654 = load ptr, ptr %653, align 8, !tbaa !37
  %655 = load i64, ptr %28, align 8, !tbaa !15
  %656 = getelementptr inbounds i32, ptr %654, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !9
  %658 = sext i32 %657 to i64
  store i64 %658, ptr %24, align 8, !tbaa !15
  br label %659

659:                                              ; preds = %704, %652
  %660 = load i64, ptr %24, align 8, !tbaa !15
  %661 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 4
  %662 = load ptr, ptr %661, align 8, !tbaa !37
  %663 = load i64, ptr %28, align 8, !tbaa !15
  %664 = add nsw i64 %663, 1
  %665 = getelementptr inbounds i32, ptr %662, i64 %664
  %666 = load i32, ptr %665, align 4, !tbaa !9
  %667 = sext i32 %666 to i64
  %668 = icmp slt i64 %660, %667
  br i1 %668, label %669, label %707

669:                                              ; preds = %659
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %670

670:                                              ; preds = %700, %669
  %671 = load i64, ptr %26, align 8, !tbaa !15
  %672 = load i32, ptr %16, align 4, !tbaa !9
  %673 = sext i32 %672 to i64
  %674 = icmp slt i64 %671, %673
  br i1 %674, label %675, label %703

675:                                              ; preds = %670
  %676 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 6
  %677 = load ptr, ptr %676, align 8, !tbaa !38
  %678 = load i64, ptr %24, align 8, !tbaa !15
  %679 = getelementptr inbounds double, ptr %677, i64 %678
  %680 = load double, ptr %679, align 8, !tbaa !11
  %681 = load ptr, ptr %35, align 8, !tbaa !5
  %682 = load i64, ptr %26, align 8, !tbaa !15
  %683 = getelementptr inbounds double, ptr %681, i64 %682
  %684 = load double, ptr %683, align 8, !tbaa !11
  %685 = load ptr, ptr %32, align 8, !tbaa !5
  %686 = load i64, ptr %26, align 8, !tbaa !15
  %687 = load i32, ptr %31, align 4, !tbaa !9
  %688 = sext i32 %687 to i64
  %689 = mul nsw i64 %686, %688
  %690 = getelementptr inbounds %"class.qpOASES::SparseMatrix", ptr %37, i32 0, i32 3
  %691 = load ptr, ptr %690, align 8, !tbaa !39
  %692 = load i64, ptr %24, align 8, !tbaa !15
  %693 = getelementptr inbounds i32, ptr %691, i64 %692
  %694 = load i32, ptr %693, align 4, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = add nsw i64 %689, %695
  %697 = getelementptr inbounds double, ptr %685, i64 %696
  %698 = load double, ptr %697, align 8, !tbaa !11
  %699 = call double @llvm.fmuladd.f64(double %680, double %684, double %698)
  store double %699, ptr %697, align 8, !tbaa !11
  br label %700

700:                                              ; preds = %675
  %701 = load i64, ptr %26, align 8, !tbaa !15
  %702 = add nsw i64 %701, 1
  store i64 %702, ptr %26, align 8, !tbaa !15
  br label %670, !llvm.loop !50

703:                                              ; preds = %670
  br label %704

704:                                              ; preds = %703
  %705 = load i64, ptr %24, align 8, !tbaa !15
  %706 = add nsw i64 %705, 1
  store i64 %706, ptr %24, align 8, !tbaa !15
  br label %659, !llvm.loop !51

707:                                              ; preds = %659
  br label %708

708:                                              ; preds = %707, %648
  %709 = load ptr, ptr %35, align 8, !tbaa !5
  %710 = icmp eq ptr %709, null
  br i1 %710, label %712, label %711

711:                                              ; preds = %708
  call void @_ZdaPv(ptr noundef %709) #8
  br label %712

712:                                              ; preds = %711, %708
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %713

713:                                              ; preds = %712
  %714 = load i64, ptr %28, align 8, !tbaa !15
  %715 = add nsw i64 %714, 1
  store i64 %715, ptr %28, align 8, !tbaa !15
  br label %613, !llvm.loop !52

716:                                              ; preds = %613
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %717

717:                                              ; preds = %716, %604
  br label %718

718:                                              ; preds = %717, %543
  %719 = load i32, ptr %23, align 4, !tbaa !13
  %720 = icmp eq i32 %719, 1
  br i1 %720, label %721, label %955

721:                                              ; preds = %718
  %722 = load double, ptr %20, align 8, !tbaa !11
  %723 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %722, double noundef 1.000000e-25)
  %724 = icmp eq i32 %723, 1
  br i1 %724, label %725, label %773

725:                                              ; preds = %721
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %726

726:                                              ; preds = %769, %725
  %727 = load i64, ptr %26, align 8, !tbaa !15
  %728 = load i32, ptr %16, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = icmp slt i64 %727, %729
  br i1 %730, label %731, label %772

731:                                              ; preds = %726
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %732

732:                                              ; preds = %765, %731
  %733 = load i64, ptr %25, align 8, !tbaa !15
  %734 = load ptr, ptr %14, align 8, !tbaa !5
  %735 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %734, i32 0, i32 2
  %736 = load i32, ptr %735, align 8, !tbaa !17
  %737 = sext i32 %736 to i64
  %738 = icmp slt i64 %733, %737
  br i1 %738, label %739, label %768

739:                                              ; preds = %732
  %740 = load double, ptr %17, align 8, !tbaa !11
  %741 = load ptr, ptr %32, align 8, !tbaa !5
  %742 = load ptr, ptr %14, align 8, !tbaa !5
  %743 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %742, i32 0, i32 0
  %744 = load ptr, ptr %743, align 8, !tbaa !26
  %745 = load i64, ptr %25, align 8, !tbaa !15
  %746 = getelementptr inbounds i32, ptr %744, i64 %745
  %747 = load i32, ptr %746, align 4, !tbaa !9
  %748 = sext i32 %747 to i64
  %749 = load i64, ptr %26, align 8, !tbaa !15
  %750 = load i32, ptr %31, align 4, !tbaa !9
  %751 = sext i32 %750 to i64
  %752 = mul nsw i64 %749, %751
  %753 = add nsw i64 %748, %752
  %754 = getelementptr inbounds double, ptr %741, i64 %753
  %755 = load double, ptr %754, align 8, !tbaa !11
  %756 = fmul double %740, %755
  %757 = load ptr, ptr %21, align 8, !tbaa !5
  %758 = load i64, ptr %25, align 8, !tbaa !15
  %759 = load i64, ptr %26, align 8, !tbaa !15
  %760 = load i32, ptr %22, align 4, !tbaa !9
  %761 = sext i32 %760 to i64
  %762 = mul nsw i64 %759, %761
  %763 = add nsw i64 %758, %762
  %764 = getelementptr inbounds double, ptr %757, i64 %763
  store double %756, ptr %764, align 8, !tbaa !11
  br label %765

765:                                              ; preds = %739
  %766 = load i64, ptr %25, align 8, !tbaa !15
  %767 = add nsw i64 %766, 1
  store i64 %767, ptr %25, align 8, !tbaa !15
  br label %732, !llvm.loop !53

768:                                              ; preds = %732
  br label %769

769:                                              ; preds = %768
  %770 = load i64, ptr %26, align 8, !tbaa !15
  %771 = add nsw i64 %770, 1
  store i64 %771, ptr %26, align 8, !tbaa !15
  br label %726, !llvm.loop !54

772:                                              ; preds = %726
  br label %954

773:                                              ; preds = %721
  %774 = load double, ptr %20, align 8, !tbaa !11
  %775 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %774, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %776 = icmp eq i32 %775, 1
  br i1 %776, label %777, label %826

777:                                              ; preds = %773
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %778

778:                                              ; preds = %822, %777
  %779 = load i64, ptr %26, align 8, !tbaa !15
  %780 = load i32, ptr %16, align 4, !tbaa !9
  %781 = sext i32 %780 to i64
  %782 = icmp slt i64 %779, %781
  br i1 %782, label %783, label %825

783:                                              ; preds = %778
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %784

784:                                              ; preds = %818, %783
  %785 = load i64, ptr %25, align 8, !tbaa !15
  %786 = load ptr, ptr %14, align 8, !tbaa !5
  %787 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %786, i32 0, i32 2
  %788 = load i32, ptr %787, align 8, !tbaa !17
  %789 = sext i32 %788 to i64
  %790 = icmp slt i64 %785, %789
  br i1 %790, label %791, label %821

791:                                              ; preds = %784
  %792 = load double, ptr %17, align 8, !tbaa !11
  %793 = load ptr, ptr %32, align 8, !tbaa !5
  %794 = load ptr, ptr %14, align 8, !tbaa !5
  %795 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %794, i32 0, i32 0
  %796 = load ptr, ptr %795, align 8, !tbaa !26
  %797 = load i64, ptr %25, align 8, !tbaa !15
  %798 = getelementptr inbounds i32, ptr %796, i64 %797
  %799 = load i32, ptr %798, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = load i64, ptr %26, align 8, !tbaa !15
  %802 = load i32, ptr %31, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = mul nsw i64 %801, %803
  %805 = add nsw i64 %800, %804
  %806 = getelementptr inbounds double, ptr %793, i64 %805
  %807 = load double, ptr %806, align 8, !tbaa !11
  %808 = load ptr, ptr %21, align 8, !tbaa !5
  %809 = load i64, ptr %25, align 8, !tbaa !15
  %810 = load i64, ptr %26, align 8, !tbaa !15
  %811 = load i32, ptr %22, align 4, !tbaa !9
  %812 = sext i32 %811 to i64
  %813 = mul nsw i64 %810, %812
  %814 = add nsw i64 %809, %813
  %815 = getelementptr inbounds double, ptr %808, i64 %814
  %816 = load double, ptr %815, align 8, !tbaa !11
  %817 = call double @llvm.fmuladd.f64(double %792, double %807, double %816)
  store double %817, ptr %815, align 8, !tbaa !11
  br label %818

818:                                              ; preds = %791
  %819 = load i64, ptr %25, align 8, !tbaa !15
  %820 = add nsw i64 %819, 1
  store i64 %820, ptr %25, align 8, !tbaa !15
  br label %784, !llvm.loop !55

821:                                              ; preds = %784
  br label %822

822:                                              ; preds = %821
  %823 = load i64, ptr %26, align 8, !tbaa !15
  %824 = add nsw i64 %823, 1
  store i64 %824, ptr %26, align 8, !tbaa !15
  br label %778, !llvm.loop !56

825:                                              ; preds = %778
  br label %953

826:                                              ; preds = %773
  %827 = load double, ptr %20, align 8, !tbaa !11
  %828 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %827, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %829 = icmp eq i32 %828, 1
  br i1 %829, label %830, label %888

830:                                              ; preds = %826
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %831

831:                                              ; preds = %884, %830
  %832 = load i64, ptr %26, align 8, !tbaa !15
  %833 = load i32, ptr %16, align 4, !tbaa !9
  %834 = sext i32 %833 to i64
  %835 = icmp slt i64 %832, %834
  br i1 %835, label %836, label %887

836:                                              ; preds = %831
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %837

837:                                              ; preds = %880, %836
  %838 = load i64, ptr %25, align 8, !tbaa !15
  %839 = load ptr, ptr %14, align 8, !tbaa !5
  %840 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %839, i32 0, i32 2
  %841 = load i32, ptr %840, align 8, !tbaa !17
  %842 = sext i32 %841 to i64
  %843 = icmp slt i64 %838, %842
  br i1 %843, label %844, label %883

844:                                              ; preds = %837
  %845 = load double, ptr %17, align 8, !tbaa !11
  %846 = load ptr, ptr %32, align 8, !tbaa !5
  %847 = load ptr, ptr %14, align 8, !tbaa !5
  %848 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %847, i32 0, i32 0
  %849 = load ptr, ptr %848, align 8, !tbaa !26
  %850 = load i64, ptr %25, align 8, !tbaa !15
  %851 = getelementptr inbounds i32, ptr %849, i64 %850
  %852 = load i32, ptr %851, align 4, !tbaa !9
  %853 = sext i32 %852 to i64
  %854 = load i64, ptr %26, align 8, !tbaa !15
  %855 = load i32, ptr %31, align 4, !tbaa !9
  %856 = sext i32 %855 to i64
  %857 = mul nsw i64 %854, %856
  %858 = add nsw i64 %853, %857
  %859 = getelementptr inbounds double, ptr %846, i64 %858
  %860 = load double, ptr %859, align 8, !tbaa !11
  %861 = load ptr, ptr %21, align 8, !tbaa !5
  %862 = load i64, ptr %25, align 8, !tbaa !15
  %863 = load i64, ptr %26, align 8, !tbaa !15
  %864 = load i32, ptr %22, align 4, !tbaa !9
  %865 = sext i32 %864 to i64
  %866 = mul nsw i64 %863, %865
  %867 = add nsw i64 %862, %866
  %868 = getelementptr inbounds double, ptr %861, i64 %867
  %869 = load double, ptr %868, align 8, !tbaa !11
  %870 = fneg double %869
  %871 = call double @llvm.fmuladd.f64(double %845, double %860, double %870)
  %872 = load ptr, ptr %21, align 8, !tbaa !5
  %873 = load i64, ptr %25, align 8, !tbaa !15
  %874 = load i64, ptr %26, align 8, !tbaa !15
  %875 = load i32, ptr %22, align 4, !tbaa !9
  %876 = sext i32 %875 to i64
  %877 = mul nsw i64 %874, %876
  %878 = add nsw i64 %873, %877
  %879 = getelementptr inbounds double, ptr %872, i64 %878
  store double %871, ptr %879, align 8, !tbaa !11
  br label %880

880:                                              ; preds = %844
  %881 = load i64, ptr %25, align 8, !tbaa !15
  %882 = add nsw i64 %881, 1
  store i64 %882, ptr %25, align 8, !tbaa !15
  br label %837, !llvm.loop !57

883:                                              ; preds = %837
  br label %884

884:                                              ; preds = %883
  %885 = load i64, ptr %26, align 8, !tbaa !15
  %886 = add nsw i64 %885, 1
  store i64 %886, ptr %26, align 8, !tbaa !15
  br label %831, !llvm.loop !58

887:                                              ; preds = %831
  br label %952

888:                                              ; preds = %826
  %889 = load double, ptr %20, align 8, !tbaa !11
  %890 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %889, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %891 = icmp eq i32 %890, 0
  br i1 %891, label %892, label %951

892:                                              ; preds = %888
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %893

893:                                              ; preds = %947, %892
  %894 = load i64, ptr %26, align 8, !tbaa !15
  %895 = load i32, ptr %16, align 4, !tbaa !9
  %896 = sext i32 %895 to i64
  %897 = icmp slt i64 %894, %896
  br i1 %897, label %898, label %950

898:                                              ; preds = %893
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %899

899:                                              ; preds = %943, %898
  %900 = load i64, ptr %25, align 8, !tbaa !15
  %901 = load ptr, ptr %14, align 8, !tbaa !5
  %902 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %901, i32 0, i32 2
  %903 = load i32, ptr %902, align 8, !tbaa !17
  %904 = sext i32 %903 to i64
  %905 = icmp slt i64 %900, %904
  br i1 %905, label %906, label %946

906:                                              ; preds = %899
  %907 = load double, ptr %17, align 8, !tbaa !11
  %908 = load ptr, ptr %32, align 8, !tbaa !5
  %909 = load ptr, ptr %14, align 8, !tbaa !5
  %910 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %909, i32 0, i32 0
  %911 = load ptr, ptr %910, align 8, !tbaa !26
  %912 = load i64, ptr %25, align 8, !tbaa !15
  %913 = getelementptr inbounds i32, ptr %911, i64 %912
  %914 = load i32, ptr %913, align 4, !tbaa !9
  %915 = sext i32 %914 to i64
  %916 = load i64, ptr %26, align 8, !tbaa !15
  %917 = load i32, ptr %31, align 4, !tbaa !9
  %918 = sext i32 %917 to i64
  %919 = mul nsw i64 %916, %918
  %920 = add nsw i64 %915, %919
  %921 = getelementptr inbounds double, ptr %908, i64 %920
  %922 = load double, ptr %921, align 8, !tbaa !11
  %923 = load double, ptr %20, align 8, !tbaa !11
  %924 = load ptr, ptr %21, align 8, !tbaa !5
  %925 = load i64, ptr %25, align 8, !tbaa !15
  %926 = load i64, ptr %26, align 8, !tbaa !15
  %927 = load i32, ptr %22, align 4, !tbaa !9
  %928 = sext i32 %927 to i64
  %929 = mul nsw i64 %926, %928
  %930 = add nsw i64 %925, %929
  %931 = getelementptr inbounds double, ptr %924, i64 %930
  %932 = load double, ptr %931, align 8, !tbaa !11
  %933 = fmul double %923, %932
  %934 = call double @llvm.fmuladd.f64(double %907, double %922, double %933)
  %935 = load ptr, ptr %21, align 8, !tbaa !5
  %936 = load i64, ptr %25, align 8, !tbaa !15
  %937 = load i64, ptr %26, align 8, !tbaa !15
  %938 = load i32, ptr %22, align 4, !tbaa !9
  %939 = sext i32 %938 to i64
  %940 = mul nsw i64 %937, %939
  %941 = add nsw i64 %936, %940
  %942 = getelementptr inbounds double, ptr %935, i64 %941
  store double %934, ptr %942, align 8, !tbaa !11
  br label %943

943:                                              ; preds = %906
  %944 = load i64, ptr %25, align 8, !tbaa !15
  %945 = add nsw i64 %944, 1
  store i64 %945, ptr %25, align 8, !tbaa !15
  br label %899, !llvm.loop !59

946:                                              ; preds = %899
  br label %947

947:                                              ; preds = %946
  %948 = load i64, ptr %26, align 8, !tbaa !15
  %949 = add nsw i64 %948, 1
  store i64 %949, ptr %26, align 8, !tbaa !15
  br label %893, !llvm.loop !60

950:                                              ; preds = %893
  br label %951

951:                                              ; preds = %950, %888
  br label %952

952:                                              ; preds = %951, %887
  br label %953

953:                                              ; preds = %952, %825
  br label %954

954:                                              ; preds = %953, %772
  br label %1221

955:                                              ; preds = %718
  %956 = load double, ptr %20, align 8, !tbaa !11
  %957 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %956, double noundef 1.000000e-25)
  %958 = icmp eq i32 %957, 1
  br i1 %958, label %959, label %1013

959:                                              ; preds = %955
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %960

960:                                              ; preds = %1009, %959
  %961 = load i64, ptr %26, align 8, !tbaa !15
  %962 = load i32, ptr %16, align 4, !tbaa !9
  %963 = sext i32 %962 to i64
  %964 = icmp slt i64 %961, %963
  br i1 %964, label %965, label %1012

965:                                              ; preds = %960
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %966

966:                                              ; preds = %1005, %965
  %967 = load i64, ptr %25, align 8, !tbaa !15
  %968 = load ptr, ptr %14, align 8, !tbaa !5
  %969 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %968, i32 0, i32 2
  %970 = load i32, ptr %969, align 8, !tbaa !17
  %971 = sext i32 %970 to i64
  %972 = icmp slt i64 %967, %971
  br i1 %972, label %973, label %1008

973:                                              ; preds = %966
  %974 = load double, ptr %17, align 8, !tbaa !11
  %975 = load ptr, ptr %32, align 8, !tbaa !5
  %976 = load ptr, ptr %14, align 8, !tbaa !5
  %977 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %976, i32 0, i32 0
  %978 = load ptr, ptr %977, align 8, !tbaa !26
  %979 = load i64, ptr %25, align 8, !tbaa !15
  %980 = getelementptr inbounds i32, ptr %978, i64 %979
  %981 = load i32, ptr %980, align 4, !tbaa !9
  %982 = sext i32 %981 to i64
  %983 = load i64, ptr %26, align 8, !tbaa !15
  %984 = load i32, ptr %31, align 4, !tbaa !9
  %985 = sext i32 %984 to i64
  %986 = mul nsw i64 %983, %985
  %987 = add nsw i64 %982, %986
  %988 = getelementptr inbounds double, ptr %975, i64 %987
  %989 = load double, ptr %988, align 8, !tbaa !11
  %990 = fmul double %974, %989
  %991 = load ptr, ptr %21, align 8, !tbaa !5
  %992 = load ptr, ptr %14, align 8, !tbaa !5
  %993 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %992, i32 0, i32 0
  %994 = load ptr, ptr %993, align 8, !tbaa !26
  %995 = load i64, ptr %25, align 8, !tbaa !15
  %996 = getelementptr inbounds i32, ptr %994, i64 %995
  %997 = load i32, ptr %996, align 4, !tbaa !9
  %998 = sext i32 %997 to i64
  %999 = load i64, ptr %26, align 8, !tbaa !15
  %1000 = load i32, ptr %22, align 4, !tbaa !9
  %1001 = sext i32 %1000 to i64
  %1002 = mul nsw i64 %999, %1001
  %1003 = add nsw i64 %998, %1002
  %1004 = getelementptr inbounds double, ptr %991, i64 %1003
  store double %990, ptr %1004, align 8, !tbaa !11
  br label %1005

1005:                                             ; preds = %973
  %1006 = load i64, ptr %25, align 8, !tbaa !15
  %1007 = add nsw i64 %1006, 1
  store i64 %1007, ptr %25, align 8, !tbaa !15
  br label %966, !llvm.loop !61

1008:                                             ; preds = %966
  br label %1009

1009:                                             ; preds = %1008
  %1010 = load i64, ptr %26, align 8, !tbaa !15
  %1011 = add nsw i64 %1010, 1
  store i64 %1011, ptr %26, align 8, !tbaa !15
  br label %960, !llvm.loop !62

1012:                                             ; preds = %960
  br label %1220

1013:                                             ; preds = %955
  %1014 = load double, ptr %20, align 8, !tbaa !11
  %1015 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %1014, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %1016 = icmp eq i32 %1015, 1
  br i1 %1016, label %1017, label %1080

1017:                                             ; preds = %1013
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1018

1018:                                             ; preds = %1076, %1017
  %1019 = load i64, ptr %26, align 8, !tbaa !15
  %1020 = load i32, ptr %16, align 4, !tbaa !9
  %1021 = sext i32 %1020 to i64
  %1022 = icmp slt i64 %1019, %1021
  br i1 %1022, label %1023, label %1079

1023:                                             ; preds = %1018
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1024

1024:                                             ; preds = %1072, %1023
  %1025 = load i64, ptr %25, align 8, !tbaa !15
  %1026 = load ptr, ptr %14, align 8, !tbaa !5
  %1027 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1026, i32 0, i32 2
  %1028 = load i32, ptr %1027, align 8, !tbaa !17
  %1029 = sext i32 %1028 to i64
  %1030 = icmp slt i64 %1025, %1029
  br i1 %1030, label %1031, label %1075

1031:                                             ; preds = %1024
  %1032 = load double, ptr %17, align 8, !tbaa !11
  %1033 = load ptr, ptr %32, align 8, !tbaa !5
  %1034 = load ptr, ptr %14, align 8, !tbaa !5
  %1035 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1034, i32 0, i32 0
  %1036 = load ptr, ptr %1035, align 8, !tbaa !26
  %1037 = load i64, ptr %25, align 8, !tbaa !15
  %1038 = getelementptr inbounds i32, ptr %1036, i64 %1037
  %1039 = load i32, ptr %1038, align 4, !tbaa !9
  %1040 = sext i32 %1039 to i64
  %1041 = load i64, ptr %26, align 8, !tbaa !15
  %1042 = load i32, ptr %31, align 4, !tbaa !9
  %1043 = sext i32 %1042 to i64
  %1044 = mul nsw i64 %1041, %1043
  %1045 = add nsw i64 %1040, %1044
  %1046 = getelementptr inbounds double, ptr %1033, i64 %1045
  %1047 = load double, ptr %1046, align 8, !tbaa !11
  %1048 = load ptr, ptr %21, align 8, !tbaa !5
  %1049 = load i64, ptr %25, align 8, !tbaa !15
  %1050 = load i64, ptr %26, align 8, !tbaa !15
  %1051 = load i32, ptr %22, align 4, !tbaa !9
  %1052 = sext i32 %1051 to i64
  %1053 = mul nsw i64 %1050, %1052
  %1054 = add nsw i64 %1049, %1053
  %1055 = getelementptr inbounds double, ptr %1048, i64 %1054
  %1056 = load double, ptr %1055, align 8, !tbaa !11
  %1057 = call double @llvm.fmuladd.f64(double %1032, double %1047, double %1056)
  %1058 = load ptr, ptr %21, align 8, !tbaa !5
  %1059 = load ptr, ptr %14, align 8, !tbaa !5
  %1060 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1059, i32 0, i32 0
  %1061 = load ptr, ptr %1060, align 8, !tbaa !26
  %1062 = load i64, ptr %25, align 8, !tbaa !15
  %1063 = getelementptr inbounds i32, ptr %1061, i64 %1062
  %1064 = load i32, ptr %1063, align 4, !tbaa !9
  %1065 = sext i32 %1064 to i64
  %1066 = load i64, ptr %26, align 8, !tbaa !15
  %1067 = load i32, ptr %22, align 4, !tbaa !9
  %1068 = sext i32 %1067 to i64
  %1069 = mul nsw i64 %1066, %1068
  %1070 = add nsw i64 %1065, %1069
  %1071 = getelementptr inbounds double, ptr %1058, i64 %1070
  store double %1057, ptr %1071, align 8, !tbaa !11
  br label %1072

1072:                                             ; preds = %1031
  %1073 = load i64, ptr %25, align 8, !tbaa !15
  %1074 = add nsw i64 %1073, 1
  store i64 %1074, ptr %25, align 8, !tbaa !15
  br label %1024, !llvm.loop !63

1075:                                             ; preds = %1024
  br label %1076

1076:                                             ; preds = %1075
  %1077 = load i64, ptr %26, align 8, !tbaa !15
  %1078 = add nsw i64 %1077, 1
  store i64 %1078, ptr %26, align 8, !tbaa !15
  br label %1018, !llvm.loop !64

1079:                                             ; preds = %1018
  br label %1219

1080:                                             ; preds = %1013
  %1081 = load double, ptr %20, align 8, !tbaa !11
  %1082 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %1081, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %1083 = icmp eq i32 %1082, 1
  br i1 %1083, label %1084, label %1148

1084:                                             ; preds = %1080
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1085

1085:                                             ; preds = %1144, %1084
  %1086 = load i64, ptr %26, align 8, !tbaa !15
  %1087 = load i32, ptr %16, align 4, !tbaa !9
  %1088 = sext i32 %1087 to i64
  %1089 = icmp slt i64 %1086, %1088
  br i1 %1089, label %1090, label %1147

1090:                                             ; preds = %1085
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1091

1091:                                             ; preds = %1140, %1090
  %1092 = load i64, ptr %25, align 8, !tbaa !15
  %1093 = load ptr, ptr %14, align 8, !tbaa !5
  %1094 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1093, i32 0, i32 2
  %1095 = load i32, ptr %1094, align 8, !tbaa !17
  %1096 = sext i32 %1095 to i64
  %1097 = icmp slt i64 %1092, %1096
  br i1 %1097, label %1098, label %1143

1098:                                             ; preds = %1091
  %1099 = load double, ptr %17, align 8, !tbaa !11
  %1100 = load ptr, ptr %32, align 8, !tbaa !5
  %1101 = load ptr, ptr %14, align 8, !tbaa !5
  %1102 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1101, i32 0, i32 0
  %1103 = load ptr, ptr %1102, align 8, !tbaa !26
  %1104 = load i64, ptr %25, align 8, !tbaa !15
  %1105 = getelementptr inbounds i32, ptr %1103, i64 %1104
  %1106 = load i32, ptr %1105, align 4, !tbaa !9
  %1107 = sext i32 %1106 to i64
  %1108 = load i64, ptr %26, align 8, !tbaa !15
  %1109 = load i32, ptr %31, align 4, !tbaa !9
  %1110 = sext i32 %1109 to i64
  %1111 = mul nsw i64 %1108, %1110
  %1112 = add nsw i64 %1107, %1111
  %1113 = getelementptr inbounds double, ptr %1100, i64 %1112
  %1114 = load double, ptr %1113, align 8, !tbaa !11
  %1115 = load ptr, ptr %21, align 8, !tbaa !5
  %1116 = load i64, ptr %25, align 8, !tbaa !15
  %1117 = load i64, ptr %26, align 8, !tbaa !15
  %1118 = load i32, ptr %22, align 4, !tbaa !9
  %1119 = sext i32 %1118 to i64
  %1120 = mul nsw i64 %1117, %1119
  %1121 = add nsw i64 %1116, %1120
  %1122 = getelementptr inbounds double, ptr %1115, i64 %1121
  %1123 = load double, ptr %1122, align 8, !tbaa !11
  %1124 = fneg double %1123
  %1125 = call double @llvm.fmuladd.f64(double %1099, double %1114, double %1124)
  %1126 = load ptr, ptr %21, align 8, !tbaa !5
  %1127 = load ptr, ptr %14, align 8, !tbaa !5
  %1128 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1127, i32 0, i32 0
  %1129 = load ptr, ptr %1128, align 8, !tbaa !26
  %1130 = load i64, ptr %25, align 8, !tbaa !15
  %1131 = getelementptr inbounds i32, ptr %1129, i64 %1130
  %1132 = load i32, ptr %1131, align 4, !tbaa !9
  %1133 = sext i32 %1132 to i64
  %1134 = load i64, ptr %26, align 8, !tbaa !15
  %1135 = load i32, ptr %22, align 4, !tbaa !9
  %1136 = sext i32 %1135 to i64
  %1137 = mul nsw i64 %1134, %1136
  %1138 = add nsw i64 %1133, %1137
  %1139 = getelementptr inbounds double, ptr %1126, i64 %1138
  store double %1125, ptr %1139, align 8, !tbaa !11
  br label %1140

1140:                                             ; preds = %1098
  %1141 = load i64, ptr %25, align 8, !tbaa !15
  %1142 = add nsw i64 %1141, 1
  store i64 %1142, ptr %25, align 8, !tbaa !15
  br label %1091, !llvm.loop !65

1143:                                             ; preds = %1091
  br label %1144

1144:                                             ; preds = %1143
  %1145 = load i64, ptr %26, align 8, !tbaa !15
  %1146 = add nsw i64 %1145, 1
  store i64 %1146, ptr %26, align 8, !tbaa !15
  br label %1085, !llvm.loop !66

1147:                                             ; preds = %1085
  br label %1218

1148:                                             ; preds = %1080
  %1149 = load double, ptr %20, align 8, !tbaa !11
  %1150 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %1149, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %1151 = icmp eq i32 %1150, 0
  br i1 %1151, label %1152, label %1217

1152:                                             ; preds = %1148
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1153

1153:                                             ; preds = %1213, %1152
  %1154 = load i64, ptr %26, align 8, !tbaa !15
  %1155 = load i32, ptr %16, align 4, !tbaa !9
  %1156 = sext i32 %1155 to i64
  %1157 = icmp slt i64 %1154, %1156
  br i1 %1157, label %1158, label %1216

1158:                                             ; preds = %1153
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1159

1159:                                             ; preds = %1209, %1158
  %1160 = load i64, ptr %25, align 8, !tbaa !15
  %1161 = load ptr, ptr %14, align 8, !tbaa !5
  %1162 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1161, i32 0, i32 2
  %1163 = load i32, ptr %1162, align 8, !tbaa !17
  %1164 = sext i32 %1163 to i64
  %1165 = icmp slt i64 %1160, %1164
  br i1 %1165, label %1166, label %1212

1166:                                             ; preds = %1159
  %1167 = load double, ptr %17, align 8, !tbaa !11
  %1168 = load ptr, ptr %32, align 8, !tbaa !5
  %1169 = load ptr, ptr %14, align 8, !tbaa !5
  %1170 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1169, i32 0, i32 0
  %1171 = load ptr, ptr %1170, align 8, !tbaa !26
  %1172 = load i64, ptr %25, align 8, !tbaa !15
  %1173 = getelementptr inbounds i32, ptr %1171, i64 %1172
  %1174 = load i32, ptr %1173, align 4, !tbaa !9
  %1175 = sext i32 %1174 to i64
  %1176 = load i64, ptr %26, align 8, !tbaa !15
  %1177 = load i32, ptr %31, align 4, !tbaa !9
  %1178 = sext i32 %1177 to i64
  %1179 = mul nsw i64 %1176, %1178
  %1180 = add nsw i64 %1175, %1179
  %1181 = getelementptr inbounds double, ptr %1168, i64 %1180
  %1182 = load double, ptr %1181, align 8, !tbaa !11
  %1183 = load double, ptr %20, align 8, !tbaa !11
  %1184 = load ptr, ptr %21, align 8, !tbaa !5
  %1185 = load i64, ptr %25, align 8, !tbaa !15
  %1186 = load i64, ptr %26, align 8, !tbaa !15
  %1187 = load i32, ptr %22, align 4, !tbaa !9
  %1188 = sext i32 %1187 to i64
  %1189 = mul nsw i64 %1186, %1188
  %1190 = add nsw i64 %1185, %1189
  %1191 = getelementptr inbounds double, ptr %1184, i64 %1190
  %1192 = load double, ptr %1191, align 8, !tbaa !11
  %1193 = fmul double %1183, %1192
  %1194 = call double @llvm.fmuladd.f64(double %1167, double %1182, double %1193)
  %1195 = load ptr, ptr %21, align 8, !tbaa !5
  %1196 = load ptr, ptr %14, align 8, !tbaa !5
  %1197 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1196, i32 0, i32 0
  %1198 = load ptr, ptr %1197, align 8, !tbaa !26
  %1199 = load i64, ptr %25, align 8, !tbaa !15
  %1200 = getelementptr inbounds i32, ptr %1198, i64 %1199
  %1201 = load i32, ptr %1200, align 4, !tbaa !9
  %1202 = sext i32 %1201 to i64
  %1203 = load i64, ptr %26, align 8, !tbaa !15
  %1204 = load i32, ptr %22, align 4, !tbaa !9
  %1205 = sext i32 %1204 to i64
  %1206 = mul nsw i64 %1203, %1205
  %1207 = add nsw i64 %1202, %1206
  %1208 = getelementptr inbounds double, ptr %1195, i64 %1207
  store double %1194, ptr %1208, align 8, !tbaa !11
  br label %1209

1209:                                             ; preds = %1166
  %1210 = load i64, ptr %25, align 8, !tbaa !15
  %1211 = add nsw i64 %1210, 1
  store i64 %1211, ptr %25, align 8, !tbaa !15
  br label %1159, !llvm.loop !67

1212:                                             ; preds = %1159
  br label %1213

1213:                                             ; preds = %1212
  %1214 = load i64, ptr %26, align 8, !tbaa !15
  %1215 = add nsw i64 %1214, 1
  store i64 %1215, ptr %26, align 8, !tbaa !15
  br label %1153, !llvm.loop !68

1216:                                             ; preds = %1153
  br label %1217

1217:                                             ; preds = %1216, %1148
  br label %1218

1218:                                             ; preds = %1217, %1147
  br label %1219

1219:                                             ; preds = %1218, %1079
  br label %1220

1220:                                             ; preds = %1219, %1012
  br label %1221

1221:                                             ; preds = %1220, %954
  %1222 = load ptr, ptr %32, align 8, !tbaa !5
  %1223 = icmp eq ptr %1222, null
  br i1 %1223, label %1225, label %1224

1224:                                             ; preds = %1221
  call void @_ZdaPv(ptr noundef %1222) #8
  br label %1225

1225:                                             ; preds = %1224, %1221
  store i32 0, ptr %12, align 4
  store i32 1, ptr %30, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %1226

1226:                                             ; preds = %1225, %310
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  %1227 = load i32, ptr %12, align 4
  ret i32 %1227
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZN7qpOASES6getMaxEdd(double noundef, double noundef) #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nobuiltin allocsize(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 = { 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 #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 }
attributes #7 = { builtin allocsize(0) }
attributes #8 = { builtin 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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTSN7qpOASES11BooleanTypeE", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"long", !7, i64 0}
!17 = !{!18, !10, i64 16}
!18 = !{!"_ZTSN7qpOASES9IndexlistE", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = !{!18, !6, i64 0}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = !{!34, !10, i64 8}
!34 = !{!"_ZTSN7qpOASES12SparseMatrixE", !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!35 = distinct !{!35, !20}
!36 = !{!18, !6, i64 8}
!37 = !{!34, !6, i64 24}
!38 = !{!34, !6, i64 40}
!39 = !{!34, !6, i64 16}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = !{!34, !10, i64 12}
!47 = distinct !{!47, !20}
!48 = distinct !{!48, !20}
!49 = distinct !{!49, !20}
!50 = distinct !{!50, !20}
!51 = distinct !{!51, !20}
!52 = distinct !{!52, !20}
!53 = distinct !{!53, !20}
!54 = distinct !{!54, !20}
!55 = distinct !{!55, !20}
!56 = distinct !{!56, !20}
!57 = distinct !{!57, !20}
!58 = distinct !{!58, !20}
!59 = distinct !{!59, !20}
!60 = distinct !{!60, !20}
!61 = distinct !{!61, !20}
!62 = distinct !{!62, !20}
!63 = distinct !{!63, !20}
!64 = distinct !{!64, !20}
!65 = distinct !{!65, !20}
!66 = distinct !{!66, !20}
!67 = distinct !{!67, !20}
!68 = distinct !{!68, !20}


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

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #0

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZNK7qpOASES12SparseMatrix5timesEPKNS_9IndexlistES3_idPKdidPdiNS_11BooleanTypeE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(48) %0, ptr nocapture noundef readonly %1, ptr noundef readonly %2, i32 noundef %3, double noundef %4, ptr nocapture noundef readonly %5, i32 noundef %6, double noundef %7, ptr nocapture noundef %8, i32 noundef %9, i32 noundef %10) unnamed_addr #4 align 2 {
  %12 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %4, double noundef 0.000000e+00, double noundef 1.000000e-25)
  %13 = icmp eq i32 %12, 1
  br i1 %13, label %14, label %215

14:                                               ; preds = %11
  %15 = icmp eq i32 %10, 1
  %16 = tail call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %7, double noundef 1.000000e-25)
  %17 = icmp eq i32 %16, 1
  br i1 %15, label %18, label %77

18:                                               ; preds = %14
  br i1 %17, label %.preheader386, label %37

.preheader386:                                    ; preds = %18
  %19 = sext i32 %3 to i64
  %20 = icmp sgt i32 %3, 0
  br i1 %20, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %.preheader386
  %21 = getelementptr inbounds i8, ptr %1, i64 16
  %22 = load i32, ptr %21, align 8, !tbaa !5
  %23 = sext i32 %22 to i64
  %24 = icmp sgt i32 %22, 0
  %25 = sext i32 %9 to i64
  %26 = shl nsw i64 %25, 3
  %27 = shl nuw nsw i64 %23, 3
  %xtraiter776 = and i64 %19, 3
  %28 = icmp ult i32 %3, 4
  br i1 %28, label %.loopexit.loopexit.unr-lcssa, label %.preheader.lr.ph.new

.preheader.lr.ph.new:                             ; preds = %.preheader.lr.ph
  %unroll_iter779 = and i64 %19, 2147483644
  br label %.preheader

.preheader:                                       ; preds = %._crit_edge550.3, %.preheader.lr.ph.new
  %.0363553 = phi i64 [ 0, %.preheader.lr.ph.new ], [ %36, %._crit_edge550.3 ]
  %niter780 = phi i64 [ 0, %.preheader.lr.ph.new ], [ %niter780.next.3, %._crit_edge550.3 ]
  br i1 %24, label %.lr.ph549, label %._crit_edge550.3

.lr.ph549:                                        ; preds = %.preheader
  %29 = mul i64 %26, %.0363553
  %scevgep = getelementptr i8, ptr %8, i64 %29
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %27, i1 false), !tbaa !11
  %30 = or disjoint i64 %.0363553, 1
  %31 = mul i64 %26, %30
  %scevgep.1 = getelementptr i8, ptr %8, i64 %31
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.1, i8 0, i64 %27, i1 false), !tbaa !11
  %32 = or disjoint i64 %.0363553, 2
  %33 = mul i64 %26, %32
  %scevgep.2 = getelementptr i8, ptr %8, i64 %33
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.2, i8 0, i64 %27, i1 false), !tbaa !11
  %34 = or disjoint i64 %.0363553, 3
  %35 = mul i64 %26, %34
  %scevgep.3 = getelementptr i8, ptr %8, i64 %35
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.3, i8 0, i64 %27, i1 false), !tbaa !11
  br label %._crit_edge550.3

._crit_edge550.3:                                 ; preds = %.preheader, %.lr.ph549
  %36 = add nuw nsw i64 %.0363553, 4
  %niter780.next.3 = add i64 %niter780, 4
  %niter780.ncmp.3 = icmp eq i64 %niter780.next.3, %unroll_iter779
  br i1 %niter780.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.preheader, !llvm.loop !13

37:                                               ; preds = %18
  %38 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %39 = icmp eq i32 %38, 1
  br i1 %39, label %.preheader388, label %57

.preheader388:                                    ; preds = %37
  %40 = sext i32 %3 to i64
  %41 = icmp sgt i32 %3, 0
  br i1 %41, label %.preheader387.lr.ph, label %.loopexit

.preheader387.lr.ph:                              ; preds = %.preheader388
  %42 = getelementptr inbounds i8, ptr %1, i64 16
  %43 = load i32, ptr %42, align 8, !tbaa !5
  %44 = sext i32 %43 to i64
  %45 = icmp sgt i32 %43, 0
  %46 = sext i32 %9 to i64
  %min.iters.check682 = icmp ult i32 %43, 4
  %n.vec685 = and i64 %44, 2147483644
  %cmp.n692 = icmp eq i64 %n.vec685, %44
  br label %.preheader387

.preheader387:                                    ; preds = %.preheader387.lr.ph, %._crit_edge544
  %.1364547 = phi i64 [ 0, %.preheader387.lr.ph ], [ %56, %._crit_edge544 ]
  br i1 %45, label %.lr.ph543, label %._crit_edge544

.lr.ph543:                                        ; preds = %.preheader387
  %47 = mul nsw i64 %.1364547, %46
  %invariant.gep545 = getelementptr double, ptr %8, i64 %47
  br i1 %min.iters.check682, label %scalar.ph681.preheader, label %vector.body687

vector.body687:                                   ; preds = %.lr.ph543, %vector.body687
  %index688 = phi i64 [ %index.next691, %vector.body687 ], [ 0, %.lr.ph543 ]
  %48 = getelementptr double, ptr %invariant.gep545, i64 %index688
  %49 = getelementptr i8, ptr %48, i64 16
  %wide.load689 = load <2 x double>, ptr %48, align 8, !tbaa !11
  %wide.load690 = load <2 x double>, ptr %49, align 8, !tbaa !11
  %50 = fneg <2 x double> %wide.load689
  %51 = fneg <2 x double> %wide.load690
  store <2 x double> %50, ptr %48, align 8, !tbaa !11
  store <2 x double> %51, ptr %49, align 8, !tbaa !11
  %index.next691 = add nuw i64 %index688, 4
  %52 = icmp eq i64 %index.next691, %n.vec685
  br i1 %52, label %middle.block680, label %vector.body687, !llvm.loop !15

middle.block680:                                  ; preds = %vector.body687
  br i1 %cmp.n692, label %._crit_edge544, label %scalar.ph681.preheader

scalar.ph681.preheader:                           ; preds = %middle.block680, %.lr.ph543
  %.1360542.ph = phi i64 [ 0, %.lr.ph543 ], [ %n.vec685, %middle.block680 ]
  br label %scalar.ph681

scalar.ph681:                                     ; preds = %scalar.ph681.preheader, %scalar.ph681
  %.1360542 = phi i64 [ %55, %scalar.ph681 ], [ %.1360542.ph, %scalar.ph681.preheader ]
  %gep546 = getelementptr double, ptr %invariant.gep545, i64 %.1360542
  %53 = load double, ptr %gep546, align 8, !tbaa !11
  %54 = fneg double %53
  store double %54, ptr %gep546, align 8, !tbaa !11
  %55 = add nuw nsw i64 %.1360542, 1
  %exitcond609.not = icmp eq i64 %55, %44
  br i1 %exitcond609.not, label %._crit_edge544, label %scalar.ph681, !llvm.loop !18

._crit_edge544:                                   ; preds = %scalar.ph681, %middle.block680, %.preheader387
  %56 = add nuw nsw i64 %.1364547, 1
  %exitcond610.not = icmp eq i64 %56, %40
  br i1 %exitcond610.not, label %.loopexit, label %.preheader387, !llvm.loop !19

57:                                               ; preds = %37
  %58 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %59 = icmp eq i32 %58, 0
  br i1 %59, label %.preheader391, label %.loopexit

.preheader391:                                    ; preds = %57
  %60 = sext i32 %3 to i64
  %61 = icmp sgt i32 %3, 0
  br i1 %61, label %.preheader390.lr.ph, label %.loopexit

.preheader390.lr.ph:                              ; preds = %.preheader391
  %62 = getelementptr inbounds i8, ptr %1, i64 16
  %63 = load i32, ptr %62, align 8, !tbaa !5
  %64 = sext i32 %63 to i64
  %65 = icmp sgt i32 %63, 0
  %66 = sext i32 %9 to i64
  %min.iters.check667 = icmp ult i32 %63, 4
  %n.vec670 = and i64 %64, 2147483644
  %broadcast.splatinsert676 = insertelement <2 x double> poison, double %7, i64 0
  %broadcast.splat677 = shufflevector <2 x double> %broadcast.splatinsert676, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n679 = icmp eq i64 %n.vec670, %64
  br label %.preheader390

.preheader390:                                    ; preds = %.preheader390.lr.ph, %._crit_edge538
  %.2365541 = phi i64 [ 0, %.preheader390.lr.ph ], [ %76, %._crit_edge538 ]
  br i1 %65, label %.lr.ph537, label %._crit_edge538

.lr.ph537:                                        ; preds = %.preheader390
  %67 = mul nsw i64 %.2365541, %66
  %invariant.gep539 = getelementptr double, ptr %8, i64 %67
  br i1 %min.iters.check667, label %scalar.ph666.preheader, label %vector.body672

vector.body672:                                   ; preds = %.lr.ph537, %vector.body672
  %index673 = phi i64 [ %index.next678, %vector.body672 ], [ 0, %.lr.ph537 ]
  %68 = getelementptr double, ptr %invariant.gep539, i64 %index673
  %69 = getelementptr i8, ptr %68, i64 16
  %wide.load674 = load <2 x double>, ptr %68, align 8, !tbaa !11
  %wide.load675 = load <2 x double>, ptr %69, align 8, !tbaa !11
  %70 = fmul <2 x double> %wide.load674, %broadcast.splat677
  %71 = fmul <2 x double> %wide.load675, %broadcast.splat677
  store <2 x double> %70, ptr %68, align 8, !tbaa !11
  store <2 x double> %71, ptr %69, align 8, !tbaa !11
  %index.next678 = add nuw i64 %index673, 4
  %72 = icmp eq i64 %index.next678, %n.vec670
  br i1 %72, label %middle.block665, label %vector.body672, !llvm.loop !20

middle.block665:                                  ; preds = %vector.body672
  br i1 %cmp.n679, label %._crit_edge538, label %scalar.ph666.preheader

scalar.ph666.preheader:                           ; preds = %middle.block665, %.lr.ph537
  %.2361536.ph = phi i64 [ 0, %.lr.ph537 ], [ %n.vec670, %middle.block665 ]
  br label %scalar.ph666

scalar.ph666:                                     ; preds = %scalar.ph666.preheader, %scalar.ph666
  %.2361536 = phi i64 [ %75, %scalar.ph666 ], [ %.2361536.ph, %scalar.ph666.preheader ]
  %gep540 = getelementptr double, ptr %invariant.gep539, i64 %.2361536
  %73 = load double, ptr %gep540, align 8, !tbaa !11
  %74 = fmul double %73, %7
  store double %74, ptr %gep540, align 8, !tbaa !11
  %75 = add nuw nsw i64 %.2361536, 1
  %exitcond607.not = icmp eq i64 %75, %64
  br i1 %exitcond607.not, label %._crit_edge538, label %scalar.ph666, !llvm.loop !21

._crit_edge538:                                   ; preds = %scalar.ph666, %middle.block665, %.preheader390
  %76 = add nuw nsw i64 %.2365541, 1
  %exitcond608.not = icmp eq i64 %76, %60
  br i1 %exitcond608.not, label %.loopexit, label %.preheader390, !llvm.loop !22

77:                                               ; preds = %14
  br i1 %17, label %.preheader394, label %115

.preheader394:                                    ; preds = %77
  %78 = sext i32 %3 to i64
  %79 = icmp sgt i32 %3, 0
  br i1 %79, label %.preheader393.lr.ph, label %.loopexit

.preheader393.lr.ph:                              ; preds = %.preheader394
  %80 = getelementptr inbounds i8, ptr %1, i64 16
  %81 = load i32, ptr %80, align 8, !tbaa !5
  %82 = sext i32 %81 to i64
  %83 = icmp sgt i32 %81, 0
  %84 = sext i32 %9 to i64
  %xtraiter771 = and i64 %82, 3
  %85 = icmp ult i32 %81, 4
  %unroll_iter774 = and i64 %82, 2147483644
  %lcmp.mod773.not = icmp eq i64 %xtraiter771, 0
  br label %.preheader393

.preheader393:                                    ; preds = %.preheader393.lr.ph, %._crit_edge534
  %.3366535 = phi i64 [ 0, %.preheader393.lr.ph ], [ %114, %._crit_edge534 ]
  br i1 %83, label %.lr.ph533, label %._crit_edge534

.lr.ph533:                                        ; preds = %.preheader393
  %86 = load ptr, ptr %1, align 8, !tbaa !23
  %87 = mul nsw i64 %.3366535, %84
  %88 = getelementptr double, ptr %8, i64 %87
  br i1 %85, label %._crit_edge534.loopexit.unr-lcssa, label %.lr.ph533.new

.lr.ph533.new:                                    ; preds = %.lr.ph533, %.lr.ph533.new
  %.3362532 = phi i64 [ %108, %.lr.ph533.new ], [ 0, %.lr.ph533 ]
  %niter775 = phi i64 [ %niter775.next.3, %.lr.ph533.new ], [ 0, %.lr.ph533 ]
  %89 = getelementptr inbounds i32, ptr %86, i64 %.3362532
  %90 = load i32, ptr %89, align 4, !tbaa !24
  %91 = sext i32 %90 to i64
  %92 = getelementptr double, ptr %88, i64 %91
  store double 0.000000e+00, ptr %92, align 8, !tbaa !11
  %93 = or disjoint i64 %.3362532, 1
  %94 = getelementptr inbounds i32, ptr %86, i64 %93
  %95 = load i32, ptr %94, align 4, !tbaa !24
  %96 = sext i32 %95 to i64
  %97 = getelementptr double, ptr %88, i64 %96
  store double 0.000000e+00, ptr %97, align 8, !tbaa !11
  %98 = or disjoint i64 %.3362532, 2
  %99 = getelementptr inbounds i32, ptr %86, i64 %98
  %100 = load i32, ptr %99, align 4, !tbaa !24
  %101 = sext i32 %100 to i64
  %102 = getelementptr double, ptr %88, i64 %101
  store double 0.000000e+00, ptr %102, align 8, !tbaa !11
  %103 = or disjoint i64 %.3362532, 3
  %104 = getelementptr inbounds i32, ptr %86, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !24
  %106 = sext i32 %105 to i64
  %107 = getelementptr double, ptr %88, i64 %106
  store double 0.000000e+00, ptr %107, align 8, !tbaa !11
  %108 = add nuw nsw i64 %.3362532, 4
  %niter775.next.3 = add i64 %niter775, 4
  %niter775.ncmp.3 = icmp eq i64 %niter775.next.3, %unroll_iter774
  br i1 %niter775.ncmp.3, label %._crit_edge534.loopexit.unr-lcssa, label %.lr.ph533.new, !llvm.loop !25

._crit_edge534.loopexit.unr-lcssa:                ; preds = %.lr.ph533.new, %.lr.ph533
  %.3362532.unr = phi i64 [ 0, %.lr.ph533 ], [ %108, %.lr.ph533.new ]
  br i1 %lcmp.mod773.not, label %._crit_edge534, label %.epil.preheader770

.epil.preheader770:                               ; preds = %._crit_edge534.loopexit.unr-lcssa, %.epil.preheader770
  %.3362532.epil = phi i64 [ %113, %.epil.preheader770 ], [ %.3362532.unr, %._crit_edge534.loopexit.unr-lcssa ]
  %epil.iter772 = phi i64 [ %epil.iter772.next, %.epil.preheader770 ], [ 0, %._crit_edge534.loopexit.unr-lcssa ]
  %109 = getelementptr inbounds i32, ptr %86, i64 %.3362532.epil
  %110 = load i32, ptr %109, align 4, !tbaa !24
  %111 = sext i32 %110 to i64
  %112 = getelementptr double, ptr %88, i64 %111
  store double 0.000000e+00, ptr %112, align 8, !tbaa !11
  %113 = add nuw nsw i64 %.3362532.epil, 1
  %epil.iter772.next = add i64 %epil.iter772, 1
  %epil.iter772.cmp.not = icmp eq i64 %epil.iter772.next, %xtraiter771
  br i1 %epil.iter772.cmp.not, label %._crit_edge534, label %.epil.preheader770, !llvm.loop !26

._crit_edge534:                                   ; preds = %._crit_edge534.loopexit.unr-lcssa, %.epil.preheader770, %.preheader393
  %114 = add nuw nsw i64 %.3366535, 1
  %exitcond606.not = icmp eq i64 %114, %78
  br i1 %exitcond606.not, label %.loopexit, label %.preheader393, !llvm.loop !28

115:                                              ; preds = %77
  %116 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %117 = icmp eq i32 %116, 1
  br i1 %117, label %.preheader397, label %165

.preheader397:                                    ; preds = %115
  %118 = sext i32 %3 to i64
  %119 = icmp sgt i32 %3, 0
  br i1 %119, label %.preheader396.lr.ph, label %.loopexit

.preheader396.lr.ph:                              ; preds = %.preheader397
  %120 = getelementptr inbounds i8, ptr %1, i64 16
  %121 = load i32, ptr %120, align 8, !tbaa !5
  %122 = sext i32 %121 to i64
  %123 = icmp sgt i32 %121, 0
  %124 = sext i32 %9 to i64
  %xtraiter765 = and i64 %122, 3
  %125 = icmp ult i32 %121, 4
  %unroll_iter768 = and i64 %122, 2147483644
  %lcmp.mod767.not = icmp eq i64 %xtraiter765, 0
  br label %.preheader396

.preheader396:                                    ; preds = %.preheader396.lr.ph, %._crit_edge530
  %.4367531 = phi i64 [ 0, %.preheader396.lr.ph ], [ %164, %._crit_edge530 ]
  br i1 %123, label %.lr.ph529, label %._crit_edge530

.lr.ph529:                                        ; preds = %.preheader396
  %126 = load ptr, ptr %1, align 8, !tbaa !23
  %127 = mul nsw i64 %.4367531, %124
  %128 = getelementptr double, ptr %8, i64 %127
  br i1 %125, label %._crit_edge530.loopexit.unr-lcssa, label %.lr.ph529.new

.lr.ph529.new:                                    ; preds = %.lr.ph529, %.lr.ph529.new
  %.4528 = phi i64 [ %156, %.lr.ph529.new ], [ 0, %.lr.ph529 ]
  %niter769 = phi i64 [ %niter769.next.3, %.lr.ph529.new ], [ 0, %.lr.ph529 ]
  %129 = getelementptr inbounds i32, ptr %126, i64 %.4528
  %130 = load i32, ptr %129, align 4, !tbaa !24
  %131 = sext i32 %130 to i64
  %132 = getelementptr double, ptr %128, i64 %131
  %133 = load double, ptr %132, align 8, !tbaa !11
  %134 = fneg double %133
  store double %134, ptr %132, align 8, !tbaa !11
  %135 = or disjoint i64 %.4528, 1
  %136 = getelementptr inbounds i32, ptr %126, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !24
  %138 = sext i32 %137 to i64
  %139 = getelementptr double, ptr %128, i64 %138
  %140 = load double, ptr %139, align 8, !tbaa !11
  %141 = fneg double %140
  store double %141, ptr %139, align 8, !tbaa !11
  %142 = or disjoint i64 %.4528, 2
  %143 = getelementptr inbounds i32, ptr %126, i64 %142
  %144 = load i32, ptr %143, align 4, !tbaa !24
  %145 = sext i32 %144 to i64
  %146 = getelementptr double, ptr %128, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !11
  %148 = fneg double %147
  store double %148, ptr %146, align 8, !tbaa !11
  %149 = or disjoint i64 %.4528, 3
  %150 = getelementptr inbounds i32, ptr %126, i64 %149
  %151 = load i32, ptr %150, align 4, !tbaa !24
  %152 = sext i32 %151 to i64
  %153 = getelementptr double, ptr %128, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !11
  %155 = fneg double %154
  store double %155, ptr %153, align 8, !tbaa !11
  %156 = add nuw nsw i64 %.4528, 4
  %niter769.next.3 = add i64 %niter769, 4
  %niter769.ncmp.3 = icmp eq i64 %niter769.next.3, %unroll_iter768
  br i1 %niter769.ncmp.3, label %._crit_edge530.loopexit.unr-lcssa, label %.lr.ph529.new, !llvm.loop !29

._crit_edge530.loopexit.unr-lcssa:                ; preds = %.lr.ph529.new, %.lr.ph529
  %.4528.unr = phi i64 [ 0, %.lr.ph529 ], [ %156, %.lr.ph529.new ]
  br i1 %lcmp.mod767.not, label %._crit_edge530, label %.epil.preheader764

.epil.preheader764:                               ; preds = %._crit_edge530.loopexit.unr-lcssa, %.epil.preheader764
  %.4528.epil = phi i64 [ %163, %.epil.preheader764 ], [ %.4528.unr, %._crit_edge530.loopexit.unr-lcssa ]
  %epil.iter766 = phi i64 [ %epil.iter766.next, %.epil.preheader764 ], [ 0, %._crit_edge530.loopexit.unr-lcssa ]
  %157 = getelementptr inbounds i32, ptr %126, i64 %.4528.epil
  %158 = load i32, ptr %157, align 4, !tbaa !24
  %159 = sext i32 %158 to i64
  %160 = getelementptr double, ptr %128, i64 %159
  %161 = load double, ptr %160, align 8, !tbaa !11
  %162 = fneg double %161
  store double %162, ptr %160, align 8, !tbaa !11
  %163 = add nuw nsw i64 %.4528.epil, 1
  %epil.iter766.next = add i64 %epil.iter766, 1
  %epil.iter766.cmp.not = icmp eq i64 %epil.iter766.next, %xtraiter765
  br i1 %epil.iter766.cmp.not, label %._crit_edge530, label %.epil.preheader764, !llvm.loop !30

._crit_edge530:                                   ; preds = %._crit_edge530.loopexit.unr-lcssa, %.epil.preheader764, %.preheader396
  %164 = add nuw nsw i64 %.4367531, 1
  %exitcond604.not = icmp eq i64 %164, %118
  br i1 %exitcond604.not, label %.loopexit, label %.preheader396, !llvm.loop !31

165:                                              ; preds = %115
  %166 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %167 = icmp eq i32 %166, 0
  br i1 %167, label %.preheader400, label %.loopexit

.preheader400:                                    ; preds = %165
  %168 = sext i32 %3 to i64
  %169 = icmp sgt i32 %3, 0
  br i1 %169, label %.preheader399.lr.ph, label %.loopexit

.preheader399.lr.ph:                              ; preds = %.preheader400
  %170 = getelementptr inbounds i8, ptr %1, i64 16
  %171 = load i32, ptr %170, align 8, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = icmp sgt i32 %171, 0
  %174 = sext i32 %9 to i64
  %xtraiter759 = and i64 %172, 3
  %175 = icmp ult i32 %171, 4
  %unroll_iter762 = and i64 %172, 2147483644
  %lcmp.mod761.not = icmp eq i64 %xtraiter759, 0
  br label %.preheader399

.preheader399:                                    ; preds = %.preheader399.lr.ph, %._crit_edge526
  %.5368527 = phi i64 [ 0, %.preheader399.lr.ph ], [ %214, %._crit_edge526 ]
  br i1 %173, label %.lr.ph525, label %._crit_edge526

.lr.ph525:                                        ; preds = %.preheader399
  %176 = load ptr, ptr %1, align 8, !tbaa !23
  %177 = mul nsw i64 %.5368527, %174
  %178 = getelementptr double, ptr %8, i64 %177
  br i1 %175, label %._crit_edge526.loopexit.unr-lcssa, label %.lr.ph525.new

.lr.ph525.new:                                    ; preds = %.lr.ph525, %.lr.ph525.new
  %.5524 = phi i64 [ %206, %.lr.ph525.new ], [ 0, %.lr.ph525 ]
  %niter763 = phi i64 [ %niter763.next.3, %.lr.ph525.new ], [ 0, %.lr.ph525 ]
  %179 = getelementptr inbounds i32, ptr %176, i64 %.5524
  %180 = load i32, ptr %179, align 4, !tbaa !24
  %181 = sext i32 %180 to i64
  %182 = getelementptr double, ptr %178, i64 %181
  %183 = load double, ptr %182, align 8, !tbaa !11
  %184 = fmul double %183, %7
  store double %184, ptr %182, align 8, !tbaa !11
  %185 = or disjoint i64 %.5524, 1
  %186 = getelementptr inbounds i32, ptr %176, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !24
  %188 = sext i32 %187 to i64
  %189 = getelementptr double, ptr %178, i64 %188
  %190 = load double, ptr %189, align 8, !tbaa !11
  %191 = fmul double %190, %7
  store double %191, ptr %189, align 8, !tbaa !11
  %192 = or disjoint i64 %.5524, 2
  %193 = getelementptr inbounds i32, ptr %176, i64 %192
  %194 = load i32, ptr %193, align 4, !tbaa !24
  %195 = sext i32 %194 to i64
  %196 = getelementptr double, ptr %178, i64 %195
  %197 = load double, ptr %196, align 8, !tbaa !11
  %198 = fmul double %197, %7
  store double %198, ptr %196, align 8, !tbaa !11
  %199 = or disjoint i64 %.5524, 3
  %200 = getelementptr inbounds i32, ptr %176, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !24
  %202 = sext i32 %201 to i64
  %203 = getelementptr double, ptr %178, i64 %202
  %204 = load double, ptr %203, align 8, !tbaa !11
  %205 = fmul double %204, %7
  store double %205, ptr %203, align 8, !tbaa !11
  %206 = add nuw nsw i64 %.5524, 4
  %niter763.next.3 = add i64 %niter763, 4
  %niter763.ncmp.3 = icmp eq i64 %niter763.next.3, %unroll_iter762
  br i1 %niter763.ncmp.3, label %._crit_edge526.loopexit.unr-lcssa, label %.lr.ph525.new, !llvm.loop !32

._crit_edge526.loopexit.unr-lcssa:                ; preds = %.lr.ph525.new, %.lr.ph525
  %.5524.unr = phi i64 [ 0, %.lr.ph525 ], [ %206, %.lr.ph525.new ]
  br i1 %lcmp.mod761.not, label %._crit_edge526, label %.epil.preheader758

.epil.preheader758:                               ; preds = %._crit_edge526.loopexit.unr-lcssa, %.epil.preheader758
  %.5524.epil = phi i64 [ %213, %.epil.preheader758 ], [ %.5524.unr, %._crit_edge526.loopexit.unr-lcssa ]
  %epil.iter760 = phi i64 [ %epil.iter760.next, %.epil.preheader758 ], [ 0, %._crit_edge526.loopexit.unr-lcssa ]
  %207 = getelementptr inbounds i32, ptr %176, i64 %.5524.epil
  %208 = load i32, ptr %207, align 4, !tbaa !24
  %209 = sext i32 %208 to i64
  %210 = getelementptr double, ptr %178, i64 %209
  %211 = load double, ptr %210, align 8, !tbaa !11
  %212 = fmul double %211, %7
  store double %212, ptr %210, align 8, !tbaa !11
  %213 = add nuw nsw i64 %.5524.epil, 1
  %epil.iter760.next = add i64 %epil.iter760, 1
  %epil.iter760.cmp.not = icmp eq i64 %epil.iter760.next, %xtraiter759
  br i1 %epil.iter760.cmp.not, label %._crit_edge526, label %.epil.preheader758, !llvm.loop !33

._crit_edge526:                                   ; preds = %._crit_edge526.loopexit.unr-lcssa, %.epil.preheader758, %.preheader399
  %214 = add nuw nsw i64 %.5368527, 1
  %exitcond602.not = icmp eq i64 %214, %168
  br i1 %exitcond602.not, label %.loopexit, label %.preheader399, !llvm.loop !34

215:                                              ; preds = %11
  %216 = getelementptr inbounds i8, ptr %0, i64 8
  %217 = load i32, ptr %216, align 8, !tbaa !35
  %218 = mul nsw i32 %217, %3
  %219 = sext i32 %218 to i64
  %220 = icmp slt i32 %218, 0
  %221 = shl nsw i64 %219, 3
  %222 = select i1 %220, i64 -1, i64 %221
  %223 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %222) #7
  %224 = icmp sgt i32 %218, 0
  br i1 %224, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %215
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %223, i8 0, i64 %221, i1 false), !tbaa !11
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.preheader, %215
  %.not = icmp eq ptr %2, null
  %225 = icmp eq i32 %3, 1
  br i1 %.not, label %372, label %226

226:                                              ; preds = %._crit_edge
  br i1 %225, label %.preheader434, label %292

.preheader434:                                    ; preds = %226
  %227 = getelementptr inbounds i8, ptr %2, i64 16
  %228 = load i32, ptr %227, align 8, !tbaa !5
  %229 = icmp sgt i32 %228, 0
  br i1 %229, label %.lr.ph458, label %.loopexit428

.lr.ph458:                                        ; preds = %.preheader434
  %230 = getelementptr inbounds i8, ptr %2, i64 8
  %231 = getelementptr inbounds i8, ptr %0, i64 24
  %232 = getelementptr inbounds i8, ptr %0, i64 40
  %233 = getelementptr inbounds i8, ptr %0, i64 16
  br label %234

234:                                              ; preds = %.lr.ph458, %.loopexit433
  %.0379457 = phi i64 [ 0, %.lr.ph458 ], [ %288, %.loopexit433 ]
  %235 = load ptr, ptr %230, align 8, !tbaa !37
  %236 = getelementptr inbounds i32, ptr %235, i64 %.0379457
  %237 = load i32, ptr %236, align 4, !tbaa !24
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds double, ptr %5, i64 %238
  %240 = load double, ptr %239, align 8, !tbaa !11
  %241 = tail call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %240, double noundef 1.000000e-25)
  %242 = icmp eq i32 %241, 0
  br i1 %242, label %243, label %.loopexit433

243:                                              ; preds = %234
  %244 = load ptr, ptr %2, align 8, !tbaa !23
  %245 = getelementptr inbounds i32, ptr %244, i64 %238
  %246 = load i32, ptr %245, align 4, !tbaa !24
  %247 = sext i32 %246 to i64
  %248 = load ptr, ptr %231, align 8, !tbaa !38
  %249 = getelementptr inbounds i32, ptr %248, i64 %247
  %250 = load i32, ptr %249, align 4, !tbaa !24
  %251 = getelementptr i8, ptr %249, i64 4
  %252 = load i32, ptr %251, align 4, !tbaa !24
  %253 = sext i32 %252 to i64
  %254 = icmp slt i32 %250, %252
  br i1 %254, label %.lr.ph456, label %.loopexit433

.lr.ph456:                                        ; preds = %243
  %255 = sext i32 %250 to i64
  %256 = load ptr, ptr %232, align 8, !tbaa !39
  %257 = load ptr, ptr %233, align 8, !tbaa !40
  %258 = sub nsw i64 %253, %255
  %xtraiter709 = and i64 %258, 1
  %lcmp.mod710.not = icmp eq i64 %xtraiter709, 0
  br i1 %lcmp.mod710.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.lr.ph456
  %259 = getelementptr inbounds double, ptr %256, i64 %255
  %260 = load double, ptr %259, align 8, !tbaa !11
  %261 = getelementptr inbounds i32, ptr %257, i64 %255
  %262 = load i32, ptr %261, align 4, !tbaa !24
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds double, ptr %223, i64 %263
  %265 = load double, ptr %264, align 8, !tbaa !11
  %266 = tail call double @llvm.fmuladd.f64(double %260, double %240, double %265)
  store double %266, ptr %264, align 8, !tbaa !11
  %267 = add nsw i64 %255, 1
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.lr.ph456
  %.0358454.unr = phi i64 [ %255, %.lr.ph456 ], [ %267, %.prol.loopexit.unr-lcssa ]
  %268 = add nsw i64 %253, -1
  %269 = icmp eq i64 %268, %255
  br i1 %269, label %.loopexit433, label %.lr.ph456.new

.lr.ph456.new:                                    ; preds = %.prol.loopexit, %.lr.ph456.new
  %.0358454 = phi i64 [ %287, %.lr.ph456.new ], [ %.0358454.unr, %.prol.loopexit ]
  %270 = getelementptr inbounds double, ptr %256, i64 %.0358454
  %271 = load double, ptr %270, align 8, !tbaa !11
  %272 = getelementptr inbounds i32, ptr %257, i64 %.0358454
  %273 = load i32, ptr %272, align 4, !tbaa !24
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds double, ptr %223, i64 %274
  %276 = load double, ptr %275, align 8, !tbaa !11
  %277 = tail call double @llvm.fmuladd.f64(double %271, double %240, double %276)
  store double %277, ptr %275, align 8, !tbaa !11
  %278 = add nsw i64 %.0358454, 1
  %279 = getelementptr inbounds double, ptr %256, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !11
  %281 = getelementptr inbounds i32, ptr %257, i64 %278
  %282 = load i32, ptr %281, align 4, !tbaa !24
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %223, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !11
  %286 = tail call double @llvm.fmuladd.f64(double %280, double %240, double %285)
  store double %286, ptr %284, align 8, !tbaa !11
  %287 = add nsw i64 %.0358454, 2
  %exitcond580.not.1 = icmp eq i64 %287, %253
  br i1 %exitcond580.not.1, label %.loopexit433, label %.lr.ph456.new, !llvm.loop !41

.loopexit433:                                     ; preds = %.prol.loopexit, %.lr.ph456.new, %243, %234
  %288 = add nuw nsw i64 %.0379457, 1
  %289 = load i32, ptr %227, align 8, !tbaa !5
  %290 = sext i32 %289 to i64
  %291 = icmp slt i64 %288, %290
  br i1 %291, label %234, label %.loopexit428, !llvm.loop !42

292:                                              ; preds = %226
  %293 = sext i32 %3 to i64
  %294 = icmp slt i32 %3, 0
  %295 = shl nsw i64 %293, 3
  %296 = select i1 %294, i64 -1, i64 %295
  %297 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %296) #7
  %298 = getelementptr inbounds i8, ptr %2, i64 16
  %299 = load i32, ptr %298, align 8, !tbaa !5
  %300 = icmp sgt i32 %299, 0
  br i1 %300, label %.lr.ph452, label %._crit_edge453

.lr.ph452:                                        ; preds = %292
  %301 = getelementptr inbounds i8, ptr %2, i64 8
  %302 = icmp sgt i32 %3, 0
  %303 = sext i32 %6 to i64
  %304 = getelementptr inbounds i8, ptr %0, i64 24
  %305 = getelementptr inbounds i8, ptr %0, i64 40
  %306 = sext i32 %217 to i64
  %307 = getelementptr inbounds i8, ptr %0, i64 16
  %min.iters.check = icmp ugt i32 %3, 3
  %ident.check.not = icmp eq i32 %217, 1
  %or.cond = and i1 %min.iters.check, %ident.check.not
  %n.vec = and i64 %293, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %293
  %xtraiter = and i64 %293, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %308 = add nsw i64 %293, -1
  br label %309

309:                                              ; preds = %.lr.ph452, %.loopexit437
  %.1380450 = phi i64 [ 0, %.lr.ph452 ], [ %368, %.loopexit437 ]
  %310 = load ptr, ptr %301, align 8, !tbaa !37
  %311 = getelementptr inbounds i32, ptr %310, i64 %.1380450
  %312 = load i32, ptr %311, align 4, !tbaa !24
  %313 = sext i32 %312 to i64
  %invariant.gep = getelementptr double, ptr %5, i64 %313
  br i1 %302, label %.lr.ph442, label %._crit_edge443

.lr.ph442:                                        ; preds = %309, %.lr.ph442
  %.0357440 = phi double [ %318, %.lr.ph442 ], [ 0.000000e+00, %309 ]
  %.7370439 = phi i64 [ %319, %.lr.ph442 ], [ 0, %309 ]
  %314 = mul nsw i64 %.7370439, %303
  %gep = getelementptr double, ptr %invariant.gep, i64 %314
  %315 = load double, ptr %gep, align 8, !tbaa !11
  %316 = getelementptr inbounds double, ptr %297, i64 %.7370439
  store double %315, ptr %316, align 8, !tbaa !11
  %317 = tail call noundef double @_ZN7qpOASES6getAbsEd(double noundef %315)
  %318 = tail call noundef double @_ZN7qpOASES6getMaxEdd(double noundef %.0357440, double noundef %317)
  %319 = add nuw nsw i64 %.7370439, 1
  %exitcond.not = icmp eq i64 %319, %293
  br i1 %exitcond.not, label %._crit_edge443, label %.lr.ph442, !llvm.loop !43

._crit_edge443:                                   ; preds = %.lr.ph442, %309
  %.0357.lcssa = phi double [ 0.000000e+00, %309 ], [ %318, %.lr.ph442 ]
  %320 = tail call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %.0357.lcssa, double noundef 1.000000e-25)
  %321 = icmp eq i32 %320, 0
  br i1 %321, label %322, label %.loopexit437

322:                                              ; preds = %._crit_edge443
  %323 = load ptr, ptr %2, align 8, !tbaa !23
  %324 = getelementptr inbounds i32, ptr %323, i64 %313
  %325 = load i32, ptr %324, align 4, !tbaa !24
  %326 = sext i32 %325 to i64
  %327 = load ptr, ptr %304, align 8, !tbaa !38
  %328 = getelementptr inbounds i32, ptr %327, i64 %326
  %329 = load i32, ptr %328, align 4, !tbaa !24
  %330 = getelementptr i8, ptr %328, i64 4
  %331 = load i32, ptr %330, align 4, !tbaa !24
  %332 = sext i32 %331 to i64
  %333 = icmp slt i32 %329, %331
  br i1 %333, label %.preheader436.lr.ph, label %.loopexit437

.preheader436.lr.ph:                              ; preds = %322
  %334 = load ptr, ptr %305, align 8
  %335 = load ptr, ptr %307, align 8
  br i1 %302, label %.preheader436.us.preheader, label %.loopexit437

.preheader436.us.preheader:                       ; preds = %.preheader436.lr.ph
  %336 = sext i32 %329 to i64
  br label %.preheader436.us

.preheader436.us:                                 ; preds = %.preheader436.us.preheader, %._crit_edge446.us
  %.1449.us = phi i64 [ %367, %._crit_edge446.us ], [ %336, %.preheader436.us.preheader ]
  %337 = getelementptr inbounds double, ptr %334, i64 %.1449.us
  %338 = getelementptr inbounds i32, ptr %335, i64 %.1449.us
  %339 = load i32, ptr %338, align 4, !tbaa !24
  %340 = sext i32 %339 to i64
  %invariant.gep447.us = getelementptr double, ptr %223, i64 %340
  %.pre = load double, ptr %337, align 8, !tbaa !11
  br i1 %or.cond, label %vector.ph, label %scalar.ph.preheader

vector.ph:                                        ; preds = %.preheader436.us
  %broadcast.splatinsert = insertelement <2 x double> poison, double %.pre, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %341 = getelementptr inbounds double, ptr %297, i64 %index
  %342 = getelementptr inbounds i8, ptr %341, i64 16
  %wide.load = load <2 x double>, ptr %341, align 8, !tbaa !11
  %wide.load643 = load <2 x double>, ptr %342, align 8, !tbaa !11
  %343 = getelementptr double, ptr %invariant.gep447.us, i64 %index
  %344 = getelementptr i8, ptr %343, i64 16
  %wide.load644 = load <2 x double>, ptr %343, align 8, !tbaa !11
  %wide.load645 = load <2 x double>, ptr %344, align 8, !tbaa !11
  %345 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load, <2 x double> %wide.load644)
  %346 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat, <2 x double> %wide.load643, <2 x double> %wide.load645)
  store <2 x double> %345, ptr %343, align 8, !tbaa !11
  store <2 x double> %346, ptr %344, align 8, !tbaa !11
  %index.next = add nuw i64 %index, 4
  %347 = icmp eq i64 %index.next, %n.vec
  br i1 %347, label %middle.block, label %vector.body, !llvm.loop !44

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

scalar.ph.preheader:                              ; preds = %middle.block, %.preheader436.us
  %.8371444.us.ph = phi i64 [ 0, %.preheader436.us ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %348 = getelementptr inbounds double, ptr %297, i64 %.8371444.us.ph
  %349 = load double, ptr %348, align 8, !tbaa !11
  %350 = mul nsw i64 %.8371444.us.ph, %306
  %gep448.us.prol = getelementptr double, ptr %invariant.gep447.us, i64 %350
  %351 = load double, ptr %gep448.us.prol, align 8, !tbaa !11
  %352 = tail call double @llvm.fmuladd.f64(double %.pre, double %349, double %351)
  store double %352, ptr %gep448.us.prol, align 8, !tbaa !11
  %353 = or disjoint i64 %.8371444.us.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.8371444.us.unr = phi i64 [ %.8371444.us.ph, %scalar.ph.preheader ], [ %353, %scalar.ph.prol ]
  %354 = icmp eq i64 %.8371444.us.ph, %308
  br i1 %354, label %._crit_edge446.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.8371444.us = phi i64 [ %366, %scalar.ph ], [ %.8371444.us.unr, %scalar.ph.prol.loopexit ]
  %355 = getelementptr inbounds double, ptr %297, i64 %.8371444.us
  %356 = load double, ptr %355, align 8, !tbaa !11
  %357 = mul nsw i64 %.8371444.us, %306
  %gep448.us = getelementptr double, ptr %invariant.gep447.us, i64 %357
  %358 = load double, ptr %gep448.us, align 8, !tbaa !11
  %359 = tail call double @llvm.fmuladd.f64(double %.pre, double %356, double %358)
  store double %359, ptr %gep448.us, align 8, !tbaa !11
  %360 = add nuw nsw i64 %.8371444.us, 1
  %361 = getelementptr inbounds double, ptr %297, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !11
  %363 = mul nsw i64 %360, %306
  %gep448.us.1 = getelementptr double, ptr %invariant.gep447.us, i64 %363
  %364 = load double, ptr %gep448.us.1, align 8, !tbaa !11
  %365 = tail call double @llvm.fmuladd.f64(double %.pre, double %362, double %364)
  store double %365, ptr %gep448.us.1, align 8, !tbaa !11
  %366 = add nuw nsw i64 %.8371444.us, 2
  %exitcond578.not.1 = icmp eq i64 %366, %293
  br i1 %exitcond578.not.1, label %._crit_edge446.us, label %scalar.ph, !llvm.loop !45

._crit_edge446.us:                                ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %367 = add nsw i64 %.1449.us, 1
  %exitcond579.not = icmp eq i64 %367, %332
  br i1 %exitcond579.not, label %.loopexit437, label %.preheader436.us, !llvm.loop !46

.loopexit437:                                     ; preds = %._crit_edge446.us, %.preheader436.lr.ph, %322, %._crit_edge443
  %368 = add nuw nsw i64 %.1380450, 1
  %369 = load i32, ptr %298, align 8, !tbaa !5
  %370 = sext i32 %369 to i64
  %371 = icmp slt i64 %368, %370
  br i1 %371, label %309, label %._crit_edge453, !llvm.loop !47

._crit_edge453:                                   ; preds = %.loopexit437, %292
  tail call void @_ZdaPv(ptr noundef nonnull %297) #8
  br label %.loopexit428

372:                                              ; preds = %._crit_edge
  br i1 %225, label %.preheader427, label %429

.preheader427:                                    ; preds = %372
  %373 = getelementptr inbounds i8, ptr %0, i64 12
  %374 = load i32, ptr %373, align 4, !tbaa !48
  %375 = icmp sgt i32 %374, 0
  br i1 %375, label %.lr.ph477, label %.loopexit428

.lr.ph477:                                        ; preds = %.preheader427
  %376 = getelementptr inbounds i8, ptr %0, i64 24
  %377 = getelementptr inbounds i8, ptr %0, i64 40
  %378 = getelementptr inbounds i8, ptr %0, i64 16
  br label %379

379:                                              ; preds = %.lr.ph477, %.loopexit426
  %.0377476 = phi i64 [ 0, %.lr.ph477 ], [ %425, %.loopexit426 ]
  %380 = getelementptr inbounds double, ptr %5, i64 %.0377476
  %381 = load double, ptr %380, align 8, !tbaa !11
  %382 = tail call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %381, double noundef 1.000000e-25)
  %383 = icmp eq i32 %382, 0
  br i1 %383, label %384, label %.loopexit426

384:                                              ; preds = %379
  %385 = load ptr, ptr %376, align 8, !tbaa !38
  %386 = getelementptr inbounds i32, ptr %385, i64 %.0377476
  %387 = load i32, ptr %386, align 4, !tbaa !24
  %388 = getelementptr inbounds i8, ptr %386, i64 4
  %389 = load i32, ptr %388, align 4, !tbaa !24
  %390 = sext i32 %389 to i64
  %391 = icmp slt i32 %387, %389
  br i1 %391, label %.lr.ph475, label %.loopexit426

.lr.ph475:                                        ; preds = %384
  %392 = sext i32 %387 to i64
  %393 = load ptr, ptr %377, align 8, !tbaa !39
  %394 = load ptr, ptr %378, align 8, !tbaa !40
  %395 = sub nsw i64 %390, %392
  %xtraiter715 = and i64 %395, 1
  %lcmp.mod716.not = icmp eq i64 %xtraiter715, 0
  br i1 %lcmp.mod716.not, label %.prol.loopexit714, label %.prol.loopexit714.unr-lcssa

.prol.loopexit714.unr-lcssa:                      ; preds = %.lr.ph475
  %396 = getelementptr inbounds double, ptr %393, i64 %392
  %397 = load double, ptr %396, align 8, !tbaa !11
  %398 = getelementptr inbounds i32, ptr %394, i64 %392
  %399 = load i32, ptr %398, align 4, !tbaa !24
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds double, ptr %223, i64 %400
  %402 = load double, ptr %401, align 8, !tbaa !11
  %403 = tail call double @llvm.fmuladd.f64(double %397, double %381, double %402)
  store double %403, ptr %401, align 8, !tbaa !11
  %404 = add nsw i64 %392, 1
  br label %.prol.loopexit714

.prol.loopexit714:                                ; preds = %.prol.loopexit714.unr-lcssa, %.lr.ph475
  %.2473.unr = phi i64 [ %392, %.lr.ph475 ], [ %404, %.prol.loopexit714.unr-lcssa ]
  %405 = add nsw i64 %390, -1
  %406 = icmp eq i64 %405, %392
  br i1 %406, label %.loopexit426, label %.lr.ph475.new

.lr.ph475.new:                                    ; preds = %.prol.loopexit714, %.lr.ph475.new
  %.2473 = phi i64 [ %424, %.lr.ph475.new ], [ %.2473.unr, %.prol.loopexit714 ]
  %407 = getelementptr inbounds double, ptr %393, i64 %.2473
  %408 = load double, ptr %407, align 8, !tbaa !11
  %409 = getelementptr inbounds i32, ptr %394, i64 %.2473
  %410 = load i32, ptr %409, align 4, !tbaa !24
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds double, ptr %223, i64 %411
  %413 = load double, ptr %412, align 8, !tbaa !11
  %414 = tail call double @llvm.fmuladd.f64(double %408, double %381, double %413)
  store double %414, ptr %412, align 8, !tbaa !11
  %415 = add nsw i64 %.2473, 1
  %416 = getelementptr inbounds double, ptr %393, i64 %415
  %417 = load double, ptr %416, align 8, !tbaa !11
  %418 = getelementptr inbounds i32, ptr %394, i64 %415
  %419 = load i32, ptr %418, align 4, !tbaa !24
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds double, ptr %223, i64 %420
  %422 = load double, ptr %421, align 8, !tbaa !11
  %423 = tail call double @llvm.fmuladd.f64(double %417, double %381, double %422)
  store double %423, ptr %421, align 8, !tbaa !11
  %424 = add nsw i64 %.2473, 2
  %exitcond584.not.1 = icmp eq i64 %424, %390
  br i1 %exitcond584.not.1, label %.loopexit426, label %.lr.ph475.new, !llvm.loop !49

.loopexit426:                                     ; preds = %.prol.loopexit714, %.lr.ph475.new, %384, %379
  %425 = add nuw nsw i64 %.0377476, 1
  %426 = load i32, ptr %373, align 4, !tbaa !48
  %427 = sext i32 %426 to i64
  %428 = icmp slt i64 %425, %427
  br i1 %428, label %379, label %.loopexit428, !llvm.loop !50

429:                                              ; preds = %372
  %430 = sext i32 %3 to i64
  %431 = icmp slt i32 %3, 0
  %432 = shl nsw i64 %430, 3
  %433 = select i1 %431, i64 -1, i64 %432
  %434 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %433) #7
  %435 = getelementptr inbounds i8, ptr %0, i64 12
  %436 = load i32, ptr %435, align 4, !tbaa !48
  %437 = icmp sgt i32 %436, 0
  br i1 %437, label %.preheader431.lr.ph, label %.loopexit428

.preheader431.lr.ph:                              ; preds = %429
  %438 = icmp sgt i32 %3, 0
  %439 = sext i32 %6 to i64
  %440 = getelementptr inbounds i8, ptr %0, i64 24
  %441 = getelementptr inbounds i8, ptr %0, i64 40
  %442 = sext i32 %217 to i64
  %443 = getelementptr inbounds i8, ptr %0, i64 16
  %min.iters.check650 = icmp ugt i32 %3, 3
  %ident.check647.not = icmp eq i32 %217, 1
  %or.cond693 = and i1 %min.iters.check650, %ident.check647.not
  %n.vec653 = and i64 %430, 2147483644
  %cmp.n664 = icmp eq i64 %n.vec653, %430
  %xtraiter711 = and i64 %430, 1
  %lcmp.mod712.not = icmp eq i64 %xtraiter711, 0
  %444 = add nsw i64 %430, -1
  br label %.preheader431

.preheader431:                                    ; preds = %.preheader431.lr.ph, %.loopexit430
  %.1378472 = phi i64 [ 0, %.preheader431.lr.ph ], [ %495, %.loopexit430 ]
  %invariant.gep459 = getelementptr double, ptr %5, i64 %.1378472
  br i1 %438, label %.lr.ph463, label %._crit_edge464

.lr.ph463:                                        ; preds = %.preheader431, %.lr.ph463
  %.0462 = phi double [ %449, %.lr.ph463 ], [ 0.000000e+00, %.preheader431 ]
  %.9372461 = phi i64 [ %450, %.lr.ph463 ], [ 0, %.preheader431 ]
  %445 = mul nsw i64 %.9372461, %439
  %gep460 = getelementptr double, ptr %invariant.gep459, i64 %445
  %446 = load double, ptr %gep460, align 8, !tbaa !11
  %447 = getelementptr inbounds double, ptr %434, i64 %.9372461
  store double %446, ptr %447, align 8, !tbaa !11
  %448 = tail call noundef double @_ZN7qpOASES6getAbsEd(double noundef %446)
  %449 = tail call noundef double @_ZN7qpOASES6getMaxEdd(double noundef %.0462, double noundef %448)
  %450 = add nuw nsw i64 %.9372461, 1
  %exitcond581.not = icmp eq i64 %450, %430
  br i1 %exitcond581.not, label %._crit_edge464, label %.lr.ph463, !llvm.loop !51

._crit_edge464:                                   ; preds = %.lr.ph463, %.preheader431
  %.0.lcssa = phi double [ 0.000000e+00, %.preheader431 ], [ %449, %.lr.ph463 ]
  %451 = tail call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %.0.lcssa, double noundef 1.000000e-25)
  %452 = icmp eq i32 %451, 0
  br i1 %452, label %453, label %.loopexit430

453:                                              ; preds = %._crit_edge464
  %454 = load ptr, ptr %440, align 8, !tbaa !38
  %455 = getelementptr inbounds i32, ptr %454, i64 %.1378472
  %456 = load i32, ptr %455, align 4, !tbaa !24
  %457 = getelementptr inbounds i8, ptr %455, i64 4
  %458 = load i32, ptr %457, align 4, !tbaa !24
  %459 = sext i32 %458 to i64
  %460 = icmp slt i32 %456, %458
  br i1 %460, label %.preheader429.lr.ph, label %.loopexit430

.preheader429.lr.ph:                              ; preds = %453
  %461 = load ptr, ptr %441, align 8
  %462 = load ptr, ptr %443, align 8
  br i1 %438, label %.preheader429.us.preheader, label %.loopexit430

.preheader429.us.preheader:                       ; preds = %.preheader429.lr.ph
  %463 = sext i32 %456 to i64
  br label %.preheader429.us

.preheader429.us:                                 ; preds = %.preheader429.us.preheader, %._crit_edge468.us
  %.3471.us = phi i64 [ %494, %._crit_edge468.us ], [ %463, %.preheader429.us.preheader ]
  %464 = getelementptr inbounds double, ptr %461, i64 %.3471.us
  %465 = getelementptr inbounds i32, ptr %462, i64 %.3471.us
  %466 = load i32, ptr %465, align 4, !tbaa !24
  %467 = sext i32 %466 to i64
  %invariant.gep469.us = getelementptr double, ptr %223, i64 %467
  %.pre612 = load double, ptr %464, align 8, !tbaa !11
  br i1 %or.cond693, label %vector.ph651, label %scalar.ph649.preheader

vector.ph651:                                     ; preds = %.preheader429.us
  %broadcast.splatinsert661 = insertelement <2 x double> poison, double %.pre612, i64 0
  %broadcast.splat662 = shufflevector <2 x double> %broadcast.splatinsert661, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body655

vector.body655:                                   ; preds = %vector.body655, %vector.ph651
  %index656 = phi i64 [ 0, %vector.ph651 ], [ %index.next663, %vector.body655 ]
  %468 = getelementptr inbounds double, ptr %434, i64 %index656
  %469 = getelementptr inbounds i8, ptr %468, i64 16
  %wide.load657 = load <2 x double>, ptr %468, align 8, !tbaa !11
  %wide.load658 = load <2 x double>, ptr %469, align 8, !tbaa !11
  %470 = getelementptr double, ptr %invariant.gep469.us, i64 %index656
  %471 = getelementptr i8, ptr %470, i64 16
  %wide.load659 = load <2 x double>, ptr %470, align 8, !tbaa !11
  %wide.load660 = load <2 x double>, ptr %471, align 8, !tbaa !11
  %472 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat662, <2 x double> %wide.load657, <2 x double> %wide.load659)
  %473 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat662, <2 x double> %wide.load658, <2 x double> %wide.load660)
  store <2 x double> %472, ptr %470, align 8, !tbaa !11
  store <2 x double> %473, ptr %471, align 8, !tbaa !11
  %index.next663 = add nuw i64 %index656, 4
  %474 = icmp eq i64 %index.next663, %n.vec653
  br i1 %474, label %middle.block648, label %vector.body655, !llvm.loop !52

middle.block648:                                  ; preds = %vector.body655
  br i1 %cmp.n664, label %._crit_edge468.us, label %scalar.ph649.preheader

scalar.ph649.preheader:                           ; preds = %middle.block648, %.preheader429.us
  %.10373466.us.ph = phi i64 [ 0, %.preheader429.us ], [ %n.vec653, %middle.block648 ]
  br i1 %lcmp.mod712.not, label %scalar.ph649.prol.loopexit, label %scalar.ph649.prol

scalar.ph649.prol:                                ; preds = %scalar.ph649.preheader
  %475 = getelementptr inbounds double, ptr %434, i64 %.10373466.us.ph
  %476 = load double, ptr %475, align 8, !tbaa !11
  %477 = mul nsw i64 %.10373466.us.ph, %442
  %gep470.us.prol = getelementptr double, ptr %invariant.gep469.us, i64 %477
  %478 = load double, ptr %gep470.us.prol, align 8, !tbaa !11
  %479 = tail call double @llvm.fmuladd.f64(double %.pre612, double %476, double %478)
  store double %479, ptr %gep470.us.prol, align 8, !tbaa !11
  %480 = or disjoint i64 %.10373466.us.ph, 1
  br label %scalar.ph649.prol.loopexit

scalar.ph649.prol.loopexit:                       ; preds = %scalar.ph649.prol, %scalar.ph649.preheader
  %.10373466.us.unr = phi i64 [ %.10373466.us.ph, %scalar.ph649.preheader ], [ %480, %scalar.ph649.prol ]
  %481 = icmp eq i64 %.10373466.us.ph, %444
  br i1 %481, label %._crit_edge468.us, label %scalar.ph649

scalar.ph649:                                     ; preds = %scalar.ph649.prol.loopexit, %scalar.ph649
  %.10373466.us = phi i64 [ %493, %scalar.ph649 ], [ %.10373466.us.unr, %scalar.ph649.prol.loopexit ]
  %482 = getelementptr inbounds double, ptr %434, i64 %.10373466.us
  %483 = load double, ptr %482, align 8, !tbaa !11
  %484 = mul nsw i64 %.10373466.us, %442
  %gep470.us = getelementptr double, ptr %invariant.gep469.us, i64 %484
  %485 = load double, ptr %gep470.us, align 8, !tbaa !11
  %486 = tail call double @llvm.fmuladd.f64(double %.pre612, double %483, double %485)
  store double %486, ptr %gep470.us, align 8, !tbaa !11
  %487 = add nuw nsw i64 %.10373466.us, 1
  %488 = getelementptr inbounds double, ptr %434, i64 %487
  %489 = load double, ptr %488, align 8, !tbaa !11
  %490 = mul nsw i64 %487, %442
  %gep470.us.1 = getelementptr double, ptr %invariant.gep469.us, i64 %490
  %491 = load double, ptr %gep470.us.1, align 8, !tbaa !11
  %492 = tail call double @llvm.fmuladd.f64(double %.pre612, double %489, double %491)
  store double %492, ptr %gep470.us.1, align 8, !tbaa !11
  %493 = add nuw nsw i64 %.10373466.us, 2
  %exitcond582.not.1 = icmp eq i64 %493, %430
  br i1 %exitcond582.not.1, label %._crit_edge468.us, label %scalar.ph649, !llvm.loop !53

._crit_edge468.us:                                ; preds = %scalar.ph649.prol.loopexit, %scalar.ph649, %middle.block648
  %494 = add nsw i64 %.3471.us, 1
  %exitcond583.not = icmp eq i64 %494, %459
  br i1 %exitcond583.not, label %.loopexit430, label %.preheader429.us, !llvm.loop !54

.loopexit430:                                     ; preds = %._crit_edge468.us, %.preheader429.lr.ph, %453, %._crit_edge464
  tail call void @_ZdaPv(ptr noundef nonnull %434) #8
  %495 = add nuw nsw i64 %.1378472, 1
  %496 = load i32, ptr %435, align 4, !tbaa !48
  %497 = sext i32 %496 to i64
  %498 = icmp slt i64 %495, %497
  br i1 %498, label %.preheader431, label %.loopexit428, !llvm.loop !55

.loopexit428:                                     ; preds = %.loopexit433, %.loopexit430, %.loopexit426, %.preheader434, %429, %.preheader427, %._crit_edge453
  %499 = icmp eq i32 %10, 1
  %500 = tail call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %7, double noundef 1.000000e-25)
  %501 = icmp eq i32 %500, 1
  br i1 %499, label %502, label %678

502:                                              ; preds = %.loopexit428
  br i1 %501, label %.preheader403, label %552

.preheader403:                                    ; preds = %502
  %503 = sext i32 %3 to i64
  %504 = icmp sgt i32 %3, 0
  br i1 %504, label %.preheader402.lr.ph, label %.loopexit404

.preheader402.lr.ph:                              ; preds = %.preheader403
  %505 = getelementptr inbounds i8, ptr %1, i64 16
  %506 = load i32, ptr %505, align 8, !tbaa !5
  %507 = sext i32 %506 to i64
  %508 = icmp sgt i32 %506, 0
  %509 = sext i32 %217 to i64
  %510 = sext i32 %9 to i64
  %xtraiter753 = and i64 %507, 3
  %511 = icmp ult i32 %506, 4
  %unroll_iter756 = and i64 %507, 2147483644
  %lcmp.mod755.not = icmp eq i64 %xtraiter753, 0
  br label %.preheader402

.preheader402:                                    ; preds = %.preheader402.lr.ph, %._crit_edge520
  %.11374523 = phi i64 [ 0, %.preheader402.lr.ph ], [ %551, %._crit_edge520 ]
  br i1 %508, label %.lr.ph519, label %._crit_edge520

.lr.ph519:                                        ; preds = %.preheader402
  %512 = load ptr, ptr %1, align 8, !tbaa !23
  %513 = mul nsw i64 %.11374523, %509
  %514 = getelementptr double, ptr %223, i64 %513
  %515 = mul nsw i64 %.11374523, %510
  %invariant.gep521 = getelementptr double, ptr %8, i64 %515
  br i1 %511, label %._crit_edge520.loopexit.unr-lcssa, label %.lr.ph519.new

.lr.ph519.new:                                    ; preds = %.lr.ph519, %.lr.ph519.new
  %.6518 = phi i64 [ %543, %.lr.ph519.new ], [ 0, %.lr.ph519 ]
  %niter757 = phi i64 [ %niter757.next.3, %.lr.ph519.new ], [ 0, %.lr.ph519 ]
  %516 = getelementptr inbounds i32, ptr %512, i64 %.6518
  %517 = load i32, ptr %516, align 4, !tbaa !24
  %518 = sext i32 %517 to i64
  %519 = getelementptr double, ptr %514, i64 %518
  %520 = load double, ptr %519, align 8, !tbaa !11
  %521 = fmul double %520, %4
  %gep522 = getelementptr double, ptr %invariant.gep521, i64 %.6518
  store double %521, ptr %gep522, align 8, !tbaa !11
  %522 = or disjoint i64 %.6518, 1
  %523 = getelementptr inbounds i32, ptr %512, i64 %522
  %524 = load i32, ptr %523, align 4, !tbaa !24
  %525 = sext i32 %524 to i64
  %526 = getelementptr double, ptr %514, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !11
  %528 = fmul double %527, %4
  %gep522.1 = getelementptr double, ptr %invariant.gep521, i64 %522
  store double %528, ptr %gep522.1, align 8, !tbaa !11
  %529 = or disjoint i64 %.6518, 2
  %530 = getelementptr inbounds i32, ptr %512, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !24
  %532 = sext i32 %531 to i64
  %533 = getelementptr double, ptr %514, i64 %532
  %534 = load double, ptr %533, align 8, !tbaa !11
  %535 = fmul double %534, %4
  %gep522.2 = getelementptr double, ptr %invariant.gep521, i64 %529
  store double %535, ptr %gep522.2, align 8, !tbaa !11
  %536 = or disjoint i64 %.6518, 3
  %537 = getelementptr inbounds i32, ptr %512, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !24
  %539 = sext i32 %538 to i64
  %540 = getelementptr double, ptr %514, i64 %539
  %541 = load double, ptr %540, align 8, !tbaa !11
  %542 = fmul double %541, %4
  %gep522.3 = getelementptr double, ptr %invariant.gep521, i64 %536
  store double %542, ptr %gep522.3, align 8, !tbaa !11
  %543 = add nuw nsw i64 %.6518, 4
  %niter757.next.3 = add i64 %niter757, 4
  %niter757.ncmp.3 = icmp eq i64 %niter757.next.3, %unroll_iter756
  br i1 %niter757.ncmp.3, label %._crit_edge520.loopexit.unr-lcssa, label %.lr.ph519.new, !llvm.loop !56

._crit_edge520.loopexit.unr-lcssa:                ; preds = %.lr.ph519.new, %.lr.ph519
  %.6518.unr = phi i64 [ 0, %.lr.ph519 ], [ %543, %.lr.ph519.new ]
  br i1 %lcmp.mod755.not, label %._crit_edge520, label %.epil.preheader752

.epil.preheader752:                               ; preds = %._crit_edge520.loopexit.unr-lcssa, %.epil.preheader752
  %.6518.epil = phi i64 [ %550, %.epil.preheader752 ], [ %.6518.unr, %._crit_edge520.loopexit.unr-lcssa ]
  %epil.iter754 = phi i64 [ %epil.iter754.next, %.epil.preheader752 ], [ 0, %._crit_edge520.loopexit.unr-lcssa ]
  %544 = getelementptr inbounds i32, ptr %512, i64 %.6518.epil
  %545 = load i32, ptr %544, align 4, !tbaa !24
  %546 = sext i32 %545 to i64
  %547 = getelementptr double, ptr %514, i64 %546
  %548 = load double, ptr %547, align 8, !tbaa !11
  %549 = fmul double %548, %4
  %gep522.epil = getelementptr double, ptr %invariant.gep521, i64 %.6518.epil
  store double %549, ptr %gep522.epil, align 8, !tbaa !11
  %550 = add nuw nsw i64 %.6518.epil, 1
  %epil.iter754.next = add i64 %epil.iter754, 1
  %epil.iter754.cmp.not = icmp eq i64 %epil.iter754.next, %xtraiter753
  br i1 %epil.iter754.cmp.not, label %._crit_edge520, label %.epil.preheader752, !llvm.loop !57

._crit_edge520:                                   ; preds = %._crit_edge520.loopexit.unr-lcssa, %.epil.preheader752, %.preheader402
  %551 = add nuw nsw i64 %.11374523, 1
  %exitcond600.not = icmp eq i64 %551, %503
  br i1 %exitcond600.not, label %.loopexit404, label %.preheader402, !llvm.loop !58

552:                                              ; preds = %502
  %553 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %554 = icmp eq i32 %553, 1
  br i1 %554, label %.preheader406, label %592

.preheader406:                                    ; preds = %552
  %555 = sext i32 %3 to i64
  %556 = icmp sgt i32 %3, 0
  br i1 %556, label %.preheader405.lr.ph, label %.loopexit404

.preheader405.lr.ph:                              ; preds = %.preheader406
  %557 = getelementptr inbounds i8, ptr %1, i64 16
  %558 = load i32, ptr %557, align 8, !tbaa !5
  %559 = sext i32 %558 to i64
  %560 = icmp sgt i32 %558, 0
  %561 = sext i32 %217 to i64
  %562 = sext i32 %9 to i64
  br i1 %560, label %.preheader405.lr.ph.split.us, label %.loopexit404

.preheader405.lr.ph.split.us:                     ; preds = %.preheader405.lr.ph
  %563 = load ptr, ptr %1, align 8, !tbaa !23
  %xtraiter747 = and i64 %559, 1
  %564 = icmp eq i32 %558, 1
  %unroll_iter750 = and i64 %559, 2147483646
  %lcmp.mod749.not = icmp eq i64 %xtraiter747, 0
  br label %.preheader405.us

.preheader405.us:                                 ; preds = %._crit_edge514.us, %.preheader405.lr.ph.split.us
  %.12375517.us = phi i64 [ 0, %.preheader405.lr.ph.split.us ], [ %591, %._crit_edge514.us ]
  %565 = mul nsw i64 %.12375517.us, %561
  %566 = getelementptr double, ptr %223, i64 %565
  %567 = mul nsw i64 %.12375517.us, %562
  %invariant.gep515.us = getelementptr double, ptr %8, i64 %567
  br i1 %564, label %._crit_edge514.us.unr-lcssa, label %.preheader405.us.new

.preheader405.us.new:                             ; preds = %.preheader405.us, %.preheader405.us.new
  %.7512.us = phi i64 [ %583, %.preheader405.us.new ], [ 0, %.preheader405.us ]
  %niter751 = phi i64 [ %niter751.next.1, %.preheader405.us.new ], [ 0, %.preheader405.us ]
  %568 = getelementptr inbounds i32, ptr %563, i64 %.7512.us
  %569 = load i32, ptr %568, align 4, !tbaa !24
  %570 = sext i32 %569 to i64
  %571 = getelementptr double, ptr %566, i64 %570
  %572 = load double, ptr %571, align 8, !tbaa !11
  %gep516.us = getelementptr double, ptr %invariant.gep515.us, i64 %.7512.us
  %573 = load double, ptr %gep516.us, align 8, !tbaa !11
  %574 = tail call double @llvm.fmuladd.f64(double %4, double %572, double %573)
  store double %574, ptr %gep516.us, align 8, !tbaa !11
  %575 = or disjoint i64 %.7512.us, 1
  %576 = getelementptr inbounds i32, ptr %563, i64 %575
  %577 = load i32, ptr %576, align 4, !tbaa !24
  %578 = sext i32 %577 to i64
  %579 = getelementptr double, ptr %566, i64 %578
  %580 = load double, ptr %579, align 8, !tbaa !11
  %gep516.us.1 = getelementptr double, ptr %invariant.gep515.us, i64 %575
  %581 = load double, ptr %gep516.us.1, align 8, !tbaa !11
  %582 = tail call double @llvm.fmuladd.f64(double %4, double %580, double %581)
  store double %582, ptr %gep516.us.1, align 8, !tbaa !11
  %583 = add nuw nsw i64 %.7512.us, 2
  %niter751.next.1 = add i64 %niter751, 2
  %niter751.ncmp.1 = icmp eq i64 %niter751.next.1, %unroll_iter750
  br i1 %niter751.ncmp.1, label %._crit_edge514.us.unr-lcssa, label %.preheader405.us.new, !llvm.loop !59

._crit_edge514.us.unr-lcssa:                      ; preds = %.preheader405.us.new, %.preheader405.us
  %.7512.us.unr = phi i64 [ 0, %.preheader405.us ], [ %583, %.preheader405.us.new ]
  br i1 %lcmp.mod749.not, label %._crit_edge514.us, label %._crit_edge514.us.epilog-lcssa

._crit_edge514.us.epilog-lcssa:                   ; preds = %._crit_edge514.us.unr-lcssa
  %584 = getelementptr inbounds i32, ptr %563, i64 %.7512.us.unr
  %585 = load i32, ptr %584, align 4, !tbaa !24
  %586 = sext i32 %585 to i64
  %587 = getelementptr double, ptr %566, i64 %586
  %588 = load double, ptr %587, align 8, !tbaa !11
  %gep516.us.epil = getelementptr double, ptr %invariant.gep515.us, i64 %.7512.us.unr
  %589 = load double, ptr %gep516.us.epil, align 8, !tbaa !11
  %590 = tail call double @llvm.fmuladd.f64(double %4, double %588, double %589)
  store double %590, ptr %gep516.us.epil, align 8, !tbaa !11
  br label %._crit_edge514.us

._crit_edge514.us:                                ; preds = %._crit_edge514.us.unr-lcssa, %._crit_edge514.us.epilog-lcssa
  %591 = add nuw nsw i64 %.12375517.us, 1
  %exitcond598.not = icmp eq i64 %591, %555
  br i1 %exitcond598.not, label %.loopexit404, label %.preheader405.us, !llvm.loop !60

592:                                              ; preds = %552
  %593 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %594 = icmp eq i32 %593, 1
  br i1 %594, label %.preheader409, label %635

.preheader409:                                    ; preds = %592
  %595 = sext i32 %3 to i64
  %596 = icmp sgt i32 %3, 0
  br i1 %596, label %.preheader408.lr.ph, label %.loopexit404

.preheader408.lr.ph:                              ; preds = %.preheader409
  %597 = getelementptr inbounds i8, ptr %1, i64 16
  %598 = load i32, ptr %597, align 8, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = icmp sgt i32 %598, 0
  %601 = sext i32 %217 to i64
  %602 = sext i32 %9 to i64
  br i1 %600, label %.preheader408.lr.ph.split.us, label %.loopexit404

.preheader408.lr.ph.split.us:                     ; preds = %.preheader408.lr.ph
  %603 = load ptr, ptr %1, align 8, !tbaa !23
  %xtraiter741 = and i64 %599, 1
  %604 = icmp eq i32 %598, 1
  %unroll_iter744 = and i64 %599, 2147483646
  %lcmp.mod743.not = icmp eq i64 %xtraiter741, 0
  br label %.preheader408.us

.preheader408.us:                                 ; preds = %._crit_edge508.us, %.preheader408.lr.ph.split.us
  %.13376511.us = phi i64 [ 0, %.preheader408.lr.ph.split.us ], [ %634, %._crit_edge508.us ]
  %605 = mul nsw i64 %.13376511.us, %601
  %606 = getelementptr double, ptr %223, i64 %605
  %607 = mul nsw i64 %.13376511.us, %602
  %invariant.gep509.us = getelementptr double, ptr %8, i64 %607
  br i1 %604, label %._crit_edge508.us.unr-lcssa, label %.preheader408.us.new

.preheader408.us.new:                             ; preds = %.preheader408.us, %.preheader408.us.new
  %.8506.us = phi i64 [ %625, %.preheader408.us.new ], [ 0, %.preheader408.us ]
  %niter745 = phi i64 [ %niter745.next.1, %.preheader408.us.new ], [ 0, %.preheader408.us ]
  %608 = getelementptr inbounds i32, ptr %603, i64 %.8506.us
  %609 = load i32, ptr %608, align 4, !tbaa !24
  %610 = sext i32 %609 to i64
  %611 = getelementptr double, ptr %606, i64 %610
  %612 = load double, ptr %611, align 8, !tbaa !11
  %gep510.us = getelementptr double, ptr %invariant.gep509.us, i64 %.8506.us
  %613 = load double, ptr %gep510.us, align 8, !tbaa !11
  %614 = fneg double %613
  %615 = tail call double @llvm.fmuladd.f64(double %4, double %612, double %614)
  store double %615, ptr %gep510.us, align 8, !tbaa !11
  %616 = or disjoint i64 %.8506.us, 1
  %617 = getelementptr inbounds i32, ptr %603, i64 %616
  %618 = load i32, ptr %617, align 4, !tbaa !24
  %619 = sext i32 %618 to i64
  %620 = getelementptr double, ptr %606, i64 %619
  %621 = load double, ptr %620, align 8, !tbaa !11
  %gep510.us.1 = getelementptr double, ptr %invariant.gep509.us, i64 %616
  %622 = load double, ptr %gep510.us.1, align 8, !tbaa !11
  %623 = fneg double %622
  %624 = tail call double @llvm.fmuladd.f64(double %4, double %621, double %623)
  store double %624, ptr %gep510.us.1, align 8, !tbaa !11
  %625 = add nuw nsw i64 %.8506.us, 2
  %niter745.next.1 = add i64 %niter745, 2
  %niter745.ncmp.1 = icmp eq i64 %niter745.next.1, %unroll_iter744
  br i1 %niter745.ncmp.1, label %._crit_edge508.us.unr-lcssa, label %.preheader408.us.new, !llvm.loop !61

._crit_edge508.us.unr-lcssa:                      ; preds = %.preheader408.us.new, %.preheader408.us
  %.8506.us.unr = phi i64 [ 0, %.preheader408.us ], [ %625, %.preheader408.us.new ]
  br i1 %lcmp.mod743.not, label %._crit_edge508.us, label %._crit_edge508.us.epilog-lcssa

._crit_edge508.us.epilog-lcssa:                   ; preds = %._crit_edge508.us.unr-lcssa
  %626 = getelementptr inbounds i32, ptr %603, i64 %.8506.us.unr
  %627 = load i32, ptr %626, align 4, !tbaa !24
  %628 = sext i32 %627 to i64
  %629 = getelementptr double, ptr %606, i64 %628
  %630 = load double, ptr %629, align 8, !tbaa !11
  %gep510.us.epil = getelementptr double, ptr %invariant.gep509.us, i64 %.8506.us.unr
  %631 = load double, ptr %gep510.us.epil, align 8, !tbaa !11
  %632 = fneg double %631
  %633 = tail call double @llvm.fmuladd.f64(double %4, double %630, double %632)
  store double %633, ptr %gep510.us.epil, align 8, !tbaa !11
  br label %._crit_edge508.us

._crit_edge508.us:                                ; preds = %._crit_edge508.us.unr-lcssa, %._crit_edge508.us.epilog-lcssa
  %634 = add nuw nsw i64 %.13376511.us, 1
  %exitcond596.not = icmp eq i64 %634, %595
  br i1 %exitcond596.not, label %.loopexit404, label %.preheader408.us, !llvm.loop !62

635:                                              ; preds = %592
  %636 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %637 = icmp eq i32 %636, 0
  br i1 %637, label %.preheader412, label %.loopexit404

.preheader412:                                    ; preds = %635
  %638 = sext i32 %3 to i64
  %639 = icmp sgt i32 %3, 0
  br i1 %639, label %.preheader411.lr.ph, label %.loopexit404

.preheader411.lr.ph:                              ; preds = %.preheader412
  %640 = getelementptr inbounds i8, ptr %1, i64 16
  %641 = load i32, ptr %640, align 8, !tbaa !5
  %642 = sext i32 %641 to i64
  %643 = icmp sgt i32 %641, 0
  %644 = sext i32 %217 to i64
  %645 = sext i32 %9 to i64
  br i1 %643, label %.preheader411.lr.ph.split.us, label %.loopexit404

.preheader411.lr.ph.split.us:                     ; preds = %.preheader411.lr.ph
  %646 = load ptr, ptr %1, align 8, !tbaa !23
  %xtraiter735 = and i64 %642, 1
  %647 = icmp eq i32 %641, 1
  %unroll_iter738 = and i64 %642, 2147483646
  %lcmp.mod737.not = icmp eq i64 %xtraiter735, 0
  br label %.preheader411.us

.preheader411.us:                                 ; preds = %._crit_edge502.us, %.preheader411.lr.ph.split.us
  %.14505.us = phi i64 [ 0, %.preheader411.lr.ph.split.us ], [ %677, %._crit_edge502.us ]
  %648 = mul nsw i64 %.14505.us, %644
  %649 = getelementptr double, ptr %223, i64 %648
  %650 = mul nsw i64 %.14505.us, %645
  %invariant.gep503.us = getelementptr double, ptr %8, i64 %650
  br i1 %647, label %._crit_edge502.us.unr-lcssa, label %.preheader411.us.new

.preheader411.us.new:                             ; preds = %.preheader411.us, %.preheader411.us.new
  %.9500.us = phi i64 [ %668, %.preheader411.us.new ], [ 0, %.preheader411.us ]
  %niter739 = phi i64 [ %niter739.next.1, %.preheader411.us.new ], [ 0, %.preheader411.us ]
  %651 = getelementptr inbounds i32, ptr %646, i64 %.9500.us
  %652 = load i32, ptr %651, align 4, !tbaa !24
  %653 = sext i32 %652 to i64
  %654 = getelementptr double, ptr %649, i64 %653
  %655 = load double, ptr %654, align 8, !tbaa !11
  %gep504.us = getelementptr double, ptr %invariant.gep503.us, i64 %.9500.us
  %656 = load double, ptr %gep504.us, align 8, !tbaa !11
  %657 = fmul double %656, %7
  %658 = tail call double @llvm.fmuladd.f64(double %4, double %655, double %657)
  store double %658, ptr %gep504.us, align 8, !tbaa !11
  %659 = or disjoint i64 %.9500.us, 1
  %660 = getelementptr inbounds i32, ptr %646, i64 %659
  %661 = load i32, ptr %660, align 4, !tbaa !24
  %662 = sext i32 %661 to i64
  %663 = getelementptr double, ptr %649, i64 %662
  %664 = load double, ptr %663, align 8, !tbaa !11
  %gep504.us.1 = getelementptr double, ptr %invariant.gep503.us, i64 %659
  %665 = load double, ptr %gep504.us.1, align 8, !tbaa !11
  %666 = fmul double %665, %7
  %667 = tail call double @llvm.fmuladd.f64(double %4, double %664, double %666)
  store double %667, ptr %gep504.us.1, align 8, !tbaa !11
  %668 = add nuw nsw i64 %.9500.us, 2
  %niter739.next.1 = add i64 %niter739, 2
  %niter739.ncmp.1 = icmp eq i64 %niter739.next.1, %unroll_iter738
  br i1 %niter739.ncmp.1, label %._crit_edge502.us.unr-lcssa, label %.preheader411.us.new, !llvm.loop !63

._crit_edge502.us.unr-lcssa:                      ; preds = %.preheader411.us.new, %.preheader411.us
  %.9500.us.unr = phi i64 [ 0, %.preheader411.us ], [ %668, %.preheader411.us.new ]
  br i1 %lcmp.mod737.not, label %._crit_edge502.us, label %._crit_edge502.us.epilog-lcssa

._crit_edge502.us.epilog-lcssa:                   ; preds = %._crit_edge502.us.unr-lcssa
  %669 = getelementptr inbounds i32, ptr %646, i64 %.9500.us.unr
  %670 = load i32, ptr %669, align 4, !tbaa !24
  %671 = sext i32 %670 to i64
  %672 = getelementptr double, ptr %649, i64 %671
  %673 = load double, ptr %672, align 8, !tbaa !11
  %gep504.us.epil = getelementptr double, ptr %invariant.gep503.us, i64 %.9500.us.unr
  %674 = load double, ptr %gep504.us.epil, align 8, !tbaa !11
  %675 = fmul double %674, %7
  %676 = tail call double @llvm.fmuladd.f64(double %4, double %673, double %675)
  store double %676, ptr %gep504.us.epil, align 8, !tbaa !11
  br label %._crit_edge502.us

._crit_edge502.us:                                ; preds = %._crit_edge502.us.unr-lcssa, %._crit_edge502.us.epilog-lcssa
  %677 = add nuw nsw i64 %.14505.us, 1
  %exitcond594.not = icmp eq i64 %677, %638
  br i1 %exitcond594.not, label %.loopexit404, label %.preheader411.us, !llvm.loop !64

678:                                              ; preds = %.loopexit428
  br i1 %501, label %.preheader415, label %734

.preheader415:                                    ; preds = %678
  %679 = sext i32 %3 to i64
  %680 = icmp sgt i32 %3, 0
  br i1 %680, label %.preheader414.lr.ph, label %.loopexit404

.preheader414.lr.ph:                              ; preds = %.preheader415
  %681 = getelementptr inbounds i8, ptr %1, i64 16
  %682 = load i32, ptr %681, align 8, !tbaa !5
  %683 = sext i32 %682 to i64
  %684 = icmp sgt i32 %682, 0
  %685 = sext i32 %217 to i64
  %686 = sext i32 %9 to i64
  br i1 %684, label %.preheader414.lr.ph.split.us, label %.loopexit404

.preheader414.lr.ph.split.us:                     ; preds = %.preheader414.lr.ph
  %687 = load ptr, ptr %1, align 8, !tbaa !23
  %xtraiter730 = and i64 %683, 3
  %688 = icmp ult i32 %682, 4
  %unroll_iter732 = and i64 %683, 2147483644
  %lcmp.mod731.not = icmp eq i64 %xtraiter730, 0
  br label %.preheader414.us

.preheader414.us:                                 ; preds = %._crit_edge498.us, %.preheader414.lr.ph.split.us
  %.15499.us = phi i64 [ 0, %.preheader414.lr.ph.split.us ], [ %733, %._crit_edge498.us ]
  %689 = mul nsw i64 %.15499.us, %685
  %690 = getelementptr double, ptr %223, i64 %689
  %691 = mul nsw i64 %.15499.us, %686
  %692 = getelementptr double, ptr %8, i64 %691
  br i1 %688, label %._crit_edge498.us.unr-lcssa, label %.preheader414.us.new

.preheader414.us.new:                             ; preds = %.preheader414.us, %.preheader414.us.new
  %.10496.us = phi i64 [ %724, %.preheader414.us.new ], [ 0, %.preheader414.us ]
  %niter733 = phi i64 [ %niter733.next.3, %.preheader414.us.new ], [ 0, %.preheader414.us ]
  %693 = getelementptr inbounds i32, ptr %687, i64 %.10496.us
  %694 = load i32, ptr %693, align 4, !tbaa !24
  %695 = sext i32 %694 to i64
  %696 = getelementptr double, ptr %690, i64 %695
  %697 = load double, ptr %696, align 8, !tbaa !11
  %698 = fmul double %697, %4
  %699 = getelementptr double, ptr %692, i64 %695
  store double %698, ptr %699, align 8, !tbaa !11
  %700 = or disjoint i64 %.10496.us, 1
  %701 = getelementptr inbounds i32, ptr %687, i64 %700
  %702 = load i32, ptr %701, align 4, !tbaa !24
  %703 = sext i32 %702 to i64
  %704 = getelementptr double, ptr %690, i64 %703
  %705 = load double, ptr %704, align 8, !tbaa !11
  %706 = fmul double %705, %4
  %707 = getelementptr double, ptr %692, i64 %703
  store double %706, ptr %707, align 8, !tbaa !11
  %708 = or disjoint i64 %.10496.us, 2
  %709 = getelementptr inbounds i32, ptr %687, i64 %708
  %710 = load i32, ptr %709, align 4, !tbaa !24
  %711 = sext i32 %710 to i64
  %712 = getelementptr double, ptr %690, i64 %711
  %713 = load double, ptr %712, align 8, !tbaa !11
  %714 = fmul double %713, %4
  %715 = getelementptr double, ptr %692, i64 %711
  store double %714, ptr %715, align 8, !tbaa !11
  %716 = or disjoint i64 %.10496.us, 3
  %717 = getelementptr inbounds i32, ptr %687, i64 %716
  %718 = load i32, ptr %717, align 4, !tbaa !24
  %719 = sext i32 %718 to i64
  %720 = getelementptr double, ptr %690, i64 %719
  %721 = load double, ptr %720, align 8, !tbaa !11
  %722 = fmul double %721, %4
  %723 = getelementptr double, ptr %692, i64 %719
  store double %722, ptr %723, align 8, !tbaa !11
  %724 = add nuw nsw i64 %.10496.us, 4
  %niter733.next.3 = add i64 %niter733, 4
  %niter733.ncmp.3 = icmp eq i64 %niter733.next.3, %unroll_iter732
  br i1 %niter733.ncmp.3, label %._crit_edge498.us.unr-lcssa, label %.preheader414.us.new, !llvm.loop !65

._crit_edge498.us.unr-lcssa:                      ; preds = %.preheader414.us.new, %.preheader414.us
  %.10496.us.unr = phi i64 [ 0, %.preheader414.us ], [ %724, %.preheader414.us.new ]
  br i1 %lcmp.mod731.not, label %._crit_edge498.us, label %.epil.preheader729

.epil.preheader729:                               ; preds = %._crit_edge498.us.unr-lcssa, %.epil.preheader729
  %.10496.us.epil = phi i64 [ %732, %.epil.preheader729 ], [ %.10496.us.unr, %._crit_edge498.us.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader729 ], [ 0, %._crit_edge498.us.unr-lcssa ]
  %725 = getelementptr inbounds i32, ptr %687, i64 %.10496.us.epil
  %726 = load i32, ptr %725, align 4, !tbaa !24
  %727 = sext i32 %726 to i64
  %728 = getelementptr double, ptr %690, i64 %727
  %729 = load double, ptr %728, align 8, !tbaa !11
  %730 = fmul double %729, %4
  %731 = getelementptr double, ptr %692, i64 %727
  store double %730, ptr %731, align 8, !tbaa !11
  %732 = add nuw nsw i64 %.10496.us.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter730
  br i1 %epil.iter.cmp.not, label %._crit_edge498.us, label %.epil.preheader729, !llvm.loop !66

._crit_edge498.us:                                ; preds = %.epil.preheader729, %._crit_edge498.us.unr-lcssa
  %733 = add nuw nsw i64 %.15499.us, 1
  %exitcond592.not = icmp eq i64 %733, %679
  br i1 %exitcond592.not, label %.loopexit404, label %.preheader414.us, !llvm.loop !67

734:                                              ; preds = %678
  %735 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %736 = icmp eq i32 %735, 1
  br i1 %736, label %.preheader418, label %777

.preheader418:                                    ; preds = %734
  %737 = sext i32 %3 to i64
  %738 = icmp sgt i32 %3, 0
  br i1 %738, label %.preheader417.lr.ph, label %.loopexit404

.preheader417.lr.ph:                              ; preds = %.preheader418
  %739 = getelementptr inbounds i8, ptr %1, i64 16
  %740 = load i32, ptr %739, align 8, !tbaa !5
  %741 = sext i32 %740 to i64
  %742 = icmp sgt i32 %740, 0
  %743 = sext i32 %217 to i64
  %744 = sext i32 %9 to i64
  br i1 %742, label %.preheader417.lr.ph.split.us, label %.loopexit404

.preheader417.lr.ph.split.us:                     ; preds = %.preheader417.lr.ph
  %745 = load ptr, ptr %1, align 8, !tbaa !23
  %xtraiter725 = and i64 %741, 1
  %746 = icmp eq i32 %740, 1
  %unroll_iter727 = and i64 %741, 2147483646
  %lcmp.mod726.not = icmp eq i64 %xtraiter725, 0
  br label %.preheader417.us

.preheader417.us:                                 ; preds = %._crit_edge492.us, %.preheader417.lr.ph.split.us
  %.16495.us = phi i64 [ 0, %.preheader417.lr.ph.split.us ], [ %776, %._crit_edge492.us ]
  %747 = mul nsw i64 %.16495.us, %743
  %748 = getelementptr double, ptr %223, i64 %747
  %749 = mul nsw i64 %.16495.us, %744
  %invariant.gep493.us = getelementptr double, ptr %8, i64 %749
  br i1 %746, label %._crit_edge492.us.unr-lcssa, label %.preheader417.us.new

.preheader417.us.new:                             ; preds = %.preheader417.us, %.preheader417.us.new
  %.11490.us = phi i64 [ %767, %.preheader417.us.new ], [ 0, %.preheader417.us ]
  %niter728 = phi i64 [ %niter728.next.1, %.preheader417.us.new ], [ 0, %.preheader417.us ]
  %750 = getelementptr inbounds i32, ptr %745, i64 %.11490.us
  %751 = load i32, ptr %750, align 4, !tbaa !24
  %752 = sext i32 %751 to i64
  %753 = getelementptr double, ptr %748, i64 %752
  %754 = load double, ptr %753, align 8, !tbaa !11
  %gep494.us = getelementptr double, ptr %invariant.gep493.us, i64 %.11490.us
  %755 = load double, ptr %gep494.us, align 8, !tbaa !11
  %756 = tail call double @llvm.fmuladd.f64(double %4, double %754, double %755)
  %757 = getelementptr double, ptr %invariant.gep493.us, i64 %752
  store double %756, ptr %757, align 8, !tbaa !11
  %758 = or disjoint i64 %.11490.us, 1
  %759 = getelementptr inbounds i32, ptr %745, i64 %758
  %760 = load i32, ptr %759, align 4, !tbaa !24
  %761 = sext i32 %760 to i64
  %762 = getelementptr double, ptr %748, i64 %761
  %763 = load double, ptr %762, align 8, !tbaa !11
  %gep494.us.1 = getelementptr double, ptr %invariant.gep493.us, i64 %758
  %764 = load double, ptr %gep494.us.1, align 8, !tbaa !11
  %765 = tail call double @llvm.fmuladd.f64(double %4, double %763, double %764)
  %766 = getelementptr double, ptr %invariant.gep493.us, i64 %761
  store double %765, ptr %766, align 8, !tbaa !11
  %767 = add nuw nsw i64 %.11490.us, 2
  %niter728.next.1 = add i64 %niter728, 2
  %niter728.ncmp.1 = icmp eq i64 %niter728.next.1, %unroll_iter727
  br i1 %niter728.ncmp.1, label %._crit_edge492.us.unr-lcssa, label %.preheader417.us.new, !llvm.loop !68

._crit_edge492.us.unr-lcssa:                      ; preds = %.preheader417.us.new, %.preheader417.us
  %.11490.us.unr = phi i64 [ 0, %.preheader417.us ], [ %767, %.preheader417.us.new ]
  br i1 %lcmp.mod726.not, label %._crit_edge492.us, label %._crit_edge492.us.epilog-lcssa

._crit_edge492.us.epilog-lcssa:                   ; preds = %._crit_edge492.us.unr-lcssa
  %768 = getelementptr inbounds i32, ptr %745, i64 %.11490.us.unr
  %769 = load i32, ptr %768, align 4, !tbaa !24
  %770 = sext i32 %769 to i64
  %771 = getelementptr double, ptr %748, i64 %770
  %772 = load double, ptr %771, align 8, !tbaa !11
  %gep494.us.epil = getelementptr double, ptr %invariant.gep493.us, i64 %.11490.us.unr
  %773 = load double, ptr %gep494.us.epil, align 8, !tbaa !11
  %774 = tail call double @llvm.fmuladd.f64(double %4, double %772, double %773)
  %775 = getelementptr double, ptr %invariant.gep493.us, i64 %770
  store double %774, ptr %775, align 8, !tbaa !11
  br label %._crit_edge492.us

._crit_edge492.us:                                ; preds = %._crit_edge492.us.unr-lcssa, %._crit_edge492.us.epilog-lcssa
  %776 = add nuw nsw i64 %.16495.us, 1
  %exitcond590.not = icmp eq i64 %776, %737
  br i1 %exitcond590.not, label %.loopexit404, label %.preheader417.us, !llvm.loop !69

777:                                              ; preds = %734
  %778 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %779 = icmp eq i32 %778, 1
  br i1 %779, label %.preheader421, label %823

.preheader421:                                    ; preds = %777
  %780 = sext i32 %3 to i64
  %781 = icmp sgt i32 %3, 0
  br i1 %781, label %.preheader420.lr.ph, label %.loopexit404

.preheader420.lr.ph:                              ; preds = %.preheader421
  %782 = getelementptr inbounds i8, ptr %1, i64 16
  %783 = load i32, ptr %782, align 8, !tbaa !5
  %784 = sext i32 %783 to i64
  %785 = icmp sgt i32 %783, 0
  %786 = sext i32 %217 to i64
  %787 = sext i32 %9 to i64
  br i1 %785, label %.preheader420.lr.ph.split.us, label %.loopexit404

.preheader420.lr.ph.split.us:                     ; preds = %.preheader420.lr.ph
  %788 = load ptr, ptr %1, align 8, !tbaa !23
  %xtraiter720 = and i64 %784, 1
  %789 = icmp eq i32 %783, 1
  %unroll_iter722 = and i64 %784, 2147483646
  %lcmp.mod721.not = icmp eq i64 %xtraiter720, 0
  br label %.preheader420.us

.preheader420.us:                                 ; preds = %._crit_edge486.us, %.preheader420.lr.ph.split.us
  %.17489.us = phi i64 [ 0, %.preheader420.lr.ph.split.us ], [ %822, %._crit_edge486.us ]
  %790 = mul nsw i64 %.17489.us, %786
  %791 = getelementptr double, ptr %223, i64 %790
  %792 = mul nsw i64 %.17489.us, %787
  %invariant.gep487.us = getelementptr double, ptr %8, i64 %792
  br i1 %789, label %._crit_edge486.us.unr-lcssa, label %.preheader420.us.new

.preheader420.us.new:                             ; preds = %.preheader420.us, %.preheader420.us.new
  %.12484.us = phi i64 [ %812, %.preheader420.us.new ], [ 0, %.preheader420.us ]
  %niter723 = phi i64 [ %niter723.next.1, %.preheader420.us.new ], [ 0, %.preheader420.us ]
  %793 = getelementptr inbounds i32, ptr %788, i64 %.12484.us
  %794 = load i32, ptr %793, align 4, !tbaa !24
  %795 = sext i32 %794 to i64
  %796 = getelementptr double, ptr %791, i64 %795
  %797 = load double, ptr %796, align 8, !tbaa !11
  %gep488.us = getelementptr double, ptr %invariant.gep487.us, i64 %.12484.us
  %798 = load double, ptr %gep488.us, align 8, !tbaa !11
  %799 = fneg double %798
  %800 = tail call double @llvm.fmuladd.f64(double %4, double %797, double %799)
  %801 = getelementptr double, ptr %invariant.gep487.us, i64 %795
  store double %800, ptr %801, align 8, !tbaa !11
  %802 = or disjoint i64 %.12484.us, 1
  %803 = getelementptr inbounds i32, ptr %788, i64 %802
  %804 = load i32, ptr %803, align 4, !tbaa !24
  %805 = sext i32 %804 to i64
  %806 = getelementptr double, ptr %791, i64 %805
  %807 = load double, ptr %806, align 8, !tbaa !11
  %gep488.us.1 = getelementptr double, ptr %invariant.gep487.us, i64 %802
  %808 = load double, ptr %gep488.us.1, align 8, !tbaa !11
  %809 = fneg double %808
  %810 = tail call double @llvm.fmuladd.f64(double %4, double %807, double %809)
  %811 = getelementptr double, ptr %invariant.gep487.us, i64 %805
  store double %810, ptr %811, align 8, !tbaa !11
  %812 = add nuw nsw i64 %.12484.us, 2
  %niter723.next.1 = add i64 %niter723, 2
  %niter723.ncmp.1 = icmp eq i64 %niter723.next.1, %unroll_iter722
  br i1 %niter723.ncmp.1, label %._crit_edge486.us.unr-lcssa, label %.preheader420.us.new, !llvm.loop !70

._crit_edge486.us.unr-lcssa:                      ; preds = %.preheader420.us.new, %.preheader420.us
  %.12484.us.unr = phi i64 [ 0, %.preheader420.us ], [ %812, %.preheader420.us.new ]
  br i1 %lcmp.mod721.not, label %._crit_edge486.us, label %._crit_edge486.us.epilog-lcssa

._crit_edge486.us.epilog-lcssa:                   ; preds = %._crit_edge486.us.unr-lcssa
  %813 = getelementptr inbounds i32, ptr %788, i64 %.12484.us.unr
  %814 = load i32, ptr %813, align 4, !tbaa !24
  %815 = sext i32 %814 to i64
  %816 = getelementptr double, ptr %791, i64 %815
  %817 = load double, ptr %816, align 8, !tbaa !11
  %gep488.us.epil = getelementptr double, ptr %invariant.gep487.us, i64 %.12484.us.unr
  %818 = load double, ptr %gep488.us.epil, align 8, !tbaa !11
  %819 = fneg double %818
  %820 = tail call double @llvm.fmuladd.f64(double %4, double %817, double %819)
  %821 = getelementptr double, ptr %invariant.gep487.us, i64 %815
  store double %820, ptr %821, align 8, !tbaa !11
  br label %._crit_edge486.us

._crit_edge486.us:                                ; preds = %._crit_edge486.us.unr-lcssa, %._crit_edge486.us.epilog-lcssa
  %822 = add nuw nsw i64 %.17489.us, 1
  %exitcond588.not = icmp eq i64 %822, %780
  br i1 %exitcond588.not, label %.loopexit404, label %.preheader420.us, !llvm.loop !71

823:                                              ; preds = %777
  %824 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %825 = icmp eq i32 %824, 0
  br i1 %825, label %.preheader424, label %.loopexit404

.preheader424:                                    ; preds = %823
  %826 = sext i32 %3 to i64
  %827 = icmp sgt i32 %3, 0
  br i1 %827, label %.preheader423.lr.ph, label %.loopexit404

.preheader423.lr.ph:                              ; preds = %.preheader424
  %828 = getelementptr inbounds i8, ptr %1, i64 16
  %829 = load i32, ptr %828, align 8, !tbaa !5
  %830 = sext i32 %829 to i64
  %831 = icmp sgt i32 %829, 0
  %832 = sext i32 %217 to i64
  %833 = sext i32 %9 to i64
  br i1 %831, label %.preheader423.lr.ph.split.us, label %.loopexit404

.preheader423.lr.ph.split.us:                     ; preds = %.preheader423.lr.ph
  %834 = load ptr, ptr %1, align 8, !tbaa !23
  %xtraiter717 = and i64 %830, 1
  %835 = icmp eq i32 %829, 1
  %unroll_iter = and i64 %830, 2147483646
  %lcmp.mod718.not = icmp eq i64 %xtraiter717, 0
  br label %.preheader423.us

.preheader423.us:                                 ; preds = %._crit_edge480.us, %.preheader423.lr.ph.split.us
  %.18483.us = phi i64 [ 0, %.preheader423.lr.ph.split.us ], [ %868, %._crit_edge480.us ]
  %836 = mul nsw i64 %.18483.us, %832
  %837 = getelementptr double, ptr %223, i64 %836
  %838 = mul nsw i64 %.18483.us, %833
  %invariant.gep481.us = getelementptr double, ptr %8, i64 %838
  br i1 %835, label %._crit_edge480.us.unr-lcssa, label %.preheader423.us.new

.preheader423.us.new:                             ; preds = %.preheader423.us, %.preheader423.us.new
  %.13478.us = phi i64 [ %858, %.preheader423.us.new ], [ 0, %.preheader423.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader423.us.new ], [ 0, %.preheader423.us ]
  %839 = getelementptr inbounds i32, ptr %834, i64 %.13478.us
  %840 = load i32, ptr %839, align 4, !tbaa !24
  %841 = sext i32 %840 to i64
  %842 = getelementptr double, ptr %837, i64 %841
  %843 = load double, ptr %842, align 8, !tbaa !11
  %gep482.us = getelementptr double, ptr %invariant.gep481.us, i64 %.13478.us
  %844 = load double, ptr %gep482.us, align 8, !tbaa !11
  %845 = fmul double %844, %7
  %846 = tail call double @llvm.fmuladd.f64(double %4, double %843, double %845)
  %847 = getelementptr double, ptr %invariant.gep481.us, i64 %841
  store double %846, ptr %847, align 8, !tbaa !11
  %848 = or disjoint i64 %.13478.us, 1
  %849 = getelementptr inbounds i32, ptr %834, i64 %848
  %850 = load i32, ptr %849, align 4, !tbaa !24
  %851 = sext i32 %850 to i64
  %852 = getelementptr double, ptr %837, i64 %851
  %853 = load double, ptr %852, align 8, !tbaa !11
  %gep482.us.1 = getelementptr double, ptr %invariant.gep481.us, i64 %848
  %854 = load double, ptr %gep482.us.1, align 8, !tbaa !11
  %855 = fmul double %854, %7
  %856 = tail call double @llvm.fmuladd.f64(double %4, double %853, double %855)
  %857 = getelementptr double, ptr %invariant.gep481.us, i64 %851
  store double %856, ptr %857, align 8, !tbaa !11
  %858 = add nuw nsw i64 %.13478.us, 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 %._crit_edge480.us.unr-lcssa, label %.preheader423.us.new, !llvm.loop !72

._crit_edge480.us.unr-lcssa:                      ; preds = %.preheader423.us.new, %.preheader423.us
  %.13478.us.unr = phi i64 [ 0, %.preheader423.us ], [ %858, %.preheader423.us.new ]
  br i1 %lcmp.mod718.not, label %._crit_edge480.us, label %._crit_edge480.us.epilog-lcssa

._crit_edge480.us.epilog-lcssa:                   ; preds = %._crit_edge480.us.unr-lcssa
  %859 = getelementptr inbounds i32, ptr %834, i64 %.13478.us.unr
  %860 = load i32, ptr %859, align 4, !tbaa !24
  %861 = sext i32 %860 to i64
  %862 = getelementptr double, ptr %837, i64 %861
  %863 = load double, ptr %862, align 8, !tbaa !11
  %gep482.us.epil = getelementptr double, ptr %invariant.gep481.us, i64 %.13478.us.unr
  %864 = load double, ptr %gep482.us.epil, align 8, !tbaa !11
  %865 = fmul double %864, %7
  %866 = tail call double @llvm.fmuladd.f64(double %4, double %863, double %865)
  %867 = getelementptr double, ptr %invariant.gep481.us, i64 %861
  store double %866, ptr %867, align 8, !tbaa !11
  br label %._crit_edge480.us

._crit_edge480.us:                                ; preds = %._crit_edge480.us.unr-lcssa, %._crit_edge480.us.epilog-lcssa
  %868 = add nuw nsw i64 %.18483.us, 1
  %exitcond586.not = icmp eq i64 %868, %826
  br i1 %exitcond586.not, label %.loopexit404, label %.preheader423.us, !llvm.loop !73

.loopexit404:                                     ; preds = %._crit_edge480.us, %._crit_edge486.us, %._crit_edge492.us, %._crit_edge498.us, %._crit_edge502.us, %._crit_edge508.us, %._crit_edge514.us, %._crit_edge520, %.preheader423.lr.ph, %.preheader420.lr.ph, %.preheader417.lr.ph, %.preheader414.lr.ph, %.preheader411.lr.ph, %.preheader408.lr.ph, %.preheader405.lr.ph, %.preheader424, %.preheader421, %.preheader418, %.preheader415, %.preheader412, %.preheader409, %.preheader406, %.preheader403, %635, %823
  tail call void @_ZdaPv(ptr noundef nonnull %223) #8
  br label %.loopexit

.loopexit.loopexit.unr-lcssa:                     ; preds = %._crit_edge550.3, %.preheader.lr.ph
  %.0363553.unr = phi i64 [ 0, %.preheader.lr.ph ], [ %36, %._crit_edge550.3 ]
  %lcmp.mod778.not = icmp eq i64 %xtraiter776, 0
  br i1 %lcmp.mod778.not, label %.loopexit, label %.preheader.epil

.preheader.epil:                                  ; preds = %.loopexit.loopexit.unr-lcssa, %._crit_edge550.epil
  %.0363553.epil = phi i64 [ %870, %._crit_edge550.epil ], [ %.0363553.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter777 = phi i64 [ %epil.iter777.next, %._crit_edge550.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  br i1 %24, label %.lr.ph549.epil, label %._crit_edge550.epil

.lr.ph549.epil:                                   ; preds = %.preheader.epil
  %869 = mul i64 %26, %.0363553.epil
  %scevgep.epil = getelementptr i8, ptr %8, i64 %869
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.epil, i8 0, i64 %27, i1 false), !tbaa !11
  br label %._crit_edge550.epil

._crit_edge550.epil:                              ; preds = %.lr.ph549.epil, %.preheader.epil
  %870 = add nuw nsw i64 %.0363553.epil, 1
  %epil.iter777.next = add i64 %epil.iter777, 1
  %epil.iter777.cmp.not = icmp eq i64 %epil.iter777.next, %xtraiter776
  br i1 %epil.iter777.cmp.not, label %.loopexit, label %.preheader.epil, !llvm.loop !74

.loopexit:                                        ; preds = %._crit_edge526, %._crit_edge530, %._crit_edge534, %._crit_edge538, %._crit_edge544, %.loopexit.loopexit.unr-lcssa, %._crit_edge550.epil, %.preheader400, %.preheader397, %.preheader394, %.preheader391, %.preheader388, %.preheader386, %57, %165, %.loopexit404
  ret i32 0
}

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #6

attributes #0 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { builtin allocsize(0) }
attributes #8 = { builtin 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, !10, i64 16}
!6 = !{!"_ZTSN7qpOASES9IndexlistE", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !8, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14, !16, !17}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !14, !17, !16}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14, !16, !17}
!21 = distinct !{!21, !14, !17, !16}
!22 = distinct !{!22, !14}
!23 = !{!6, !7, i64 0}
!24 = !{!10, !10, i64 0}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.unroll.disable"}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !27}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !27}
!34 = distinct !{!34, !14}
!35 = !{!36, !10, i64 8}
!36 = !{!"_ZTSN7qpOASES12SparseMatrixE", !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40}
!37 = !{!6, !7, i64 8}
!38 = !{!36, !7, i64 24}
!39 = !{!36, !7, i64 40}
!40 = !{!36, !7, i64 16}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14, !16, !17}
!45 = distinct !{!45, !14, !16}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !14}
!48 = !{!36, !10, i64 12}
!49 = distinct !{!49, !14}
!50 = distinct !{!50, !14}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14, !16, !17}
!53 = distinct !{!53, !14, !16}
!54 = distinct !{!54, !14}
!55 = distinct !{!55, !14}
!56 = distinct !{!56, !14}
!57 = distinct !{!57, !27}
!58 = distinct !{!58, !14}
!59 = distinct !{!59, !14}
!60 = distinct !{!60, !14}
!61 = distinct !{!61, !14}
!62 = distinct !{!62, !14}
!63 = distinct !{!63, !14}
!64 = distinct !{!64, !14}
!65 = distinct !{!65, !14}
!66 = distinct !{!66, !27}
!67 = distinct !{!67, !14}
!68 = distinct !{!68, !14}
!69 = distinct !{!69, !14}
!70 = distinct !{!70, !14}
!71 = distinct !{!71, !14}
!72 = distinct !{!72, !14}
!73 = distinct !{!73, !14}
!74 = distinct !{!74, !27}


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