; 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::SparseMatrixRow" = 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef, double noundef, double noundef) #1

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

; 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 @_ZNK7qpOASES15SparseMatrixRow5timesEPKNS_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 #3 align 2 {
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca double, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca double, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i64, align 8
  %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
  store ptr %0, ptr %12, align 8, !tbaa !5
  store ptr %1, ptr %13, align 8, !tbaa !5
  store ptr %2, ptr %14, align 8, !tbaa !5
  store i32 %3, ptr %15, align 4, !tbaa !9
  store double %4, ptr %16, align 8, !tbaa !11
  store ptr %5, ptr %17, align 8, !tbaa !5
  store i32 %6, ptr %18, align 4, !tbaa !9
  store double %7, ptr %19, align 8, !tbaa !11
  store ptr %8, ptr %20, align 8, !tbaa !5
  store i32 %9, ptr %21, align 4, !tbaa !9
  store i32 %10, ptr %22, align 4, !tbaa !13
  %29 = load ptr, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %30 = load i32, ptr %22, align 4, !tbaa !13
  %31 = icmp eq i32 %30, 1
  br i1 %31, label %32, label %875

32:                                               ; preds = %11
  %33 = load double, ptr %19, align 8, !tbaa !11
  %34 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %33, double noundef 1.000000e-25)
  %35 = icmp eq i32 %34, 1
  br i1 %35, label %36, label %67

36:                                               ; preds = %32
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %37

37:                                               ; preds = %63, %36
  %38 = load i64, ptr %25, align 8, !tbaa !15
  %39 = load i32, ptr %15, align 4, !tbaa !9
  %40 = sext i32 %39 to i64
  %41 = icmp slt i64 %38, %40
  br i1 %41, label %42, label %66

42:                                               ; preds = %37
  store i64 0, ptr %24, align 8, !tbaa !15
  br label %43

43:                                               ; preds = %59, %42
  %44 = load i64, ptr %24, align 8, !tbaa !15
  %45 = load ptr, ptr %13, align 8, !tbaa !5
  %46 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %45, i32 0, i32 2
  %47 = load i32, ptr %46, align 8, !tbaa !17
  %48 = sext i32 %47 to i64
  %49 = icmp slt i64 %44, %48
  br i1 %49, label %50, label %62

50:                                               ; preds = %43
  %51 = load ptr, ptr %20, align 8, !tbaa !5
  %52 = load i64, ptr %24, align 8, !tbaa !15
  %53 = load i64, ptr %25, align 8, !tbaa !15
  %54 = load i32, ptr %21, align 4, !tbaa !9
  %55 = sext i32 %54 to i64
  %56 = mul nsw i64 %53, %55
  %57 = add nsw i64 %52, %56
  %58 = getelementptr inbounds double, ptr %51, i64 %57
  store double 0.000000e+00, ptr %58, align 8, !tbaa !11
  br label %59

59:                                               ; preds = %50
  %60 = load i64, ptr %24, align 8, !tbaa !15
  %61 = add nsw i64 %60, 1
  store i64 %61, ptr %24, align 8, !tbaa !15
  br label %43, !llvm.loop !19

62:                                               ; preds = %43
  br label %63

63:                                               ; preds = %62
  %64 = load i64, ptr %25, align 8, !tbaa !15
  %65 = add nsw i64 %64, 1
  store i64 %65, ptr %25, align 8, !tbaa !15
  br label %37, !llvm.loop !21

66:                                               ; preds = %37
  br label %152

67:                                               ; preds = %32
  %68 = load double, ptr %19, align 8, !tbaa !11
  %69 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %68, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %70 = icmp eq i32 %69, 1
  br i1 %70, label %71, label %112

71:                                               ; preds = %67
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %72

72:                                               ; preds = %108, %71
  %73 = load i64, ptr %25, align 8, !tbaa !15
  %74 = load i32, ptr %15, align 4, !tbaa !9
  %75 = sext i32 %74 to i64
  %76 = icmp slt i64 %73, %75
  br i1 %76, label %77, label %111

77:                                               ; preds = %72
  store i64 0, ptr %24, align 8, !tbaa !15
  br label %78

78:                                               ; preds = %104, %77
  %79 = load i64, ptr %24, align 8, !tbaa !15
  %80 = load ptr, ptr %13, align 8, !tbaa !5
  %81 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %80, i32 0, i32 2
  %82 = load i32, ptr %81, align 8, !tbaa !17
  %83 = sext i32 %82 to i64
  %84 = icmp slt i64 %79, %83
  br i1 %84, label %85, label %107

85:                                               ; preds = %78
  %86 = load ptr, ptr %20, align 8, !tbaa !5
  %87 = load i64, ptr %24, align 8, !tbaa !15
  %88 = load i64, ptr %25, align 8, !tbaa !15
  %89 = load i32, ptr %21, align 4, !tbaa !9
  %90 = sext i32 %89 to i64
  %91 = mul nsw i64 %88, %90
  %92 = add nsw i64 %87, %91
  %93 = getelementptr inbounds double, ptr %86, i64 %92
  %94 = load double, ptr %93, align 8, !tbaa !11
  %95 = fneg double %94
  %96 = load ptr, ptr %20, align 8, !tbaa !5
  %97 = load i64, ptr %24, align 8, !tbaa !15
  %98 = load i64, ptr %25, align 8, !tbaa !15
  %99 = load i32, ptr %21, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = mul nsw i64 %98, %100
  %102 = add nsw i64 %97, %101
  %103 = getelementptr inbounds double, ptr %96, i64 %102
  store double %95, ptr %103, align 8, !tbaa !11
  br label %104

104:                                              ; preds = %85
  %105 = load i64, ptr %24, align 8, !tbaa !15
  %106 = add nsw i64 %105, 1
  store i64 %106, ptr %24, align 8, !tbaa !15
  br label %78, !llvm.loop !22

107:                                              ; preds = %78
  br label %108

108:                                              ; preds = %107
  %109 = load i64, ptr %25, align 8, !tbaa !15
  %110 = add nsw i64 %109, 1
  store i64 %110, ptr %25, align 8, !tbaa !15
  br label %72, !llvm.loop !23

111:                                              ; preds = %72
  br label %151

112:                                              ; preds = %67
  %113 = load double, ptr %19, align 8, !tbaa !11
  %114 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %113, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %116, label %150

116:                                              ; preds = %112
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %117

117:                                              ; preds = %146, %116
  %118 = load i64, ptr %25, align 8, !tbaa !15
  %119 = load i32, ptr %15, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %121 = icmp slt i64 %118, %120
  br i1 %121, label %122, label %149

122:                                              ; preds = %117
  store i64 0, ptr %24, align 8, !tbaa !15
  br label %123

123:                                              ; preds = %142, %122
  %124 = load i64, ptr %24, align 8, !tbaa !15
  %125 = load ptr, ptr %13, align 8, !tbaa !5
  %126 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %125, i32 0, i32 2
  %127 = load i32, ptr %126, align 8, !tbaa !17
  %128 = sext i32 %127 to i64
  %129 = icmp slt i64 %124, %128
  br i1 %129, label %130, label %145

130:                                              ; preds = %123
  %131 = load double, ptr %19, align 8, !tbaa !11
  %132 = load ptr, ptr %20, align 8, !tbaa !5
  %133 = load i64, ptr %24, align 8, !tbaa !15
  %134 = load i64, ptr %25, align 8, !tbaa !15
  %135 = load i32, ptr %21, align 4, !tbaa !9
  %136 = sext i32 %135 to i64
  %137 = mul nsw i64 %134, %136
  %138 = add nsw i64 %133, %137
  %139 = getelementptr inbounds double, ptr %132, i64 %138
  %140 = load double, ptr %139, align 8, !tbaa !11
  %141 = fmul double %140, %131
  store double %141, ptr %139, align 8, !tbaa !11
  br label %142

142:                                              ; preds = %130
  %143 = load i64, ptr %24, align 8, !tbaa !15
  %144 = add nsw i64 %143, 1
  store i64 %144, ptr %24, align 8, !tbaa !15
  br label %123, !llvm.loop !24

145:                                              ; preds = %123
  br label %146

146:                                              ; preds = %145
  %147 = load i64, ptr %25, align 8, !tbaa !15
  %148 = add nsw i64 %147, 1
  store i64 %148, ptr %25, align 8, !tbaa !15
  br label %117, !llvm.loop !25

149:                                              ; preds = %117
  br label %150

150:                                              ; preds = %149, %112
  br label %151

151:                                              ; preds = %150, %111
  br label %152

152:                                              ; preds = %151, %66
  %153 = load ptr, ptr %14, align 8, !tbaa !5
  %154 = icmp eq ptr %153, null
  br i1 %154, label %155, label %429

155:                                              ; preds = %152
  %156 = load double, ptr %16, align 8, !tbaa !11
  %157 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %156, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %158 = icmp eq i32 %157, 1
  br i1 %158, label %159, label %246

159:                                              ; preds = %155
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %160

160:                                              ; preds = %242, %159
  %161 = load i64, ptr %26, align 8, !tbaa !15
  %162 = load ptr, ptr %13, align 8, !tbaa !5
  %163 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %162, i32 0, i32 2
  %164 = load i32, ptr %163, align 8, !tbaa !17
  %165 = sext i32 %164 to i64
  %166 = icmp slt i64 %161, %165
  br i1 %166, label %167, label %245

167:                                              ; preds = %160
  %168 = load ptr, ptr %13, align 8, !tbaa !5
  %169 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %168, i32 0, i32 1
  %170 = load ptr, ptr %169, align 8, !tbaa !26
  %171 = load i64, ptr %26, align 8, !tbaa !15
  %172 = getelementptr inbounds i32, ptr %170, i64 %171
  %173 = load i32, ptr %172, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  store i64 %174, ptr %27, align 8, !tbaa !15
  %175 = load ptr, ptr %13, align 8, !tbaa !5
  %176 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %175, i32 0, i32 0
  %177 = load ptr, ptr %176, align 8, !tbaa !27
  %178 = load i64, ptr %27, align 8, !tbaa !15
  %179 = getelementptr inbounds i32, ptr %177, i64 %178
  %180 = load i32, ptr %179, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  store i64 %181, ptr %28, align 8, !tbaa !15
  %182 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %183 = load ptr, ptr %182, align 8, !tbaa !28
  %184 = load i64, ptr %28, align 8, !tbaa !15
  %185 = getelementptr inbounds i32, ptr %183, i64 %184
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  store i64 %187, ptr %24, align 8, !tbaa !15
  br label %188

188:                                              ; preds = %238, %167
  %189 = load i64, ptr %24, align 8, !tbaa !15
  %190 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %191 = load ptr, ptr %190, align 8, !tbaa !28
  %192 = load i64, ptr %28, align 8, !tbaa !15
  %193 = add nsw i64 %192, 1
  %194 = getelementptr inbounds i32, ptr %191, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = icmp slt i64 %189, %196
  br i1 %197, label %198, label %241

198:                                              ; preds = %188
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %199

199:                                              ; preds = %234, %198
  %200 = load i64, ptr %25, align 8, !tbaa !15
  %201 = load i32, ptr %15, align 4, !tbaa !9
  %202 = sext i32 %201 to i64
  %203 = icmp slt i64 %200, %202
  br i1 %203, label %204, label %237

204:                                              ; preds = %199
  %205 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %206 = load ptr, ptr %205, align 8, !tbaa !30
  %207 = load i64, ptr %24, align 8, !tbaa !15
  %208 = getelementptr inbounds double, ptr %206, i64 %207
  %209 = load double, ptr %208, align 8, !tbaa !11
  %210 = load ptr, ptr %17, align 8, !tbaa !5
  %211 = load i64, ptr %25, align 8, !tbaa !15
  %212 = load i32, ptr %18, align 4, !tbaa !9
  %213 = sext i32 %212 to i64
  %214 = mul nsw i64 %211, %213
  %215 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %216 = load ptr, ptr %215, align 8, !tbaa !31
  %217 = load i64, ptr %24, align 8, !tbaa !15
  %218 = getelementptr inbounds i32, ptr %216, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = sext i32 %219 to i64
  %221 = add nsw i64 %214, %220
  %222 = getelementptr inbounds double, ptr %210, i64 %221
  %223 = load double, ptr %222, align 8, !tbaa !11
  %224 = load ptr, ptr %20, align 8, !tbaa !5
  %225 = load i64, ptr %25, align 8, !tbaa !15
  %226 = load i32, ptr %21, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = mul nsw i64 %225, %227
  %229 = load i64, ptr %27, align 8, !tbaa !15
  %230 = add nsw i64 %228, %229
  %231 = getelementptr inbounds double, ptr %224, i64 %230
  %232 = load double, ptr %231, align 8, !tbaa !11
  %233 = call double @llvm.fmuladd.f64(double %209, double %223, double %232)
  store double %233, ptr %231, align 8, !tbaa !11
  br label %234

234:                                              ; preds = %204
  %235 = load i64, ptr %25, align 8, !tbaa !15
  %236 = add nsw i64 %235, 1
  store i64 %236, ptr %25, align 8, !tbaa !15
  br label %199, !llvm.loop !32

237:                                              ; preds = %199
  br label %238

238:                                              ; preds = %237
  %239 = load i64, ptr %24, align 8, !tbaa !15
  %240 = add nsw i64 %239, 1
  store i64 %240, ptr %24, align 8, !tbaa !15
  br label %188, !llvm.loop !33

241:                                              ; preds = %188
  br label %242

242:                                              ; preds = %241
  %243 = load i64, ptr %26, align 8, !tbaa !15
  %244 = add nsw i64 %243, 1
  store i64 %244, ptr %26, align 8, !tbaa !15
  br label %160, !llvm.loop !34

245:                                              ; preds = %160
  br label %428

246:                                              ; preds = %155
  %247 = load double, ptr %16, align 8, !tbaa !11
  %248 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %247, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %249 = icmp eq i32 %248, 1
  br i1 %249, label %250, label %338

250:                                              ; preds = %246
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %251

251:                                              ; preds = %334, %250
  %252 = load i64, ptr %26, align 8, !tbaa !15
  %253 = load ptr, ptr %13, align 8, !tbaa !5
  %254 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %253, i32 0, i32 2
  %255 = load i32, ptr %254, align 8, !tbaa !17
  %256 = sext i32 %255 to i64
  %257 = icmp slt i64 %252, %256
  br i1 %257, label %258, label %337

258:                                              ; preds = %251
  %259 = load ptr, ptr %13, align 8, !tbaa !5
  %260 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %259, i32 0, i32 1
  %261 = load ptr, ptr %260, align 8, !tbaa !26
  %262 = load i64, ptr %26, align 8, !tbaa !15
  %263 = getelementptr inbounds i32, ptr %261, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  store i64 %265, ptr %27, align 8, !tbaa !15
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %266, i32 0, i32 0
  %268 = load ptr, ptr %267, align 8, !tbaa !27
  %269 = load i64, ptr %27, align 8, !tbaa !15
  %270 = getelementptr inbounds i32, ptr %268, i64 %269
  %271 = load i32, ptr %270, align 4, !tbaa !9
  %272 = sext i32 %271 to i64
  store i64 %272, ptr %28, align 8, !tbaa !15
  %273 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %274 = load ptr, ptr %273, align 8, !tbaa !28
  %275 = load i64, ptr %28, align 8, !tbaa !15
  %276 = getelementptr inbounds i32, ptr %274, i64 %275
  %277 = load i32, ptr %276, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  store i64 %278, ptr %24, align 8, !tbaa !15
  br label %279

279:                                              ; preds = %330, %258
  %280 = load i64, ptr %24, align 8, !tbaa !15
  %281 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %282 = load ptr, ptr %281, align 8, !tbaa !28
  %283 = load i64, ptr %28, align 8, !tbaa !15
  %284 = add nsw i64 %283, 1
  %285 = getelementptr inbounds i32, ptr %282, i64 %284
  %286 = load i32, ptr %285, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = icmp slt i64 %280, %287
  br i1 %288, label %289, label %333

289:                                              ; preds = %279
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %290

290:                                              ; preds = %326, %289
  %291 = load i64, ptr %25, align 8, !tbaa !15
  %292 = load i32, ptr %15, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = icmp slt i64 %291, %293
  br i1 %294, label %295, label %329

295:                                              ; preds = %290
  %296 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %297 = load ptr, ptr %296, align 8, !tbaa !30
  %298 = load i64, ptr %24, align 8, !tbaa !15
  %299 = getelementptr inbounds double, ptr %297, i64 %298
  %300 = load double, ptr %299, align 8, !tbaa !11
  %301 = load ptr, ptr %17, align 8, !tbaa !5
  %302 = load i64, ptr %25, align 8, !tbaa !15
  %303 = load i32, ptr %18, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = mul nsw i64 %302, %304
  %306 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %307 = load ptr, ptr %306, align 8, !tbaa !31
  %308 = load i64, ptr %24, align 8, !tbaa !15
  %309 = getelementptr inbounds i32, ptr %307, i64 %308
  %310 = load i32, ptr %309, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = add nsw i64 %305, %311
  %313 = getelementptr inbounds double, ptr %301, i64 %312
  %314 = load double, ptr %313, align 8, !tbaa !11
  %315 = load ptr, ptr %20, align 8, !tbaa !5
  %316 = load i64, ptr %25, align 8, !tbaa !15
  %317 = load i32, ptr %21, align 4, !tbaa !9
  %318 = sext i32 %317 to i64
  %319 = mul nsw i64 %316, %318
  %320 = load i64, ptr %27, align 8, !tbaa !15
  %321 = add nsw i64 %319, %320
  %322 = getelementptr inbounds double, ptr %315, i64 %321
  %323 = load double, ptr %322, align 8, !tbaa !11
  %324 = fneg double %300
  %325 = call double @llvm.fmuladd.f64(double %324, double %314, double %323)
  store double %325, ptr %322, align 8, !tbaa !11
  br label %326

326:                                              ; preds = %295
  %327 = load i64, ptr %25, align 8, !tbaa !15
  %328 = add nsw i64 %327, 1
  store i64 %328, ptr %25, align 8, !tbaa !15
  br label %290, !llvm.loop !35

329:                                              ; preds = %290
  br label %330

330:                                              ; preds = %329
  %331 = load i64, ptr %24, align 8, !tbaa !15
  %332 = add nsw i64 %331, 1
  store i64 %332, ptr %24, align 8, !tbaa !15
  br label %279, !llvm.loop !36

333:                                              ; preds = %279
  br label %334

334:                                              ; preds = %333
  %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 %251, !llvm.loop !37

337:                                              ; preds = %251
  br label %427

338:                                              ; preds = %246
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %339

339:                                              ; preds = %423, %338
  %340 = load i64, ptr %26, align 8, !tbaa !15
  %341 = load ptr, ptr %13, align 8, !tbaa !5
  %342 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %341, i32 0, i32 2
  %343 = load i32, ptr %342, align 8, !tbaa !17
  %344 = sext i32 %343 to i64
  %345 = icmp slt i64 %340, %344
  br i1 %345, label %346, label %426

346:                                              ; preds = %339
  %347 = load ptr, ptr %13, align 8, !tbaa !5
  %348 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %347, i32 0, i32 1
  %349 = load ptr, ptr %348, align 8, !tbaa !26
  %350 = load i64, ptr %26, align 8, !tbaa !15
  %351 = getelementptr inbounds i32, ptr %349, i64 %350
  %352 = load i32, ptr %351, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  store i64 %353, ptr %27, align 8, !tbaa !15
  %354 = load ptr, ptr %13, align 8, !tbaa !5
  %355 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %354, i32 0, i32 0
  %356 = load ptr, ptr %355, align 8, !tbaa !27
  %357 = load i64, ptr %27, align 8, !tbaa !15
  %358 = getelementptr inbounds i32, ptr %356, i64 %357
  %359 = load i32, ptr %358, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  store i64 %360, ptr %28, align 8, !tbaa !15
  %361 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %362 = load ptr, ptr %361, align 8, !tbaa !28
  %363 = load i64, ptr %28, align 8, !tbaa !15
  %364 = getelementptr inbounds i32, ptr %362, i64 %363
  %365 = load i32, ptr %364, align 4, !tbaa !9
  %366 = sext i32 %365 to i64
  store i64 %366, ptr %24, align 8, !tbaa !15
  br label %367

367:                                              ; preds = %419, %346
  %368 = load i64, ptr %24, align 8, !tbaa !15
  %369 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %370 = load ptr, ptr %369, align 8, !tbaa !28
  %371 = load i64, ptr %28, align 8, !tbaa !15
  %372 = add nsw i64 %371, 1
  %373 = getelementptr inbounds i32, ptr %370, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !9
  %375 = sext i32 %374 to i64
  %376 = icmp slt i64 %368, %375
  br i1 %376, label %377, label %422

377:                                              ; preds = %367
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %378

378:                                              ; preds = %415, %377
  %379 = load i64, ptr %25, align 8, !tbaa !15
  %380 = load i32, ptr %15, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = icmp slt i64 %379, %381
  br i1 %382, label %383, label %418

383:                                              ; preds = %378
  %384 = load double, ptr %16, align 8, !tbaa !11
  %385 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %386 = load ptr, ptr %385, align 8, !tbaa !30
  %387 = load i64, ptr %24, align 8, !tbaa !15
  %388 = getelementptr inbounds double, ptr %386, i64 %387
  %389 = load double, ptr %388, align 8, !tbaa !11
  %390 = fmul double %384, %389
  %391 = load ptr, ptr %17, align 8, !tbaa !5
  %392 = load i64, ptr %25, align 8, !tbaa !15
  %393 = load i32, ptr %18, align 4, !tbaa !9
  %394 = sext i32 %393 to i64
  %395 = mul nsw i64 %392, %394
  %396 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %397 = load ptr, ptr %396, align 8, !tbaa !31
  %398 = load i64, ptr %24, align 8, !tbaa !15
  %399 = getelementptr inbounds i32, ptr %397, i64 %398
  %400 = load i32, ptr %399, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = add nsw i64 %395, %401
  %403 = getelementptr inbounds double, ptr %391, i64 %402
  %404 = load double, ptr %403, align 8, !tbaa !11
  %405 = load ptr, ptr %20, align 8, !tbaa !5
  %406 = load i64, ptr %25, align 8, !tbaa !15
  %407 = load i32, ptr %21, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = mul nsw i64 %406, %408
  %410 = load i64, ptr %27, align 8, !tbaa !15
  %411 = add nsw i64 %409, %410
  %412 = getelementptr inbounds double, ptr %405, i64 %411
  %413 = load double, ptr %412, align 8, !tbaa !11
  %414 = call double @llvm.fmuladd.f64(double %390, double %404, double %413)
  store double %414, ptr %412, align 8, !tbaa !11
  br label %415

415:                                              ; preds = %383
  %416 = load i64, ptr %25, align 8, !tbaa !15
  %417 = add nsw i64 %416, 1
  store i64 %417, ptr %25, align 8, !tbaa !15
  br label %378, !llvm.loop !38

418:                                              ; preds = %378
  br label %419

419:                                              ; preds = %418
  %420 = load i64, ptr %24, align 8, !tbaa !15
  %421 = add nsw i64 %420, 1
  store i64 %421, ptr %24, align 8, !tbaa !15
  br label %367, !llvm.loop !39

422:                                              ; preds = %367
  br label %423

423:                                              ; preds = %422
  %424 = load i64, ptr %26, align 8, !tbaa !15
  %425 = add nsw i64 %424, 1
  store i64 %425, ptr %26, align 8, !tbaa !15
  br label %339, !llvm.loop !40

426:                                              ; preds = %339
  br label %427

427:                                              ; preds = %426, %337
  br label %428

428:                                              ; preds = %427, %245
  br label %874

429:                                              ; preds = %152
  %430 = load double, ptr %16, align 8, !tbaa !11
  %431 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %430, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %432 = icmp eq i32 %431, 1
  br i1 %432, label %433, label %577

433:                                              ; preds = %429
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %434

434:                                              ; preds = %573, %433
  %435 = load i64, ptr %26, align 8, !tbaa !15
  %436 = load ptr, ptr %13, align 8, !tbaa !5
  %437 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %436, i32 0, i32 2
  %438 = load i32, ptr %437, align 8, !tbaa !17
  %439 = sext i32 %438 to i64
  %440 = icmp slt i64 %435, %439
  br i1 %440, label %441, label %576

441:                                              ; preds = %434
  %442 = load ptr, ptr %13, align 8, !tbaa !5
  %443 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %442, i32 0, i32 1
  %444 = load ptr, ptr %443, align 8, !tbaa !26
  %445 = load i64, ptr %26, align 8, !tbaa !15
  %446 = getelementptr inbounds i32, ptr %444, i64 %445
  %447 = load i32, ptr %446, align 4, !tbaa !9
  %448 = sext i32 %447 to i64
  store i64 %448, ptr %27, align 8, !tbaa !15
  %449 = load ptr, ptr %13, align 8, !tbaa !5
  %450 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %449, i32 0, i32 0
  %451 = load ptr, ptr %450, align 8, !tbaa !27
  %452 = load i64, ptr %27, align 8, !tbaa !15
  %453 = getelementptr inbounds i32, ptr %451, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !9
  %455 = sext i32 %454 to i64
  store i64 %455, ptr %28, align 8, !tbaa !15
  %456 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %457 = load ptr, ptr %456, align 8, !tbaa !28
  %458 = load i64, ptr %28, align 8, !tbaa !15
  %459 = getelementptr inbounds i32, ptr %457, i64 %458
  %460 = load i32, ptr %459, align 4, !tbaa !9
  %461 = sext i32 %460 to i64
  store i64 %461, ptr %24, align 8, !tbaa !15
  store i64 0, ptr %23, align 8, !tbaa !15
  br label %462

462:                                              ; preds = %571, %441
  %463 = load i64, ptr %24, align 8, !tbaa !15
  %464 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %465 = load ptr, ptr %464, align 8, !tbaa !28
  %466 = load i64, ptr %28, align 8, !tbaa !15
  %467 = add nsw i64 %466, 1
  %468 = getelementptr inbounds i32, ptr %465, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !9
  %470 = sext i32 %469 to i64
  %471 = icmp slt i64 %463, %470
  br i1 %471, label %472, label %479

472:                                              ; preds = %462
  %473 = load i64, ptr %23, align 8, !tbaa !15
  %474 = load ptr, ptr %14, align 8, !tbaa !5
  %475 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %474, i32 0, i32 2
  %476 = load i32, ptr %475, align 8, !tbaa !17
  %477 = sext i32 %476 to i64
  %478 = icmp slt i64 %473, %477
  br label %479

479:                                              ; preds = %472, %462
  %480 = phi i1 [ false, %462 ], [ %478, %472 ]
  br i1 %480, label %481, label %572

481:                                              ; preds = %479
  %482 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %483 = load ptr, ptr %482, align 8, !tbaa !31
  %484 = load i64, ptr %24, align 8, !tbaa !15
  %485 = getelementptr inbounds i32, ptr %483, i64 %484
  %486 = load i32, ptr %485, align 4, !tbaa !9
  %487 = load ptr, ptr %14, align 8, !tbaa !5
  %488 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %487, i32 0, i32 0
  %489 = load ptr, ptr %488, align 8, !tbaa !27
  %490 = load ptr, ptr %14, align 8, !tbaa !5
  %491 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %490, i32 0, i32 1
  %492 = load ptr, ptr %491, align 8, !tbaa !26
  %493 = load i64, ptr %23, align 8, !tbaa !15
  %494 = getelementptr inbounds i32, ptr %492, i64 %493
  %495 = load i32, ptr %494, align 4, !tbaa !9
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds i32, ptr %489, i64 %496
  %498 = load i32, ptr %497, align 4, !tbaa !9
  %499 = icmp eq i32 %486, %498
  br i1 %499, label %500, label %545

500:                                              ; preds = %481
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %501

501:                                              ; preds = %537, %500
  %502 = load i64, ptr %25, align 8, !tbaa !15
  %503 = load i32, ptr %15, align 4, !tbaa !9
  %504 = sext i32 %503 to i64
  %505 = icmp slt i64 %502, %504
  br i1 %505, label %506, label %540

506:                                              ; preds = %501
  %507 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %508 = load ptr, ptr %507, align 8, !tbaa !30
  %509 = load i64, ptr %24, align 8, !tbaa !15
  %510 = getelementptr inbounds double, ptr %508, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !11
  %512 = load ptr, ptr %17, align 8, !tbaa !5
  %513 = load i64, ptr %25, align 8, !tbaa !15
  %514 = load i32, ptr %18, align 4, !tbaa !9
  %515 = sext i32 %514 to i64
  %516 = mul nsw i64 %513, %515
  %517 = load ptr, ptr %14, align 8, !tbaa !5
  %518 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %517, i32 0, i32 1
  %519 = load ptr, ptr %518, align 8, !tbaa !26
  %520 = load i64, ptr %23, align 8, !tbaa !15
  %521 = getelementptr inbounds i32, ptr %519, i64 %520
  %522 = load i32, ptr %521, align 4, !tbaa !9
  %523 = sext i32 %522 to i64
  %524 = add nsw i64 %516, %523
  %525 = getelementptr inbounds double, ptr %512, i64 %524
  %526 = load double, ptr %525, align 8, !tbaa !11
  %527 = load ptr, ptr %20, align 8, !tbaa !5
  %528 = load i64, ptr %25, align 8, !tbaa !15
  %529 = load i32, ptr %21, align 4, !tbaa !9
  %530 = sext i32 %529 to i64
  %531 = mul nsw i64 %528, %530
  %532 = load i64, ptr %27, align 8, !tbaa !15
  %533 = add nsw i64 %531, %532
  %534 = getelementptr inbounds double, ptr %527, i64 %533
  %535 = load double, ptr %534, align 8, !tbaa !11
  %536 = call double @llvm.fmuladd.f64(double %511, double %526, double %535)
  store double %536, ptr %534, align 8, !tbaa !11
  br label %537

537:                                              ; preds = %506
  %538 = load i64, ptr %25, align 8, !tbaa !15
  %539 = add nsw i64 %538, 1
  store i64 %539, ptr %25, align 8, !tbaa !15
  br label %501, !llvm.loop !41

540:                                              ; preds = %501
  %541 = load i64, ptr %24, align 8, !tbaa !15
  %542 = add nsw i64 %541, 1
  store i64 %542, ptr %24, align 8, !tbaa !15
  %543 = load i64, ptr %23, align 8, !tbaa !15
  %544 = add nsw i64 %543, 1
  store i64 %544, ptr %23, align 8, !tbaa !15
  br label %571

545:                                              ; preds = %481
  %546 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %547 = load ptr, ptr %546, align 8, !tbaa !31
  %548 = load i64, ptr %24, align 8, !tbaa !15
  %549 = getelementptr inbounds i32, ptr %547, i64 %548
  %550 = load i32, ptr %549, align 4, !tbaa !9
  %551 = load ptr, ptr %14, align 8, !tbaa !5
  %552 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %551, i32 0, i32 0
  %553 = load ptr, ptr %552, align 8, !tbaa !27
  %554 = load ptr, ptr %14, align 8, !tbaa !5
  %555 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %554, i32 0, i32 1
  %556 = load ptr, ptr %555, align 8, !tbaa !26
  %557 = load i64, ptr %23, align 8, !tbaa !15
  %558 = getelementptr inbounds i32, ptr %556, i64 %557
  %559 = load i32, ptr %558, align 4, !tbaa !9
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds i32, ptr %553, i64 %560
  %562 = load i32, ptr %561, align 4, !tbaa !9
  %563 = icmp sgt i32 %550, %562
  br i1 %563, label %564, label %567

564:                                              ; preds = %545
  %565 = load i64, ptr %23, align 8, !tbaa !15
  %566 = add nsw i64 %565, 1
  store i64 %566, ptr %23, align 8, !tbaa !15
  br label %570

567:                                              ; preds = %545
  %568 = load i64, ptr %24, align 8, !tbaa !15
  %569 = add nsw i64 %568, 1
  store i64 %569, ptr %24, align 8, !tbaa !15
  br label %570

570:                                              ; preds = %567, %564
  br label %571

571:                                              ; preds = %570, %540
  br label %462, !llvm.loop !42

572:                                              ; preds = %479
  br label %573

573:                                              ; preds = %572
  %574 = load i64, ptr %26, align 8, !tbaa !15
  %575 = add nsw i64 %574, 1
  store i64 %575, ptr %26, align 8, !tbaa !15
  br label %434, !llvm.loop !43

576:                                              ; preds = %434
  br label %873

577:                                              ; preds = %429
  %578 = load double, ptr %16, align 8, !tbaa !11
  %579 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %578, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %580 = icmp eq i32 %579, 1
  br i1 %580, label %581, label %726

581:                                              ; preds = %577
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %582

582:                                              ; preds = %722, %581
  %583 = load i64, ptr %26, align 8, !tbaa !15
  %584 = load ptr, ptr %13, align 8, !tbaa !5
  %585 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %584, i32 0, i32 2
  %586 = load i32, ptr %585, align 8, !tbaa !17
  %587 = sext i32 %586 to i64
  %588 = icmp slt i64 %583, %587
  br i1 %588, label %589, label %725

589:                                              ; preds = %582
  %590 = load ptr, ptr %13, align 8, !tbaa !5
  %591 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %590, i32 0, i32 1
  %592 = load ptr, ptr %591, align 8, !tbaa !26
  %593 = load i64, ptr %26, align 8, !tbaa !15
  %594 = getelementptr inbounds i32, ptr %592, i64 %593
  %595 = load i32, ptr %594, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  store i64 %596, ptr %27, align 8, !tbaa !15
  %597 = load ptr, ptr %13, align 8, !tbaa !5
  %598 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %597, i32 0, i32 0
  %599 = load ptr, ptr %598, align 8, !tbaa !27
  %600 = load i64, ptr %27, align 8, !tbaa !15
  %601 = getelementptr inbounds i32, ptr %599, i64 %600
  %602 = load i32, ptr %601, align 4, !tbaa !9
  %603 = sext i32 %602 to i64
  store i64 %603, ptr %28, align 8, !tbaa !15
  %604 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %605 = load ptr, ptr %604, align 8, !tbaa !28
  %606 = load i64, ptr %28, align 8, !tbaa !15
  %607 = getelementptr inbounds i32, ptr %605, i64 %606
  %608 = load i32, ptr %607, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  store i64 %609, ptr %24, align 8, !tbaa !15
  store i64 0, ptr %23, align 8, !tbaa !15
  br label %610

610:                                              ; preds = %720, %589
  %611 = load i64, ptr %24, align 8, !tbaa !15
  %612 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %613 = load ptr, ptr %612, align 8, !tbaa !28
  %614 = load i64, ptr %28, align 8, !tbaa !15
  %615 = add nsw i64 %614, 1
  %616 = getelementptr inbounds i32, ptr %613, i64 %615
  %617 = load i32, ptr %616, align 4, !tbaa !9
  %618 = sext i32 %617 to i64
  %619 = icmp slt i64 %611, %618
  br i1 %619, label %620, label %627

620:                                              ; preds = %610
  %621 = load i64, ptr %23, align 8, !tbaa !15
  %622 = load ptr, ptr %14, align 8, !tbaa !5
  %623 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %622, i32 0, i32 2
  %624 = load i32, ptr %623, align 8, !tbaa !17
  %625 = sext i32 %624 to i64
  %626 = icmp slt i64 %621, %625
  br label %627

627:                                              ; preds = %620, %610
  %628 = phi i1 [ false, %610 ], [ %626, %620 ]
  br i1 %628, label %629, label %721

629:                                              ; preds = %627
  %630 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %631 = load ptr, ptr %630, align 8, !tbaa !31
  %632 = load i64, ptr %24, align 8, !tbaa !15
  %633 = getelementptr inbounds i32, ptr %631, i64 %632
  %634 = load i32, ptr %633, align 4, !tbaa !9
  %635 = load ptr, ptr %14, align 8, !tbaa !5
  %636 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %635, i32 0, i32 0
  %637 = load ptr, ptr %636, align 8, !tbaa !27
  %638 = load ptr, ptr %14, align 8, !tbaa !5
  %639 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %638, i32 0, i32 1
  %640 = load ptr, ptr %639, align 8, !tbaa !26
  %641 = load i64, ptr %23, align 8, !tbaa !15
  %642 = getelementptr inbounds i32, ptr %640, i64 %641
  %643 = load i32, ptr %642, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = getelementptr inbounds i32, ptr %637, i64 %644
  %646 = load i32, ptr %645, align 4, !tbaa !9
  %647 = icmp eq i32 %634, %646
  br i1 %647, label %648, label %694

648:                                              ; preds = %629
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %649

649:                                              ; preds = %686, %648
  %650 = load i64, ptr %25, align 8, !tbaa !15
  %651 = load i32, ptr %15, align 4, !tbaa !9
  %652 = sext i32 %651 to i64
  %653 = icmp slt i64 %650, %652
  br i1 %653, label %654, label %689

654:                                              ; preds = %649
  %655 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %656 = load ptr, ptr %655, align 8, !tbaa !30
  %657 = load i64, ptr %24, align 8, !tbaa !15
  %658 = getelementptr inbounds double, ptr %656, i64 %657
  %659 = load double, ptr %658, align 8, !tbaa !11
  %660 = load ptr, ptr %17, align 8, !tbaa !5
  %661 = load i64, ptr %25, align 8, !tbaa !15
  %662 = load i32, ptr %18, align 4, !tbaa !9
  %663 = sext i32 %662 to i64
  %664 = mul nsw i64 %661, %663
  %665 = load ptr, ptr %14, align 8, !tbaa !5
  %666 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %665, i32 0, i32 1
  %667 = load ptr, ptr %666, align 8, !tbaa !26
  %668 = load i64, ptr %23, align 8, !tbaa !15
  %669 = getelementptr inbounds i32, ptr %667, i64 %668
  %670 = load i32, ptr %669, align 4, !tbaa !9
  %671 = sext i32 %670 to i64
  %672 = add nsw i64 %664, %671
  %673 = getelementptr inbounds double, ptr %660, i64 %672
  %674 = load double, ptr %673, align 8, !tbaa !11
  %675 = load ptr, ptr %20, align 8, !tbaa !5
  %676 = load i64, ptr %25, align 8, !tbaa !15
  %677 = load i32, ptr %21, align 4, !tbaa !9
  %678 = sext i32 %677 to i64
  %679 = mul nsw i64 %676, %678
  %680 = load i64, ptr %27, align 8, !tbaa !15
  %681 = add nsw i64 %679, %680
  %682 = getelementptr inbounds double, ptr %675, i64 %681
  %683 = load double, ptr %682, align 8, !tbaa !11
  %684 = fneg double %659
  %685 = call double @llvm.fmuladd.f64(double %684, double %674, double %683)
  store double %685, ptr %682, align 8, !tbaa !11
  br label %686

686:                                              ; preds = %654
  %687 = load i64, ptr %25, align 8, !tbaa !15
  %688 = add nsw i64 %687, 1
  store i64 %688, ptr %25, align 8, !tbaa !15
  br label %649, !llvm.loop !44

689:                                              ; preds = %649
  %690 = load i64, ptr %24, align 8, !tbaa !15
  %691 = add nsw i64 %690, 1
  store i64 %691, ptr %24, align 8, !tbaa !15
  %692 = load i64, ptr %23, align 8, !tbaa !15
  %693 = add nsw i64 %692, 1
  store i64 %693, ptr %23, align 8, !tbaa !15
  br label %720

694:                                              ; preds = %629
  %695 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %696 = load ptr, ptr %695, align 8, !tbaa !31
  %697 = load i64, ptr %24, align 8, !tbaa !15
  %698 = getelementptr inbounds i32, ptr %696, i64 %697
  %699 = load i32, ptr %698, align 4, !tbaa !9
  %700 = load ptr, ptr %14, align 8, !tbaa !5
  %701 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %700, i32 0, i32 0
  %702 = load ptr, ptr %701, align 8, !tbaa !27
  %703 = load ptr, ptr %14, align 8, !tbaa !5
  %704 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %703, i32 0, i32 1
  %705 = load ptr, ptr %704, align 8, !tbaa !26
  %706 = load i64, ptr %23, align 8, !tbaa !15
  %707 = getelementptr inbounds i32, ptr %705, i64 %706
  %708 = load i32, ptr %707, align 4, !tbaa !9
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds i32, ptr %702, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !9
  %712 = icmp sgt i32 %699, %711
  br i1 %712, label %713, label %716

713:                                              ; preds = %694
  %714 = load i64, ptr %23, align 8, !tbaa !15
  %715 = add nsw i64 %714, 1
  store i64 %715, ptr %23, align 8, !tbaa !15
  br label %719

716:                                              ; preds = %694
  %717 = load i64, ptr %24, align 8, !tbaa !15
  %718 = add nsw i64 %717, 1
  store i64 %718, ptr %24, align 8, !tbaa !15
  br label %719

719:                                              ; preds = %716, %713
  br label %720

720:                                              ; preds = %719, %689
  br label %610, !llvm.loop !45

721:                                              ; preds = %627
  br label %722

722:                                              ; preds = %721
  %723 = load i64, ptr %26, align 8, !tbaa !15
  %724 = add nsw i64 %723, 1
  store i64 %724, ptr %26, align 8, !tbaa !15
  br label %582, !llvm.loop !46

725:                                              ; preds = %582
  br label %872

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

727:                                              ; preds = %868, %726
  %728 = load i64, ptr %26, align 8, !tbaa !15
  %729 = load ptr, ptr %13, align 8, !tbaa !5
  %730 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %729, i32 0, i32 2
  %731 = load i32, ptr %730, align 8, !tbaa !17
  %732 = sext i32 %731 to i64
  %733 = icmp slt i64 %728, %732
  br i1 %733, label %734, label %871

734:                                              ; preds = %727
  %735 = load ptr, ptr %13, align 8, !tbaa !5
  %736 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %735, i32 0, i32 1
  %737 = load ptr, ptr %736, align 8, !tbaa !26
  %738 = load i64, ptr %26, align 8, !tbaa !15
  %739 = getelementptr inbounds i32, ptr %737, i64 %738
  %740 = load i32, ptr %739, align 4, !tbaa !9
  %741 = sext i32 %740 to i64
  store i64 %741, ptr %27, align 8, !tbaa !15
  %742 = load ptr, ptr %13, align 8, !tbaa !5
  %743 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %742, i32 0, i32 0
  %744 = load ptr, ptr %743, align 8, !tbaa !27
  %745 = load i64, ptr %27, 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
  store i64 %748, ptr %28, align 8, !tbaa !15
  %749 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %750 = load ptr, ptr %749, align 8, !tbaa !28
  %751 = load i64, ptr %28, align 8, !tbaa !15
  %752 = getelementptr inbounds i32, ptr %750, i64 %751
  %753 = load i32, ptr %752, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  store i64 %754, ptr %24, align 8, !tbaa !15
  store i64 0, ptr %23, align 8, !tbaa !15
  br label %755

755:                                              ; preds = %866, %734
  %756 = load i64, ptr %24, align 8, !tbaa !15
  %757 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %758 = load ptr, ptr %757, align 8, !tbaa !28
  %759 = load i64, ptr %28, align 8, !tbaa !15
  %760 = add nsw i64 %759, 1
  %761 = getelementptr inbounds i32, ptr %758, i64 %760
  %762 = load i32, ptr %761, align 4, !tbaa !9
  %763 = sext i32 %762 to i64
  %764 = icmp slt i64 %756, %763
  br i1 %764, label %765, label %772

765:                                              ; preds = %755
  %766 = load i64, ptr %23, align 8, !tbaa !15
  %767 = load ptr, ptr %14, align 8, !tbaa !5
  %768 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %767, i32 0, i32 2
  %769 = load i32, ptr %768, align 8, !tbaa !17
  %770 = sext i32 %769 to i64
  %771 = icmp slt i64 %766, %770
  br label %772

772:                                              ; preds = %765, %755
  %773 = phi i1 [ false, %755 ], [ %771, %765 ]
  br i1 %773, label %774, label %867

774:                                              ; preds = %772
  %775 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %776 = load ptr, ptr %775, align 8, !tbaa !31
  %777 = load i64, ptr %24, align 8, !tbaa !15
  %778 = getelementptr inbounds i32, ptr %776, i64 %777
  %779 = load i32, ptr %778, align 4, !tbaa !9
  %780 = load ptr, ptr %14, align 8, !tbaa !5
  %781 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %780, i32 0, i32 0
  %782 = load ptr, ptr %781, align 8, !tbaa !27
  %783 = load ptr, ptr %14, align 8, !tbaa !5
  %784 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %783, i32 0, i32 1
  %785 = load ptr, ptr %784, align 8, !tbaa !26
  %786 = load i64, ptr %23, align 8, !tbaa !15
  %787 = getelementptr inbounds i32, ptr %785, i64 %786
  %788 = load i32, ptr %787, align 4, !tbaa !9
  %789 = sext i32 %788 to i64
  %790 = getelementptr inbounds i32, ptr %782, i64 %789
  %791 = load i32, ptr %790, align 4, !tbaa !9
  %792 = icmp eq i32 %779, %791
  br i1 %792, label %793, label %840

793:                                              ; preds = %774
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %794

794:                                              ; preds = %832, %793
  %795 = load i64, ptr %25, align 8, !tbaa !15
  %796 = load i32, ptr %15, align 4, !tbaa !9
  %797 = sext i32 %796 to i64
  %798 = icmp slt i64 %795, %797
  br i1 %798, label %799, label %835

799:                                              ; preds = %794
  %800 = load double, ptr %16, align 8, !tbaa !11
  %801 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %802 = load ptr, ptr %801, align 8, !tbaa !30
  %803 = load i64, ptr %24, align 8, !tbaa !15
  %804 = getelementptr inbounds double, ptr %802, i64 %803
  %805 = load double, ptr %804, align 8, !tbaa !11
  %806 = fmul double %800, %805
  %807 = load ptr, ptr %17, align 8, !tbaa !5
  %808 = load i64, ptr %25, align 8, !tbaa !15
  %809 = load i32, ptr %18, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = mul nsw i64 %808, %810
  %812 = load ptr, ptr %14, align 8, !tbaa !5
  %813 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %812, i32 0, i32 1
  %814 = load ptr, ptr %813, align 8, !tbaa !26
  %815 = load i64, ptr %23, align 8, !tbaa !15
  %816 = getelementptr inbounds i32, ptr %814, i64 %815
  %817 = load i32, ptr %816, align 4, !tbaa !9
  %818 = sext i32 %817 to i64
  %819 = add nsw i64 %811, %818
  %820 = getelementptr inbounds double, ptr %807, i64 %819
  %821 = load double, ptr %820, align 8, !tbaa !11
  %822 = load ptr, ptr %20, align 8, !tbaa !5
  %823 = load i64, ptr %25, align 8, !tbaa !15
  %824 = load i32, ptr %21, align 4, !tbaa !9
  %825 = sext i32 %824 to i64
  %826 = mul nsw i64 %823, %825
  %827 = load i64, ptr %27, align 8, !tbaa !15
  %828 = add nsw i64 %826, %827
  %829 = getelementptr inbounds double, ptr %822, i64 %828
  %830 = load double, ptr %829, align 8, !tbaa !11
  %831 = call double @llvm.fmuladd.f64(double %806, double %821, double %830)
  store double %831, ptr %829, align 8, !tbaa !11
  br label %832

832:                                              ; preds = %799
  %833 = load i64, ptr %25, align 8, !tbaa !15
  %834 = add nsw i64 %833, 1
  store i64 %834, ptr %25, align 8, !tbaa !15
  br label %794, !llvm.loop !47

835:                                              ; preds = %794
  %836 = load i64, ptr %24, align 8, !tbaa !15
  %837 = add nsw i64 %836, 1
  store i64 %837, ptr %24, align 8, !tbaa !15
  %838 = load i64, ptr %23, align 8, !tbaa !15
  %839 = add nsw i64 %838, 1
  store i64 %839, ptr %23, align 8, !tbaa !15
  br label %866

840:                                              ; preds = %774
  %841 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %842 = load ptr, ptr %841, align 8, !tbaa !31
  %843 = load i64, ptr %24, align 8, !tbaa !15
  %844 = getelementptr inbounds i32, ptr %842, i64 %843
  %845 = load i32, ptr %844, align 4, !tbaa !9
  %846 = load ptr, ptr %14, align 8, !tbaa !5
  %847 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %846, i32 0, i32 0
  %848 = load ptr, ptr %847, align 8, !tbaa !27
  %849 = load ptr, ptr %14, align 8, !tbaa !5
  %850 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %849, i32 0, i32 1
  %851 = load ptr, ptr %850, align 8, !tbaa !26
  %852 = load i64, ptr %23, align 8, !tbaa !15
  %853 = getelementptr inbounds i32, ptr %851, i64 %852
  %854 = load i32, ptr %853, align 4, !tbaa !9
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds i32, ptr %848, i64 %855
  %857 = load i32, ptr %856, align 4, !tbaa !9
  %858 = icmp sgt i32 %845, %857
  br i1 %858, label %859, label %862

859:                                              ; preds = %840
  %860 = load i64, ptr %23, align 8, !tbaa !15
  %861 = add nsw i64 %860, 1
  store i64 %861, ptr %23, align 8, !tbaa !15
  br label %865

862:                                              ; preds = %840
  %863 = load i64, ptr %24, align 8, !tbaa !15
  %864 = add nsw i64 %863, 1
  store i64 %864, ptr %24, align 8, !tbaa !15
  br label %865

865:                                              ; preds = %862, %859
  br label %866

866:                                              ; preds = %865, %835
  br label %755, !llvm.loop !48

867:                                              ; preds = %772
  br label %868

868:                                              ; preds = %867
  %869 = load i64, ptr %26, align 8, !tbaa !15
  %870 = add nsw i64 %869, 1
  store i64 %870, ptr %26, align 8, !tbaa !15
  br label %727, !llvm.loop !49

871:                                              ; preds = %727
  br label %872

872:                                              ; preds = %871, %725
  br label %873

873:                                              ; preds = %872, %576
  br label %874

874:                                              ; preds = %873, %428
  br label %1748

875:                                              ; preds = %11
  %876 = load double, ptr %19, align 8, !tbaa !11
  %877 = call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %876, double noundef 1.000000e-25)
  %878 = icmp eq i32 %877, 1
  br i1 %878, label %879, label %916

879:                                              ; preds = %875
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %880

880:                                              ; preds = %912, %879
  %881 = load i64, ptr %25, align 8, !tbaa !15
  %882 = load i32, ptr %15, align 4, !tbaa !9
  %883 = sext i32 %882 to i64
  %884 = icmp slt i64 %881, %883
  br i1 %884, label %885, label %915

885:                                              ; preds = %880
  store i64 0, ptr %24, align 8, !tbaa !15
  br label %886

886:                                              ; preds = %908, %885
  %887 = load i64, ptr %24, align 8, !tbaa !15
  %888 = load ptr, ptr %13, align 8, !tbaa !5
  %889 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %888, i32 0, i32 2
  %890 = load i32, ptr %889, align 8, !tbaa !17
  %891 = sext i32 %890 to i64
  %892 = icmp slt i64 %887, %891
  br i1 %892, label %893, label %911

893:                                              ; preds = %886
  %894 = load ptr, ptr %20, align 8, !tbaa !5
  %895 = load ptr, ptr %13, align 8, !tbaa !5
  %896 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %895, i32 0, i32 0
  %897 = load ptr, ptr %896, align 8, !tbaa !27
  %898 = load i64, ptr %24, align 8, !tbaa !15
  %899 = getelementptr inbounds i32, ptr %897, i64 %898
  %900 = load i32, ptr %899, align 4, !tbaa !9
  %901 = sext i32 %900 to i64
  %902 = load i64, ptr %25, align 8, !tbaa !15
  %903 = load i32, ptr %21, align 4, !tbaa !9
  %904 = sext i32 %903 to i64
  %905 = mul nsw i64 %902, %904
  %906 = add nsw i64 %901, %905
  %907 = getelementptr inbounds double, ptr %894, i64 %906
  store double 0.000000e+00, ptr %907, align 8, !tbaa !11
  br label %908

908:                                              ; preds = %893
  %909 = load i64, ptr %24, align 8, !tbaa !15
  %910 = add nsw i64 %909, 1
  store i64 %910, ptr %24, align 8, !tbaa !15
  br label %886, !llvm.loop !50

911:                                              ; preds = %886
  br label %912

912:                                              ; preds = %911
  %913 = load i64, ptr %25, align 8, !tbaa !15
  %914 = add nsw i64 %913, 1
  store i64 %914, ptr %25, align 8, !tbaa !15
  br label %880, !llvm.loop !51

915:                                              ; preds = %880
  br label %1013

916:                                              ; preds = %875
  %917 = load double, ptr %19, align 8, !tbaa !11
  %918 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %917, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %919 = icmp eq i32 %918, 1
  br i1 %919, label %920, label %967

920:                                              ; preds = %916
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %921

921:                                              ; preds = %963, %920
  %922 = load i64, ptr %25, align 8, !tbaa !15
  %923 = load i32, ptr %15, align 4, !tbaa !9
  %924 = sext i32 %923 to i64
  %925 = icmp slt i64 %922, %924
  br i1 %925, label %926, label %966

926:                                              ; preds = %921
  store i64 0, ptr %24, align 8, !tbaa !15
  br label %927

927:                                              ; preds = %959, %926
  %928 = load i64, ptr %24, align 8, !tbaa !15
  %929 = load ptr, ptr %13, align 8, !tbaa !5
  %930 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %929, i32 0, i32 2
  %931 = load i32, ptr %930, align 8, !tbaa !17
  %932 = sext i32 %931 to i64
  %933 = icmp slt i64 %928, %932
  br i1 %933, label %934, label %962

934:                                              ; preds = %927
  %935 = load ptr, ptr %20, align 8, !tbaa !5
  %936 = load i64, ptr %24, align 8, !tbaa !15
  %937 = load i64, ptr %25, align 8, !tbaa !15
  %938 = load i32, ptr %21, 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
  %943 = load double, ptr %942, align 8, !tbaa !11
  %944 = fneg double %943
  %945 = load ptr, ptr %20, align 8, !tbaa !5
  %946 = load ptr, ptr %13, align 8, !tbaa !5
  %947 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %946, i32 0, i32 0
  %948 = load ptr, ptr %947, align 8, !tbaa !27
  %949 = load i64, ptr %24, align 8, !tbaa !15
  %950 = getelementptr inbounds i32, ptr %948, i64 %949
  %951 = load i32, ptr %950, align 4, !tbaa !9
  %952 = sext i32 %951 to i64
  %953 = load i64, ptr %25, align 8, !tbaa !15
  %954 = load i32, ptr %21, align 4, !tbaa !9
  %955 = sext i32 %954 to i64
  %956 = mul nsw i64 %953, %955
  %957 = add nsw i64 %952, %956
  %958 = getelementptr inbounds double, ptr %945, i64 %957
  store double %944, ptr %958, align 8, !tbaa !11
  br label %959

959:                                              ; preds = %934
  %960 = load i64, ptr %24, align 8, !tbaa !15
  %961 = add nsw i64 %960, 1
  store i64 %961, ptr %24, align 8, !tbaa !15
  br label %927, !llvm.loop !52

962:                                              ; preds = %927
  br label %963

963:                                              ; preds = %962
  %964 = load i64, ptr %25, align 8, !tbaa !15
  %965 = add nsw i64 %964, 1
  store i64 %965, ptr %25, align 8, !tbaa !15
  br label %921, !llvm.loop !53

966:                                              ; preds = %921
  br label %1012

967:                                              ; preds = %916
  %968 = load double, ptr %19, align 8, !tbaa !11
  %969 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %968, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %970 = icmp eq i32 %969, 0
  br i1 %970, label %971, label %1011

971:                                              ; preds = %967
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %972

972:                                              ; preds = %1007, %971
  %973 = load i64, ptr %25, align 8, !tbaa !15
  %974 = load i32, ptr %15, align 4, !tbaa !9
  %975 = sext i32 %974 to i64
  %976 = icmp slt i64 %973, %975
  br i1 %976, label %977, label %1010

977:                                              ; preds = %972
  store i64 0, ptr %24, align 8, !tbaa !15
  br label %978

978:                                              ; preds = %1003, %977
  %979 = load i64, ptr %24, align 8, !tbaa !15
  %980 = load ptr, ptr %13, align 8, !tbaa !5
  %981 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %980, i32 0, i32 2
  %982 = load i32, ptr %981, align 8, !tbaa !17
  %983 = sext i32 %982 to i64
  %984 = icmp slt i64 %979, %983
  br i1 %984, label %985, label %1006

985:                                              ; preds = %978
  %986 = load double, ptr %19, align 8, !tbaa !11
  %987 = load ptr, ptr %20, align 8, !tbaa !5
  %988 = load ptr, ptr %13, align 8, !tbaa !5
  %989 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %988, i32 0, i32 0
  %990 = load ptr, ptr %989, align 8, !tbaa !27
  %991 = load i64, ptr %24, align 8, !tbaa !15
  %992 = getelementptr inbounds i32, ptr %990, i64 %991
  %993 = load i32, ptr %992, align 4, !tbaa !9
  %994 = sext i32 %993 to i64
  %995 = load i64, ptr %25, align 8, !tbaa !15
  %996 = load i32, ptr %21, align 4, !tbaa !9
  %997 = sext i32 %996 to i64
  %998 = mul nsw i64 %995, %997
  %999 = add nsw i64 %994, %998
  %1000 = getelementptr inbounds double, ptr %987, i64 %999
  %1001 = load double, ptr %1000, align 8, !tbaa !11
  %1002 = fmul double %1001, %986
  store double %1002, ptr %1000, align 8, !tbaa !11
  br label %1003

1003:                                             ; preds = %985
  %1004 = load i64, ptr %24, align 8, !tbaa !15
  %1005 = add nsw i64 %1004, 1
  store i64 %1005, ptr %24, align 8, !tbaa !15
  br label %978, !llvm.loop !54

1006:                                             ; preds = %978
  br label %1007

1007:                                             ; preds = %1006
  %1008 = load i64, ptr %25, align 8, !tbaa !15
  %1009 = add nsw i64 %1008, 1
  store i64 %1009, ptr %25, align 8, !tbaa !15
  br label %972, !llvm.loop !55

1010:                                             ; preds = %972
  br label %1011

1011:                                             ; preds = %1010, %967
  br label %1012

1012:                                             ; preds = %1011, %966
  br label %1013

1013:                                             ; preds = %1012, %915
  %1014 = load ptr, ptr %14, align 8, !tbaa !5
  %1015 = icmp eq ptr %1014, null
  br i1 %1015, label %1016, label %1287

1016:                                             ; preds = %1013
  %1017 = load double, ptr %16, align 8, !tbaa !11
  %1018 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %1017, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %1019 = icmp eq i32 %1018, 1
  br i1 %1019, label %1020, label %1106

1020:                                             ; preds = %1016
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1021

1021:                                             ; preds = %1102, %1020
  %1022 = load i64, ptr %26, align 8, !tbaa !15
  %1023 = load ptr, ptr %13, align 8, !tbaa !5
  %1024 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1023, i32 0, i32 2
  %1025 = load i32, ptr %1024, align 8, !tbaa !17
  %1026 = sext i32 %1025 to i64
  %1027 = icmp slt i64 %1022, %1026
  br i1 %1027, label %1028, label %1105

1028:                                             ; preds = %1021
  %1029 = load ptr, ptr %13, align 8, !tbaa !5
  %1030 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1029, i32 0, i32 0
  %1031 = load ptr, ptr %1030, align 8, !tbaa !27
  %1032 = load ptr, ptr %13, align 8, !tbaa !5
  %1033 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1032, i32 0, i32 1
  %1034 = load ptr, ptr %1033, align 8, !tbaa !26
  %1035 = load i64, ptr %26, align 8, !tbaa !15
  %1036 = getelementptr inbounds i32, ptr %1034, i64 %1035
  %1037 = load i32, ptr %1036, align 4, !tbaa !9
  %1038 = sext i32 %1037 to i64
  %1039 = getelementptr inbounds i32, ptr %1031, i64 %1038
  %1040 = load i32, ptr %1039, align 4, !tbaa !9
  %1041 = sext i32 %1040 to i64
  store i64 %1041, ptr %28, align 8, !tbaa !15
  %1042 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1043 = load ptr, ptr %1042, align 8, !tbaa !28
  %1044 = load i64, ptr %28, align 8, !tbaa !15
  %1045 = getelementptr inbounds i32, ptr %1043, i64 %1044
  %1046 = load i32, ptr %1045, align 4, !tbaa !9
  %1047 = sext i32 %1046 to i64
  store i64 %1047, ptr %24, align 8, !tbaa !15
  br label %1048

1048:                                             ; preds = %1098, %1028
  %1049 = load i64, ptr %24, align 8, !tbaa !15
  %1050 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1051 = load ptr, ptr %1050, align 8, !tbaa !28
  %1052 = load i64, ptr %28, align 8, !tbaa !15
  %1053 = add nsw i64 %1052, 1
  %1054 = getelementptr inbounds i32, ptr %1051, i64 %1053
  %1055 = load i32, ptr %1054, align 4, !tbaa !9
  %1056 = sext i32 %1055 to i64
  %1057 = icmp slt i64 %1049, %1056
  br i1 %1057, label %1058, label %1101

1058:                                             ; preds = %1048
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1059

1059:                                             ; preds = %1094, %1058
  %1060 = load i64, ptr %25, align 8, !tbaa !15
  %1061 = load i32, ptr %15, align 4, !tbaa !9
  %1062 = sext i32 %1061 to i64
  %1063 = icmp slt i64 %1060, %1062
  br i1 %1063, label %1064, label %1097

1064:                                             ; preds = %1059
  %1065 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %1066 = load ptr, ptr %1065, align 8, !tbaa !30
  %1067 = load i64, ptr %24, align 8, !tbaa !15
  %1068 = getelementptr inbounds double, ptr %1066, i64 %1067
  %1069 = load double, ptr %1068, align 8, !tbaa !11
  %1070 = load ptr, ptr %17, align 8, !tbaa !5
  %1071 = load i64, ptr %25, align 8, !tbaa !15
  %1072 = load i32, ptr %18, align 4, !tbaa !9
  %1073 = sext i32 %1072 to i64
  %1074 = mul nsw i64 %1071, %1073
  %1075 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1076 = load ptr, ptr %1075, align 8, !tbaa !31
  %1077 = load i64, ptr %24, align 8, !tbaa !15
  %1078 = getelementptr inbounds i32, ptr %1076, i64 %1077
  %1079 = load i32, ptr %1078, align 4, !tbaa !9
  %1080 = sext i32 %1079 to i64
  %1081 = add nsw i64 %1074, %1080
  %1082 = getelementptr inbounds double, ptr %1070, i64 %1081
  %1083 = load double, ptr %1082, align 8, !tbaa !11
  %1084 = load ptr, ptr %20, align 8, !tbaa !5
  %1085 = load i64, ptr %25, align 8, !tbaa !15
  %1086 = load i32, ptr %21, align 4, !tbaa !9
  %1087 = sext i32 %1086 to i64
  %1088 = mul nsw i64 %1085, %1087
  %1089 = load i64, ptr %28, align 8, !tbaa !15
  %1090 = add nsw i64 %1088, %1089
  %1091 = getelementptr inbounds double, ptr %1084, i64 %1090
  %1092 = load double, ptr %1091, align 8, !tbaa !11
  %1093 = call double @llvm.fmuladd.f64(double %1069, double %1083, double %1092)
  store double %1093, ptr %1091, align 8, !tbaa !11
  br label %1094

1094:                                             ; preds = %1064
  %1095 = load i64, ptr %25, align 8, !tbaa !15
  %1096 = add nsw i64 %1095, 1
  store i64 %1096, ptr %25, align 8, !tbaa !15
  br label %1059, !llvm.loop !56

1097:                                             ; preds = %1059
  br label %1098

1098:                                             ; preds = %1097
  %1099 = load i64, ptr %24, align 8, !tbaa !15
  %1100 = add nsw i64 %1099, 1
  store i64 %1100, ptr %24, align 8, !tbaa !15
  br label %1048, !llvm.loop !57

1101:                                             ; preds = %1048
  br label %1102

1102:                                             ; preds = %1101
  %1103 = load i64, ptr %26, align 8, !tbaa !15
  %1104 = add nsw i64 %1103, 1
  store i64 %1104, ptr %26, align 8, !tbaa !15
  br label %1021, !llvm.loop !58

1105:                                             ; preds = %1021
  br label %1286

1106:                                             ; preds = %1016
  %1107 = load double, ptr %16, align 8, !tbaa !11
  %1108 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %1107, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %1109 = icmp eq i32 %1108, 1
  br i1 %1109, label %1110, label %1197

1110:                                             ; preds = %1106
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1111

1111:                                             ; preds = %1193, %1110
  %1112 = load i64, ptr %26, align 8, !tbaa !15
  %1113 = load ptr, ptr %13, align 8, !tbaa !5
  %1114 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1113, i32 0, i32 2
  %1115 = load i32, ptr %1114, align 8, !tbaa !17
  %1116 = sext i32 %1115 to i64
  %1117 = icmp slt i64 %1112, %1116
  br i1 %1117, label %1118, label %1196

1118:                                             ; preds = %1111
  %1119 = load ptr, ptr %13, align 8, !tbaa !5
  %1120 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1119, i32 0, i32 0
  %1121 = load ptr, ptr %1120, align 8, !tbaa !27
  %1122 = load ptr, ptr %13, align 8, !tbaa !5
  %1123 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1122, i32 0, i32 1
  %1124 = load ptr, ptr %1123, align 8, !tbaa !26
  %1125 = load i64, ptr %26, align 8, !tbaa !15
  %1126 = getelementptr inbounds i32, ptr %1124, i64 %1125
  %1127 = load i32, ptr %1126, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds i32, ptr %1121, i64 %1128
  %1130 = load i32, ptr %1129, align 4, !tbaa !9
  %1131 = sext i32 %1130 to i64
  store i64 %1131, ptr %28, align 8, !tbaa !15
  %1132 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1133 = load ptr, ptr %1132, align 8, !tbaa !28
  %1134 = load i64, ptr %28, align 8, !tbaa !15
  %1135 = getelementptr inbounds i32, ptr %1133, i64 %1134
  %1136 = load i32, ptr %1135, align 4, !tbaa !9
  %1137 = sext i32 %1136 to i64
  store i64 %1137, ptr %24, align 8, !tbaa !15
  br label %1138

1138:                                             ; preds = %1189, %1118
  %1139 = load i64, ptr %24, align 8, !tbaa !15
  %1140 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1141 = load ptr, ptr %1140, align 8, !tbaa !28
  %1142 = load i64, ptr %28, align 8, !tbaa !15
  %1143 = add nsw i64 %1142, 1
  %1144 = getelementptr inbounds i32, ptr %1141, i64 %1143
  %1145 = load i32, ptr %1144, align 4, !tbaa !9
  %1146 = sext i32 %1145 to i64
  %1147 = icmp slt i64 %1139, %1146
  br i1 %1147, label %1148, label %1192

1148:                                             ; preds = %1138
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1149

1149:                                             ; preds = %1185, %1148
  %1150 = load i64, ptr %25, align 8, !tbaa !15
  %1151 = load i32, ptr %15, align 4, !tbaa !9
  %1152 = sext i32 %1151 to i64
  %1153 = icmp slt i64 %1150, %1152
  br i1 %1153, label %1154, label %1188

1154:                                             ; preds = %1149
  %1155 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %1156 = load ptr, ptr %1155, align 8, !tbaa !30
  %1157 = load i64, ptr %24, align 8, !tbaa !15
  %1158 = getelementptr inbounds double, ptr %1156, i64 %1157
  %1159 = load double, ptr %1158, align 8, !tbaa !11
  %1160 = load ptr, ptr %17, align 8, !tbaa !5
  %1161 = load i64, ptr %25, align 8, !tbaa !15
  %1162 = load i32, ptr %18, align 4, !tbaa !9
  %1163 = sext i32 %1162 to i64
  %1164 = mul nsw i64 %1161, %1163
  %1165 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1166 = load ptr, ptr %1165, align 8, !tbaa !31
  %1167 = load i64, ptr %24, align 8, !tbaa !15
  %1168 = getelementptr inbounds i32, ptr %1166, i64 %1167
  %1169 = load i32, ptr %1168, align 4, !tbaa !9
  %1170 = sext i32 %1169 to i64
  %1171 = add nsw i64 %1164, %1170
  %1172 = getelementptr inbounds double, ptr %1160, i64 %1171
  %1173 = load double, ptr %1172, align 8, !tbaa !11
  %1174 = load ptr, ptr %20, align 8, !tbaa !5
  %1175 = load i64, ptr %25, align 8, !tbaa !15
  %1176 = load i32, ptr %21, align 4, !tbaa !9
  %1177 = sext i32 %1176 to i64
  %1178 = mul nsw i64 %1175, %1177
  %1179 = load i64, ptr %28, align 8, !tbaa !15
  %1180 = add nsw i64 %1178, %1179
  %1181 = getelementptr inbounds double, ptr %1174, i64 %1180
  %1182 = load double, ptr %1181, align 8, !tbaa !11
  %1183 = fneg double %1159
  %1184 = call double @llvm.fmuladd.f64(double %1183, double %1173, double %1182)
  store double %1184, ptr %1181, align 8, !tbaa !11
  br label %1185

1185:                                             ; preds = %1154
  %1186 = load i64, ptr %25, align 8, !tbaa !15
  %1187 = add nsw i64 %1186, 1
  store i64 %1187, ptr %25, align 8, !tbaa !15
  br label %1149, !llvm.loop !59

1188:                                             ; preds = %1149
  br label %1189

1189:                                             ; preds = %1188
  %1190 = load i64, ptr %24, align 8, !tbaa !15
  %1191 = add nsw i64 %1190, 1
  store i64 %1191, ptr %24, align 8, !tbaa !15
  br label %1138, !llvm.loop !60

1192:                                             ; preds = %1138
  br label %1193

1193:                                             ; preds = %1192
  %1194 = load i64, ptr %26, align 8, !tbaa !15
  %1195 = add nsw i64 %1194, 1
  store i64 %1195, ptr %26, align 8, !tbaa !15
  br label %1111, !llvm.loop !61

1196:                                             ; preds = %1111
  br label %1285

1197:                                             ; preds = %1106
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1198

1198:                                             ; preds = %1281, %1197
  %1199 = load i64, ptr %26, align 8, !tbaa !15
  %1200 = load ptr, ptr %13, align 8, !tbaa !5
  %1201 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1200, i32 0, i32 2
  %1202 = load i32, ptr %1201, align 8, !tbaa !17
  %1203 = sext i32 %1202 to i64
  %1204 = icmp slt i64 %1199, %1203
  br i1 %1204, label %1205, label %1284

1205:                                             ; preds = %1198
  %1206 = load ptr, ptr %13, align 8, !tbaa !5
  %1207 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1206, i32 0, i32 0
  %1208 = load ptr, ptr %1207, align 8, !tbaa !27
  %1209 = load ptr, ptr %13, align 8, !tbaa !5
  %1210 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1209, i32 0, i32 1
  %1211 = load ptr, ptr %1210, align 8, !tbaa !26
  %1212 = load i64, ptr %26, align 8, !tbaa !15
  %1213 = getelementptr inbounds i32, ptr %1211, i64 %1212
  %1214 = load i32, ptr %1213, align 4, !tbaa !9
  %1215 = sext i32 %1214 to i64
  %1216 = getelementptr inbounds i32, ptr %1208, i64 %1215
  %1217 = load i32, ptr %1216, align 4, !tbaa !9
  %1218 = sext i32 %1217 to i64
  store i64 %1218, ptr %28, align 8, !tbaa !15
  %1219 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1220 = load ptr, ptr %1219, align 8, !tbaa !28
  %1221 = load i64, ptr %28, align 8, !tbaa !15
  %1222 = getelementptr inbounds i32, ptr %1220, i64 %1221
  %1223 = load i32, ptr %1222, align 4, !tbaa !9
  %1224 = sext i32 %1223 to i64
  store i64 %1224, ptr %24, align 8, !tbaa !15
  br label %1225

1225:                                             ; preds = %1277, %1205
  %1226 = load i64, ptr %24, align 8, !tbaa !15
  %1227 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1228 = load ptr, ptr %1227, align 8, !tbaa !28
  %1229 = load i64, ptr %28, align 8, !tbaa !15
  %1230 = add nsw i64 %1229, 1
  %1231 = getelementptr inbounds i32, ptr %1228, i64 %1230
  %1232 = load i32, ptr %1231, align 4, !tbaa !9
  %1233 = sext i32 %1232 to i64
  %1234 = icmp slt i64 %1226, %1233
  br i1 %1234, label %1235, label %1280

1235:                                             ; preds = %1225
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1236

1236:                                             ; preds = %1273, %1235
  %1237 = load i64, ptr %25, align 8, !tbaa !15
  %1238 = load i32, ptr %15, align 4, !tbaa !9
  %1239 = sext i32 %1238 to i64
  %1240 = icmp slt i64 %1237, %1239
  br i1 %1240, label %1241, label %1276

1241:                                             ; preds = %1236
  %1242 = load double, ptr %16, align 8, !tbaa !11
  %1243 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %1244 = load ptr, ptr %1243, align 8, !tbaa !30
  %1245 = load i64, ptr %24, align 8, !tbaa !15
  %1246 = getelementptr inbounds double, ptr %1244, i64 %1245
  %1247 = load double, ptr %1246, align 8, !tbaa !11
  %1248 = fmul double %1242, %1247
  %1249 = load ptr, ptr %17, align 8, !tbaa !5
  %1250 = load i64, ptr %25, align 8, !tbaa !15
  %1251 = load i32, ptr %18, align 4, !tbaa !9
  %1252 = sext i32 %1251 to i64
  %1253 = mul nsw i64 %1250, %1252
  %1254 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1255 = load ptr, ptr %1254, align 8, !tbaa !31
  %1256 = load i64, ptr %24, align 8, !tbaa !15
  %1257 = getelementptr inbounds i32, ptr %1255, i64 %1256
  %1258 = load i32, ptr %1257, align 4, !tbaa !9
  %1259 = sext i32 %1258 to i64
  %1260 = add nsw i64 %1253, %1259
  %1261 = getelementptr inbounds double, ptr %1249, i64 %1260
  %1262 = load double, ptr %1261, align 8, !tbaa !11
  %1263 = load ptr, ptr %20, align 8, !tbaa !5
  %1264 = load i64, ptr %25, align 8, !tbaa !15
  %1265 = load i32, ptr %21, align 4, !tbaa !9
  %1266 = sext i32 %1265 to i64
  %1267 = mul nsw i64 %1264, %1266
  %1268 = load i64, ptr %28, align 8, !tbaa !15
  %1269 = add nsw i64 %1267, %1268
  %1270 = getelementptr inbounds double, ptr %1263, i64 %1269
  %1271 = load double, ptr %1270, align 8, !tbaa !11
  %1272 = call double @llvm.fmuladd.f64(double %1248, double %1262, double %1271)
  store double %1272, ptr %1270, align 8, !tbaa !11
  br label %1273

1273:                                             ; preds = %1241
  %1274 = load i64, ptr %25, align 8, !tbaa !15
  %1275 = add nsw i64 %1274, 1
  store i64 %1275, ptr %25, align 8, !tbaa !15
  br label %1236, !llvm.loop !62

1276:                                             ; preds = %1236
  br label %1277

1277:                                             ; preds = %1276
  %1278 = load i64, ptr %24, align 8, !tbaa !15
  %1279 = add nsw i64 %1278, 1
  store i64 %1279, ptr %24, align 8, !tbaa !15
  br label %1225, !llvm.loop !63

1280:                                             ; preds = %1225
  br label %1281

1281:                                             ; preds = %1280
  %1282 = load i64, ptr %26, align 8, !tbaa !15
  %1283 = add nsw i64 %1282, 1
  store i64 %1283, ptr %26, align 8, !tbaa !15
  br label %1198, !llvm.loop !64

1284:                                             ; preds = %1198
  br label %1285

1285:                                             ; preds = %1284, %1196
  br label %1286

1286:                                             ; preds = %1285, %1105
  br label %1747

1287:                                             ; preds = %1013
  %1288 = load double, ptr %16, align 8, !tbaa !11
  %1289 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %1288, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %1290 = icmp eq i32 %1289, 1
  br i1 %1290, label %1291, label %1440

1291:                                             ; preds = %1287
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1292

1292:                                             ; preds = %1436, %1291
  %1293 = load i64, ptr %26, align 8, !tbaa !15
  %1294 = load ptr, ptr %13, align 8, !tbaa !5
  %1295 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1294, i32 0, i32 2
  %1296 = load i32, ptr %1295, align 8, !tbaa !17
  %1297 = sext i32 %1296 to i64
  %1298 = icmp slt i64 %1293, %1297
  br i1 %1298, label %1299, label %1439

1299:                                             ; preds = %1292
  %1300 = load ptr, ptr %13, align 8, !tbaa !5
  %1301 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1300, i32 0, i32 1
  %1302 = load ptr, ptr %1301, align 8, !tbaa !26
  %1303 = load i64, ptr %26, align 8, !tbaa !15
  %1304 = getelementptr inbounds i32, ptr %1302, i64 %1303
  %1305 = load i32, ptr %1304, align 4, !tbaa !9
  %1306 = sext i32 %1305 to i64
  store i64 %1306, ptr %28, align 8, !tbaa !15
  %1307 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1308 = load ptr, ptr %1307, align 8, !tbaa !28
  %1309 = load ptr, ptr %13, align 8, !tbaa !5
  %1310 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1309, i32 0, i32 0
  %1311 = load ptr, ptr %1310, align 8, !tbaa !27
  %1312 = load i64, ptr %28, align 8, !tbaa !15
  %1313 = getelementptr inbounds i32, ptr %1311, i64 %1312
  %1314 = load i32, ptr %1313, align 4, !tbaa !9
  %1315 = sext i32 %1314 to i64
  %1316 = getelementptr inbounds i32, ptr %1308, i64 %1315
  %1317 = load i32, ptr %1316, align 4, !tbaa !9
  %1318 = sext i32 %1317 to i64
  store i64 %1318, ptr %24, align 8, !tbaa !15
  store i64 0, ptr %23, align 8, !tbaa !15
  br label %1319

1319:                                             ; preds = %1434, %1299
  %1320 = load i64, ptr %24, align 8, !tbaa !15
  %1321 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1322 = load ptr, ptr %1321, align 8, !tbaa !28
  %1323 = load ptr, ptr %13, align 8, !tbaa !5
  %1324 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1323, i32 0, i32 0
  %1325 = load ptr, ptr %1324, align 8, !tbaa !27
  %1326 = load i64, ptr %28, align 8, !tbaa !15
  %1327 = getelementptr inbounds i32, ptr %1325, i64 %1326
  %1328 = load i32, ptr %1327, align 4, !tbaa !9
  %1329 = add nsw i32 %1328, 1
  %1330 = sext i32 %1329 to i64
  %1331 = getelementptr inbounds i32, ptr %1322, i64 %1330
  %1332 = load i32, ptr %1331, align 4, !tbaa !9
  %1333 = sext i32 %1332 to i64
  %1334 = icmp slt i64 %1320, %1333
  br i1 %1334, label %1335, label %1342

1335:                                             ; preds = %1319
  %1336 = load i64, ptr %23, align 8, !tbaa !15
  %1337 = load ptr, ptr %14, align 8, !tbaa !5
  %1338 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1337, i32 0, i32 2
  %1339 = load i32, ptr %1338, align 8, !tbaa !17
  %1340 = sext i32 %1339 to i64
  %1341 = icmp slt i64 %1336, %1340
  br label %1342

1342:                                             ; preds = %1335, %1319
  %1343 = phi i1 [ false, %1319 ], [ %1341, %1335 ]
  br i1 %1343, label %1344, label %1435

1344:                                             ; preds = %1342
  %1345 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1346 = load ptr, ptr %1345, align 8, !tbaa !31
  %1347 = load i64, ptr %24, align 8, !tbaa !15
  %1348 = getelementptr inbounds i32, ptr %1346, i64 %1347
  %1349 = load i32, ptr %1348, align 4, !tbaa !9
  %1350 = load ptr, ptr %14, align 8, !tbaa !5
  %1351 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1350, i32 0, i32 0
  %1352 = load ptr, ptr %1351, align 8, !tbaa !27
  %1353 = load ptr, ptr %14, align 8, !tbaa !5
  %1354 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1353, i32 0, i32 1
  %1355 = load ptr, ptr %1354, align 8, !tbaa !26
  %1356 = load i64, ptr %23, align 8, !tbaa !15
  %1357 = getelementptr inbounds i32, ptr %1355, i64 %1356
  %1358 = load i32, ptr %1357, align 4, !tbaa !9
  %1359 = sext i32 %1358 to i64
  %1360 = getelementptr inbounds i32, ptr %1352, i64 %1359
  %1361 = load i32, ptr %1360, align 4, !tbaa !9
  %1362 = icmp eq i32 %1349, %1361
  br i1 %1362, label %1363, label %1408

1363:                                             ; preds = %1344
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1364

1364:                                             ; preds = %1400, %1363
  %1365 = load i64, ptr %25, align 8, !tbaa !15
  %1366 = load i32, ptr %15, align 4, !tbaa !9
  %1367 = sext i32 %1366 to i64
  %1368 = icmp slt i64 %1365, %1367
  br i1 %1368, label %1369, label %1403

1369:                                             ; preds = %1364
  %1370 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %1371 = load ptr, ptr %1370, align 8, !tbaa !30
  %1372 = load i64, ptr %24, align 8, !tbaa !15
  %1373 = getelementptr inbounds double, ptr %1371, i64 %1372
  %1374 = load double, ptr %1373, align 8, !tbaa !11
  %1375 = load ptr, ptr %17, align 8, !tbaa !5
  %1376 = load i64, ptr %25, align 8, !tbaa !15
  %1377 = load i32, ptr %18, align 4, !tbaa !9
  %1378 = sext i32 %1377 to i64
  %1379 = mul nsw i64 %1376, %1378
  %1380 = load ptr, ptr %14, align 8, !tbaa !5
  %1381 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1380, i32 0, i32 1
  %1382 = load ptr, ptr %1381, align 8, !tbaa !26
  %1383 = load i64, ptr %23, align 8, !tbaa !15
  %1384 = getelementptr inbounds i32, ptr %1382, i64 %1383
  %1385 = load i32, ptr %1384, align 4, !tbaa !9
  %1386 = sext i32 %1385 to i64
  %1387 = add nsw i64 %1379, %1386
  %1388 = getelementptr inbounds double, ptr %1375, i64 %1387
  %1389 = load double, ptr %1388, align 8, !tbaa !11
  %1390 = load ptr, ptr %20, align 8, !tbaa !5
  %1391 = load i64, ptr %25, align 8, !tbaa !15
  %1392 = load i32, ptr %21, align 4, !tbaa !9
  %1393 = sext i32 %1392 to i64
  %1394 = mul nsw i64 %1391, %1393
  %1395 = load i64, ptr %28, align 8, !tbaa !15
  %1396 = add nsw i64 %1394, %1395
  %1397 = getelementptr inbounds double, ptr %1390, i64 %1396
  %1398 = load double, ptr %1397, align 8, !tbaa !11
  %1399 = call double @llvm.fmuladd.f64(double %1374, double %1389, double %1398)
  store double %1399, ptr %1397, align 8, !tbaa !11
  br label %1400

1400:                                             ; preds = %1369
  %1401 = load i64, ptr %25, align 8, !tbaa !15
  %1402 = add nsw i64 %1401, 1
  store i64 %1402, ptr %25, align 8, !tbaa !15
  br label %1364, !llvm.loop !65

1403:                                             ; preds = %1364
  %1404 = load i64, ptr %24, align 8, !tbaa !15
  %1405 = add nsw i64 %1404, 1
  store i64 %1405, ptr %24, align 8, !tbaa !15
  %1406 = load i64, ptr %23, align 8, !tbaa !15
  %1407 = add nsw i64 %1406, 1
  store i64 %1407, ptr %23, align 8, !tbaa !15
  br label %1434

1408:                                             ; preds = %1344
  %1409 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1410 = load ptr, ptr %1409, align 8, !tbaa !31
  %1411 = load i64, ptr %24, align 8, !tbaa !15
  %1412 = getelementptr inbounds i32, ptr %1410, i64 %1411
  %1413 = load i32, ptr %1412, align 4, !tbaa !9
  %1414 = load ptr, ptr %14, align 8, !tbaa !5
  %1415 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1414, i32 0, i32 0
  %1416 = load ptr, ptr %1415, align 8, !tbaa !27
  %1417 = load ptr, ptr %14, align 8, !tbaa !5
  %1418 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1417, i32 0, i32 1
  %1419 = load ptr, ptr %1418, align 8, !tbaa !26
  %1420 = load i64, ptr %23, align 8, !tbaa !15
  %1421 = getelementptr inbounds i32, ptr %1419, i64 %1420
  %1422 = load i32, ptr %1421, align 4, !tbaa !9
  %1423 = sext i32 %1422 to i64
  %1424 = getelementptr inbounds i32, ptr %1416, i64 %1423
  %1425 = load i32, ptr %1424, align 4, !tbaa !9
  %1426 = icmp sgt i32 %1413, %1425
  br i1 %1426, label %1427, label %1430

1427:                                             ; preds = %1408
  %1428 = load i64, ptr %23, align 8, !tbaa !15
  %1429 = add nsw i64 %1428, 1
  store i64 %1429, ptr %23, align 8, !tbaa !15
  br label %1433

1430:                                             ; preds = %1408
  %1431 = load i64, ptr %24, align 8, !tbaa !15
  %1432 = add nsw i64 %1431, 1
  store i64 %1432, ptr %24, align 8, !tbaa !15
  br label %1433

1433:                                             ; preds = %1430, %1427
  br label %1434

1434:                                             ; preds = %1433, %1403
  br label %1319, !llvm.loop !66

1435:                                             ; preds = %1342
  br label %1436

1436:                                             ; preds = %1435
  %1437 = load i64, ptr %26, align 8, !tbaa !15
  %1438 = add nsw i64 %1437, 1
  store i64 %1438, ptr %26, align 8, !tbaa !15
  br label %1292, !llvm.loop !67

1439:                                             ; preds = %1292
  br label %1746

1440:                                             ; preds = %1287
  %1441 = load double, ptr %16, align 8, !tbaa !11
  %1442 = call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %1441, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %1443 = icmp eq i32 %1442, 1
  br i1 %1443, label %1444, label %1594

1444:                                             ; preds = %1440
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1445

1445:                                             ; preds = %1590, %1444
  %1446 = load i64, ptr %26, align 8, !tbaa !15
  %1447 = load ptr, ptr %13, align 8, !tbaa !5
  %1448 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1447, i32 0, i32 2
  %1449 = load i32, ptr %1448, align 8, !tbaa !17
  %1450 = sext i32 %1449 to i64
  %1451 = icmp slt i64 %1446, %1450
  br i1 %1451, label %1452, label %1593

1452:                                             ; preds = %1445
  %1453 = load ptr, ptr %13, align 8, !tbaa !5
  %1454 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1453, i32 0, i32 1
  %1455 = load ptr, ptr %1454, align 8, !tbaa !26
  %1456 = load i64, ptr %26, align 8, !tbaa !15
  %1457 = getelementptr inbounds i32, ptr %1455, i64 %1456
  %1458 = load i32, ptr %1457, align 4, !tbaa !9
  %1459 = sext i32 %1458 to i64
  store i64 %1459, ptr %28, align 8, !tbaa !15
  %1460 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1461 = load ptr, ptr %1460, align 8, !tbaa !28
  %1462 = load ptr, ptr %13, align 8, !tbaa !5
  %1463 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1462, i32 0, i32 0
  %1464 = load ptr, ptr %1463, align 8, !tbaa !27
  %1465 = load i64, ptr %28, align 8, !tbaa !15
  %1466 = getelementptr inbounds i32, ptr %1464, i64 %1465
  %1467 = load i32, ptr %1466, align 4, !tbaa !9
  %1468 = sext i32 %1467 to i64
  %1469 = getelementptr inbounds i32, ptr %1461, i64 %1468
  %1470 = load i32, ptr %1469, align 4, !tbaa !9
  %1471 = sext i32 %1470 to i64
  store i64 %1471, ptr %24, align 8, !tbaa !15
  store i64 0, ptr %23, align 8, !tbaa !15
  br label %1472

1472:                                             ; preds = %1588, %1452
  %1473 = load i64, ptr %24, align 8, !tbaa !15
  %1474 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1475 = load ptr, ptr %1474, align 8, !tbaa !28
  %1476 = load ptr, ptr %13, align 8, !tbaa !5
  %1477 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1476, i32 0, i32 0
  %1478 = load ptr, ptr %1477, align 8, !tbaa !27
  %1479 = load i64, ptr %28, align 8, !tbaa !15
  %1480 = getelementptr inbounds i32, ptr %1478, i64 %1479
  %1481 = load i32, ptr %1480, align 4, !tbaa !9
  %1482 = add nsw i32 %1481, 1
  %1483 = sext i32 %1482 to i64
  %1484 = getelementptr inbounds i32, ptr %1475, i64 %1483
  %1485 = load i32, ptr %1484, align 4, !tbaa !9
  %1486 = sext i32 %1485 to i64
  %1487 = icmp slt i64 %1473, %1486
  br i1 %1487, label %1488, label %1495

1488:                                             ; preds = %1472
  %1489 = load i64, ptr %23, align 8, !tbaa !15
  %1490 = load ptr, ptr %14, align 8, !tbaa !5
  %1491 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1490, i32 0, i32 2
  %1492 = load i32, ptr %1491, align 8, !tbaa !17
  %1493 = sext i32 %1492 to i64
  %1494 = icmp slt i64 %1489, %1493
  br label %1495

1495:                                             ; preds = %1488, %1472
  %1496 = phi i1 [ false, %1472 ], [ %1494, %1488 ]
  br i1 %1496, label %1497, label %1589

1497:                                             ; preds = %1495
  %1498 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1499 = load ptr, ptr %1498, align 8, !tbaa !31
  %1500 = load i64, ptr %24, align 8, !tbaa !15
  %1501 = getelementptr inbounds i32, ptr %1499, i64 %1500
  %1502 = load i32, ptr %1501, align 4, !tbaa !9
  %1503 = load ptr, ptr %14, align 8, !tbaa !5
  %1504 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1503, i32 0, i32 0
  %1505 = load ptr, ptr %1504, align 8, !tbaa !27
  %1506 = load ptr, ptr %14, align 8, !tbaa !5
  %1507 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1506, i32 0, i32 1
  %1508 = load ptr, ptr %1507, align 8, !tbaa !26
  %1509 = load i64, ptr %23, align 8, !tbaa !15
  %1510 = getelementptr inbounds i32, ptr %1508, i64 %1509
  %1511 = load i32, ptr %1510, align 4, !tbaa !9
  %1512 = sext i32 %1511 to i64
  %1513 = getelementptr inbounds i32, ptr %1505, i64 %1512
  %1514 = load i32, ptr %1513, align 4, !tbaa !9
  %1515 = icmp eq i32 %1502, %1514
  br i1 %1515, label %1516, label %1562

1516:                                             ; preds = %1497
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1517

1517:                                             ; preds = %1554, %1516
  %1518 = load i64, ptr %25, align 8, !tbaa !15
  %1519 = load i32, ptr %15, align 4, !tbaa !9
  %1520 = sext i32 %1519 to i64
  %1521 = icmp slt i64 %1518, %1520
  br i1 %1521, label %1522, label %1557

1522:                                             ; preds = %1517
  %1523 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %1524 = load ptr, ptr %1523, align 8, !tbaa !30
  %1525 = load i64, ptr %24, align 8, !tbaa !15
  %1526 = getelementptr inbounds double, ptr %1524, i64 %1525
  %1527 = load double, ptr %1526, align 8, !tbaa !11
  %1528 = load ptr, ptr %17, align 8, !tbaa !5
  %1529 = load i64, ptr %25, align 8, !tbaa !15
  %1530 = load i32, ptr %18, align 4, !tbaa !9
  %1531 = sext i32 %1530 to i64
  %1532 = mul nsw i64 %1529, %1531
  %1533 = load ptr, ptr %14, align 8, !tbaa !5
  %1534 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1533, i32 0, i32 1
  %1535 = load ptr, ptr %1534, align 8, !tbaa !26
  %1536 = load i64, ptr %23, align 8, !tbaa !15
  %1537 = getelementptr inbounds i32, ptr %1535, i64 %1536
  %1538 = load i32, ptr %1537, align 4, !tbaa !9
  %1539 = sext i32 %1538 to i64
  %1540 = add nsw i64 %1532, %1539
  %1541 = getelementptr inbounds double, ptr %1528, i64 %1540
  %1542 = load double, ptr %1541, align 8, !tbaa !11
  %1543 = load ptr, ptr %20, align 8, !tbaa !5
  %1544 = load i64, ptr %25, align 8, !tbaa !15
  %1545 = load i32, ptr %21, align 4, !tbaa !9
  %1546 = sext i32 %1545 to i64
  %1547 = mul nsw i64 %1544, %1546
  %1548 = load i64, ptr %28, align 8, !tbaa !15
  %1549 = add nsw i64 %1547, %1548
  %1550 = getelementptr inbounds double, ptr %1543, i64 %1549
  %1551 = load double, ptr %1550, align 8, !tbaa !11
  %1552 = fneg double %1527
  %1553 = call double @llvm.fmuladd.f64(double %1552, double %1542, double %1551)
  store double %1553, ptr %1550, align 8, !tbaa !11
  br label %1554

1554:                                             ; preds = %1522
  %1555 = load i64, ptr %25, align 8, !tbaa !15
  %1556 = add nsw i64 %1555, 1
  store i64 %1556, ptr %25, align 8, !tbaa !15
  br label %1517, !llvm.loop !68

1557:                                             ; preds = %1517
  %1558 = load i64, ptr %24, align 8, !tbaa !15
  %1559 = add nsw i64 %1558, 1
  store i64 %1559, ptr %24, align 8, !tbaa !15
  %1560 = load i64, ptr %23, align 8, !tbaa !15
  %1561 = add nsw i64 %1560, 1
  store i64 %1561, ptr %23, align 8, !tbaa !15
  br label %1588

1562:                                             ; preds = %1497
  %1563 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1564 = load ptr, ptr %1563, align 8, !tbaa !31
  %1565 = load i64, ptr %24, align 8, !tbaa !15
  %1566 = getelementptr inbounds i32, ptr %1564, i64 %1565
  %1567 = load i32, ptr %1566, align 4, !tbaa !9
  %1568 = load ptr, ptr %14, align 8, !tbaa !5
  %1569 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1568, i32 0, i32 0
  %1570 = load ptr, ptr %1569, align 8, !tbaa !27
  %1571 = load ptr, ptr %14, align 8, !tbaa !5
  %1572 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1571, i32 0, i32 1
  %1573 = load ptr, ptr %1572, align 8, !tbaa !26
  %1574 = load i64, ptr %23, align 8, !tbaa !15
  %1575 = getelementptr inbounds i32, ptr %1573, i64 %1574
  %1576 = load i32, ptr %1575, align 4, !tbaa !9
  %1577 = sext i32 %1576 to i64
  %1578 = getelementptr inbounds i32, ptr %1570, i64 %1577
  %1579 = load i32, ptr %1578, align 4, !tbaa !9
  %1580 = icmp sgt i32 %1567, %1579
  br i1 %1580, label %1581, label %1584

1581:                                             ; preds = %1562
  %1582 = load i64, ptr %23, align 8, !tbaa !15
  %1583 = add nsw i64 %1582, 1
  store i64 %1583, ptr %23, align 8, !tbaa !15
  br label %1587

1584:                                             ; preds = %1562
  %1585 = load i64, ptr %24, align 8, !tbaa !15
  %1586 = add nsw i64 %1585, 1
  store i64 %1586, ptr %24, align 8, !tbaa !15
  br label %1587

1587:                                             ; preds = %1584, %1581
  br label %1588

1588:                                             ; preds = %1587, %1557
  br label %1472, !llvm.loop !69

1589:                                             ; preds = %1495
  br label %1590

1590:                                             ; preds = %1589
  %1591 = load i64, ptr %26, align 8, !tbaa !15
  %1592 = add nsw i64 %1591, 1
  store i64 %1592, ptr %26, align 8, !tbaa !15
  br label %1445, !llvm.loop !70

1593:                                             ; preds = %1445
  br label %1745

1594:                                             ; preds = %1440
  store i64 0, ptr %26, align 8, !tbaa !15
  br label %1595

1595:                                             ; preds = %1741, %1594
  %1596 = load i64, ptr %26, align 8, !tbaa !15
  %1597 = load ptr, ptr %13, align 8, !tbaa !5
  %1598 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1597, i32 0, i32 2
  %1599 = load i32, ptr %1598, align 8, !tbaa !17
  %1600 = sext i32 %1599 to i64
  %1601 = icmp slt i64 %1596, %1600
  br i1 %1601, label %1602, label %1744

1602:                                             ; preds = %1595
  %1603 = load ptr, ptr %13, align 8, !tbaa !5
  %1604 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1603, i32 0, i32 1
  %1605 = load ptr, ptr %1604, align 8, !tbaa !26
  %1606 = load i64, ptr %26, align 8, !tbaa !15
  %1607 = getelementptr inbounds i32, ptr %1605, i64 %1606
  %1608 = load i32, ptr %1607, align 4, !tbaa !9
  %1609 = sext i32 %1608 to i64
  store i64 %1609, ptr %28, align 8, !tbaa !15
  %1610 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1611 = load ptr, ptr %1610, align 8, !tbaa !28
  %1612 = load ptr, ptr %13, align 8, !tbaa !5
  %1613 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1612, i32 0, i32 0
  %1614 = load ptr, ptr %1613, align 8, !tbaa !27
  %1615 = load i64, ptr %28, align 8, !tbaa !15
  %1616 = getelementptr inbounds i32, ptr %1614, i64 %1615
  %1617 = load i32, ptr %1616, align 4, !tbaa !9
  %1618 = sext i32 %1617 to i64
  %1619 = getelementptr inbounds i32, ptr %1611, i64 %1618
  %1620 = load i32, ptr %1619, align 4, !tbaa !9
  %1621 = sext i32 %1620 to i64
  store i64 %1621, ptr %24, align 8, !tbaa !15
  store i64 0, ptr %23, align 8, !tbaa !15
  br label %1622

1622:                                             ; preds = %1739, %1602
  %1623 = load i64, ptr %24, align 8, !tbaa !15
  %1624 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 3
  %1625 = load ptr, ptr %1624, align 8, !tbaa !28
  %1626 = load ptr, ptr %13, align 8, !tbaa !5
  %1627 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1626, i32 0, i32 0
  %1628 = load ptr, ptr %1627, align 8, !tbaa !27
  %1629 = load i64, ptr %28, align 8, !tbaa !15
  %1630 = getelementptr inbounds i32, ptr %1628, i64 %1629
  %1631 = load i32, ptr %1630, align 4, !tbaa !9
  %1632 = add nsw i32 %1631, 1
  %1633 = sext i32 %1632 to i64
  %1634 = getelementptr inbounds i32, ptr %1625, i64 %1633
  %1635 = load i32, ptr %1634, align 4, !tbaa !9
  %1636 = sext i32 %1635 to i64
  %1637 = icmp slt i64 %1623, %1636
  br i1 %1637, label %1638, label %1645

1638:                                             ; preds = %1622
  %1639 = load i64, ptr %23, align 8, !tbaa !15
  %1640 = load ptr, ptr %14, align 8, !tbaa !5
  %1641 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1640, i32 0, i32 2
  %1642 = load i32, ptr %1641, align 8, !tbaa !17
  %1643 = sext i32 %1642 to i64
  %1644 = icmp slt i64 %1639, %1643
  br label %1645

1645:                                             ; preds = %1638, %1622
  %1646 = phi i1 [ false, %1622 ], [ %1644, %1638 ]
  br i1 %1646, label %1647, label %1740

1647:                                             ; preds = %1645
  %1648 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1649 = load ptr, ptr %1648, align 8, !tbaa !31
  %1650 = load i64, ptr %24, align 8, !tbaa !15
  %1651 = getelementptr inbounds i32, ptr %1649, i64 %1650
  %1652 = load i32, ptr %1651, align 4, !tbaa !9
  %1653 = load ptr, ptr %14, align 8, !tbaa !5
  %1654 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1653, i32 0, i32 0
  %1655 = load ptr, ptr %1654, align 8, !tbaa !27
  %1656 = load ptr, ptr %14, align 8, !tbaa !5
  %1657 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1656, i32 0, i32 1
  %1658 = load ptr, ptr %1657, align 8, !tbaa !26
  %1659 = load i64, ptr %23, align 8, !tbaa !15
  %1660 = getelementptr inbounds i32, ptr %1658, i64 %1659
  %1661 = load i32, ptr %1660, align 4, !tbaa !9
  %1662 = sext i32 %1661 to i64
  %1663 = getelementptr inbounds i32, ptr %1655, i64 %1662
  %1664 = load i32, ptr %1663, align 4, !tbaa !9
  %1665 = icmp eq i32 %1652, %1664
  br i1 %1665, label %1666, label %1713

1666:                                             ; preds = %1647
  store i64 0, ptr %25, align 8, !tbaa !15
  br label %1667

1667:                                             ; preds = %1705, %1666
  %1668 = load i64, ptr %25, align 8, !tbaa !15
  %1669 = load i32, ptr %15, align 4, !tbaa !9
  %1670 = sext i32 %1669 to i64
  %1671 = icmp slt i64 %1668, %1670
  br i1 %1671, label %1672, label %1708

1672:                                             ; preds = %1667
  %1673 = load double, ptr %16, align 8, !tbaa !11
  %1674 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 6
  %1675 = load ptr, ptr %1674, align 8, !tbaa !30
  %1676 = load i64, ptr %24, align 8, !tbaa !15
  %1677 = getelementptr inbounds double, ptr %1675, i64 %1676
  %1678 = load double, ptr %1677, align 8, !tbaa !11
  %1679 = fmul double %1673, %1678
  %1680 = load ptr, ptr %17, align 8, !tbaa !5
  %1681 = load i64, ptr %25, align 8, !tbaa !15
  %1682 = load i32, ptr %18, align 4, !tbaa !9
  %1683 = sext i32 %1682 to i64
  %1684 = mul nsw i64 %1681, %1683
  %1685 = load ptr, ptr %14, align 8, !tbaa !5
  %1686 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1685, i32 0, i32 1
  %1687 = load ptr, ptr %1686, align 8, !tbaa !26
  %1688 = load i64, ptr %23, align 8, !tbaa !15
  %1689 = getelementptr inbounds i32, ptr %1687, i64 %1688
  %1690 = load i32, ptr %1689, align 4, !tbaa !9
  %1691 = sext i32 %1690 to i64
  %1692 = add nsw i64 %1684, %1691
  %1693 = getelementptr inbounds double, ptr %1680, i64 %1692
  %1694 = load double, ptr %1693, align 8, !tbaa !11
  %1695 = load ptr, ptr %20, align 8, !tbaa !5
  %1696 = load i64, ptr %25, align 8, !tbaa !15
  %1697 = load i32, ptr %21, align 4, !tbaa !9
  %1698 = sext i32 %1697 to i64
  %1699 = mul nsw i64 %1696, %1698
  %1700 = load i64, ptr %28, align 8, !tbaa !15
  %1701 = add nsw i64 %1699, %1700
  %1702 = getelementptr inbounds double, ptr %1695, i64 %1701
  %1703 = load double, ptr %1702, align 8, !tbaa !11
  %1704 = call double @llvm.fmuladd.f64(double %1679, double %1694, double %1703)
  store double %1704, ptr %1702, align 8, !tbaa !11
  br label %1705

1705:                                             ; preds = %1672
  %1706 = load i64, ptr %25, align 8, !tbaa !15
  %1707 = add nsw i64 %1706, 1
  store i64 %1707, ptr %25, align 8, !tbaa !15
  br label %1667, !llvm.loop !71

1708:                                             ; preds = %1667
  %1709 = load i64, ptr %24, align 8, !tbaa !15
  %1710 = add nsw i64 %1709, 1
  store i64 %1710, ptr %24, align 8, !tbaa !15
  %1711 = load i64, ptr %23, align 8, !tbaa !15
  %1712 = add nsw i64 %1711, 1
  store i64 %1712, ptr %23, align 8, !tbaa !15
  br label %1739

1713:                                             ; preds = %1647
  %1714 = getelementptr inbounds %"class.qpOASES::SparseMatrixRow", ptr %29, i32 0, i32 4
  %1715 = load ptr, ptr %1714, align 8, !tbaa !31
  %1716 = load i64, ptr %24, align 8, !tbaa !15
  %1717 = getelementptr inbounds i32, ptr %1715, i64 %1716
  %1718 = load i32, ptr %1717, align 4, !tbaa !9
  %1719 = load ptr, ptr %14, align 8, !tbaa !5
  %1720 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1719, i32 0, i32 0
  %1721 = load ptr, ptr %1720, align 8, !tbaa !27
  %1722 = load ptr, ptr %14, align 8, !tbaa !5
  %1723 = getelementptr inbounds %"class.qpOASES::Indexlist", ptr %1722, i32 0, i32 1
  %1724 = load ptr, ptr %1723, align 8, !tbaa !26
  %1725 = load i64, ptr %23, align 8, !tbaa !15
  %1726 = getelementptr inbounds i32, ptr %1724, i64 %1725
  %1727 = load i32, ptr %1726, align 4, !tbaa !9
  %1728 = sext i32 %1727 to i64
  %1729 = getelementptr inbounds i32, ptr %1721, i64 %1728
  %1730 = load i32, ptr %1729, align 4, !tbaa !9
  %1731 = icmp sgt i32 %1718, %1730
  br i1 %1731, label %1732, label %1735

1732:                                             ; preds = %1713
  %1733 = load i64, ptr %23, align 8, !tbaa !15
  %1734 = add nsw i64 %1733, 1
  store i64 %1734, ptr %23, align 8, !tbaa !15
  br label %1738

1735:                                             ; preds = %1713
  %1736 = load i64, ptr %24, align 8, !tbaa !15
  %1737 = add nsw i64 %1736, 1
  store i64 %1737, ptr %24, align 8, !tbaa !15
  br label %1738

1738:                                             ; preds = %1735, %1732
  br label %1739

1739:                                             ; preds = %1738, %1708
  br label %1622, !llvm.loop !72

1740:                                             ; preds = %1645
  br label %1741

1741:                                             ; preds = %1740
  %1742 = load i64, ptr %26, align 8, !tbaa !15
  %1743 = add nsw i64 %1742, 1
  store i64 %1743, ptr %26, align 8, !tbaa !15
  br label %1595, !llvm.loop !73

1744:                                             ; preds = %1595
  br label %1745

1745:                                             ; preds = %1744, %1593
  br label %1746

1746:                                             ; preds = %1745, %1439
  br label %1747

1747:                                             ; preds = %1746, %1286
  br label %1748

1748:                                             ; preds = %1747, %874
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  ret i32 0
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 8}
!27 = !{!18, !6, i64 0}
!28 = !{!29, !6, i64 16}
!29 = !{!"_ZTSN7qpOASES15SparseMatrixRowE", !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!30 = !{!29, !6, i64 40}
!31 = !{!29, !6, i64 24}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!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 = distinct !{!46, !20}
!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}
!69 = distinct !{!69, !20}
!70 = distinct !{!70, !20}
!71 = distinct !{!71, !20}
!72 = distinct !{!72, !20}
!73 = distinct !{!73, !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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef, double noundef, double noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef i32 @_ZNK7qpOASES15SparseMatrixRow5timesEPKNS_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 #2 align 2 {
  %12 = icmp eq i32 %10, 1
  %13 = tail call noundef i32 @_ZN7qpOASES6isZeroEdd(double noundef %7, double noundef 1.000000e-25)
  %14 = icmp eq i32 %13, 1
  br i1 %12, label %15, label %614

15:                                               ; preds = %11
  br i1 %14, label %.preheader534, label %42

.preheader534:                                    ; preds = %15
  %16 = sext i32 %3 to i64
  %17 = icmp sgt i32 %3, 0
  br i1 %17, label %.preheader533.lr.ph, label %.loopexit535

.preheader533.lr.ph:                              ; preds = %.preheader534
  %18 = getelementptr inbounds i8, ptr %1, i64 16
  %19 = load i32, ptr %18, align 8, !tbaa !5
  %20 = icmp sgt i32 %19, 0
  br i1 %20, label %.preheader533.us.preheader, label %.loopexit535

.preheader533.us.preheader:                       ; preds = %.preheader533.lr.ph
  %21 = sext i32 %9 to i64
  %22 = zext nneg i32 %19 to i64
  %23 = shl nsw i64 %21, 3
  %24 = shl nuw nsw i64 %22, 3
  %xtraiter1319 = and i64 %16, 7
  %25 = icmp ult i32 %3, 8
  br i1 %25, label %.loopexit535.loopexit.unr-lcssa, label %.preheader533.us.preheader.new

.preheader533.us.preheader.new:                   ; preds = %.preheader533.us.preheader
  %unroll_iter1322 = and i64 %16, 2147483640
  br label %.preheader533.us

.preheader533.us:                                 ; preds = %.preheader533.us, %.preheader533.us.preheader.new
  %.0461664.us = phi i64 [ 0, %.preheader533.us.preheader.new ], [ %41, %.preheader533.us ]
  %niter1323 = phi i64 [ 0, %.preheader533.us.preheader.new ], [ %niter1323.next.7, %.preheader533.us ]
  %26 = mul i64 %23, %.0461664.us
  %scevgep = getelementptr i8, ptr %8, i64 %26
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %24, i1 false), !tbaa !11
  %27 = or disjoint i64 %.0461664.us, 1
  %28 = mul i64 %23, %27
  %scevgep.1 = getelementptr i8, ptr %8, i64 %28
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.1, i8 0, i64 %24, i1 false), !tbaa !11
  %29 = or disjoint i64 %.0461664.us, 2
  %30 = mul i64 %23, %29
  %scevgep.2 = getelementptr i8, ptr %8, i64 %30
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.2, i8 0, i64 %24, i1 false), !tbaa !11
  %31 = or disjoint i64 %.0461664.us, 3
  %32 = mul i64 %23, %31
  %scevgep.3 = getelementptr i8, ptr %8, i64 %32
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.3, i8 0, i64 %24, i1 false), !tbaa !11
  %33 = or disjoint i64 %.0461664.us, 4
  %34 = mul i64 %23, %33
  %scevgep.4 = getelementptr i8, ptr %8, i64 %34
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.4, i8 0, i64 %24, i1 false), !tbaa !11
  %35 = or disjoint i64 %.0461664.us, 5
  %36 = mul i64 %23, %35
  %scevgep.5 = getelementptr i8, ptr %8, i64 %36
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.5, i8 0, i64 %24, i1 false), !tbaa !11
  %37 = or disjoint i64 %.0461664.us, 6
  %38 = mul i64 %23, %37
  %scevgep.6 = getelementptr i8, ptr %8, i64 %38
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.6, i8 0, i64 %24, i1 false), !tbaa !11
  %39 = or disjoint i64 %.0461664.us, 7
  %40 = mul i64 %23, %39
  %scevgep.7 = getelementptr i8, ptr %8, i64 %40
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.7, i8 0, i64 %24, i1 false), !tbaa !11
  %41 = add nuw nsw i64 %.0461664.us, 8
  %niter1323.next.7 = add i64 %niter1323, 8
  %niter1323.ncmp.7 = icmp eq i64 %niter1323.next.7, %unroll_iter1322
  br i1 %niter1323.ncmp.7, label %.loopexit535.loopexit.unr-lcssa, label %.preheader533.us, !llvm.loop !13

42:                                               ; preds = %15
  %43 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %44 = icmp eq i32 %43, 1
  br i1 %44, label %.preheader537, label %62

.preheader537:                                    ; preds = %42
  %45 = sext i32 %3 to i64
  %46 = icmp sgt i32 %3, 0
  br i1 %46, label %.preheader536.lr.ph, label %.loopexit535

.preheader536.lr.ph:                              ; preds = %.preheader537
  %47 = getelementptr inbounds i8, ptr %1, i64 16
  %48 = load i32, ptr %47, align 8, !tbaa !5
  %49 = sext i32 %48 to i64
  %50 = icmp sgt i32 %48, 0
  %51 = sext i32 %9 to i64
  br i1 %50, label %.preheader536.us.preheader, label %.loopexit535

.preheader536.us.preheader:                       ; preds = %.preheader536.lr.ph
  %min.iters.check1049 = icmp ult i32 %48, 4
  %n.vec1052 = and i64 %49, 2147483644
  %cmp.n1059 = icmp eq i64 %n.vec1052, %49
  br label %.preheader536.us

.preheader536.us:                                 ; preds = %.preheader536.us.preheader, %._crit_edge.us660
  %.1462658.us = phi i64 [ %61, %._crit_edge.us660 ], [ 0, %.preheader536.us.preheader ]
  %52 = mul nsw i64 %.1462658.us, %51
  %invariant.gep657.us = getelementptr double, ptr %8, i64 %52
  br i1 %min.iters.check1049, label %scalar.ph1048.preheader, label %vector.body1054

vector.body1054:                                  ; preds = %.preheader536.us, %vector.body1054
  %index1055 = phi i64 [ %index.next1058, %vector.body1054 ], [ 0, %.preheader536.us ]
  %53 = getelementptr double, ptr %invariant.gep657.us, i64 %index1055
  %54 = getelementptr i8, ptr %53, i64 16
  %wide.load1056 = load <2 x double>, ptr %53, align 8, !tbaa !11
  %wide.load1057 = load <2 x double>, ptr %54, align 8, !tbaa !11
  %55 = fneg <2 x double> %wide.load1056
  %56 = fneg <2 x double> %wide.load1057
  store <2 x double> %55, ptr %53, align 8, !tbaa !11
  store <2 x double> %56, ptr %54, align 8, !tbaa !11
  %index.next1058 = add nuw i64 %index1055, 4
  %57 = icmp eq i64 %index.next1058, %n.vec1052
  br i1 %57, label %middle.block1047, label %vector.body1054, !llvm.loop !15

middle.block1047:                                 ; preds = %vector.body1054
  br i1 %cmp.n1059, label %._crit_edge.us660, label %scalar.ph1048.preheader

scalar.ph1048.preheader:                          ; preds = %middle.block1047, %.preheader536.us
  %.1474655.us.ph = phi i64 [ 0, %.preheader536.us ], [ %n.vec1052, %middle.block1047 ]
  br label %scalar.ph1048

scalar.ph1048:                                    ; preds = %scalar.ph1048.preheader, %scalar.ph1048
  %.1474655.us = phi i64 [ %60, %scalar.ph1048 ], [ %.1474655.us.ph, %scalar.ph1048.preheader ]
  %gep.us659 = getelementptr double, ptr %invariant.gep657.us, i64 %.1474655.us
  %58 = load double, ptr %gep.us659, align 8, !tbaa !11
  %59 = fneg double %58
  store double %59, ptr %gep.us659, align 8, !tbaa !11
  %60 = add nuw nsw i64 %.1474655.us, 1
  %exitcond797.not = icmp eq i64 %60, %49
  br i1 %exitcond797.not, label %._crit_edge.us660, label %scalar.ph1048, !llvm.loop !18

._crit_edge.us660:                                ; preds = %scalar.ph1048, %middle.block1047
  %61 = add nuw nsw i64 %.1462658.us, 1
  %exitcond798.not = icmp eq i64 %61, %45
  br i1 %exitcond798.not, label %.loopexit535, label %.preheader536.us, !llvm.loop !19

62:                                               ; preds = %42
  %63 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %.preheader540, label %.loopexit535

.preheader540:                                    ; preds = %62
  %65 = sext i32 %3 to i64
  %66 = icmp sgt i32 %3, 0
  br i1 %66, label %.preheader539.lr.ph, label %.loopexit535

.preheader539.lr.ph:                              ; preds = %.preheader540
  %67 = getelementptr inbounds i8, ptr %1, i64 16
  %68 = load i32, ptr %67, align 8, !tbaa !5
  %69 = sext i32 %68 to i64
  %70 = icmp sgt i32 %68, 0
  %71 = sext i32 %9 to i64
  br i1 %70, label %.preheader539.us.preheader, label %.loopexit535

.preheader539.us.preheader:                       ; preds = %.preheader539.lr.ph
  %min.iters.check1036 = icmp ult i32 %68, 4
  %n.vec1039 = and i64 %69, 2147483644
  %broadcast.splatinsert = insertelement <2 x double> poison, double %7, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n1046 = icmp eq i64 %n.vec1039, %69
  br label %.preheader539.us

.preheader539.us:                                 ; preds = %.preheader539.us.preheader, %._crit_edge.us654
  %.2463652.us = phi i64 [ %81, %._crit_edge.us654 ], [ 0, %.preheader539.us.preheader ]
  %72 = mul nsw i64 %.2463652.us, %71
  %invariant.gep651.us = getelementptr double, ptr %8, i64 %72
  br i1 %min.iters.check1036, label %scalar.ph1035.preheader, label %vector.body1041

vector.body1041:                                  ; preds = %.preheader539.us, %vector.body1041
  %index1042 = phi i64 [ %index.next1045, %vector.body1041 ], [ 0, %.preheader539.us ]
  %73 = getelementptr double, ptr %invariant.gep651.us, i64 %index1042
  %74 = getelementptr i8, ptr %73, i64 16
  %wide.load1043 = load <2 x double>, ptr %73, align 8, !tbaa !11
  %wide.load1044 = load <2 x double>, ptr %74, align 8, !tbaa !11
  %75 = fmul <2 x double> %wide.load1043, %broadcast.splat
  %76 = fmul <2 x double> %wide.load1044, %broadcast.splat
  store <2 x double> %75, ptr %73, align 8, !tbaa !11
  store <2 x double> %76, ptr %74, align 8, !tbaa !11
  %index.next1045 = add nuw i64 %index1042, 4
  %77 = icmp eq i64 %index.next1045, %n.vec1039
  br i1 %77, label %middle.block1034, label %vector.body1041, !llvm.loop !20

middle.block1034:                                 ; preds = %vector.body1041
  br i1 %cmp.n1046, label %._crit_edge.us654, label %scalar.ph1035.preheader

scalar.ph1035.preheader:                          ; preds = %middle.block1034, %.preheader539.us
  %.2475649.us.ph = phi i64 [ 0, %.preheader539.us ], [ %n.vec1039, %middle.block1034 ]
  br label %scalar.ph1035

scalar.ph1035:                                    ; preds = %scalar.ph1035.preheader, %scalar.ph1035
  %.2475649.us = phi i64 [ %80, %scalar.ph1035 ], [ %.2475649.us.ph, %scalar.ph1035.preheader ]
  %gep.us653 = getelementptr double, ptr %invariant.gep651.us, i64 %.2475649.us
  %78 = load double, ptr %gep.us653, align 8, !tbaa !11
  %79 = fmul double %78, %7
  store double %79, ptr %gep.us653, align 8, !tbaa !11
  %80 = add nuw nsw i64 %.2475649.us, 1
  %exitcond795.not = icmp eq i64 %80, %69
  br i1 %exitcond795.not, label %._crit_edge.us654, label %scalar.ph1035, !llvm.loop !21

._crit_edge.us654:                                ; preds = %scalar.ph1035, %middle.block1034
  %81 = add nuw nsw i64 %.2463652.us, 1
  %exitcond796.not = icmp eq i64 %81, %65
  br i1 %exitcond796.not, label %.loopexit535, label %.preheader539.us, !llvm.loop !22

.loopexit535.loopexit.unr-lcssa:                  ; preds = %.preheader533.us, %.preheader533.us.preheader
  %.0461664.us.unr = phi i64 [ 0, %.preheader533.us.preheader ], [ %41, %.preheader533.us ]
  %lcmp.mod1321.not = icmp eq i64 %xtraiter1319, 0
  br i1 %lcmp.mod1321.not, label %.loopexit535, label %.preheader533.us.epil

.preheader533.us.epil:                            ; preds = %.loopexit535.loopexit.unr-lcssa, %.preheader533.us.epil
  %.0461664.us.epil = phi i64 [ %83, %.preheader533.us.epil ], [ %.0461664.us.unr, %.loopexit535.loopexit.unr-lcssa ]
  %epil.iter1320 = phi i64 [ %epil.iter1320.next, %.preheader533.us.epil ], [ 0, %.loopexit535.loopexit.unr-lcssa ]
  %82 = mul i64 %23, %.0461664.us.epil
  %scevgep.epil = getelementptr i8, ptr %8, i64 %82
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.epil, i8 0, i64 %24, i1 false), !tbaa !11
  %83 = add nuw nsw i64 %.0461664.us.epil, 1
  %epil.iter1320.next = add i64 %epil.iter1320, 1
  %epil.iter1320.cmp.not = icmp eq i64 %epil.iter1320.next, %xtraiter1319
  br i1 %epil.iter1320.cmp.not, label %.loopexit535, label %.preheader533.us.epil, !llvm.loop !23

.loopexit535:                                     ; preds = %._crit_edge.us654, %._crit_edge.us660, %.loopexit535.loopexit.unr-lcssa, %.preheader533.us.epil, %.preheader539.lr.ph, %.preheader536.lr.ph, %.preheader533.lr.ph, %.preheader540, %.preheader537, %.preheader534, %62
  %84 = icmp eq ptr %2, null
  %85 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %4, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %86 = icmp eq i32 %85, 1
  br i1 %84, label %87, label %319

87:                                               ; preds = %.loopexit535
  br i1 %86, label %.preheader517, label %162

.preheader517:                                    ; preds = %87
  %88 = getelementptr inbounds i8, ptr %1, i64 16
  %89 = load i32, ptr %88, align 8, !tbaa !5
  %90 = sext i32 %89 to i64
  %91 = icmp sgt i32 %89, 0
  br i1 %91, label %.lr.ph741, label %.loopexit

.lr.ph741:                                        ; preds = %.preheader517
  %92 = getelementptr inbounds i8, ptr %1, i64 8
  %93 = load ptr, ptr %92, align 8, !tbaa !25
  %94 = load ptr, ptr %1, align 8, !tbaa !26
  %95 = getelementptr inbounds i8, ptr %0, i64 16
  %96 = load ptr, ptr %95, align 8, !tbaa !27
  %97 = sext i32 %3 to i64
  %98 = icmp sgt i32 %3, 0
  %99 = getelementptr inbounds i8, ptr %0, i64 40
  %100 = sext i32 %6 to i64
  %101 = getelementptr inbounds i8, ptr %0, i64 24
  %102 = sext i32 %9 to i64
  %103 = shl nsw i64 %97, 3
  %scevgep1248 = getelementptr i8, ptr %8, i64 %103
  %scevgep1252 = getelementptr i8, ptr %5, i64 %103
  %min.iters.check1263 = icmp ult i32 %3, 8
  %ident.check1245 = icmp ne i32 %9, 1
  %ident.check1246 = icmp ne i32 %6, 1
  %104 = or i1 %ident.check1245, %ident.check1246
  %n.vec1266 = and i64 %97, 2147483644
  %cmp.n1279 = icmp eq i64 %n.vec1266, %97
  %xtraiter1334 = and i64 %97, 1
  %lcmp.mod1335.not = icmp eq i64 %xtraiter1334, 0
  %105 = add nsw i64 %97, -1
  br label %106

106:                                              ; preds = %.lr.ph741, %._crit_edge737
  %.0740 = phi i64 [ 0, %.lr.ph741 ], [ %161, %._crit_edge737 ]
  %107 = getelementptr inbounds i32, ptr %93, i64 %.0740
  %108 = load i32, ptr %107, align 4, !tbaa !29
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds i32, ptr %94, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !29
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds i32, ptr %96, i64 %112
  %114 = load i32, ptr %113, align 4, !tbaa !29
  %115 = getelementptr i8, ptr %113, i64 4
  %116 = load i32, ptr %115, align 4, !tbaa !29
  %117 = sext i32 %116 to i64
  %118 = icmp slt i32 %114, %116
  br i1 %118, label %.preheader.lr.ph, label %._crit_edge737

.preheader.lr.ph:                                 ; preds = %106
  %invariant.gep731 = getelementptr double, ptr %8, i64 %109
  %119 = load ptr, ptr %99, align 8
  %120 = load ptr, ptr %101, align 8
  br i1 %98, label %.preheader.us.preheader, label %._crit_edge737

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %121 = sext i32 %114 to i64
  %122 = shl nsw i64 %109, 3
  %scevgep1249 = getelementptr i8, ptr %scevgep1248, i64 %122
  %123 = shl nsw i64 %121, 3
  %scevgep1250 = getelementptr i8, ptr %119, i64 %123
  %124 = shl nsw i64 %117, 3
  %scevgep1251 = getelementptr i8, ptr %119, i64 %124
  %bound01254 = icmp ult ptr %invariant.gep731, %scevgep1251
  %bound11255 = icmp ult ptr %scevgep1250, %scevgep1249
  %found.conflict1256 = and i1 %bound01254, %bound11255
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us739
  %.3476736.us = phi i64 [ %160, %._crit_edge.us739 ], [ %121, %.preheader.us.preheader ]
  %125 = getelementptr inbounds double, ptr %119, i64 %.3476736.us
  %126 = getelementptr inbounds i32, ptr %120, i64 %.3476736.us
  %127 = load i32, ptr %126, align 4, !tbaa !29
  %128 = sext i32 %127 to i64
  %invariant.gep734.us = getelementptr double, ptr %5, i64 %128
  %brmerge = or i1 %min.iters.check1263, %104
  br i1 %brmerge, label %scalar.ph1262.preheader, label %vector.memcheck1247

vector.memcheck1247:                              ; preds = %.preheader.us
  %129 = shl nsw i64 %128, 3
  %scevgep1253 = getelementptr i8, ptr %scevgep1252, i64 %129
  %bound01257 = icmp ult ptr %invariant.gep731, %scevgep1253
  %bound11258 = icmp ult ptr %invariant.gep734.us, %scevgep1249
  %found.conflict1259 = and i1 %bound01257, %bound11258
  %conflict.rdx1260 = or i1 %found.conflict1256, %found.conflict1259
  br i1 %conflict.rdx1260, label %scalar.ph1262.preheader, label %vector.ph1264

vector.ph1264:                                    ; preds = %vector.memcheck1247
  %130 = load double, ptr %125, align 8, !tbaa !11, !alias.scope !30
  %broadcast.splatinsert1276 = insertelement <2 x double> poison, double %130, i64 0
  %broadcast.splat1277 = shufflevector <2 x double> %broadcast.splatinsert1276, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1268

vector.body1268:                                  ; preds = %vector.body1268, %vector.ph1264
  %index1269 = phi i64 [ 0, %vector.ph1264 ], [ %index.next1278, %vector.body1268 ]
  %131 = getelementptr double, ptr %invariant.gep734.us, i64 %index1269
  %132 = getelementptr i8, ptr %131, i64 16
  %wide.load1270 = load <2 x double>, ptr %131, align 8, !tbaa !11, !alias.scope !33
  %wide.load1271 = load <2 x double>, ptr %132, align 8, !tbaa !11, !alias.scope !33
  %133 = getelementptr double, ptr %invariant.gep731, i64 %index1269
  %134 = getelementptr i8, ptr %133, i64 16
  %wide.load1272 = load <2 x double>, ptr %133, align 8, !tbaa !11, !alias.scope !35, !noalias !37
  %wide.load1273 = load <2 x double>, ptr %134, align 8, !tbaa !11, !alias.scope !35, !noalias !37
  %135 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1277, <2 x double> %wide.load1270, <2 x double> %wide.load1272)
  %136 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1277, <2 x double> %wide.load1271, <2 x double> %wide.load1273)
  store <2 x double> %135, ptr %133, align 8, !tbaa !11, !alias.scope !35, !noalias !37
  store <2 x double> %136, ptr %134, align 8, !tbaa !11, !alias.scope !35, !noalias !37
  %index.next1278 = add nuw i64 %index1269, 4
  %137 = icmp eq i64 %index.next1278, %n.vec1266
  br i1 %137, label %middle.block1261, label %vector.body1268, !llvm.loop !38

middle.block1261:                                 ; preds = %vector.body1268
  br i1 %cmp.n1279, label %._crit_edge.us739, label %scalar.ph1262.preheader

scalar.ph1262.preheader:                          ; preds = %.preheader.us, %middle.block1261, %vector.memcheck1247
  %.3464732.us.ph = phi i64 [ 0, %vector.memcheck1247 ], [ 0, %.preheader.us ], [ %n.vec1266, %middle.block1261 ]
  br i1 %lcmp.mod1335.not, label %scalar.ph1262.prol.loopexit, label %scalar.ph1262.prol

scalar.ph1262.prol:                               ; preds = %scalar.ph1262.preheader
  %138 = load double, ptr %125, align 8, !tbaa !11
  %139 = mul nsw i64 %.3464732.us.ph, %100
  %gep735.us.prol = getelementptr double, ptr %invariant.gep734.us, i64 %139
  %140 = load double, ptr %gep735.us.prol, align 8, !tbaa !11
  %141 = mul nsw i64 %.3464732.us.ph, %102
  %gep.us738.prol = getelementptr double, ptr %invariant.gep731, i64 %141
  %142 = load double, ptr %gep.us738.prol, align 8, !tbaa !11
  %143 = tail call double @llvm.fmuladd.f64(double %138, double %140, double %142)
  store double %143, ptr %gep.us738.prol, align 8, !tbaa !11
  %144 = or disjoint i64 %.3464732.us.ph, 1
  br label %scalar.ph1262.prol.loopexit

scalar.ph1262.prol.loopexit:                      ; preds = %scalar.ph1262.prol, %scalar.ph1262.preheader
  %.3464732.us.unr = phi i64 [ %.3464732.us.ph, %scalar.ph1262.preheader ], [ %144, %scalar.ph1262.prol ]
  %145 = icmp eq i64 %.3464732.us.ph, %105
  br i1 %145, label %._crit_edge.us739, label %scalar.ph1262

scalar.ph1262:                                    ; preds = %scalar.ph1262.prol.loopexit, %scalar.ph1262
  %.3464732.us = phi i64 [ %159, %scalar.ph1262 ], [ %.3464732.us.unr, %scalar.ph1262.prol.loopexit ]
  %146 = load double, ptr %125, align 8, !tbaa !11
  %147 = mul nsw i64 %.3464732.us, %100
  %gep735.us = getelementptr double, ptr %invariant.gep734.us, i64 %147
  %148 = load double, ptr %gep735.us, align 8, !tbaa !11
  %149 = mul nsw i64 %.3464732.us, %102
  %gep.us738 = getelementptr double, ptr %invariant.gep731, i64 %149
  %150 = load double, ptr %gep.us738, align 8, !tbaa !11
  %151 = tail call double @llvm.fmuladd.f64(double %146, double %148, double %150)
  store double %151, ptr %gep.us738, align 8, !tbaa !11
  %152 = add nuw nsw i64 %.3464732.us, 1
  %153 = load double, ptr %125, align 8, !tbaa !11
  %154 = mul nsw i64 %152, %100
  %gep735.us.1 = getelementptr double, ptr %invariant.gep734.us, i64 %154
  %155 = load double, ptr %gep735.us.1, align 8, !tbaa !11
  %156 = mul nsw i64 %152, %102
  %gep.us738.1 = getelementptr double, ptr %invariant.gep731, i64 %156
  %157 = load double, ptr %gep.us738.1, align 8, !tbaa !11
  %158 = tail call double @llvm.fmuladd.f64(double %153, double %155, double %157)
  store double %158, ptr %gep.us738.1, align 8, !tbaa !11
  %159 = add nuw nsw i64 %.3464732.us, 2
  %exitcond812.not.1 = icmp eq i64 %159, %97
  br i1 %exitcond812.not.1, label %._crit_edge.us739, label %scalar.ph1262, !llvm.loop !39

._crit_edge.us739:                                ; preds = %scalar.ph1262.prol.loopexit, %scalar.ph1262, %middle.block1261
  %160 = add nsw i64 %.3476736.us, 1
  %exitcond813.not = icmp eq i64 %160, %117
  br i1 %exitcond813.not, label %._crit_edge737, label %.preheader.us, !llvm.loop !40

._crit_edge737:                                   ; preds = %._crit_edge.us739, %.preheader.lr.ph, %106
  %161 = add nuw nsw i64 %.0740, 1
  %exitcond814.not = icmp eq i64 %161, %90
  br i1 %exitcond814.not, label %.loopexit, label %106, !llvm.loop !41

162:                                              ; preds = %87
  %163 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %4, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %164 = icmp eq i32 %163, 1
  %165 = getelementptr inbounds i8, ptr %1, i64 16
  %166 = load i32, ptr %165, align 8, !tbaa !5
  %167 = sext i32 %166 to i64
  %168 = icmp sgt i32 %166, 0
  br i1 %164, label %.preheader519, label %.preheader522

.preheader522:                                    ; preds = %162
  br i1 %168, label %.lr.ph719, label %.loopexit

.lr.ph719:                                        ; preds = %.preheader522
  %169 = getelementptr inbounds i8, ptr %1, i64 8
  %170 = load ptr, ptr %169, align 8, !tbaa !25
  %171 = load ptr, ptr %1, align 8, !tbaa !26
  %172 = getelementptr inbounds i8, ptr %0, i64 16
  %173 = load ptr, ptr %172, align 8, !tbaa !27
  %174 = sext i32 %3 to i64
  %175 = icmp sgt i32 %3, 0
  %176 = getelementptr inbounds i8, ptr %0, i64 40
  %177 = sext i32 %6 to i64
  %178 = getelementptr inbounds i8, ptr %0, i64 24
  %179 = sext i32 %9 to i64
  %180 = shl nsw i64 %174, 3
  %scevgep1174 = getelementptr i8, ptr %8, i64 %180
  %scevgep1178 = getelementptr i8, ptr %5, i64 %180
  %min.iters.check1189 = icmp ult i32 %3, 6
  %ident.check1171 = icmp ne i32 %9, 1
  %ident.check1172 = icmp ne i32 %6, 1
  %181 = or i1 %ident.check1171, %ident.check1172
  %n.vec1192 = and i64 %174, 2147483644
  %broadcast.splatinsert1198 = insertelement <2 x double> poison, double %4, i64 0
  %broadcast.splat1199 = shufflevector <2 x double> %broadcast.splatinsert1198, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n1207 = icmp eq i64 %n.vec1192, %174
  %xtraiter1330 = and i64 %174, 1
  %lcmp.mod1331.not = icmp eq i64 %xtraiter1330, 0
  %182 = add nsw i64 %174, -1
  br label %258

.preheader519:                                    ; preds = %162
  br i1 %168, label %.lr.ph730, label %.loopexit

.lr.ph730:                                        ; preds = %.preheader519
  %183 = getelementptr inbounds i8, ptr %1, i64 8
  %184 = load ptr, ptr %183, align 8, !tbaa !25
  %185 = load ptr, ptr %1, align 8, !tbaa !26
  %186 = getelementptr inbounds i8, ptr %0, i64 16
  %187 = load ptr, ptr %186, align 8, !tbaa !27
  %188 = sext i32 %3 to i64
  %189 = icmp sgt i32 %3, 0
  %190 = getelementptr inbounds i8, ptr %0, i64 40
  %191 = sext i32 %6 to i64
  %192 = getelementptr inbounds i8, ptr %0, i64 24
  %193 = sext i32 %9 to i64
  %194 = shl nsw i64 %188, 3
  %scevgep1212 = getelementptr i8, ptr %8, i64 %194
  %scevgep1216 = getelementptr i8, ptr %5, i64 %194
  %min.iters.check1227 = icmp ult i32 %3, 8
  %ident.check1209 = icmp ne i32 %9, 1
  %ident.check1210 = icmp ne i32 %6, 1
  %195 = or i1 %ident.check1209, %ident.check1210
  %n.vec1230 = and i64 %188, 2147483644
  %cmp.n1243 = icmp eq i64 %n.vec1230, %188
  %xtraiter1332 = and i64 %188, 1
  %lcmp.mod1333.not = icmp eq i64 %xtraiter1332, 0
  %196 = add nsw i64 %188, -1
  br label %197

197:                                              ; preds = %.lr.ph730, %._crit_edge726
  %.1729 = phi i64 [ 0, %.lr.ph730 ], [ %257, %._crit_edge726 ]
  %198 = getelementptr inbounds i32, ptr %184, i64 %.1729
  %199 = load i32, ptr %198, align 4, !tbaa !29
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds i32, ptr %185, i64 %200
  %202 = load i32, ptr %201, align 4, !tbaa !29
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds i32, ptr %187, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !29
  %206 = getelementptr i8, ptr %204, i64 4
  %207 = load i32, ptr %206, align 4, !tbaa !29
  %208 = sext i32 %207 to i64
  %209 = icmp slt i32 %205, %207
  br i1 %209, label %.preheader518.lr.ph, label %._crit_edge726

.preheader518.lr.ph:                              ; preds = %197
  %invariant.gep720 = getelementptr double, ptr %8, i64 %200
  %210 = load ptr, ptr %190, align 8
  %211 = load ptr, ptr %192, align 8
  br i1 %189, label %.preheader518.us.preheader, label %._crit_edge726

.preheader518.us.preheader:                       ; preds = %.preheader518.lr.ph
  %212 = sext i32 %205 to i64
  %213 = shl nsw i64 %200, 3
  %scevgep1213 = getelementptr i8, ptr %scevgep1212, i64 %213
  %214 = shl nsw i64 %212, 3
  %scevgep1214 = getelementptr i8, ptr %210, i64 %214
  %215 = shl nsw i64 %208, 3
  %scevgep1215 = getelementptr i8, ptr %210, i64 %215
  %bound01218 = icmp ult ptr %invariant.gep720, %scevgep1215
  %bound11219 = icmp ult ptr %scevgep1214, %scevgep1213
  %found.conflict1220 = and i1 %bound01218, %bound11219
  br label %.preheader518.us

.preheader518.us:                                 ; preds = %.preheader518.us.preheader, %._crit_edge.us728
  %.4477725.us = phi i64 [ %256, %._crit_edge.us728 ], [ %212, %.preheader518.us.preheader ]
  %216 = getelementptr inbounds double, ptr %210, i64 %.4477725.us
  %217 = getelementptr inbounds i32, ptr %211, i64 %.4477725.us
  %218 = load i32, ptr %217, align 4, !tbaa !29
  %219 = sext i32 %218 to i64
  %invariant.gep723.us = getelementptr double, ptr %5, i64 %219
  %brmerge1339 = or i1 %min.iters.check1227, %195
  br i1 %brmerge1339, label %scalar.ph1226.preheader, label %vector.memcheck1211

vector.memcheck1211:                              ; preds = %.preheader518.us
  %220 = shl nsw i64 %219, 3
  %scevgep1217 = getelementptr i8, ptr %scevgep1216, i64 %220
  %bound01221 = icmp ult ptr %invariant.gep720, %scevgep1217
  %bound11222 = icmp ult ptr %invariant.gep723.us, %scevgep1213
  %found.conflict1223 = and i1 %bound01221, %bound11222
  %conflict.rdx1224 = or i1 %found.conflict1220, %found.conflict1223
  br i1 %conflict.rdx1224, label %scalar.ph1226.preheader, label %vector.ph1228

vector.ph1228:                                    ; preds = %vector.memcheck1211
  %221 = load double, ptr %216, align 8, !tbaa !11, !alias.scope !42
  %broadcast.splatinsert1240 = insertelement <2 x double> poison, double %221, i64 0
  %broadcast.splat1241 = shufflevector <2 x double> %broadcast.splatinsert1240, <2 x double> poison, <2 x i32> zeroinitializer
  %222 = fneg <2 x double> %broadcast.splat1241
  %223 = fneg <2 x double> %broadcast.splat1241
  br label %vector.body1232

vector.body1232:                                  ; preds = %vector.body1232, %vector.ph1228
  %index1233 = phi i64 [ 0, %vector.ph1228 ], [ %index.next1242, %vector.body1232 ]
  %224 = getelementptr double, ptr %invariant.gep723.us, i64 %index1233
  %225 = getelementptr i8, ptr %224, i64 16
  %wide.load1234 = load <2 x double>, ptr %224, align 8, !tbaa !11, !alias.scope !45
  %wide.load1235 = load <2 x double>, ptr %225, align 8, !tbaa !11, !alias.scope !45
  %226 = getelementptr double, ptr %invariant.gep720, i64 %index1233
  %227 = getelementptr i8, ptr %226, i64 16
  %wide.load1236 = load <2 x double>, ptr %226, align 8, !tbaa !11, !alias.scope !47, !noalias !49
  %wide.load1237 = load <2 x double>, ptr %227, align 8, !tbaa !11, !alias.scope !47, !noalias !49
  %228 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %222, <2 x double> %wide.load1234, <2 x double> %wide.load1236)
  %229 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %223, <2 x double> %wide.load1235, <2 x double> %wide.load1237)
  store <2 x double> %228, ptr %226, align 8, !tbaa !11, !alias.scope !47, !noalias !49
  store <2 x double> %229, ptr %227, align 8, !tbaa !11, !alias.scope !47, !noalias !49
  %index.next1242 = add nuw i64 %index1233, 4
  %230 = icmp eq i64 %index.next1242, %n.vec1230
  br i1 %230, label %middle.block1225, label %vector.body1232, !llvm.loop !50

middle.block1225:                                 ; preds = %vector.body1232
  br i1 %cmp.n1243, label %._crit_edge.us728, label %scalar.ph1226.preheader

scalar.ph1226.preheader:                          ; preds = %.preheader518.us, %middle.block1225, %vector.memcheck1211
  %.4465721.us.ph = phi i64 [ 0, %vector.memcheck1211 ], [ 0, %.preheader518.us ], [ %n.vec1230, %middle.block1225 ]
  br i1 %lcmp.mod1333.not, label %scalar.ph1226.prol.loopexit, label %scalar.ph1226.prol

scalar.ph1226.prol:                               ; preds = %scalar.ph1226.preheader
  %231 = load double, ptr %216, align 8, !tbaa !11
  %232 = mul nsw i64 %.4465721.us.ph, %191
  %gep724.us.prol = getelementptr double, ptr %invariant.gep723.us, i64 %232
  %233 = load double, ptr %gep724.us.prol, align 8, !tbaa !11
  %234 = mul nsw i64 %.4465721.us.ph, %193
  %gep.us727.prol = getelementptr double, ptr %invariant.gep720, i64 %234
  %235 = load double, ptr %gep.us727.prol, align 8, !tbaa !11
  %236 = fneg double %231
  %237 = tail call double @llvm.fmuladd.f64(double %236, double %233, double %235)
  store double %237, ptr %gep.us727.prol, align 8, !tbaa !11
  %238 = or disjoint i64 %.4465721.us.ph, 1
  br label %scalar.ph1226.prol.loopexit

scalar.ph1226.prol.loopexit:                      ; preds = %scalar.ph1226.prol, %scalar.ph1226.preheader
  %.4465721.us.unr = phi i64 [ %.4465721.us.ph, %scalar.ph1226.preheader ], [ %238, %scalar.ph1226.prol ]
  %239 = icmp eq i64 %.4465721.us.ph, %196
  br i1 %239, label %._crit_edge.us728, label %scalar.ph1226

scalar.ph1226:                                    ; preds = %scalar.ph1226.prol.loopexit, %scalar.ph1226
  %.4465721.us = phi i64 [ %255, %scalar.ph1226 ], [ %.4465721.us.unr, %scalar.ph1226.prol.loopexit ]
  %240 = load double, ptr %216, align 8, !tbaa !11
  %241 = mul nsw i64 %.4465721.us, %191
  %gep724.us = getelementptr double, ptr %invariant.gep723.us, i64 %241
  %242 = load double, ptr %gep724.us, align 8, !tbaa !11
  %243 = mul nsw i64 %.4465721.us, %193
  %gep.us727 = getelementptr double, ptr %invariant.gep720, i64 %243
  %244 = load double, ptr %gep.us727, align 8, !tbaa !11
  %245 = fneg double %240
  %246 = tail call double @llvm.fmuladd.f64(double %245, double %242, double %244)
  store double %246, ptr %gep.us727, align 8, !tbaa !11
  %247 = add nuw nsw i64 %.4465721.us, 1
  %248 = load double, ptr %216, align 8, !tbaa !11
  %249 = mul nsw i64 %247, %191
  %gep724.us.1 = getelementptr double, ptr %invariant.gep723.us, i64 %249
  %250 = load double, ptr %gep724.us.1, align 8, !tbaa !11
  %251 = mul nsw i64 %247, %193
  %gep.us727.1 = getelementptr double, ptr %invariant.gep720, i64 %251
  %252 = load double, ptr %gep.us727.1, align 8, !tbaa !11
  %253 = fneg double %248
  %254 = tail call double @llvm.fmuladd.f64(double %253, double %250, double %252)
  store double %254, ptr %gep.us727.1, align 8, !tbaa !11
  %255 = add nuw nsw i64 %.4465721.us, 2
  %exitcond809.not.1 = icmp eq i64 %255, %188
  br i1 %exitcond809.not.1, label %._crit_edge.us728, label %scalar.ph1226, !llvm.loop !51

._crit_edge.us728:                                ; preds = %scalar.ph1226.prol.loopexit, %scalar.ph1226, %middle.block1225
  %256 = add nsw i64 %.4477725.us, 1
  %exitcond810.not = icmp eq i64 %256, %208
  br i1 %exitcond810.not, label %._crit_edge726, label %.preheader518.us, !llvm.loop !52

._crit_edge726:                                   ; preds = %._crit_edge.us728, %.preheader518.lr.ph, %197
  %257 = add nuw nsw i64 %.1729, 1
  %exitcond811.not = icmp eq i64 %257, %167
  br i1 %exitcond811.not, label %.loopexit, label %197, !llvm.loop !53

258:                                              ; preds = %.lr.ph719, %._crit_edge715
  %.2718 = phi i64 [ 0, %.lr.ph719 ], [ %318, %._crit_edge715 ]
  %259 = getelementptr inbounds i32, ptr %170, i64 %.2718
  %260 = load i32, ptr %259, align 4, !tbaa !29
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds i32, ptr %171, i64 %261
  %263 = load i32, ptr %262, align 4, !tbaa !29
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds i32, ptr %173, i64 %264
  %266 = load i32, ptr %265, align 4, !tbaa !29
  %267 = getelementptr i8, ptr %265, i64 4
  %268 = load i32, ptr %267, align 4, !tbaa !29
  %269 = sext i32 %268 to i64
  %270 = icmp slt i32 %266, %268
  br i1 %270, label %.preheader521.lr.ph, label %._crit_edge715

.preheader521.lr.ph:                              ; preds = %258
  %invariant.gep709 = getelementptr double, ptr %8, i64 %261
  %271 = load ptr, ptr %176, align 8
  %272 = load ptr, ptr %178, align 8
  br i1 %175, label %.preheader521.us.preheader, label %._crit_edge715

.preheader521.us.preheader:                       ; preds = %.preheader521.lr.ph
  %273 = sext i32 %266 to i64
  %274 = shl nsw i64 %261, 3
  %scevgep1175 = getelementptr i8, ptr %scevgep1174, i64 %274
  %275 = shl nsw i64 %273, 3
  %scevgep1176 = getelementptr i8, ptr %271, i64 %275
  %276 = shl nsw i64 %269, 3
  %scevgep1177 = getelementptr i8, ptr %271, i64 %276
  %bound01180 = icmp ult ptr %invariant.gep709, %scevgep1177
  %bound11181 = icmp ult ptr %scevgep1176, %scevgep1175
  %found.conflict1182 = and i1 %bound01180, %bound11181
  br label %.preheader521.us

.preheader521.us:                                 ; preds = %.preheader521.us.preheader, %._crit_edge.us717
  %.5478714.us = phi i64 [ %317, %._crit_edge.us717 ], [ %273, %.preheader521.us.preheader ]
  %277 = getelementptr inbounds double, ptr %271, i64 %.5478714.us
  %278 = getelementptr inbounds i32, ptr %272, i64 %.5478714.us
  %279 = load i32, ptr %278, align 4, !tbaa !29
  %280 = sext i32 %279 to i64
  %invariant.gep712.us = getelementptr double, ptr %5, i64 %280
  %brmerge1340 = or i1 %min.iters.check1189, %181
  br i1 %brmerge1340, label %scalar.ph1188.preheader, label %vector.memcheck1173

vector.memcheck1173:                              ; preds = %.preheader521.us
  %281 = shl nsw i64 %280, 3
  %scevgep1179 = getelementptr i8, ptr %scevgep1178, i64 %281
  %bound01183 = icmp ult ptr %invariant.gep709, %scevgep1179
  %bound11184 = icmp ult ptr %invariant.gep712.us, %scevgep1175
  %found.conflict1185 = and i1 %bound01183, %bound11184
  %conflict.rdx1186 = or i1 %found.conflict1182, %found.conflict1185
  br i1 %conflict.rdx1186, label %scalar.ph1188.preheader, label %vector.ph1190

vector.ph1190:                                    ; preds = %vector.memcheck1173
  %282 = load double, ptr %277, align 8, !tbaa !11, !alias.scope !54
  %broadcast.splatinsert1200 = insertelement <2 x double> poison, double %282, i64 0
  %broadcast.splat1201 = shufflevector <2 x double> %broadcast.splatinsert1200, <2 x double> poison, <2 x i32> zeroinitializer
  %283 = fmul <2 x double> %broadcast.splat1201, %broadcast.splat1199
  %284 = fmul <2 x double> %broadcast.splat1201, %broadcast.splat1199
  br label %vector.body1194

vector.body1194:                                  ; preds = %vector.body1194, %vector.ph1190
  %index1195 = phi i64 [ 0, %vector.ph1190 ], [ %index.next1206, %vector.body1194 ]
  %285 = getelementptr double, ptr %invariant.gep712.us, i64 %index1195
  %286 = getelementptr i8, ptr %285, i64 16
  %wide.load1202 = load <2 x double>, ptr %285, align 8, !tbaa !11, !alias.scope !57
  %wide.load1203 = load <2 x double>, ptr %286, align 8, !tbaa !11, !alias.scope !57
  %287 = getelementptr double, ptr %invariant.gep709, i64 %index1195
  %288 = getelementptr i8, ptr %287, i64 16
  %wide.load1204 = load <2 x double>, ptr %287, align 8, !tbaa !11, !alias.scope !59, !noalias !61
  %wide.load1205 = load <2 x double>, ptr %288, align 8, !tbaa !11, !alias.scope !59, !noalias !61
  %289 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %283, <2 x double> %wide.load1202, <2 x double> %wide.load1204)
  %290 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %284, <2 x double> %wide.load1203, <2 x double> %wide.load1205)
  store <2 x double> %289, ptr %287, align 8, !tbaa !11, !alias.scope !59, !noalias !61
  store <2 x double> %290, ptr %288, align 8, !tbaa !11, !alias.scope !59, !noalias !61
  %index.next1206 = add nuw i64 %index1195, 4
  %291 = icmp eq i64 %index.next1206, %n.vec1192
  br i1 %291, label %middle.block1187, label %vector.body1194, !llvm.loop !62

middle.block1187:                                 ; preds = %vector.body1194
  br i1 %cmp.n1207, label %._crit_edge.us717, label %scalar.ph1188.preheader

scalar.ph1188.preheader:                          ; preds = %.preheader521.us, %middle.block1187, %vector.memcheck1173
  %.5466710.us.ph = phi i64 [ 0, %vector.memcheck1173 ], [ 0, %.preheader521.us ], [ %n.vec1192, %middle.block1187 ]
  br i1 %lcmp.mod1331.not, label %scalar.ph1188.prol.loopexit, label %scalar.ph1188.prol

scalar.ph1188.prol:                               ; preds = %scalar.ph1188.preheader
  %292 = load double, ptr %277, align 8, !tbaa !11
  %293 = fmul double %292, %4
  %294 = mul nsw i64 %.5466710.us.ph, %177
  %gep713.us.prol = getelementptr double, ptr %invariant.gep712.us, i64 %294
  %295 = load double, ptr %gep713.us.prol, align 8, !tbaa !11
  %296 = mul nsw i64 %.5466710.us.ph, %179
  %gep.us716.prol = getelementptr double, ptr %invariant.gep709, i64 %296
  %297 = load double, ptr %gep.us716.prol, align 8, !tbaa !11
  %298 = tail call double @llvm.fmuladd.f64(double %293, double %295, double %297)
  store double %298, ptr %gep.us716.prol, align 8, !tbaa !11
  %299 = or disjoint i64 %.5466710.us.ph, 1
  br label %scalar.ph1188.prol.loopexit

scalar.ph1188.prol.loopexit:                      ; preds = %scalar.ph1188.prol, %scalar.ph1188.preheader
  %.5466710.us.unr = phi i64 [ %.5466710.us.ph, %scalar.ph1188.preheader ], [ %299, %scalar.ph1188.prol ]
  %300 = icmp eq i64 %.5466710.us.ph, %182
  br i1 %300, label %._crit_edge.us717, label %scalar.ph1188

scalar.ph1188:                                    ; preds = %scalar.ph1188.prol.loopexit, %scalar.ph1188
  %.5466710.us = phi i64 [ %316, %scalar.ph1188 ], [ %.5466710.us.unr, %scalar.ph1188.prol.loopexit ]
  %301 = load double, ptr %277, align 8, !tbaa !11
  %302 = fmul double %301, %4
  %303 = mul nsw i64 %.5466710.us, %177
  %gep713.us = getelementptr double, ptr %invariant.gep712.us, i64 %303
  %304 = load double, ptr %gep713.us, align 8, !tbaa !11
  %305 = mul nsw i64 %.5466710.us, %179
  %gep.us716 = getelementptr double, ptr %invariant.gep709, i64 %305
  %306 = load double, ptr %gep.us716, align 8, !tbaa !11
  %307 = tail call double @llvm.fmuladd.f64(double %302, double %304, double %306)
  store double %307, ptr %gep.us716, align 8, !tbaa !11
  %308 = add nuw nsw i64 %.5466710.us, 1
  %309 = load double, ptr %277, align 8, !tbaa !11
  %310 = fmul double %309, %4
  %311 = mul nsw i64 %308, %177
  %gep713.us.1 = getelementptr double, ptr %invariant.gep712.us, i64 %311
  %312 = load double, ptr %gep713.us.1, align 8, !tbaa !11
  %313 = mul nsw i64 %308, %179
  %gep.us716.1 = getelementptr double, ptr %invariant.gep709, i64 %313
  %314 = load double, ptr %gep.us716.1, align 8, !tbaa !11
  %315 = tail call double @llvm.fmuladd.f64(double %310, double %312, double %314)
  store double %315, ptr %gep.us716.1, align 8, !tbaa !11
  %316 = add nuw nsw i64 %.5466710.us, 2
  %exitcond806.not.1 = icmp eq i64 %316, %174
  br i1 %exitcond806.not.1, label %._crit_edge.us717, label %scalar.ph1188, !llvm.loop !63

._crit_edge.us717:                                ; preds = %scalar.ph1188.prol.loopexit, %scalar.ph1188, %middle.block1187
  %317 = add nsw i64 %.5478714.us, 1
  %exitcond807.not = icmp eq i64 %317, %269
  br i1 %exitcond807.not, label %._crit_edge715, label %.preheader521.us, !llvm.loop !64

._crit_edge715:                                   ; preds = %._crit_edge.us717, %.preheader521.lr.ph, %258
  %318 = add nuw nsw i64 %.2718, 1
  %exitcond808.not = icmp eq i64 %318, %167
  br i1 %exitcond808.not, label %.loopexit, label %258, !llvm.loop !65

319:                                              ; preds = %.loopexit535
  br i1 %86, label %.preheader525, label %415

.preheader525:                                    ; preds = %319
  %320 = getelementptr inbounds i8, ptr %1, i64 16
  %321 = load i32, ptr %320, align 8, !tbaa !5
  %322 = sext i32 %321 to i64
  %323 = icmp sgt i32 %321, 0
  br i1 %323, label %.lr.ph708, label %.loopexit

.lr.ph708:                                        ; preds = %.preheader525
  %324 = getelementptr inbounds i8, ptr %1, i64 8
  %325 = load ptr, ptr %324, align 8, !tbaa !25
  %326 = load ptr, ptr %1, align 8, !tbaa !26
  %327 = getelementptr inbounds i8, ptr %0, i64 16
  %328 = load ptr, ptr %327, align 8, !tbaa !27
  %329 = getelementptr inbounds i8, ptr %2, i64 16
  %330 = getelementptr inbounds i8, ptr %0, i64 24
  %331 = getelementptr inbounds i8, ptr %2, i64 8
  %332 = sext i32 %3 to i64
  %333 = icmp sgt i32 %3, 0
  %334 = getelementptr inbounds i8, ptr %0, i64 40
  %335 = sext i32 %6 to i64
  %336 = sext i32 %9 to i64
  %337 = shl nsw i64 %332, 3
  %scevgep1138 = getelementptr i8, ptr %8, i64 %337
  %scevgep1142 = getelementptr i8, ptr %5, i64 %337
  %min.iters.check1153 = icmp ult i32 %3, 8
  %ident.check1135 = icmp ne i32 %9, 1
  %ident.check1136 = icmp ne i32 %6, 1
  %338 = or i1 %ident.check1135, %ident.check1136
  %n.vec1156 = and i64 %332, 2147483644
  %cmp.n1169 = icmp eq i64 %n.vec1156, %332
  %xtraiter1328 = and i64 %332, 1
  %lcmp.mod1329.not = icmp eq i64 %xtraiter1328, 0
  %339 = add nsw i64 %332, -1
  br label %340

340:                                              ; preds = %.lr.ph708, %.critedge
  %.3707 = phi i64 [ 0, %.lr.ph708 ], [ %414, %.critedge ]
  %341 = getelementptr inbounds i32, ptr %325, i64 %.3707
  %342 = load i32, ptr %341, align 4, !tbaa !29
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds i32, ptr %326, i64 %343
  %345 = load i32, ptr %344, align 4, !tbaa !29
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds i32, ptr %328, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !29
  %349 = getelementptr i8, ptr %347, i64 4
  %350 = load i32, ptr %349, align 4, !tbaa !29
  %351 = sext i32 %350 to i64
  %352 = icmp slt i32 %348, %350
  br i1 %352, label %.lr.ph703, label %.critedge

.lr.ph703:                                        ; preds = %340
  %353 = load i32, ptr %329, align 8, !tbaa !5
  %354 = sext i32 %353 to i64
  %355 = load ptr, ptr %330, align 8
  %invariant.gep696 = getelementptr double, ptr %8, i64 %343
  %356 = load ptr, ptr %334, align 8
  br i1 %333, label %.lr.ph703.split.us.preheader, label %.critedge

.lr.ph703.split.us.preheader:                     ; preds = %.lr.ph703
  %357 = sext i32 %348 to i64
  %358 = shl nsw i64 %343, 3
  %scevgep1139 = getelementptr i8, ptr %scevgep1138, i64 %358
  %scevgep1140 = getelementptr i8, ptr %356, i64 8
  br label %.lr.ph703.split.us

.lr.ph703.split.us:                               ; preds = %.lr.ph703.split.us.preheader, %377
  %.6479701.us = phi i64 [ %.7480.us, %377 ], [ %357, %.lr.ph703.split.us.preheader ]
  %.0491700.us = phi i64 [ %.1492.us, %377 ], [ 0, %.lr.ph703.split.us.preheader ]
  %359 = icmp slt i64 %.0491700.us, %354
  br i1 %359, label %360, label %.critedge

360:                                              ; preds = %.lr.ph703.split.us
  %361 = getelementptr inbounds i32, ptr %355, i64 %.6479701.us
  %362 = load i32, ptr %361, align 4, !tbaa !29
  %363 = load ptr, ptr %2, align 8, !tbaa !26
  %364 = load ptr, ptr %331, align 8, !tbaa !25
  %365 = getelementptr inbounds i32, ptr %364, i64 %.0491700.us
  %366 = load i32, ptr %365, align 4, !tbaa !29
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %363, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !29
  %370 = icmp eq i32 %362, %369
  br i1 %370, label %.preheader524.us, label %371

371:                                              ; preds = %360
  %372 = icmp sgt i32 %362, %369
  br i1 %372, label %375, label %373

373:                                              ; preds = %371
  %374 = add nsw i64 %.6479701.us, 1
  br label %377

375:                                              ; preds = %371
  %376 = add nsw i64 %.0491700.us, 1
  br label %377

377:                                              ; preds = %._crit_edge.us706, %375, %373
  %.1492.us = phi i64 [ %413, %._crit_edge.us706 ], [ %376, %375 ], [ %.0491700.us, %373 ]
  %.7480.us = phi i64 [ %412, %._crit_edge.us706 ], [ %.6479701.us, %375 ], [ %374, %373 ]
  %378 = icmp slt i64 %.7480.us, %351
  br i1 %378, label %.lr.ph703.split.us, label %.critedge, !llvm.loop !66

scalar.ph1152:                                    ; preds = %scalar.ph1152.prol.loopexit, %scalar.ph1152
  %.6467698.us = phi i64 [ %392, %scalar.ph1152 ], [ %.6467698.us.unr, %scalar.ph1152.prol.loopexit ]
  %379 = load double, ptr %393, align 8, !tbaa !11
  %380 = mul nsw i64 %.6467698.us, %335
  %gep.us705 = getelementptr double, ptr %invariant.gep695.us, i64 %380
  %381 = load double, ptr %gep.us705, align 8, !tbaa !11
  %382 = mul nsw i64 %.6467698.us, %336
  %gep697.us = getelementptr double, ptr %invariant.gep696, i64 %382
  %383 = load double, ptr %gep697.us, align 8, !tbaa !11
  %384 = tail call double @llvm.fmuladd.f64(double %379, double %381, double %383)
  store double %384, ptr %gep697.us, align 8, !tbaa !11
  %385 = add nuw nsw i64 %.6467698.us, 1
  %386 = load double, ptr %393, align 8, !tbaa !11
  %387 = mul nsw i64 %385, %335
  %gep.us705.1 = getelementptr double, ptr %invariant.gep695.us, i64 %387
  %388 = load double, ptr %gep.us705.1, align 8, !tbaa !11
  %389 = mul nsw i64 %385, %336
  %gep697.us.1 = getelementptr double, ptr %invariant.gep696, i64 %389
  %390 = load double, ptr %gep697.us.1, align 8, !tbaa !11
  %391 = tail call double @llvm.fmuladd.f64(double %386, double %388, double %390)
  store double %391, ptr %gep697.us.1, align 8, !tbaa !11
  %392 = add nuw nsw i64 %.6467698.us, 2
  %exitcond804.not.1 = icmp eq i64 %392, %332
  br i1 %exitcond804.not.1, label %._crit_edge.us706, label %scalar.ph1152, !llvm.loop !67

.preheader524.us:                                 ; preds = %360
  %invariant.gep695.us = getelementptr double, ptr %5, i64 %367
  %393 = getelementptr inbounds double, ptr %356, i64 %.6479701.us
  %brmerge1341 = or i1 %min.iters.check1153, %338
  br i1 %brmerge1341, label %scalar.ph1152.preheader, label %vector.memcheck1137

scalar.ph1152.preheader:                          ; preds = %.preheader524.us, %middle.block1151, %vector.memcheck1137
  %.6467698.us.ph = phi i64 [ 0, %vector.memcheck1137 ], [ 0, %.preheader524.us ], [ %n.vec1156, %middle.block1151 ]
  br i1 %lcmp.mod1329.not, label %scalar.ph1152.prol.loopexit, label %scalar.ph1152.prol

scalar.ph1152.prol:                               ; preds = %scalar.ph1152.preheader
  %394 = load double, ptr %393, align 8, !tbaa !11
  %395 = mul nsw i64 %.6467698.us.ph, %335
  %gep.us705.prol = getelementptr double, ptr %invariant.gep695.us, i64 %395
  %396 = load double, ptr %gep.us705.prol, align 8, !tbaa !11
  %397 = mul nsw i64 %.6467698.us.ph, %336
  %gep697.us.prol = getelementptr double, ptr %invariant.gep696, i64 %397
  %398 = load double, ptr %gep697.us.prol, align 8, !tbaa !11
  %399 = tail call double @llvm.fmuladd.f64(double %394, double %396, double %398)
  store double %399, ptr %gep697.us.prol, align 8, !tbaa !11
  %400 = or disjoint i64 %.6467698.us.ph, 1
  br label %scalar.ph1152.prol.loopexit

scalar.ph1152.prol.loopexit:                      ; preds = %scalar.ph1152.prol, %scalar.ph1152.preheader
  %.6467698.us.unr = phi i64 [ %.6467698.us.ph, %scalar.ph1152.preheader ], [ %400, %scalar.ph1152.prol ]
  %401 = icmp eq i64 %.6467698.us.ph, %339
  br i1 %401, label %._crit_edge.us706, label %scalar.ph1152

vector.memcheck1137:                              ; preds = %.preheader524.us
  %402 = shl i64 %.6479701.us, 3
  %scevgep1141 = getelementptr i8, ptr %scevgep1140, i64 %402
  %403 = shl nsw i64 %367, 3
  %scevgep1143 = getelementptr i8, ptr %scevgep1142, i64 %403
  %bound01144 = icmp ult ptr %invariant.gep696, %scevgep1141
  %bound11145 = icmp ult ptr %393, %scevgep1139
  %found.conflict1146 = and i1 %bound01144, %bound11145
  %bound01147 = icmp ult ptr %invariant.gep696, %scevgep1143
  %bound11148 = icmp ult ptr %invariant.gep695.us, %scevgep1139
  %found.conflict1149 = and i1 %bound01147, %bound11148
  %conflict.rdx1150 = or i1 %found.conflict1146, %found.conflict1149
  br i1 %conflict.rdx1150, label %scalar.ph1152.preheader, label %vector.ph1154

vector.ph1154:                                    ; preds = %vector.memcheck1137
  %404 = load double, ptr %393, align 8, !tbaa !11, !alias.scope !68
  %broadcast.splatinsert1166 = insertelement <2 x double> poison, double %404, i64 0
  %broadcast.splat1167 = shufflevector <2 x double> %broadcast.splatinsert1166, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1158

vector.body1158:                                  ; preds = %vector.body1158, %vector.ph1154
  %index1159 = phi i64 [ 0, %vector.ph1154 ], [ %index.next1168, %vector.body1158 ]
  %405 = getelementptr double, ptr %invariant.gep695.us, i64 %index1159
  %406 = getelementptr i8, ptr %405, i64 16
  %wide.load1160 = load <2 x double>, ptr %405, align 8, !tbaa !11, !alias.scope !71
  %wide.load1161 = load <2 x double>, ptr %406, align 8, !tbaa !11, !alias.scope !71
  %407 = getelementptr double, ptr %invariant.gep696, i64 %index1159
  %408 = getelementptr i8, ptr %407, i64 16
  %wide.load1162 = load <2 x double>, ptr %407, align 8, !tbaa !11, !alias.scope !73, !noalias !75
  %wide.load1163 = load <2 x double>, ptr %408, align 8, !tbaa !11, !alias.scope !73, !noalias !75
  %409 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1167, <2 x double> %wide.load1160, <2 x double> %wide.load1162)
  %410 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1167, <2 x double> %wide.load1161, <2 x double> %wide.load1163)
  store <2 x double> %409, ptr %407, align 8, !tbaa !11, !alias.scope !73, !noalias !75
  store <2 x double> %410, ptr %408, align 8, !tbaa !11, !alias.scope !73, !noalias !75
  %index.next1168 = add nuw i64 %index1159, 4
  %411 = icmp eq i64 %index.next1168, %n.vec1156
  br i1 %411, label %middle.block1151, label %vector.body1158, !llvm.loop !76

middle.block1151:                                 ; preds = %vector.body1158
  br i1 %cmp.n1169, label %._crit_edge.us706, label %scalar.ph1152.preheader

._crit_edge.us706:                                ; preds = %scalar.ph1152.prol.loopexit, %scalar.ph1152, %middle.block1151
  %412 = add nsw i64 %.6479701.us, 1
  %413 = add nsw i64 %.0491700.us, 1
  br label %377

.critedge:                                        ; preds = %377, %.lr.ph703.split.us, %.lr.ph703, %340
  %414 = add nuw nsw i64 %.3707, 1
  %exitcond805.not = icmp eq i64 %414, %322
  br i1 %exitcond805.not, label %.loopexit, label %340, !llvm.loop !77

415:                                              ; preds = %319
  %416 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %4, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %417 = icmp eq i32 %416, 1
  %418 = getelementptr inbounds i8, ptr %1, i64 16
  %419 = load i32, ptr %418, align 8, !tbaa !5
  %420 = sext i32 %419 to i64
  %421 = icmp sgt i32 %419, 0
  br i1 %417, label %.preheader528, label %.preheader531

.preheader531:                                    ; preds = %415
  br i1 %421, label %.lr.ph680, label %.loopexit

.lr.ph680:                                        ; preds = %.preheader531
  %422 = getelementptr inbounds i8, ptr %1, i64 8
  %423 = load ptr, ptr %422, align 8, !tbaa !25
  %424 = load ptr, ptr %1, align 8, !tbaa !26
  %425 = getelementptr inbounds i8, ptr %0, i64 16
  %426 = load ptr, ptr %425, align 8, !tbaa !27
  %427 = getelementptr inbounds i8, ptr %2, i64 16
  %428 = getelementptr inbounds i8, ptr %0, i64 24
  %429 = getelementptr inbounds i8, ptr %2, i64 8
  %430 = sext i32 %3 to i64
  %431 = icmp sgt i32 %3, 0
  %432 = getelementptr inbounds i8, ptr %0, i64 40
  %433 = sext i32 %6 to i64
  %434 = sext i32 %9 to i64
  %435 = shl nsw i64 %430, 3
  %scevgep1064 = getelementptr i8, ptr %8, i64 %435
  %scevgep1068 = getelementptr i8, ptr %5, i64 %435
  %min.iters.check1079 = icmp ult i32 %3, 6
  %ident.check1061 = icmp ne i32 %9, 1
  %ident.check1062 = icmp ne i32 %6, 1
  %436 = or i1 %ident.check1061, %ident.check1062
  %n.vec1082 = and i64 %430, 2147483644
  %broadcast.splatinsert1088 = insertelement <2 x double> poison, double %4, i64 0
  %broadcast.splat1089 = shufflevector <2 x double> %broadcast.splatinsert1088, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n1097 = icmp eq i64 %n.vec1082, %430
  %xtraiter1324 = and i64 %430, 1
  %lcmp.mod1325.not = icmp eq i64 %xtraiter1324, 0
  %437 = add nsw i64 %430, -1
  br label %534

.preheader528:                                    ; preds = %415
  br i1 %421, label %.lr.ph694, label %.loopexit

.lr.ph694:                                        ; preds = %.preheader528
  %438 = getelementptr inbounds i8, ptr %1, i64 8
  %439 = load ptr, ptr %438, align 8, !tbaa !25
  %440 = load ptr, ptr %1, align 8, !tbaa !26
  %441 = getelementptr inbounds i8, ptr %0, i64 16
  %442 = load ptr, ptr %441, align 8, !tbaa !27
  %443 = getelementptr inbounds i8, ptr %2, i64 16
  %444 = getelementptr inbounds i8, ptr %0, i64 24
  %445 = getelementptr inbounds i8, ptr %2, i64 8
  %446 = sext i32 %3 to i64
  %447 = icmp sgt i32 %3, 0
  %448 = getelementptr inbounds i8, ptr %0, i64 40
  %449 = sext i32 %6 to i64
  %450 = sext i32 %9 to i64
  %451 = shl nsw i64 %446, 3
  %scevgep1102 = getelementptr i8, ptr %8, i64 %451
  %scevgep1106 = getelementptr i8, ptr %5, i64 %451
  %min.iters.check1117 = icmp ult i32 %3, 8
  %ident.check1099 = icmp ne i32 %9, 1
  %ident.check1100 = icmp ne i32 %6, 1
  %452 = or i1 %ident.check1099, %ident.check1100
  %n.vec1120 = and i64 %446, 2147483644
  %cmp.n1133 = icmp eq i64 %n.vec1120, %446
  %xtraiter1326 = and i64 %446, 1
  %lcmp.mod1327.not = icmp eq i64 %xtraiter1326, 0
  %453 = add nsw i64 %446, -1
  br label %454

454:                                              ; preds = %.lr.ph694, %.critedge2
  %.4693 = phi i64 [ 0, %.lr.ph694 ], [ %533, %.critedge2 ]
  %455 = getelementptr inbounds i32, ptr %439, i64 %.4693
  %456 = load i32, ptr %455, align 4, !tbaa !29
  %457 = sext i32 %456 to i64
  %458 = getelementptr inbounds i32, ptr %440, i64 %457
  %459 = load i32, ptr %458, align 4, !tbaa !29
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds i32, ptr %442, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !29
  %463 = getelementptr i8, ptr %461, i64 4
  %464 = load i32, ptr %463, align 4, !tbaa !29
  %465 = sext i32 %464 to i64
  %466 = icmp slt i32 %462, %464
  br i1 %466, label %.lr.ph689, label %.critedge2

.lr.ph689:                                        ; preds = %454
  %467 = load i32, ptr %443, align 8, !tbaa !5
  %468 = sext i32 %467 to i64
  %469 = load ptr, ptr %444, align 8
  %invariant.gep682 = getelementptr double, ptr %8, i64 %457
  %470 = load ptr, ptr %448, align 8
  br i1 %447, label %.lr.ph689.split.us.preheader, label %.critedge2

.lr.ph689.split.us.preheader:                     ; preds = %.lr.ph689
  %471 = sext i32 %462 to i64
  %472 = shl nsw i64 %457, 3
  %scevgep1103 = getelementptr i8, ptr %scevgep1102, i64 %472
  %scevgep1104 = getelementptr i8, ptr %470, i64 8
  br label %.lr.ph689.split.us

.lr.ph689.split.us:                               ; preds = %.lr.ph689.split.us.preheader, %491
  %.8481687.us = phi i64 [ %.9482.us, %491 ], [ %471, %.lr.ph689.split.us.preheader ]
  %.2493686.us = phi i64 [ %.3494.us, %491 ], [ 0, %.lr.ph689.split.us.preheader ]
  %473 = icmp slt i64 %.2493686.us, %468
  br i1 %473, label %474, label %.critedge2

474:                                              ; preds = %.lr.ph689.split.us
  %475 = getelementptr inbounds i32, ptr %469, i64 %.8481687.us
  %476 = load i32, ptr %475, align 4, !tbaa !29
  %477 = load ptr, ptr %2, align 8, !tbaa !26
  %478 = load ptr, ptr %445, align 8, !tbaa !25
  %479 = getelementptr inbounds i32, ptr %478, i64 %.2493686.us
  %480 = load i32, ptr %479, align 4, !tbaa !29
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds i32, ptr %477, i64 %481
  %483 = load i32, ptr %482, align 4, !tbaa !29
  %484 = icmp eq i32 %476, %483
  br i1 %484, label %.preheader527.us, label %485

485:                                              ; preds = %474
  %486 = icmp sgt i32 %476, %483
  br i1 %486, label %489, label %487

487:                                              ; preds = %485
  %488 = add nsw i64 %.8481687.us, 1
  br label %491

489:                                              ; preds = %485
  %490 = add nsw i64 %.2493686.us, 1
  br label %491

491:                                              ; preds = %._crit_edge.us692, %489, %487
  %.3494.us = phi i64 [ %532, %._crit_edge.us692 ], [ %490, %489 ], [ %.2493686.us, %487 ]
  %.9482.us = phi i64 [ %531, %._crit_edge.us692 ], [ %.8481687.us, %489 ], [ %488, %487 ]
  %492 = icmp slt i64 %.9482.us, %465
  br i1 %492, label %.lr.ph689.split.us, label %.critedge2, !llvm.loop !78

scalar.ph1116:                                    ; preds = %scalar.ph1116.prol.loopexit, %scalar.ph1116
  %.7468684.us = phi i64 [ %508, %scalar.ph1116 ], [ %.7468684.us.unr, %scalar.ph1116.prol.loopexit ]
  %493 = load double, ptr %509, align 8, !tbaa !11
  %494 = mul nsw i64 %.7468684.us, %449
  %gep.us691 = getelementptr double, ptr %invariant.gep681.us, i64 %494
  %495 = load double, ptr %gep.us691, align 8, !tbaa !11
  %496 = mul nsw i64 %.7468684.us, %450
  %gep683.us = getelementptr double, ptr %invariant.gep682, i64 %496
  %497 = load double, ptr %gep683.us, align 8, !tbaa !11
  %498 = fneg double %493
  %499 = tail call double @llvm.fmuladd.f64(double %498, double %495, double %497)
  store double %499, ptr %gep683.us, align 8, !tbaa !11
  %500 = add nuw nsw i64 %.7468684.us, 1
  %501 = load double, ptr %509, align 8, !tbaa !11
  %502 = mul nsw i64 %500, %449
  %gep.us691.1 = getelementptr double, ptr %invariant.gep681.us, i64 %502
  %503 = load double, ptr %gep.us691.1, align 8, !tbaa !11
  %504 = mul nsw i64 %500, %450
  %gep683.us.1 = getelementptr double, ptr %invariant.gep682, i64 %504
  %505 = load double, ptr %gep683.us.1, align 8, !tbaa !11
  %506 = fneg double %501
  %507 = tail call double @llvm.fmuladd.f64(double %506, double %503, double %505)
  store double %507, ptr %gep683.us.1, align 8, !tbaa !11
  %508 = add nuw nsw i64 %.7468684.us, 2
  %exitcond802.not.1 = icmp eq i64 %508, %446
  br i1 %exitcond802.not.1, label %._crit_edge.us692, label %scalar.ph1116, !llvm.loop !79

.preheader527.us:                                 ; preds = %474
  %invariant.gep681.us = getelementptr double, ptr %5, i64 %481
  %509 = getelementptr inbounds double, ptr %470, i64 %.8481687.us
  %brmerge1342 = or i1 %min.iters.check1117, %452
  br i1 %brmerge1342, label %scalar.ph1116.preheader, label %vector.memcheck1101

scalar.ph1116.preheader:                          ; preds = %.preheader527.us, %middle.block1115, %vector.memcheck1101
  %.7468684.us.ph = phi i64 [ 0, %vector.memcheck1101 ], [ 0, %.preheader527.us ], [ %n.vec1120, %middle.block1115 ]
  br i1 %lcmp.mod1327.not, label %scalar.ph1116.prol.loopexit, label %scalar.ph1116.prol

scalar.ph1116.prol:                               ; preds = %scalar.ph1116.preheader
  %510 = load double, ptr %509, align 8, !tbaa !11
  %511 = mul nsw i64 %.7468684.us.ph, %449
  %gep.us691.prol = getelementptr double, ptr %invariant.gep681.us, i64 %511
  %512 = load double, ptr %gep.us691.prol, align 8, !tbaa !11
  %513 = mul nsw i64 %.7468684.us.ph, %450
  %gep683.us.prol = getelementptr double, ptr %invariant.gep682, i64 %513
  %514 = load double, ptr %gep683.us.prol, align 8, !tbaa !11
  %515 = fneg double %510
  %516 = tail call double @llvm.fmuladd.f64(double %515, double %512, double %514)
  store double %516, ptr %gep683.us.prol, align 8, !tbaa !11
  %517 = or disjoint i64 %.7468684.us.ph, 1
  br label %scalar.ph1116.prol.loopexit

scalar.ph1116.prol.loopexit:                      ; preds = %scalar.ph1116.prol, %scalar.ph1116.preheader
  %.7468684.us.unr = phi i64 [ %.7468684.us.ph, %scalar.ph1116.preheader ], [ %517, %scalar.ph1116.prol ]
  %518 = icmp eq i64 %.7468684.us.ph, %453
  br i1 %518, label %._crit_edge.us692, label %scalar.ph1116

vector.memcheck1101:                              ; preds = %.preheader527.us
  %519 = shl i64 %.8481687.us, 3
  %scevgep1105 = getelementptr i8, ptr %scevgep1104, i64 %519
  %520 = shl nsw i64 %481, 3
  %scevgep1107 = getelementptr i8, ptr %scevgep1106, i64 %520
  %bound01108 = icmp ult ptr %invariant.gep682, %scevgep1105
  %bound11109 = icmp ult ptr %509, %scevgep1103
  %found.conflict1110 = and i1 %bound01108, %bound11109
  %bound01111 = icmp ult ptr %invariant.gep682, %scevgep1107
  %bound11112 = icmp ult ptr %invariant.gep681.us, %scevgep1103
  %found.conflict1113 = and i1 %bound01111, %bound11112
  %conflict.rdx1114 = or i1 %found.conflict1110, %found.conflict1113
  br i1 %conflict.rdx1114, label %scalar.ph1116.preheader, label %vector.ph1118

vector.ph1118:                                    ; preds = %vector.memcheck1101
  %521 = load double, ptr %509, align 8, !tbaa !11, !alias.scope !80
  %broadcast.splatinsert1130 = insertelement <2 x double> poison, double %521, i64 0
  %broadcast.splat1131 = shufflevector <2 x double> %broadcast.splatinsert1130, <2 x double> poison, <2 x i32> zeroinitializer
  %522 = fneg <2 x double> %broadcast.splat1131
  %523 = fneg <2 x double> %broadcast.splat1131
  br label %vector.body1122

vector.body1122:                                  ; preds = %vector.body1122, %vector.ph1118
  %index1123 = phi i64 [ 0, %vector.ph1118 ], [ %index.next1132, %vector.body1122 ]
  %524 = getelementptr double, ptr %invariant.gep681.us, i64 %index1123
  %525 = getelementptr i8, ptr %524, i64 16
  %wide.load1124 = load <2 x double>, ptr %524, align 8, !tbaa !11, !alias.scope !83
  %wide.load1125 = load <2 x double>, ptr %525, align 8, !tbaa !11, !alias.scope !83
  %526 = getelementptr double, ptr %invariant.gep682, i64 %index1123
  %527 = getelementptr i8, ptr %526, i64 16
  %wide.load1126 = load <2 x double>, ptr %526, align 8, !tbaa !11, !alias.scope !85, !noalias !87
  %wide.load1127 = load <2 x double>, ptr %527, align 8, !tbaa !11, !alias.scope !85, !noalias !87
  %528 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %522, <2 x double> %wide.load1124, <2 x double> %wide.load1126)
  %529 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %523, <2 x double> %wide.load1125, <2 x double> %wide.load1127)
  store <2 x double> %528, ptr %526, align 8, !tbaa !11, !alias.scope !85, !noalias !87
  store <2 x double> %529, ptr %527, align 8, !tbaa !11, !alias.scope !85, !noalias !87
  %index.next1132 = add nuw i64 %index1123, 4
  %530 = icmp eq i64 %index.next1132, %n.vec1120
  br i1 %530, label %middle.block1115, label %vector.body1122, !llvm.loop !88

middle.block1115:                                 ; preds = %vector.body1122
  br i1 %cmp.n1133, label %._crit_edge.us692, label %scalar.ph1116.preheader

._crit_edge.us692:                                ; preds = %scalar.ph1116.prol.loopexit, %scalar.ph1116, %middle.block1115
  %531 = add nsw i64 %.8481687.us, 1
  %532 = add nsw i64 %.2493686.us, 1
  br label %491

.critedge2:                                       ; preds = %491, %.lr.ph689.split.us, %.lr.ph689, %454
  %533 = add nuw nsw i64 %.4693, 1
  %exitcond803.not = icmp eq i64 %533, %420
  br i1 %exitcond803.not, label %.loopexit, label %454, !llvm.loop !89

534:                                              ; preds = %.lr.ph680, %.critedge4
  %.5679 = phi i64 [ 0, %.lr.ph680 ], [ %613, %.critedge4 ]
  %535 = getelementptr inbounds i32, ptr %423, i64 %.5679
  %536 = load i32, ptr %535, align 4, !tbaa !29
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds i32, ptr %424, i64 %537
  %539 = load i32, ptr %538, align 4, !tbaa !29
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds i32, ptr %426, i64 %540
  %542 = load i32, ptr %541, align 4, !tbaa !29
  %543 = getelementptr i8, ptr %541, i64 4
  %544 = load i32, ptr %543, align 4, !tbaa !29
  %545 = sext i32 %544 to i64
  %546 = icmp slt i32 %542, %544
  br i1 %546, label %.lr.ph675, label %.critedge4

.lr.ph675:                                        ; preds = %534
  %547 = load i32, ptr %427, align 8, !tbaa !5
  %548 = sext i32 %547 to i64
  %549 = load ptr, ptr %428, align 8
  %invariant.gep668 = getelementptr double, ptr %8, i64 %537
  %550 = load ptr, ptr %432, align 8
  br i1 %431, label %.lr.ph675.split.us.preheader, label %.critedge4

.lr.ph675.split.us.preheader:                     ; preds = %.lr.ph675
  %551 = sext i32 %542 to i64
  %552 = shl nsw i64 %537, 3
  %scevgep1065 = getelementptr i8, ptr %scevgep1064, i64 %552
  %scevgep1066 = getelementptr i8, ptr %550, i64 8
  br label %.lr.ph675.split.us

.lr.ph675.split.us:                               ; preds = %.lr.ph675.split.us.preheader, %571
  %.10483673.us = phi i64 [ %.11484.us, %571 ], [ %551, %.lr.ph675.split.us.preheader ]
  %.4495672.us = phi i64 [ %.5496.us, %571 ], [ 0, %.lr.ph675.split.us.preheader ]
  %553 = icmp slt i64 %.4495672.us, %548
  br i1 %553, label %554, label %.critedge4

554:                                              ; preds = %.lr.ph675.split.us
  %555 = getelementptr inbounds i32, ptr %549, i64 %.10483673.us
  %556 = load i32, ptr %555, align 4, !tbaa !29
  %557 = load ptr, ptr %2, align 8, !tbaa !26
  %558 = load ptr, ptr %429, align 8, !tbaa !25
  %559 = getelementptr inbounds i32, ptr %558, i64 %.4495672.us
  %560 = load i32, ptr %559, align 4, !tbaa !29
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds i32, ptr %557, i64 %561
  %563 = load i32, ptr %562, align 4, !tbaa !29
  %564 = icmp eq i32 %556, %563
  br i1 %564, label %.preheader530.us, label %565

565:                                              ; preds = %554
  %566 = icmp sgt i32 %556, %563
  br i1 %566, label %569, label %567

567:                                              ; preds = %565
  %568 = add nsw i64 %.10483673.us, 1
  br label %571

569:                                              ; preds = %565
  %570 = add nsw i64 %.4495672.us, 1
  br label %571

571:                                              ; preds = %._crit_edge.us678, %569, %567
  %.5496.us = phi i64 [ %612, %._crit_edge.us678 ], [ %570, %569 ], [ %.4495672.us, %567 ]
  %.11484.us = phi i64 [ %611, %._crit_edge.us678 ], [ %.10483673.us, %569 ], [ %568, %567 ]
  %572 = icmp slt i64 %.11484.us, %545
  br i1 %572, label %.lr.ph675.split.us, label %.critedge4, !llvm.loop !90

scalar.ph1078:                                    ; preds = %scalar.ph1078.prol.loopexit, %scalar.ph1078
  %.8469670.us = phi i64 [ %588, %scalar.ph1078 ], [ %.8469670.us.unr, %scalar.ph1078.prol.loopexit ]
  %573 = load double, ptr %589, align 8, !tbaa !11
  %574 = fmul double %573, %4
  %575 = mul nsw i64 %.8469670.us, %433
  %gep.us677 = getelementptr double, ptr %invariant.gep667.us, i64 %575
  %576 = load double, ptr %gep.us677, align 8, !tbaa !11
  %577 = mul nsw i64 %.8469670.us, %434
  %gep669.us = getelementptr double, ptr %invariant.gep668, i64 %577
  %578 = load double, ptr %gep669.us, align 8, !tbaa !11
  %579 = tail call double @llvm.fmuladd.f64(double %574, double %576, double %578)
  store double %579, ptr %gep669.us, align 8, !tbaa !11
  %580 = add nuw nsw i64 %.8469670.us, 1
  %581 = load double, ptr %589, align 8, !tbaa !11
  %582 = fmul double %581, %4
  %583 = mul nsw i64 %580, %433
  %gep.us677.1 = getelementptr double, ptr %invariant.gep667.us, i64 %583
  %584 = load double, ptr %gep.us677.1, align 8, !tbaa !11
  %585 = mul nsw i64 %580, %434
  %gep669.us.1 = getelementptr double, ptr %invariant.gep668, i64 %585
  %586 = load double, ptr %gep669.us.1, align 8, !tbaa !11
  %587 = tail call double @llvm.fmuladd.f64(double %582, double %584, double %586)
  store double %587, ptr %gep669.us.1, align 8, !tbaa !11
  %588 = add nuw nsw i64 %.8469670.us, 2
  %exitcond800.not.1 = icmp eq i64 %588, %430
  br i1 %exitcond800.not.1, label %._crit_edge.us678, label %scalar.ph1078, !llvm.loop !91

.preheader530.us:                                 ; preds = %554
  %invariant.gep667.us = getelementptr double, ptr %5, i64 %561
  %589 = getelementptr inbounds double, ptr %550, i64 %.10483673.us
  %brmerge1343 = or i1 %min.iters.check1079, %436
  br i1 %brmerge1343, label %scalar.ph1078.preheader, label %vector.memcheck1063

scalar.ph1078.preheader:                          ; preds = %.preheader530.us, %middle.block1077, %vector.memcheck1063
  %.8469670.us.ph = phi i64 [ 0, %vector.memcheck1063 ], [ 0, %.preheader530.us ], [ %n.vec1082, %middle.block1077 ]
  br i1 %lcmp.mod1325.not, label %scalar.ph1078.prol.loopexit, label %scalar.ph1078.prol

scalar.ph1078.prol:                               ; preds = %scalar.ph1078.preheader
  %590 = load double, ptr %589, align 8, !tbaa !11
  %591 = fmul double %590, %4
  %592 = mul nsw i64 %.8469670.us.ph, %433
  %gep.us677.prol = getelementptr double, ptr %invariant.gep667.us, i64 %592
  %593 = load double, ptr %gep.us677.prol, align 8, !tbaa !11
  %594 = mul nsw i64 %.8469670.us.ph, %434
  %gep669.us.prol = getelementptr double, ptr %invariant.gep668, i64 %594
  %595 = load double, ptr %gep669.us.prol, align 8, !tbaa !11
  %596 = tail call double @llvm.fmuladd.f64(double %591, double %593, double %595)
  store double %596, ptr %gep669.us.prol, align 8, !tbaa !11
  %597 = or disjoint i64 %.8469670.us.ph, 1
  br label %scalar.ph1078.prol.loopexit

scalar.ph1078.prol.loopexit:                      ; preds = %scalar.ph1078.prol, %scalar.ph1078.preheader
  %.8469670.us.unr = phi i64 [ %.8469670.us.ph, %scalar.ph1078.preheader ], [ %597, %scalar.ph1078.prol ]
  %598 = icmp eq i64 %.8469670.us.ph, %437
  br i1 %598, label %._crit_edge.us678, label %scalar.ph1078

vector.memcheck1063:                              ; preds = %.preheader530.us
  %599 = shl i64 %.10483673.us, 3
  %scevgep1067 = getelementptr i8, ptr %scevgep1066, i64 %599
  %600 = shl nsw i64 %561, 3
  %scevgep1069 = getelementptr i8, ptr %scevgep1068, i64 %600
  %bound01070 = icmp ult ptr %invariant.gep668, %scevgep1067
  %bound11071 = icmp ult ptr %589, %scevgep1065
  %found.conflict1072 = and i1 %bound01070, %bound11071
  %bound01073 = icmp ult ptr %invariant.gep668, %scevgep1069
  %bound11074 = icmp ult ptr %invariant.gep667.us, %scevgep1065
  %found.conflict1075 = and i1 %bound01073, %bound11074
  %conflict.rdx1076 = or i1 %found.conflict1072, %found.conflict1075
  br i1 %conflict.rdx1076, label %scalar.ph1078.preheader, label %vector.ph1080

vector.ph1080:                                    ; preds = %vector.memcheck1063
  %601 = load double, ptr %589, align 8, !tbaa !11, !alias.scope !92
  %broadcast.splatinsert1090 = insertelement <2 x double> poison, double %601, i64 0
  %broadcast.splat1091 = shufflevector <2 x double> %broadcast.splatinsert1090, <2 x double> poison, <2 x i32> zeroinitializer
  %602 = fmul <2 x double> %broadcast.splat1091, %broadcast.splat1089
  %603 = fmul <2 x double> %broadcast.splat1091, %broadcast.splat1089
  br label %vector.body1084

vector.body1084:                                  ; preds = %vector.body1084, %vector.ph1080
  %index1085 = phi i64 [ 0, %vector.ph1080 ], [ %index.next1096, %vector.body1084 ]
  %604 = getelementptr double, ptr %invariant.gep667.us, i64 %index1085
  %605 = getelementptr i8, ptr %604, i64 16
  %wide.load1092 = load <2 x double>, ptr %604, align 8, !tbaa !11, !alias.scope !95
  %wide.load1093 = load <2 x double>, ptr %605, align 8, !tbaa !11, !alias.scope !95
  %606 = getelementptr double, ptr %invariant.gep668, i64 %index1085
  %607 = getelementptr i8, ptr %606, i64 16
  %wide.load1094 = load <2 x double>, ptr %606, align 8, !tbaa !11, !alias.scope !97, !noalias !99
  %wide.load1095 = load <2 x double>, ptr %607, align 8, !tbaa !11, !alias.scope !97, !noalias !99
  %608 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %602, <2 x double> %wide.load1092, <2 x double> %wide.load1094)
  %609 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %603, <2 x double> %wide.load1093, <2 x double> %wide.load1095)
  store <2 x double> %608, ptr %606, align 8, !tbaa !11, !alias.scope !97, !noalias !99
  store <2 x double> %609, ptr %607, align 8, !tbaa !11, !alias.scope !97, !noalias !99
  %index.next1096 = add nuw i64 %index1085, 4
  %610 = icmp eq i64 %index.next1096, %n.vec1082
  br i1 %610, label %middle.block1077, label %vector.body1084, !llvm.loop !100

middle.block1077:                                 ; preds = %vector.body1084
  br i1 %cmp.n1097, label %._crit_edge.us678, label %scalar.ph1078.preheader

._crit_edge.us678:                                ; preds = %scalar.ph1078.prol.loopexit, %scalar.ph1078, %middle.block1077
  %611 = add nsw i64 %.10483673.us, 1
  %612 = add nsw i64 %.4495672.us, 1
  br label %571

.critedge4:                                       ; preds = %571, %.lr.ph675.split.us, %.lr.ph675, %534
  %613 = add nuw nsw i64 %.5679, 1
  %exitcond801.not = icmp eq i64 %613, %420
  br i1 %exitcond801.not, label %.loopexit, label %534, !llvm.loop !101

614:                                              ; preds = %11
  br i1 %14, label %.preheader561, label %652

.preheader561:                                    ; preds = %614
  %615 = sext i32 %3 to i64
  %616 = icmp sgt i32 %3, 0
  br i1 %616, label %.preheader560.lr.ph, label %.loopexit562

.preheader560.lr.ph:                              ; preds = %.preheader561
  %617 = getelementptr inbounds i8, ptr %1, i64 16
  %618 = load i32, ptr %617, align 8, !tbaa !5
  %619 = sext i32 %618 to i64
  %620 = icmp sgt i32 %618, 0
  %621 = sext i32 %9 to i64
  br i1 %620, label %.preheader560.lr.ph.split.us, label %.loopexit562

.preheader560.lr.ph.split.us:                     ; preds = %.preheader560.lr.ph
  %622 = load ptr, ptr %1, align 8, !tbaa !26
  %xtraiter1302 = and i64 %619, 3
  %623 = icmp ult i32 %618, 4
  %unroll_iter1305 = and i64 %619, 2147483644
  %lcmp.mod1304.not = icmp eq i64 %xtraiter1302, 0
  br label %.preheader560.us

.preheader560.us:                                 ; preds = %._crit_edge.us576, %.preheader560.lr.ph.split.us
  %.9470575.us = phi i64 [ 0, %.preheader560.lr.ph.split.us ], [ %651, %._crit_edge.us576 ]
  %624 = mul nsw i64 %.9470575.us, %621
  %625 = getelementptr double, ptr %8, i64 %624
  br i1 %623, label %._crit_edge.us576.unr-lcssa, label %.preheader560.us.new

.preheader560.us.new:                             ; preds = %.preheader560.us, %.preheader560.us.new
  %.12485574.us = phi i64 [ %645, %.preheader560.us.new ], [ 0, %.preheader560.us ]
  %niter1306 = phi i64 [ %niter1306.next.3, %.preheader560.us.new ], [ 0, %.preheader560.us ]
  %626 = getelementptr inbounds i32, ptr %622, i64 %.12485574.us
  %627 = load i32, ptr %626, align 4, !tbaa !29
  %628 = sext i32 %627 to i64
  %629 = getelementptr double, ptr %625, i64 %628
  store double 0.000000e+00, ptr %629, align 8, !tbaa !11
  %630 = or disjoint i64 %.12485574.us, 1
  %631 = getelementptr inbounds i32, ptr %622, i64 %630
  %632 = load i32, ptr %631, align 4, !tbaa !29
  %633 = sext i32 %632 to i64
  %634 = getelementptr double, ptr %625, i64 %633
  store double 0.000000e+00, ptr %634, align 8, !tbaa !11
  %635 = or disjoint i64 %.12485574.us, 2
  %636 = getelementptr inbounds i32, ptr %622, i64 %635
  %637 = load i32, ptr %636, align 4, !tbaa !29
  %638 = sext i32 %637 to i64
  %639 = getelementptr double, ptr %625, i64 %638
  store double 0.000000e+00, ptr %639, align 8, !tbaa !11
  %640 = or disjoint i64 %.12485574.us, 3
  %641 = getelementptr inbounds i32, ptr %622, i64 %640
  %642 = load i32, ptr %641, align 4, !tbaa !29
  %643 = sext i32 %642 to i64
  %644 = getelementptr double, ptr %625, i64 %643
  store double 0.000000e+00, ptr %644, align 8, !tbaa !11
  %645 = add nuw nsw i64 %.12485574.us, 4
  %niter1306.next.3 = add i64 %niter1306, 4
  %niter1306.ncmp.3 = icmp eq i64 %niter1306.next.3, %unroll_iter1305
  br i1 %niter1306.ncmp.3, label %._crit_edge.us576.unr-lcssa, label %.preheader560.us.new, !llvm.loop !102

._crit_edge.us576.unr-lcssa:                      ; preds = %.preheader560.us.new, %.preheader560.us
  %.12485574.us.unr = phi i64 [ 0, %.preheader560.us ], [ %645, %.preheader560.us.new ]
  br i1 %lcmp.mod1304.not, label %._crit_edge.us576, label %.epil.preheader1301

.epil.preheader1301:                              ; preds = %._crit_edge.us576.unr-lcssa, %.epil.preheader1301
  %.12485574.us.epil = phi i64 [ %650, %.epil.preheader1301 ], [ %.12485574.us.unr, %._crit_edge.us576.unr-lcssa ]
  %epil.iter1303 = phi i64 [ %epil.iter1303.next, %.epil.preheader1301 ], [ 0, %._crit_edge.us576.unr-lcssa ]
  %646 = getelementptr inbounds i32, ptr %622, i64 %.12485574.us.epil
  %647 = load i32, ptr %646, align 4, !tbaa !29
  %648 = sext i32 %647 to i64
  %649 = getelementptr double, ptr %625, i64 %648
  store double 0.000000e+00, ptr %649, align 8, !tbaa !11
  %650 = add nuw nsw i64 %.12485574.us.epil, 1
  %epil.iter1303.next = add i64 %epil.iter1303, 1
  %epil.iter1303.cmp.not = icmp eq i64 %epil.iter1303.next, %xtraiter1302
  br i1 %epil.iter1303.cmp.not, label %._crit_edge.us576, label %.epil.preheader1301, !llvm.loop !103

._crit_edge.us576:                                ; preds = %.epil.preheader1301, %._crit_edge.us576.unr-lcssa
  %651 = add nuw nsw i64 %.9470575.us, 1
  %exitcond779.not = icmp eq i64 %651, %615
  br i1 %exitcond779.not, label %.loopexit562, label %.preheader560.us, !llvm.loop !104

652:                                              ; preds = %614
  %653 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %654 = icmp eq i32 %653, 1
  br i1 %654, label %.preheader564, label %701

.preheader564:                                    ; preds = %652
  %655 = sext i32 %3 to i64
  %656 = icmp sgt i32 %3, 0
  br i1 %656, label %.preheader563.lr.ph, label %.loopexit562

.preheader563.lr.ph:                              ; preds = %.preheader564
  %657 = getelementptr inbounds i8, ptr %1, i64 16
  %658 = load i32, ptr %657, align 8, !tbaa !5
  %659 = sext i32 %658 to i64
  %660 = icmp sgt i32 %658, 0
  %661 = sext i32 %9 to i64
  br i1 %660, label %.preheader563.lr.ph.split.us, label %.loopexit562

.preheader563.lr.ph.split.us:                     ; preds = %.preheader563.lr.ph
  %662 = load ptr, ptr %1, align 8, !tbaa !26
  %xtraiter1296 = and i64 %659, 3
  %663 = icmp ult i32 %658, 4
  %unroll_iter1299 = and i64 %659, 2147483644
  %lcmp.mod1298.not = icmp eq i64 %xtraiter1296, 0
  br label %.preheader563.us

.preheader563.us:                                 ; preds = %._crit_edge.us573, %.preheader563.lr.ph.split.us
  %.10471572.us = phi i64 [ 0, %.preheader563.lr.ph.split.us ], [ %700, %._crit_edge.us573 ]
  %664 = mul nsw i64 %.10471572.us, %661
  %invariant.gep.us = getelementptr double, ptr %8, i64 %664
  br i1 %663, label %._crit_edge.us573.unr-lcssa, label %.preheader563.us.new

.preheader563.us.new:                             ; preds = %.preheader563.us, %.preheader563.us.new
  %.13486571.us = phi i64 [ %692, %.preheader563.us.new ], [ 0, %.preheader563.us ]
  %niter1300 = phi i64 [ %niter1300.next.3, %.preheader563.us.new ], [ 0, %.preheader563.us ]
  %gep.us = getelementptr double, ptr %invariant.gep.us, i64 %.13486571.us
  %665 = load double, ptr %gep.us, align 8, !tbaa !11
  %666 = fneg double %665
  %667 = getelementptr inbounds i32, ptr %662, i64 %.13486571.us
  %668 = load i32, ptr %667, align 4, !tbaa !29
  %669 = sext i32 %668 to i64
  %670 = getelementptr double, ptr %invariant.gep.us, i64 %669
  store double %666, ptr %670, align 8, !tbaa !11
  %671 = or disjoint i64 %.13486571.us, 1
  %gep.us.1 = getelementptr double, ptr %invariant.gep.us, i64 %671
  %672 = load double, ptr %gep.us.1, align 8, !tbaa !11
  %673 = fneg double %672
  %674 = getelementptr inbounds i32, ptr %662, i64 %671
  %675 = load i32, ptr %674, align 4, !tbaa !29
  %676 = sext i32 %675 to i64
  %677 = getelementptr double, ptr %invariant.gep.us, i64 %676
  store double %673, ptr %677, align 8, !tbaa !11
  %678 = or disjoint i64 %.13486571.us, 2
  %gep.us.2 = getelementptr double, ptr %invariant.gep.us, i64 %678
  %679 = load double, ptr %gep.us.2, align 8, !tbaa !11
  %680 = fneg double %679
  %681 = getelementptr inbounds i32, ptr %662, i64 %678
  %682 = load i32, ptr %681, align 4, !tbaa !29
  %683 = sext i32 %682 to i64
  %684 = getelementptr double, ptr %invariant.gep.us, i64 %683
  store double %680, ptr %684, align 8, !tbaa !11
  %685 = or disjoint i64 %.13486571.us, 3
  %gep.us.3 = getelementptr double, ptr %invariant.gep.us, i64 %685
  %686 = load double, ptr %gep.us.3, align 8, !tbaa !11
  %687 = fneg double %686
  %688 = getelementptr inbounds i32, ptr %662, i64 %685
  %689 = load i32, ptr %688, align 4, !tbaa !29
  %690 = sext i32 %689 to i64
  %691 = getelementptr double, ptr %invariant.gep.us, i64 %690
  store double %687, ptr %691, align 8, !tbaa !11
  %692 = add nuw nsw i64 %.13486571.us, 4
  %niter1300.next.3 = add i64 %niter1300, 4
  %niter1300.ncmp.3 = icmp eq i64 %niter1300.next.3, %unroll_iter1299
  br i1 %niter1300.ncmp.3, label %._crit_edge.us573.unr-lcssa, label %.preheader563.us.new, !llvm.loop !105

._crit_edge.us573.unr-lcssa:                      ; preds = %.preheader563.us.new, %.preheader563.us
  %.13486571.us.unr = phi i64 [ 0, %.preheader563.us ], [ %692, %.preheader563.us.new ]
  br i1 %lcmp.mod1298.not, label %._crit_edge.us573, label %.epil.preheader1295

.epil.preheader1295:                              ; preds = %._crit_edge.us573.unr-lcssa, %.epil.preheader1295
  %.13486571.us.epil = phi i64 [ %699, %.epil.preheader1295 ], [ %.13486571.us.unr, %._crit_edge.us573.unr-lcssa ]
  %epil.iter1297 = phi i64 [ %epil.iter1297.next, %.epil.preheader1295 ], [ 0, %._crit_edge.us573.unr-lcssa ]
  %gep.us.epil = getelementptr double, ptr %invariant.gep.us, i64 %.13486571.us.epil
  %693 = load double, ptr %gep.us.epil, align 8, !tbaa !11
  %694 = fneg double %693
  %695 = getelementptr inbounds i32, ptr %662, i64 %.13486571.us.epil
  %696 = load i32, ptr %695, align 4, !tbaa !29
  %697 = sext i32 %696 to i64
  %698 = getelementptr double, ptr %invariant.gep.us, i64 %697
  store double %694, ptr %698, align 8, !tbaa !11
  %699 = add nuw nsw i64 %.13486571.us.epil, 1
  %epil.iter1297.next = add i64 %epil.iter1297, 1
  %epil.iter1297.cmp.not = icmp eq i64 %epil.iter1297.next, %xtraiter1296
  br i1 %epil.iter1297.cmp.not, label %._crit_edge.us573, label %.epil.preheader1295, !llvm.loop !106

._crit_edge.us573:                                ; preds = %.epil.preheader1295, %._crit_edge.us573.unr-lcssa
  %700 = add nuw nsw i64 %.10471572.us, 1
  %exitcond777.not = icmp eq i64 %700, %655
  br i1 %exitcond777.not, label %.loopexit562, label %.preheader563.us, !llvm.loop !107

701:                                              ; preds = %652
  %702 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %7, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %703 = icmp eq i32 %702, 0
  br i1 %703, label %.preheader567, label %.loopexit562

.preheader567:                                    ; preds = %701
  %704 = sext i32 %3 to i64
  %705 = icmp sgt i32 %3, 0
  br i1 %705, label %.preheader566.lr.ph, label %.loopexit562

.preheader566.lr.ph:                              ; preds = %.preheader567
  %706 = getelementptr inbounds i8, ptr %1, i64 16
  %707 = load i32, ptr %706, align 8, !tbaa !5
  %708 = sext i32 %707 to i64
  %709 = icmp sgt i32 %707, 0
  %710 = sext i32 %9 to i64
  br i1 %709, label %.preheader566.lr.ph.split.us, label %.loopexit562

.preheader566.lr.ph.split.us:                     ; preds = %.preheader566.lr.ph
  %711 = load ptr, ptr %1, align 8, !tbaa !26
  %xtraiter = and i64 %708, 3
  %712 = icmp ult i32 %707, 4
  %unroll_iter = and i64 %708, 2147483644
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader566.us

.preheader566.us:                                 ; preds = %._crit_edge.us, %.preheader566.lr.ph.split.us
  %.11472570.us = phi i64 [ 0, %.preheader566.lr.ph.split.us ], [ %750, %._crit_edge.us ]
  %713 = mul nsw i64 %.11472570.us, %710
  %714 = getelementptr double, ptr %8, i64 %713
  br i1 %712, label %._crit_edge.us.unr-lcssa, label %.preheader566.us.new

.preheader566.us.new:                             ; preds = %.preheader566.us, %.preheader566.us.new
  %.14487569.us = phi i64 [ %742, %.preheader566.us.new ], [ 0, %.preheader566.us ]
  %niter = phi i64 [ %niter.next.3, %.preheader566.us.new ], [ 0, %.preheader566.us ]
  %715 = getelementptr inbounds i32, ptr %711, i64 %.14487569.us
  %716 = load i32, ptr %715, align 4, !tbaa !29
  %717 = sext i32 %716 to i64
  %718 = getelementptr double, ptr %714, i64 %717
  %719 = load double, ptr %718, align 8, !tbaa !11
  %720 = fmul double %719, %7
  store double %720, ptr %718, align 8, !tbaa !11
  %721 = or disjoint i64 %.14487569.us, 1
  %722 = getelementptr inbounds i32, ptr %711, i64 %721
  %723 = load i32, ptr %722, align 4, !tbaa !29
  %724 = sext i32 %723 to i64
  %725 = getelementptr double, ptr %714, i64 %724
  %726 = load double, ptr %725, align 8, !tbaa !11
  %727 = fmul double %726, %7
  store double %727, ptr %725, align 8, !tbaa !11
  %728 = or disjoint i64 %.14487569.us, 2
  %729 = getelementptr inbounds i32, ptr %711, i64 %728
  %730 = load i32, ptr %729, align 4, !tbaa !29
  %731 = sext i32 %730 to i64
  %732 = getelementptr double, ptr %714, i64 %731
  %733 = load double, ptr %732, align 8, !tbaa !11
  %734 = fmul double %733, %7
  store double %734, ptr %732, align 8, !tbaa !11
  %735 = or disjoint i64 %.14487569.us, 3
  %736 = getelementptr inbounds i32, ptr %711, i64 %735
  %737 = load i32, ptr %736, align 4, !tbaa !29
  %738 = sext i32 %737 to i64
  %739 = getelementptr double, ptr %714, i64 %738
  %740 = load double, ptr %739, align 8, !tbaa !11
  %741 = fmul double %740, %7
  store double %741, ptr %739, align 8, !tbaa !11
  %742 = add nuw nsw i64 %.14487569.us, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.us.unr-lcssa, label %.preheader566.us.new, !llvm.loop !108

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader566.us.new, %.preheader566.us
  %.14487569.us.unr = phi i64 [ 0, %.preheader566.us ], [ %742, %.preheader566.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.us.unr-lcssa, %.epil.preheader
  %.14487569.us.epil = phi i64 [ %749, %.epil.preheader ], [ %.14487569.us.unr, %._crit_edge.us.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.us.unr-lcssa ]
  %743 = getelementptr inbounds i32, ptr %711, i64 %.14487569.us.epil
  %744 = load i32, ptr %743, align 4, !tbaa !29
  %745 = sext i32 %744 to i64
  %746 = getelementptr double, ptr %714, i64 %745
  %747 = load double, ptr %746, align 8, !tbaa !11
  %748 = fmul double %747, %7
  store double %748, ptr %746, align 8, !tbaa !11
  %749 = add nuw nsw i64 %.14487569.us.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge.us, label %.epil.preheader, !llvm.loop !109

._crit_edge.us:                                   ; preds = %.epil.preheader, %._crit_edge.us.unr-lcssa
  %750 = add nuw nsw i64 %.11472570.us, 1
  %exitcond775.not = icmp eq i64 %750, %704
  br i1 %exitcond775.not, label %.loopexit562, label %.preheader566.us, !llvm.loop !110

.loopexit562:                                     ; preds = %._crit_edge.us, %._crit_edge.us573, %._crit_edge.us576, %.preheader566.lr.ph, %.preheader563.lr.ph, %.preheader560.lr.ph, %.preheader567, %.preheader564, %.preheader561, %701
  %751 = icmp eq ptr %2, null
  %752 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %4, double noundef 1.000000e+00, double noundef 1.000000e-25)
  %753 = icmp eq i32 %752, 1
  br i1 %751, label %754, label %986

754:                                              ; preds = %.loopexit562
  br i1 %753, label %.preheader543, label %829

.preheader543:                                    ; preds = %754
  %755 = getelementptr inbounds i8, ptr %1, i64 16
  %756 = load i32, ptr %755, align 8, !tbaa !5
  %757 = sext i32 %756 to i64
  %758 = icmp sgt i32 %756, 0
  br i1 %758, label %.lr.ph648, label %.loopexit

.lr.ph648:                                        ; preds = %.preheader543
  %759 = load ptr, ptr %1, align 8, !tbaa !26
  %760 = getelementptr inbounds i8, ptr %1, i64 8
  %761 = load ptr, ptr %760, align 8, !tbaa !25
  %762 = getelementptr inbounds i8, ptr %0, i64 16
  %763 = load ptr, ptr %762, align 8, !tbaa !27
  %764 = sext i32 %3 to i64
  %765 = icmp sgt i32 %3, 0
  %766 = getelementptr inbounds i8, ptr %0, i64 40
  %767 = sext i32 %6 to i64
  %768 = getelementptr inbounds i8, ptr %0, i64 24
  %769 = sext i32 %9 to i64
  %770 = shl nsw i64 %764, 3
  %scevgep1004 = getelementptr i8, ptr %8, i64 %770
  %scevgep1008 = getelementptr i8, ptr %5, i64 %770
  %min.iters.check1019 = icmp ult i32 %3, 8
  %ident.check1001 = icmp ne i32 %9, 1
  %ident.check1002 = icmp ne i32 %6, 1
  %771 = or i1 %ident.check1001, %ident.check1002
  %n.vec1022 = and i64 %764, 2147483644
  %cmp.n1033 = icmp eq i64 %n.vec1022, %764
  %xtraiter1317 = and i64 %764, 1
  %lcmp.mod1318.not = icmp eq i64 %xtraiter1317, 0
  %772 = add nsw i64 %764, -1
  br label %773

773:                                              ; preds = %.lr.ph648, %._crit_edge644
  %.6647 = phi i64 [ 0, %.lr.ph648 ], [ %828, %._crit_edge644 ]
  %774 = getelementptr inbounds i32, ptr %761, i64 %.6647
  %775 = load i32, ptr %774, align 4, !tbaa !29
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds i32, ptr %759, i64 %776
  %778 = load i32, ptr %777, align 4, !tbaa !29
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds i32, ptr %763, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !29
  %782 = getelementptr i8, ptr %780, i64 4
  %783 = load i32, ptr %782, align 4, !tbaa !29
  %784 = sext i32 %783 to i64
  %785 = icmp slt i32 %781, %783
  br i1 %785, label %.preheader542.lr.ph, label %._crit_edge644

.preheader542.lr.ph:                              ; preds = %773
  %invariant.gep638 = getelementptr double, ptr %8, i64 %779
  %786 = load ptr, ptr %766, align 8
  %787 = load ptr, ptr %768, align 8
  br i1 %765, label %.preheader542.us.preheader, label %._crit_edge644

.preheader542.us.preheader:                       ; preds = %.preheader542.lr.ph
  %788 = sext i32 %781 to i64
  %789 = shl nsw i64 %779, 3
  %scevgep1005 = getelementptr i8, ptr %scevgep1004, i64 %789
  %790 = shl nsw i64 %788, 3
  %scevgep1006 = getelementptr i8, ptr %786, i64 %790
  %791 = shl nsw i64 %784, 3
  %scevgep1007 = getelementptr i8, ptr %786, i64 %791
  %bound01010 = icmp ult ptr %invariant.gep638, %scevgep1007
  %bound11011 = icmp ult ptr %scevgep1006, %scevgep1005
  %found.conflict1012 = and i1 %bound01010, %bound11011
  br label %.preheader542.us

.preheader542.us:                                 ; preds = %.preheader542.us.preheader, %._crit_edge.us646
  %.15488643.us = phi i64 [ %827, %._crit_edge.us646 ], [ %788, %.preheader542.us.preheader ]
  %792 = getelementptr inbounds double, ptr %786, i64 %.15488643.us
  %793 = getelementptr inbounds i32, ptr %787, i64 %.15488643.us
  %794 = load i32, ptr %793, align 4, !tbaa !29
  %795 = sext i32 %794 to i64
  %invariant.gep641.us = getelementptr double, ptr %5, i64 %795
  %brmerge1344 = or i1 %min.iters.check1019, %771
  br i1 %brmerge1344, label %scalar.ph1018.preheader, label %vector.memcheck1003

vector.memcheck1003:                              ; preds = %.preheader542.us
  %796 = shl nsw i64 %795, 3
  %scevgep1009 = getelementptr i8, ptr %scevgep1008, i64 %796
  %bound01013 = icmp ult ptr %invariant.gep638, %scevgep1009
  %bound11014 = icmp ult ptr %invariant.gep641.us, %scevgep1005
  %found.conflict1015 = and i1 %bound01013, %bound11014
  %conflict.rdx1016 = or i1 %found.conflict1012, %found.conflict1015
  br i1 %conflict.rdx1016, label %scalar.ph1018.preheader, label %vector.ph1020

vector.ph1020:                                    ; preds = %vector.memcheck1003
  %797 = load double, ptr %792, align 8, !tbaa !11, !alias.scope !111
  %broadcast.splatinsert1030 = insertelement <2 x double> poison, double %797, i64 0
  %broadcast.splat1031 = shufflevector <2 x double> %broadcast.splatinsert1030, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body1024

vector.body1024:                                  ; preds = %vector.body1024, %vector.ph1020
  %index1025 = phi i64 [ 0, %vector.ph1020 ], [ %index.next1032, %vector.body1024 ]
  %798 = getelementptr double, ptr %invariant.gep641.us, i64 %index1025
  %799 = getelementptr i8, ptr %798, i64 16
  %wide.load1026 = load <2 x double>, ptr %798, align 8, !tbaa !11, !alias.scope !114
  %wide.load1027 = load <2 x double>, ptr %799, align 8, !tbaa !11, !alias.scope !114
  %800 = getelementptr double, ptr %invariant.gep638, i64 %index1025
  %801 = getelementptr i8, ptr %800, i64 16
  %wide.load1028 = load <2 x double>, ptr %800, align 8, !tbaa !11, !alias.scope !116, !noalias !118
  %wide.load1029 = load <2 x double>, ptr %801, align 8, !tbaa !11, !alias.scope !116, !noalias !118
  %802 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1031, <2 x double> %wide.load1026, <2 x double> %wide.load1028)
  %803 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat1031, <2 x double> %wide.load1027, <2 x double> %wide.load1029)
  store <2 x double> %802, ptr %800, align 8, !tbaa !11, !alias.scope !116, !noalias !118
  store <2 x double> %803, ptr %801, align 8, !tbaa !11, !alias.scope !116, !noalias !118
  %index.next1032 = add nuw i64 %index1025, 4
  %804 = icmp eq i64 %index.next1032, %n.vec1022
  br i1 %804, label %middle.block1017, label %vector.body1024, !llvm.loop !119

middle.block1017:                                 ; preds = %vector.body1024
  br i1 %cmp.n1033, label %._crit_edge.us646, label %scalar.ph1018.preheader

scalar.ph1018.preheader:                          ; preds = %.preheader542.us, %middle.block1017, %vector.memcheck1003
  %.12639.us.ph = phi i64 [ 0, %vector.memcheck1003 ], [ 0, %.preheader542.us ], [ %n.vec1022, %middle.block1017 ]
  br i1 %lcmp.mod1318.not, label %scalar.ph1018.prol.loopexit, label %scalar.ph1018.prol

scalar.ph1018.prol:                               ; preds = %scalar.ph1018.preheader
  %805 = load double, ptr %792, align 8, !tbaa !11
  %806 = mul nsw i64 %.12639.us.ph, %767
  %gep642.us.prol = getelementptr double, ptr %invariant.gep641.us, i64 %806
  %807 = load double, ptr %gep642.us.prol, align 8, !tbaa !11
  %808 = mul nsw i64 %.12639.us.ph, %769
  %gep.us645.prol = getelementptr double, ptr %invariant.gep638, i64 %808
  %809 = load double, ptr %gep.us645.prol, align 8, !tbaa !11
  %810 = tail call double @llvm.fmuladd.f64(double %805, double %807, double %809)
  store double %810, ptr %gep.us645.prol, align 8, !tbaa !11
  %811 = or disjoint i64 %.12639.us.ph, 1
  br label %scalar.ph1018.prol.loopexit

scalar.ph1018.prol.loopexit:                      ; preds = %scalar.ph1018.prol, %scalar.ph1018.preheader
  %.12639.us.unr = phi i64 [ %.12639.us.ph, %scalar.ph1018.preheader ], [ %811, %scalar.ph1018.prol ]
  %812 = icmp eq i64 %.12639.us.ph, %772
  br i1 %812, label %._crit_edge.us646, label %scalar.ph1018

scalar.ph1018:                                    ; preds = %scalar.ph1018.prol.loopexit, %scalar.ph1018
  %.12639.us = phi i64 [ %826, %scalar.ph1018 ], [ %.12639.us.unr, %scalar.ph1018.prol.loopexit ]
  %813 = load double, ptr %792, align 8, !tbaa !11
  %814 = mul nsw i64 %.12639.us, %767
  %gep642.us = getelementptr double, ptr %invariant.gep641.us, i64 %814
  %815 = load double, ptr %gep642.us, align 8, !tbaa !11
  %816 = mul nsw i64 %.12639.us, %769
  %gep.us645 = getelementptr double, ptr %invariant.gep638, i64 %816
  %817 = load double, ptr %gep.us645, align 8, !tbaa !11
  %818 = tail call double @llvm.fmuladd.f64(double %813, double %815, double %817)
  store double %818, ptr %gep.us645, align 8, !tbaa !11
  %819 = add nuw nsw i64 %.12639.us, 1
  %820 = load double, ptr %792, align 8, !tbaa !11
  %821 = mul nsw i64 %819, %767
  %gep642.us.1 = getelementptr double, ptr %invariant.gep641.us, i64 %821
  %822 = load double, ptr %gep642.us.1, align 8, !tbaa !11
  %823 = mul nsw i64 %819, %769
  %gep.us645.1 = getelementptr double, ptr %invariant.gep638, i64 %823
  %824 = load double, ptr %gep.us645.1, align 8, !tbaa !11
  %825 = tail call double @llvm.fmuladd.f64(double %820, double %822, double %824)
  store double %825, ptr %gep.us645.1, align 8, !tbaa !11
  %826 = add nuw nsw i64 %.12639.us, 2
  %exitcond792.not.1 = icmp eq i64 %826, %764
  br i1 %exitcond792.not.1, label %._crit_edge.us646, label %scalar.ph1018, !llvm.loop !120

._crit_edge.us646:                                ; preds = %scalar.ph1018.prol.loopexit, %scalar.ph1018, %middle.block1017
  %827 = add nsw i64 %.15488643.us, 1
  %exitcond793.not = icmp eq i64 %827, %784
  br i1 %exitcond793.not, label %._crit_edge644, label %.preheader542.us, !llvm.loop !121

._crit_edge644:                                   ; preds = %._crit_edge.us646, %.preheader542.lr.ph, %773
  %828 = add nuw nsw i64 %.6647, 1
  %exitcond794.not = icmp eq i64 %828, %757
  br i1 %exitcond794.not, label %.loopexit, label %773, !llvm.loop !122

829:                                              ; preds = %754
  %830 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %4, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %831 = icmp eq i32 %830, 1
  %832 = getelementptr inbounds i8, ptr %1, i64 16
  %833 = load i32, ptr %832, align 8, !tbaa !5
  %834 = sext i32 %833 to i64
  %835 = icmp sgt i32 %833, 0
  br i1 %831, label %.preheader546, label %.preheader549

.preheader549:                                    ; preds = %829
  br i1 %835, label %.lr.ph626, label %.loopexit

.lr.ph626:                                        ; preds = %.preheader549
  %836 = load ptr, ptr %1, align 8, !tbaa !26
  %837 = getelementptr inbounds i8, ptr %1, i64 8
  %838 = load ptr, ptr %837, align 8, !tbaa !25
  %839 = getelementptr inbounds i8, ptr %0, i64 16
  %840 = load ptr, ptr %839, align 8, !tbaa !27
  %841 = sext i32 %3 to i64
  %842 = icmp sgt i32 %3, 0
  %843 = getelementptr inbounds i8, ptr %0, i64 40
  %844 = sext i32 %6 to i64
  %845 = getelementptr inbounds i8, ptr %0, i64 24
  %846 = sext i32 %9 to i64
  %847 = shl nsw i64 %841, 3
  %scevgep934 = getelementptr i8, ptr %8, i64 %847
  %scevgep938 = getelementptr i8, ptr %5, i64 %847
  %min.iters.check949 = icmp ult i32 %3, 6
  %ident.check931 = icmp ne i32 %9, 1
  %ident.check932 = icmp ne i32 %6, 1
  %848 = or i1 %ident.check931, %ident.check932
  %n.vec952 = and i64 %841, 2147483644
  %broadcast.splatinsert956 = insertelement <2 x double> poison, double %4, i64 0
  %broadcast.splat957 = shufflevector <2 x double> %broadcast.splatinsert956, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n965 = icmp eq i64 %n.vec952, %841
  %xtraiter1313 = and i64 %841, 1
  %lcmp.mod1314.not = icmp eq i64 %xtraiter1313, 0
  %849 = add nsw i64 %841, -1
  br label %925

.preheader546:                                    ; preds = %829
  br i1 %835, label %.lr.ph637, label %.loopexit

.lr.ph637:                                        ; preds = %.preheader546
  %850 = load ptr, ptr %1, align 8, !tbaa !26
  %851 = getelementptr inbounds i8, ptr %1, i64 8
  %852 = load ptr, ptr %851, align 8, !tbaa !25
  %853 = getelementptr inbounds i8, ptr %0, i64 16
  %854 = load ptr, ptr %853, align 8, !tbaa !27
  %855 = sext i32 %3 to i64
  %856 = icmp sgt i32 %3, 0
  %857 = getelementptr inbounds i8, ptr %0, i64 40
  %858 = sext i32 %6 to i64
  %859 = getelementptr inbounds i8, ptr %0, i64 24
  %860 = sext i32 %9 to i64
  %861 = shl nsw i64 %855, 3
  %scevgep970 = getelementptr i8, ptr %8, i64 %861
  %scevgep974 = getelementptr i8, ptr %5, i64 %861
  %min.iters.check985 = icmp ult i32 %3, 8
  %ident.check967 = icmp ne i32 %9, 1
  %ident.check968 = icmp ne i32 %6, 1
  %862 = or i1 %ident.check967, %ident.check968
  %n.vec988 = and i64 %855, 2147483644
  %cmp.n999 = icmp eq i64 %n.vec988, %855
  %xtraiter1315 = and i64 %855, 1
  %lcmp.mod1316.not = icmp eq i64 %xtraiter1315, 0
  %863 = add nsw i64 %855, -1
  br label %864

864:                                              ; preds = %.lr.ph637, %._crit_edge633
  %.7636 = phi i64 [ 0, %.lr.ph637 ], [ %924, %._crit_edge633 ]
  %865 = getelementptr inbounds i32, ptr %852, i64 %.7636
  %866 = load i32, ptr %865, align 4, !tbaa !29
  %867 = sext i32 %866 to i64
  %868 = getelementptr inbounds i32, ptr %850, i64 %867
  %869 = load i32, ptr %868, align 4, !tbaa !29
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds i32, ptr %854, i64 %870
  %872 = load i32, ptr %871, align 4, !tbaa !29
  %873 = getelementptr i8, ptr %871, i64 4
  %874 = load i32, ptr %873, align 4, !tbaa !29
  %875 = sext i32 %874 to i64
  %876 = icmp slt i32 %872, %874
  br i1 %876, label %.preheader545.lr.ph, label %._crit_edge633

.preheader545.lr.ph:                              ; preds = %864
  %invariant.gep627 = getelementptr double, ptr %8, i64 %870
  %877 = load ptr, ptr %857, align 8
  %878 = load ptr, ptr %859, align 8
  br i1 %856, label %.preheader545.us.preheader, label %._crit_edge633

.preheader545.us.preheader:                       ; preds = %.preheader545.lr.ph
  %879 = sext i32 %872 to i64
  %880 = shl nsw i64 %870, 3
  %scevgep971 = getelementptr i8, ptr %scevgep970, i64 %880
  %881 = shl nsw i64 %879, 3
  %scevgep972 = getelementptr i8, ptr %877, i64 %881
  %882 = shl nsw i64 %875, 3
  %scevgep973 = getelementptr i8, ptr %877, i64 %882
  %bound0976 = icmp ult ptr %invariant.gep627, %scevgep973
  %bound1977 = icmp ult ptr %scevgep972, %scevgep971
  %found.conflict978 = and i1 %bound0976, %bound1977
  br label %.preheader545.us

.preheader545.us:                                 ; preds = %.preheader545.us.preheader, %._crit_edge.us635
  %.16489632.us = phi i64 [ %923, %._crit_edge.us635 ], [ %879, %.preheader545.us.preheader ]
  %883 = getelementptr inbounds double, ptr %877, i64 %.16489632.us
  %884 = getelementptr inbounds i32, ptr %878, i64 %.16489632.us
  %885 = load i32, ptr %884, align 4, !tbaa !29
  %886 = sext i32 %885 to i64
  %invariant.gep630.us = getelementptr double, ptr %5, i64 %886
  %brmerge1345 = or i1 %min.iters.check985, %862
  br i1 %brmerge1345, label %scalar.ph984.preheader, label %vector.memcheck969

vector.memcheck969:                               ; preds = %.preheader545.us
  %887 = shl nsw i64 %886, 3
  %scevgep975 = getelementptr i8, ptr %scevgep974, i64 %887
  %bound0979 = icmp ult ptr %invariant.gep627, %scevgep975
  %bound1980 = icmp ult ptr %invariant.gep630.us, %scevgep971
  %found.conflict981 = and i1 %bound0979, %bound1980
  %conflict.rdx982 = or i1 %found.conflict978, %found.conflict981
  br i1 %conflict.rdx982, label %scalar.ph984.preheader, label %vector.ph986

vector.ph986:                                     ; preds = %vector.memcheck969
  %888 = load double, ptr %883, align 8, !tbaa !11, !alias.scope !123
  %broadcast.splatinsert996 = insertelement <2 x double> poison, double %888, i64 0
  %broadcast.splat997 = shufflevector <2 x double> %broadcast.splatinsert996, <2 x double> poison, <2 x i32> zeroinitializer
  %889 = fneg <2 x double> %broadcast.splat997
  %890 = fneg <2 x double> %broadcast.splat997
  br label %vector.body990

vector.body990:                                   ; preds = %vector.body990, %vector.ph986
  %index991 = phi i64 [ 0, %vector.ph986 ], [ %index.next998, %vector.body990 ]
  %891 = getelementptr double, ptr %invariant.gep630.us, i64 %index991
  %892 = getelementptr i8, ptr %891, i64 16
  %wide.load992 = load <2 x double>, ptr %891, align 8, !tbaa !11, !alias.scope !126
  %wide.load993 = load <2 x double>, ptr %892, align 8, !tbaa !11, !alias.scope !126
  %893 = getelementptr double, ptr %invariant.gep627, i64 %index991
  %894 = getelementptr i8, ptr %893, i64 16
  %wide.load994 = load <2 x double>, ptr %893, align 8, !tbaa !11, !alias.scope !128, !noalias !130
  %wide.load995 = load <2 x double>, ptr %894, align 8, !tbaa !11, !alias.scope !128, !noalias !130
  %895 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %889, <2 x double> %wide.load992, <2 x double> %wide.load994)
  %896 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %890, <2 x double> %wide.load993, <2 x double> %wide.load995)
  store <2 x double> %895, ptr %893, align 8, !tbaa !11, !alias.scope !128, !noalias !130
  store <2 x double> %896, ptr %894, align 8, !tbaa !11, !alias.scope !128, !noalias !130
  %index.next998 = add nuw i64 %index991, 4
  %897 = icmp eq i64 %index.next998, %n.vec988
  br i1 %897, label %middle.block983, label %vector.body990, !llvm.loop !131

middle.block983:                                  ; preds = %vector.body990
  br i1 %cmp.n999, label %._crit_edge.us635, label %scalar.ph984.preheader

scalar.ph984.preheader:                           ; preds = %.preheader545.us, %middle.block983, %vector.memcheck969
  %.13628.us.ph = phi i64 [ 0, %vector.memcheck969 ], [ 0, %.preheader545.us ], [ %n.vec988, %middle.block983 ]
  br i1 %lcmp.mod1316.not, label %scalar.ph984.prol.loopexit, label %scalar.ph984.prol

scalar.ph984.prol:                                ; preds = %scalar.ph984.preheader
  %898 = load double, ptr %883, align 8, !tbaa !11
  %899 = mul nsw i64 %.13628.us.ph, %858
  %gep631.us.prol = getelementptr double, ptr %invariant.gep630.us, i64 %899
  %900 = load double, ptr %gep631.us.prol, align 8, !tbaa !11
  %901 = mul nsw i64 %.13628.us.ph, %860
  %gep.us634.prol = getelementptr double, ptr %invariant.gep627, i64 %901
  %902 = load double, ptr %gep.us634.prol, align 8, !tbaa !11
  %903 = fneg double %898
  %904 = tail call double @llvm.fmuladd.f64(double %903, double %900, double %902)
  store double %904, ptr %gep.us634.prol, align 8, !tbaa !11
  %905 = or disjoint i64 %.13628.us.ph, 1
  br label %scalar.ph984.prol.loopexit

scalar.ph984.prol.loopexit:                       ; preds = %scalar.ph984.prol, %scalar.ph984.preheader
  %.13628.us.unr = phi i64 [ %.13628.us.ph, %scalar.ph984.preheader ], [ %905, %scalar.ph984.prol ]
  %906 = icmp eq i64 %.13628.us.ph, %863
  br i1 %906, label %._crit_edge.us635, label %scalar.ph984

scalar.ph984:                                     ; preds = %scalar.ph984.prol.loopexit, %scalar.ph984
  %.13628.us = phi i64 [ %922, %scalar.ph984 ], [ %.13628.us.unr, %scalar.ph984.prol.loopexit ]
  %907 = load double, ptr %883, align 8, !tbaa !11
  %908 = mul nsw i64 %.13628.us, %858
  %gep631.us = getelementptr double, ptr %invariant.gep630.us, i64 %908
  %909 = load double, ptr %gep631.us, align 8, !tbaa !11
  %910 = mul nsw i64 %.13628.us, %860
  %gep.us634 = getelementptr double, ptr %invariant.gep627, i64 %910
  %911 = load double, ptr %gep.us634, align 8, !tbaa !11
  %912 = fneg double %907
  %913 = tail call double @llvm.fmuladd.f64(double %912, double %909, double %911)
  store double %913, ptr %gep.us634, align 8, !tbaa !11
  %914 = add nuw nsw i64 %.13628.us, 1
  %915 = load double, ptr %883, align 8, !tbaa !11
  %916 = mul nsw i64 %914, %858
  %gep631.us.1 = getelementptr double, ptr %invariant.gep630.us, i64 %916
  %917 = load double, ptr %gep631.us.1, align 8, !tbaa !11
  %918 = mul nsw i64 %914, %860
  %gep.us634.1 = getelementptr double, ptr %invariant.gep627, i64 %918
  %919 = load double, ptr %gep.us634.1, align 8, !tbaa !11
  %920 = fneg double %915
  %921 = tail call double @llvm.fmuladd.f64(double %920, double %917, double %919)
  store double %921, ptr %gep.us634.1, align 8, !tbaa !11
  %922 = add nuw nsw i64 %.13628.us, 2
  %exitcond789.not.1 = icmp eq i64 %922, %855
  br i1 %exitcond789.not.1, label %._crit_edge.us635, label %scalar.ph984, !llvm.loop !132

._crit_edge.us635:                                ; preds = %scalar.ph984.prol.loopexit, %scalar.ph984, %middle.block983
  %923 = add nsw i64 %.16489632.us, 1
  %exitcond790.not = icmp eq i64 %923, %875
  br i1 %exitcond790.not, label %._crit_edge633, label %.preheader545.us, !llvm.loop !133

._crit_edge633:                                   ; preds = %._crit_edge.us635, %.preheader545.lr.ph, %864
  %924 = add nuw nsw i64 %.7636, 1
  %exitcond791.not = icmp eq i64 %924, %834
  br i1 %exitcond791.not, label %.loopexit, label %864, !llvm.loop !134

925:                                              ; preds = %.lr.ph626, %._crit_edge622
  %.8625 = phi i64 [ 0, %.lr.ph626 ], [ %985, %._crit_edge622 ]
  %926 = getelementptr inbounds i32, ptr %838, i64 %.8625
  %927 = load i32, ptr %926, align 4, !tbaa !29
  %928 = sext i32 %927 to i64
  %929 = getelementptr inbounds i32, ptr %836, i64 %928
  %930 = load i32, ptr %929, align 4, !tbaa !29
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds i32, ptr %840, i64 %931
  %933 = load i32, ptr %932, align 4, !tbaa !29
  %934 = getelementptr i8, ptr %932, i64 4
  %935 = load i32, ptr %934, align 4, !tbaa !29
  %936 = sext i32 %935 to i64
  %937 = icmp slt i32 %933, %935
  br i1 %937, label %.preheader548.lr.ph, label %._crit_edge622

.preheader548.lr.ph:                              ; preds = %925
  %invariant.gep = getelementptr double, ptr %8, i64 %931
  %938 = load ptr, ptr %843, align 8
  %939 = load ptr, ptr %845, align 8
  br i1 %842, label %.preheader548.us.preheader, label %._crit_edge622

.preheader548.us.preheader:                       ; preds = %.preheader548.lr.ph
  %940 = sext i32 %933 to i64
  %941 = shl nsw i64 %931, 3
  %scevgep935 = getelementptr i8, ptr %scevgep934, i64 %941
  %942 = shl nsw i64 %940, 3
  %scevgep936 = getelementptr i8, ptr %938, i64 %942
  %943 = shl nsw i64 %936, 3
  %scevgep937 = getelementptr i8, ptr %938, i64 %943
  %bound0940 = icmp ult ptr %invariant.gep, %scevgep937
  %bound1941 = icmp ult ptr %scevgep936, %scevgep935
  %found.conflict942 = and i1 %bound0940, %bound1941
  br label %.preheader548.us

.preheader548.us:                                 ; preds = %.preheader548.us.preheader, %._crit_edge.us624
  %.17490621.us = phi i64 [ %984, %._crit_edge.us624 ], [ %940, %.preheader548.us.preheader ]
  %944 = getelementptr inbounds double, ptr %938, i64 %.17490621.us
  %945 = getelementptr inbounds i32, ptr %939, i64 %.17490621.us
  %946 = load i32, ptr %945, align 4, !tbaa !29
  %947 = sext i32 %946 to i64
  %invariant.gep619.us = getelementptr double, ptr %5, i64 %947
  %brmerge1346 = or i1 %min.iters.check949, %848
  br i1 %brmerge1346, label %scalar.ph948.preheader, label %vector.memcheck933

vector.memcheck933:                               ; preds = %.preheader548.us
  %948 = shl nsw i64 %947, 3
  %scevgep939 = getelementptr i8, ptr %scevgep938, i64 %948
  %bound0943 = icmp ult ptr %invariant.gep, %scevgep939
  %bound1944 = icmp ult ptr %invariant.gep619.us, %scevgep935
  %found.conflict945 = and i1 %bound0943, %bound1944
  %conflict.rdx946 = or i1 %found.conflict942, %found.conflict945
  br i1 %conflict.rdx946, label %scalar.ph948.preheader, label %vector.ph950

vector.ph950:                                     ; preds = %vector.memcheck933
  %949 = load double, ptr %944, align 8, !tbaa !11, !alias.scope !135
  %broadcast.splatinsert958 = insertelement <2 x double> poison, double %949, i64 0
  %broadcast.splat959 = shufflevector <2 x double> %broadcast.splatinsert958, <2 x double> poison, <2 x i32> zeroinitializer
  %950 = fmul <2 x double> %broadcast.splat959, %broadcast.splat957
  %951 = fmul <2 x double> %broadcast.splat959, %broadcast.splat957
  br label %vector.body954

vector.body954:                                   ; preds = %vector.body954, %vector.ph950
  %index955 = phi i64 [ 0, %vector.ph950 ], [ %index.next964, %vector.body954 ]
  %952 = getelementptr double, ptr %invariant.gep619.us, i64 %index955
  %953 = getelementptr i8, ptr %952, i64 16
  %wide.load960 = load <2 x double>, ptr %952, align 8, !tbaa !11, !alias.scope !138
  %wide.load961 = load <2 x double>, ptr %953, align 8, !tbaa !11, !alias.scope !138
  %954 = getelementptr double, ptr %invariant.gep, i64 %index955
  %955 = getelementptr i8, ptr %954, i64 16
  %wide.load962 = load <2 x double>, ptr %954, align 8, !tbaa !11, !alias.scope !140, !noalias !142
  %wide.load963 = load <2 x double>, ptr %955, align 8, !tbaa !11, !alias.scope !140, !noalias !142
  %956 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %950, <2 x double> %wide.load960, <2 x double> %wide.load962)
  %957 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %951, <2 x double> %wide.load961, <2 x double> %wide.load963)
  store <2 x double> %956, ptr %954, align 8, !tbaa !11, !alias.scope !140, !noalias !142
  store <2 x double> %957, ptr %955, align 8, !tbaa !11, !alias.scope !140, !noalias !142
  %index.next964 = add nuw i64 %index955, 4
  %958 = icmp eq i64 %index.next964, %n.vec952
  br i1 %958, label %middle.block947, label %vector.body954, !llvm.loop !143

middle.block947:                                  ; preds = %vector.body954
  br i1 %cmp.n965, label %._crit_edge.us624, label %scalar.ph948.preheader

scalar.ph948.preheader:                           ; preds = %.preheader548.us, %middle.block947, %vector.memcheck933
  %.14617.us.ph = phi i64 [ 0, %vector.memcheck933 ], [ 0, %.preheader548.us ], [ %n.vec952, %middle.block947 ]
  br i1 %lcmp.mod1314.not, label %scalar.ph948.prol.loopexit, label %scalar.ph948.prol

scalar.ph948.prol:                                ; preds = %scalar.ph948.preheader
  %959 = load double, ptr %944, align 8, !tbaa !11
  %960 = fmul double %959, %4
  %961 = mul nsw i64 %.14617.us.ph, %844
  %gep620.us.prol = getelementptr double, ptr %invariant.gep619.us, i64 %961
  %962 = load double, ptr %gep620.us.prol, align 8, !tbaa !11
  %963 = mul nsw i64 %.14617.us.ph, %846
  %gep.us623.prol = getelementptr double, ptr %invariant.gep, i64 %963
  %964 = load double, ptr %gep.us623.prol, align 8, !tbaa !11
  %965 = tail call double @llvm.fmuladd.f64(double %960, double %962, double %964)
  store double %965, ptr %gep.us623.prol, align 8, !tbaa !11
  %966 = or disjoint i64 %.14617.us.ph, 1
  br label %scalar.ph948.prol.loopexit

scalar.ph948.prol.loopexit:                       ; preds = %scalar.ph948.prol, %scalar.ph948.preheader
  %.14617.us.unr = phi i64 [ %.14617.us.ph, %scalar.ph948.preheader ], [ %966, %scalar.ph948.prol ]
  %967 = icmp eq i64 %.14617.us.ph, %849
  br i1 %967, label %._crit_edge.us624, label %scalar.ph948

scalar.ph948:                                     ; preds = %scalar.ph948.prol.loopexit, %scalar.ph948
  %.14617.us = phi i64 [ %983, %scalar.ph948 ], [ %.14617.us.unr, %scalar.ph948.prol.loopexit ]
  %968 = load double, ptr %944, align 8, !tbaa !11
  %969 = fmul double %968, %4
  %970 = mul nsw i64 %.14617.us, %844
  %gep620.us = getelementptr double, ptr %invariant.gep619.us, i64 %970
  %971 = load double, ptr %gep620.us, align 8, !tbaa !11
  %972 = mul nsw i64 %.14617.us, %846
  %gep.us623 = getelementptr double, ptr %invariant.gep, i64 %972
  %973 = load double, ptr %gep.us623, align 8, !tbaa !11
  %974 = tail call double @llvm.fmuladd.f64(double %969, double %971, double %973)
  store double %974, ptr %gep.us623, align 8, !tbaa !11
  %975 = add nuw nsw i64 %.14617.us, 1
  %976 = load double, ptr %944, align 8, !tbaa !11
  %977 = fmul double %976, %4
  %978 = mul nsw i64 %975, %844
  %gep620.us.1 = getelementptr double, ptr %invariant.gep619.us, i64 %978
  %979 = load double, ptr %gep620.us.1, align 8, !tbaa !11
  %980 = mul nsw i64 %975, %846
  %gep.us623.1 = getelementptr double, ptr %invariant.gep, i64 %980
  %981 = load double, ptr %gep.us623.1, align 8, !tbaa !11
  %982 = tail call double @llvm.fmuladd.f64(double %977, double %979, double %981)
  store double %982, ptr %gep.us623.1, align 8, !tbaa !11
  %983 = add nuw nsw i64 %.14617.us, 2
  %exitcond786.not.1 = icmp eq i64 %983, %841
  br i1 %exitcond786.not.1, label %._crit_edge.us624, label %scalar.ph948, !llvm.loop !144

._crit_edge.us624:                                ; preds = %scalar.ph948.prol.loopexit, %scalar.ph948, %middle.block947
  %984 = add nsw i64 %.17490621.us, 1
  %exitcond787.not = icmp eq i64 %984, %936
  br i1 %exitcond787.not, label %._crit_edge622, label %.preheader548.us, !llvm.loop !145

._crit_edge622:                                   ; preds = %._crit_edge.us624, %.preheader548.lr.ph, %925
  %985 = add nuw nsw i64 %.8625, 1
  %exitcond788.not = icmp eq i64 %985, %834
  br i1 %exitcond788.not, label %.loopexit, label %925, !llvm.loop !146

986:                                              ; preds = %.loopexit562
  br i1 %753, label %.preheader552, label %1082

.preheader552:                                    ; preds = %986
  %987 = getelementptr inbounds i8, ptr %1, i64 16
  %988 = load i32, ptr %987, align 8, !tbaa !5
  %989 = sext i32 %988 to i64
  %990 = icmp sgt i32 %988, 0
  br i1 %990, label %.lr.ph616, label %.loopexit

.lr.ph616:                                        ; preds = %.preheader552
  %991 = getelementptr inbounds i8, ptr %1, i64 8
  %992 = load ptr, ptr %991, align 8, !tbaa !25
  %993 = getelementptr inbounds i8, ptr %0, i64 16
  %994 = load ptr, ptr %993, align 8, !tbaa !27
  %995 = load ptr, ptr %1, align 8, !tbaa !26
  %996 = getelementptr inbounds i8, ptr %2, i64 16
  %997 = getelementptr inbounds i8, ptr %0, i64 24
  %998 = getelementptr inbounds i8, ptr %2, i64 8
  %999 = sext i32 %3 to i64
  %1000 = icmp sgt i32 %3, 0
  %1001 = getelementptr inbounds i8, ptr %0, i64 40
  %1002 = sext i32 %6 to i64
  %1003 = sext i32 %9 to i64
  %1004 = shl nsw i64 %999, 3
  %scevgep900 = getelementptr i8, ptr %8, i64 %1004
  %scevgep904 = getelementptr i8, ptr %5, i64 %1004
  %min.iters.check915 = icmp ult i32 %3, 8
  %ident.check897 = icmp ne i32 %9, 1
  %ident.check898 = icmp ne i32 %6, 1
  %1005 = or i1 %ident.check897, %ident.check898
  %n.vec918 = and i64 %999, 2147483644
  %cmp.n929 = icmp eq i64 %n.vec918, %999
  %xtraiter1311 = and i64 %999, 1
  %lcmp.mod1312.not = icmp eq i64 %xtraiter1311, 0
  %1006 = add nsw i64 %999, -1
  br label %1007

1007:                                             ; preds = %.lr.ph616, %.critedge6
  %.9615 = phi i64 [ 0, %.lr.ph616 ], [ %1081, %.critedge6 ]
  %1008 = getelementptr inbounds i32, ptr %992, i64 %.9615
  %1009 = load i32, ptr %1008, align 4, !tbaa !29
  %1010 = sext i32 %1009 to i64
  %1011 = getelementptr inbounds i32, ptr %995, i64 %1010
  %1012 = load i32, ptr %1011, align 4, !tbaa !29
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds i32, ptr %994, i64 %1013
  %1015 = load i32, ptr %1014, align 4, !tbaa !29
  %1016 = getelementptr i8, ptr %1014, i64 4
  %1017 = load i32, ptr %1016, align 4, !tbaa !29
  %1018 = sext i32 %1017 to i64
  %1019 = icmp slt i32 %1015, %1017
  br i1 %1019, label %.lr.ph610, label %.critedge6

.lr.ph610:                                        ; preds = %1007
  %1020 = load i32, ptr %996, align 8, !tbaa !5
  %1021 = sext i32 %1020 to i64
  %1022 = load ptr, ptr %997, align 8
  %invariant.gep603 = getelementptr double, ptr %8, i64 %1010
  %1023 = load ptr, ptr %1001, align 8
  br i1 %1000, label %.lr.ph610.split.us.preheader, label %.critedge6

.lr.ph610.split.us.preheader:                     ; preds = %.lr.ph610
  %1024 = sext i32 %1015 to i64
  %1025 = shl nsw i64 %1010, 3
  %scevgep901 = getelementptr i8, ptr %scevgep900, i64 %1025
  %scevgep902 = getelementptr i8, ptr %1023, i64 8
  br label %.lr.ph610.split.us

.lr.ph610.split.us:                               ; preds = %.lr.ph610.split.us.preheader, %1044
  %.18608.us = phi i64 [ %.19.us, %1044 ], [ %1024, %.lr.ph610.split.us.preheader ]
  %.6497607.us = phi i64 [ %.7498.us, %1044 ], [ 0, %.lr.ph610.split.us.preheader ]
  %1026 = icmp slt i64 %.6497607.us, %1021
  br i1 %1026, label %1027, label %.critedge6

1027:                                             ; preds = %.lr.ph610.split.us
  %1028 = getelementptr inbounds i32, ptr %1022, i64 %.18608.us
  %1029 = load i32, ptr %1028, align 4, !tbaa !29
  %1030 = load ptr, ptr %2, align 8, !tbaa !26
  %1031 = load ptr, ptr %998, align 8, !tbaa !25
  %1032 = getelementptr inbounds i32, ptr %1031, i64 %.6497607.us
  %1033 = load i32, ptr %1032, align 4, !tbaa !29
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds i32, ptr %1030, i64 %1034
  %1036 = load i32, ptr %1035, align 4, !tbaa !29
  %1037 = icmp eq i32 %1029, %1036
  br i1 %1037, label %.preheader551.us, label %1038

1038:                                             ; preds = %1027
  %1039 = icmp sgt i32 %1029, %1036
  br i1 %1039, label %1042, label %1040

1040:                                             ; preds = %1038
  %1041 = add nsw i64 %.18608.us, 1
  br label %1044

1042:                                             ; preds = %1038
  %1043 = add nsw i64 %.6497607.us, 1
  br label %1044

1044:                                             ; preds = %._crit_edge.us614, %1042, %1040
  %.7498.us = phi i64 [ %1080, %._crit_edge.us614 ], [ %1043, %1042 ], [ %.6497607.us, %1040 ]
  %.19.us = phi i64 [ %1079, %._crit_edge.us614 ], [ %.18608.us, %1042 ], [ %1041, %1040 ]
  %1045 = icmp slt i64 %.19.us, %1018
  br i1 %1045, label %.lr.ph610.split.us, label %.critedge6, !llvm.loop !147

scalar.ph914:                                     ; preds = %scalar.ph914.prol.loopexit, %scalar.ph914
  %.15605.us = phi i64 [ %1059, %scalar.ph914 ], [ %.15605.us.unr, %scalar.ph914.prol.loopexit ]
  %1046 = load double, ptr %1060, align 8, !tbaa !11
  %1047 = mul nsw i64 %.15605.us, %1002
  %gep.us612 = getelementptr double, ptr %invariant.gep.us613, i64 %1047
  %1048 = load double, ptr %gep.us612, align 8, !tbaa !11
  %1049 = mul nsw i64 %.15605.us, %1003
  %gep604.us = getelementptr double, ptr %invariant.gep603, i64 %1049
  %1050 = load double, ptr %gep604.us, align 8, !tbaa !11
  %1051 = tail call double @llvm.fmuladd.f64(double %1046, double %1048, double %1050)
  store double %1051, ptr %gep604.us, align 8, !tbaa !11
  %1052 = add nuw nsw i64 %.15605.us, 1
  %1053 = load double, ptr %1060, align 8, !tbaa !11
  %1054 = mul nsw i64 %1052, %1002
  %gep.us612.1 = getelementptr double, ptr %invariant.gep.us613, i64 %1054
  %1055 = load double, ptr %gep.us612.1, align 8, !tbaa !11
  %1056 = mul nsw i64 %1052, %1003
  %gep604.us.1 = getelementptr double, ptr %invariant.gep603, i64 %1056
  %1057 = load double, ptr %gep604.us.1, align 8, !tbaa !11
  %1058 = tail call double @llvm.fmuladd.f64(double %1053, double %1055, double %1057)
  store double %1058, ptr %gep604.us.1, align 8, !tbaa !11
  %1059 = add nuw nsw i64 %.15605.us, 2
  %exitcond784.not.1 = icmp eq i64 %1059, %999
  br i1 %exitcond784.not.1, label %._crit_edge.us614, label %scalar.ph914, !llvm.loop !148

.preheader551.us:                                 ; preds = %1027
  %invariant.gep.us613 = getelementptr double, ptr %5, i64 %1034
  %1060 = getelementptr inbounds double, ptr %1023, i64 %.18608.us
  %brmerge1347 = or i1 %min.iters.check915, %1005
  br i1 %brmerge1347, label %scalar.ph914.preheader, label %vector.memcheck899

scalar.ph914.preheader:                           ; preds = %.preheader551.us, %middle.block913, %vector.memcheck899
  %.15605.us.ph = phi i64 [ 0, %vector.memcheck899 ], [ 0, %.preheader551.us ], [ %n.vec918, %middle.block913 ]
  br i1 %lcmp.mod1312.not, label %scalar.ph914.prol.loopexit, label %scalar.ph914.prol

scalar.ph914.prol:                                ; preds = %scalar.ph914.preheader
  %1061 = load double, ptr %1060, align 8, !tbaa !11
  %1062 = mul nsw i64 %.15605.us.ph, %1002
  %gep.us612.prol = getelementptr double, ptr %invariant.gep.us613, i64 %1062
  %1063 = load double, ptr %gep.us612.prol, align 8, !tbaa !11
  %1064 = mul nsw i64 %.15605.us.ph, %1003
  %gep604.us.prol = getelementptr double, ptr %invariant.gep603, i64 %1064
  %1065 = load double, ptr %gep604.us.prol, align 8, !tbaa !11
  %1066 = tail call double @llvm.fmuladd.f64(double %1061, double %1063, double %1065)
  store double %1066, ptr %gep604.us.prol, align 8, !tbaa !11
  %1067 = or disjoint i64 %.15605.us.ph, 1
  br label %scalar.ph914.prol.loopexit

scalar.ph914.prol.loopexit:                       ; preds = %scalar.ph914.prol, %scalar.ph914.preheader
  %.15605.us.unr = phi i64 [ %.15605.us.ph, %scalar.ph914.preheader ], [ %1067, %scalar.ph914.prol ]
  %1068 = icmp eq i64 %.15605.us.ph, %1006
  br i1 %1068, label %._crit_edge.us614, label %scalar.ph914

vector.memcheck899:                               ; preds = %.preheader551.us
  %1069 = shl i64 %.18608.us, 3
  %scevgep903 = getelementptr i8, ptr %scevgep902, i64 %1069
  %1070 = shl nsw i64 %1034, 3
  %scevgep905 = getelementptr i8, ptr %scevgep904, i64 %1070
  %bound0906 = icmp ult ptr %invariant.gep603, %scevgep903
  %bound1907 = icmp ult ptr %1060, %scevgep901
  %found.conflict908 = and i1 %bound0906, %bound1907
  %bound0909 = icmp ult ptr %invariant.gep603, %scevgep905
  %bound1910 = icmp ult ptr %invariant.gep.us613, %scevgep901
  %found.conflict911 = and i1 %bound0909, %bound1910
  %conflict.rdx912 = or i1 %found.conflict908, %found.conflict911
  br i1 %conflict.rdx912, label %scalar.ph914.preheader, label %vector.ph916

vector.ph916:                                     ; preds = %vector.memcheck899
  %1071 = load double, ptr %1060, align 8, !tbaa !11, !alias.scope !149
  %broadcast.splatinsert926 = insertelement <2 x double> poison, double %1071, i64 0
  %broadcast.splat927 = shufflevector <2 x double> %broadcast.splatinsert926, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body920

vector.body920:                                   ; preds = %vector.body920, %vector.ph916
  %index921 = phi i64 [ 0, %vector.ph916 ], [ %index.next928, %vector.body920 ]
  %1072 = getelementptr double, ptr %invariant.gep.us613, i64 %index921
  %1073 = getelementptr i8, ptr %1072, i64 16
  %wide.load922 = load <2 x double>, ptr %1072, align 8, !tbaa !11, !alias.scope !152
  %wide.load923 = load <2 x double>, ptr %1073, align 8, !tbaa !11, !alias.scope !152
  %1074 = getelementptr double, ptr %invariant.gep603, i64 %index921
  %1075 = getelementptr i8, ptr %1074, i64 16
  %wide.load924 = load <2 x double>, ptr %1074, align 8, !tbaa !11, !alias.scope !154, !noalias !156
  %wide.load925 = load <2 x double>, ptr %1075, align 8, !tbaa !11, !alias.scope !154, !noalias !156
  %1076 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat927, <2 x double> %wide.load922, <2 x double> %wide.load924)
  %1077 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %broadcast.splat927, <2 x double> %wide.load923, <2 x double> %wide.load925)
  store <2 x double> %1076, ptr %1074, align 8, !tbaa !11, !alias.scope !154, !noalias !156
  store <2 x double> %1077, ptr %1075, align 8, !tbaa !11, !alias.scope !154, !noalias !156
  %index.next928 = add nuw i64 %index921, 4
  %1078 = icmp eq i64 %index.next928, %n.vec918
  br i1 %1078, label %middle.block913, label %vector.body920, !llvm.loop !157

middle.block913:                                  ; preds = %vector.body920
  br i1 %cmp.n929, label %._crit_edge.us614, label %scalar.ph914.preheader

._crit_edge.us614:                                ; preds = %scalar.ph914.prol.loopexit, %scalar.ph914, %middle.block913
  %1079 = add nsw i64 %.18608.us, 1
  %1080 = add nsw i64 %.6497607.us, 1
  br label %1044

.critedge6:                                       ; preds = %1044, %.lr.ph610.split.us, %.lr.ph610, %1007
  %1081 = add nuw nsw i64 %.9615, 1
  %exitcond785.not = icmp eq i64 %1081, %989
  br i1 %exitcond785.not, label %.loopexit, label %1007, !llvm.loop !158

1082:                                             ; preds = %986
  %1083 = tail call noundef i32 @_ZN7qpOASES7isEqualEddd(double noundef %4, double noundef -1.000000e+00, double noundef 1.000000e-25)
  %1084 = icmp eq i32 %1083, 1
  %1085 = getelementptr inbounds i8, ptr %1, i64 16
  %1086 = load i32, ptr %1085, align 8, !tbaa !5
  %1087 = sext i32 %1086 to i64
  %1088 = icmp sgt i32 %1086, 0
  br i1 %1084, label %.preheader555, label %.preheader558

.preheader558:                                    ; preds = %1082
  br i1 %1088, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.preheader558
  %1089 = getelementptr inbounds i8, ptr %1, i64 8
  %1090 = load ptr, ptr %1089, align 8, !tbaa !25
  %1091 = getelementptr inbounds i8, ptr %0, i64 16
  %1092 = load ptr, ptr %1091, align 8, !tbaa !27
  %1093 = load ptr, ptr %1, align 8, !tbaa !26
  %1094 = getelementptr inbounds i8, ptr %2, i64 16
  %1095 = getelementptr inbounds i8, ptr %0, i64 24
  %1096 = getelementptr inbounds i8, ptr %2, i64 8
  %1097 = sext i32 %3 to i64
  %1098 = icmp sgt i32 %3, 0
  %1099 = getelementptr inbounds i8, ptr %0, i64 40
  %1100 = sext i32 %6 to i64
  %1101 = sext i32 %9 to i64
  %1102 = shl nsw i64 %1097, 3
  %scevgep846 = getelementptr i8, ptr %8, i64 %1102
  %scevgep850 = getelementptr i8, ptr %5, i64 %1102
  %min.iters.check = icmp ult i32 %3, 6
  %ident.check = icmp ne i32 %9, 1
  %ident.check845 = icmp ne i32 %6, 1
  %1103 = or i1 %ident.check, %ident.check845
  %n.vec = and i64 %1097, 2147483644
  %broadcast.splatinsert855 = insertelement <2 x double> poison, double %4, i64 0
  %broadcast.splat856 = shufflevector <2 x double> %broadcast.splatinsert855, <2 x double> poison, <2 x i32> zeroinitializer
  %cmp.n = icmp eq i64 %n.vec, %1097
  %xtraiter1307 = and i64 %1097, 1
  %lcmp.mod1308.not = icmp eq i64 %xtraiter1307, 0
  %1104 = add nsw i64 %1097, -1
  br label %1201

.preheader555:                                    ; preds = %1082
  br i1 %1088, label %.lr.ph602, label %.loopexit

.lr.ph602:                                        ; preds = %.preheader555
  %1105 = getelementptr inbounds i8, ptr %1, i64 8
  %1106 = load ptr, ptr %1105, align 8, !tbaa !25
  %1107 = getelementptr inbounds i8, ptr %0, i64 16
  %1108 = load ptr, ptr %1107, align 8, !tbaa !27
  %1109 = load ptr, ptr %1, align 8, !tbaa !26
  %1110 = getelementptr inbounds i8, ptr %2, i64 16
  %1111 = getelementptr inbounds i8, ptr %0, i64 24
  %1112 = getelementptr inbounds i8, ptr %2, i64 8
  %1113 = sext i32 %3 to i64
  %1114 = icmp sgt i32 %3, 0
  %1115 = getelementptr inbounds i8, ptr %0, i64 40
  %1116 = sext i32 %6 to i64
  %1117 = sext i32 %9 to i64
  %1118 = shl nsw i64 %1113, 3
  %scevgep866 = getelementptr i8, ptr %8, i64 %1118
  %scevgep870 = getelementptr i8, ptr %5, i64 %1118
  %min.iters.check881 = icmp ult i32 %3, 8
  %ident.check863 = icmp ne i32 %9, 1
  %ident.check864 = icmp ne i32 %6, 1
  %1119 = or i1 %ident.check863, %ident.check864
  %n.vec884 = and i64 %1113, 2147483644
  %cmp.n895 = icmp eq i64 %n.vec884, %1113
  %xtraiter1309 = and i64 %1113, 1
  %lcmp.mod1310.not = icmp eq i64 %xtraiter1309, 0
  %1120 = add nsw i64 %1113, -1
  br label %1121

1121:                                             ; preds = %.lr.ph602, %.critedge8
  %.10601 = phi i64 [ 0, %.lr.ph602 ], [ %1200, %.critedge8 ]
  %1122 = getelementptr inbounds i32, ptr %1106, i64 %.10601
  %1123 = load i32, ptr %1122, align 4, !tbaa !29
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds i32, ptr %1109, i64 %1124
  %1126 = load i32, ptr %1125, align 4, !tbaa !29
  %1127 = sext i32 %1126 to i64
  %1128 = getelementptr inbounds i32, ptr %1108, i64 %1127
  %1129 = load i32, ptr %1128, align 4, !tbaa !29
  %1130 = getelementptr i8, ptr %1128, i64 4
  %1131 = load i32, ptr %1130, align 4, !tbaa !29
  %1132 = sext i32 %1131 to i64
  %1133 = icmp slt i32 %1129, %1131
  br i1 %1133, label %.lr.ph596, label %.critedge8

.lr.ph596:                                        ; preds = %1121
  %1134 = load i32, ptr %1110, align 8, !tbaa !5
  %1135 = sext i32 %1134 to i64
  %1136 = load ptr, ptr %1111, align 8
  %invariant.gep589 = getelementptr double, ptr %8, i64 %1124
  %1137 = load ptr, ptr %1115, align 8
  br i1 %1114, label %.lr.ph596.split.us.preheader, label %.critedge8

.lr.ph596.split.us.preheader:                     ; preds = %.lr.ph596
  %1138 = sext i32 %1129 to i64
  %1139 = shl nsw i64 %1124, 3
  %scevgep867 = getelementptr i8, ptr %scevgep866, i64 %1139
  %scevgep868 = getelementptr i8, ptr %1137, i64 8
  br label %.lr.ph596.split.us

.lr.ph596.split.us:                               ; preds = %.lr.ph596.split.us.preheader, %1158
  %.20594.us = phi i64 [ %.21.us, %1158 ], [ %1138, %.lr.ph596.split.us.preheader ]
  %.8499593.us = phi i64 [ %.9500.us, %1158 ], [ 0, %.lr.ph596.split.us.preheader ]
  %1140 = icmp slt i64 %.8499593.us, %1135
  br i1 %1140, label %1141, label %.critedge8

1141:                                             ; preds = %.lr.ph596.split.us
  %1142 = getelementptr inbounds i32, ptr %1136, i64 %.20594.us
  %1143 = load i32, ptr %1142, align 4, !tbaa !29
  %1144 = load ptr, ptr %2, align 8, !tbaa !26
  %1145 = load ptr, ptr %1112, align 8, !tbaa !25
  %1146 = getelementptr inbounds i32, ptr %1145, i64 %.8499593.us
  %1147 = load i32, ptr %1146, align 4, !tbaa !29
  %1148 = sext i32 %1147 to i64
  %1149 = getelementptr inbounds i32, ptr %1144, i64 %1148
  %1150 = load i32, ptr %1149, align 4, !tbaa !29
  %1151 = icmp eq i32 %1143, %1150
  br i1 %1151, label %.preheader554.us, label %1152

1152:                                             ; preds = %1141
  %1153 = icmp sgt i32 %1143, %1150
  br i1 %1153, label %1156, label %1154

1154:                                             ; preds = %1152
  %1155 = add nsw i64 %.20594.us, 1
  br label %1158

1156:                                             ; preds = %1152
  %1157 = add nsw i64 %.8499593.us, 1
  br label %1158

1158:                                             ; preds = %._crit_edge.us600, %1156, %1154
  %.9500.us = phi i64 [ %1199, %._crit_edge.us600 ], [ %1157, %1156 ], [ %.8499593.us, %1154 ]
  %.21.us = phi i64 [ %1198, %._crit_edge.us600 ], [ %.20594.us, %1156 ], [ %1155, %1154 ]
  %1159 = icmp slt i64 %.21.us, %1132
  br i1 %1159, label %.lr.ph596.split.us, label %.critedge8, !llvm.loop !159

scalar.ph880:                                     ; preds = %scalar.ph880.prol.loopexit, %scalar.ph880
  %.16591.us = phi i64 [ %1175, %scalar.ph880 ], [ %.16591.us.unr, %scalar.ph880.prol.loopexit ]
  %1160 = load double, ptr %1176, align 8, !tbaa !11
  %1161 = mul nsw i64 %.16591.us, %1116
  %gep.us598 = getelementptr double, ptr %invariant.gep.us599, i64 %1161
  %1162 = load double, ptr %gep.us598, align 8, !tbaa !11
  %1163 = mul nsw i64 %.16591.us, %1117
  %gep590.us = getelementptr double, ptr %invariant.gep589, i64 %1163
  %1164 = load double, ptr %gep590.us, align 8, !tbaa !11
  %1165 = fneg double %1160
  %1166 = tail call double @llvm.fmuladd.f64(double %1165, double %1162, double %1164)
  store double %1166, ptr %gep590.us, align 8, !tbaa !11
  %1167 = add nuw nsw i64 %.16591.us, 1
  %1168 = load double, ptr %1176, align 8, !tbaa !11
  %1169 = mul nsw i64 %1167, %1116
  %gep.us598.1 = getelementptr double, ptr %invariant.gep.us599, i64 %1169
  %1170 = load double, ptr %gep.us598.1, align 8, !tbaa !11
  %1171 = mul nsw i64 %1167, %1117
  %gep590.us.1 = getelementptr double, ptr %invariant.gep589, i64 %1171
  %1172 = load double, ptr %gep590.us.1, align 8, !tbaa !11
  %1173 = fneg double %1168
  %1174 = tail call double @llvm.fmuladd.f64(double %1173, double %1170, double %1172)
  store double %1174, ptr %gep590.us.1, align 8, !tbaa !11
  %1175 = add nuw nsw i64 %.16591.us, 2
  %exitcond782.not.1 = icmp eq i64 %1175, %1113
  br i1 %exitcond782.not.1, label %._crit_edge.us600, label %scalar.ph880, !llvm.loop !160

.preheader554.us:                                 ; preds = %1141
  %invariant.gep.us599 = getelementptr double, ptr %5, i64 %1148
  %1176 = getelementptr inbounds double, ptr %1137, i64 %.20594.us
  %brmerge1348 = or i1 %min.iters.check881, %1119
  br i1 %brmerge1348, label %scalar.ph880.preheader, label %vector.memcheck865

scalar.ph880.preheader:                           ; preds = %.preheader554.us, %middle.block879, %vector.memcheck865
  %.16591.us.ph = phi i64 [ 0, %vector.memcheck865 ], [ 0, %.preheader554.us ], [ %n.vec884, %middle.block879 ]
  br i1 %lcmp.mod1310.not, label %scalar.ph880.prol.loopexit, label %scalar.ph880.prol

scalar.ph880.prol:                                ; preds = %scalar.ph880.preheader
  %1177 = load double, ptr %1176, align 8, !tbaa !11
  %1178 = mul nsw i64 %.16591.us.ph, %1116
  %gep.us598.prol = getelementptr double, ptr %invariant.gep.us599, i64 %1178
  %1179 = load double, ptr %gep.us598.prol, align 8, !tbaa !11
  %1180 = mul nsw i64 %.16591.us.ph, %1117
  %gep590.us.prol = getelementptr double, ptr %invariant.gep589, i64 %1180
  %1181 = load double, ptr %gep590.us.prol, align 8, !tbaa !11
  %1182 = fneg double %1177
  %1183 = tail call double @llvm.fmuladd.f64(double %1182, double %1179, double %1181)
  store double %1183, ptr %gep590.us.prol, align 8, !tbaa !11
  %1184 = or disjoint i64 %.16591.us.ph, 1
  br label %scalar.ph880.prol.loopexit

scalar.ph880.prol.loopexit:                       ; preds = %scalar.ph880.prol, %scalar.ph880.preheader
  %.16591.us.unr = phi i64 [ %.16591.us.ph, %scalar.ph880.preheader ], [ %1184, %scalar.ph880.prol ]
  %1185 = icmp eq i64 %.16591.us.ph, %1120
  br i1 %1185, label %._crit_edge.us600, label %scalar.ph880

vector.memcheck865:                               ; preds = %.preheader554.us
  %1186 = shl i64 %.20594.us, 3
  %scevgep869 = getelementptr i8, ptr %scevgep868, i64 %1186
  %1187 = shl nsw i64 %1148, 3
  %scevgep871 = getelementptr i8, ptr %scevgep870, i64 %1187
  %bound0872 = icmp ult ptr %invariant.gep589, %scevgep869
  %bound1873 = icmp ult ptr %1176, %scevgep867
  %found.conflict874 = and i1 %bound0872, %bound1873
  %bound0875 = icmp ult ptr %invariant.gep589, %scevgep871
  %bound1876 = icmp ult ptr %invariant.gep.us599, %scevgep867
  %found.conflict877 = and i1 %bound0875, %bound1876
  %conflict.rdx878 = or i1 %found.conflict874, %found.conflict877
  br i1 %conflict.rdx878, label %scalar.ph880.preheader, label %vector.ph882

vector.ph882:                                     ; preds = %vector.memcheck865
  %1188 = load double, ptr %1176, align 8, !tbaa !11, !alias.scope !161
  %broadcast.splatinsert892 = insertelement <2 x double> poison, double %1188, i64 0
  %broadcast.splat893 = shufflevector <2 x double> %broadcast.splatinsert892, <2 x double> poison, <2 x i32> zeroinitializer
  %1189 = fneg <2 x double> %broadcast.splat893
  %1190 = fneg <2 x double> %broadcast.splat893
  br label %vector.body886

vector.body886:                                   ; preds = %vector.body886, %vector.ph882
  %index887 = phi i64 [ 0, %vector.ph882 ], [ %index.next894, %vector.body886 ]
  %1191 = getelementptr double, ptr %invariant.gep.us599, i64 %index887
  %1192 = getelementptr i8, ptr %1191, i64 16
  %wide.load888 = load <2 x double>, ptr %1191, align 8, !tbaa !11, !alias.scope !164
  %wide.load889 = load <2 x double>, ptr %1192, align 8, !tbaa !11, !alias.scope !164
  %1193 = getelementptr double, ptr %invariant.gep589, i64 %index887
  %1194 = getelementptr i8, ptr %1193, i64 16
  %wide.load890 = load <2 x double>, ptr %1193, align 8, !tbaa !11, !alias.scope !166, !noalias !168
  %wide.load891 = load <2 x double>, ptr %1194, align 8, !tbaa !11, !alias.scope !166, !noalias !168
  %1195 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1189, <2 x double> %wide.load888, <2 x double> %wide.load890)
  %1196 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1190, <2 x double> %wide.load889, <2 x double> %wide.load891)
  store <2 x double> %1195, ptr %1193, align 8, !tbaa !11, !alias.scope !166, !noalias !168
  store <2 x double> %1196, ptr %1194, align 8, !tbaa !11, !alias.scope !166, !noalias !168
  %index.next894 = add nuw i64 %index887, 4
  %1197 = icmp eq i64 %index.next894, %n.vec884
  br i1 %1197, label %middle.block879, label %vector.body886, !llvm.loop !169

middle.block879:                                  ; preds = %vector.body886
  br i1 %cmp.n895, label %._crit_edge.us600, label %scalar.ph880.preheader

._crit_edge.us600:                                ; preds = %scalar.ph880.prol.loopexit, %scalar.ph880, %middle.block879
  %1198 = add nsw i64 %.20594.us, 1
  %1199 = add nsw i64 %.8499593.us, 1
  br label %1158

.critedge8:                                       ; preds = %1158, %.lr.ph596.split.us, %.lr.ph596, %1121
  %1200 = add nuw nsw i64 %.10601, 1
  %exitcond783.not = icmp eq i64 %1200, %1087
  br i1 %exitcond783.not, label %.loopexit, label %1121, !llvm.loop !170

1201:                                             ; preds = %.lr.ph, %.critedge10
  %.11588 = phi i64 [ 0, %.lr.ph ], [ %1280, %.critedge10 ]
  %1202 = getelementptr inbounds i32, ptr %1090, i64 %.11588
  %1203 = load i32, ptr %1202, align 4, !tbaa !29
  %1204 = sext i32 %1203 to i64
  %1205 = getelementptr inbounds i32, ptr %1093, i64 %1204
  %1206 = load i32, ptr %1205, align 4, !tbaa !29
  %1207 = sext i32 %1206 to i64
  %1208 = getelementptr inbounds i32, ptr %1092, i64 %1207
  %1209 = load i32, ptr %1208, align 4, !tbaa !29
  %1210 = getelementptr i8, ptr %1208, i64 4
  %1211 = load i32, ptr %1210, align 4, !tbaa !29
  %1212 = sext i32 %1211 to i64
  %1213 = icmp slt i32 %1209, %1211
  br i1 %1213, label %.lr.ph583, label %.critedge10

.lr.ph583:                                        ; preds = %1201
  %1214 = load i32, ptr %1094, align 8, !tbaa !5
  %1215 = sext i32 %1214 to i64
  %1216 = load ptr, ptr %1095, align 8
  %invariant.gep577 = getelementptr double, ptr %8, i64 %1204
  %1217 = load ptr, ptr %1099, align 8
  br i1 %1098, label %.lr.ph583.split.us.preheader, label %.critedge10

.lr.ph583.split.us.preheader:                     ; preds = %.lr.ph583
  %1218 = sext i32 %1209 to i64
  %1219 = shl nsw i64 %1204, 3
  %scevgep847 = getelementptr i8, ptr %scevgep846, i64 %1219
  %scevgep848 = getelementptr i8, ptr %1217, i64 8
  br label %.lr.ph583.split.us

.lr.ph583.split.us:                               ; preds = %.lr.ph583.split.us.preheader, %1238
  %.22581.us = phi i64 [ %.23.us, %1238 ], [ %1218, %.lr.ph583.split.us.preheader ]
  %.10501580.us = phi i64 [ %.11502.us, %1238 ], [ 0, %.lr.ph583.split.us.preheader ]
  %1220 = icmp slt i64 %.10501580.us, %1215
  br i1 %1220, label %1221, label %.critedge10

1221:                                             ; preds = %.lr.ph583.split.us
  %1222 = getelementptr inbounds i32, ptr %1216, i64 %.22581.us
  %1223 = load i32, ptr %1222, align 4, !tbaa !29
  %1224 = load ptr, ptr %2, align 8, !tbaa !26
  %1225 = load ptr, ptr %1096, align 8, !tbaa !25
  %1226 = getelementptr inbounds i32, ptr %1225, i64 %.10501580.us
  %1227 = load i32, ptr %1226, align 4, !tbaa !29
  %1228 = sext i32 %1227 to i64
  %1229 = getelementptr inbounds i32, ptr %1224, i64 %1228
  %1230 = load i32, ptr %1229, align 4, !tbaa !29
  %1231 = icmp eq i32 %1223, %1230
  br i1 %1231, label %.preheader557.us, label %1232

1232:                                             ; preds = %1221
  %1233 = icmp sgt i32 %1223, %1230
  br i1 %1233, label %1236, label %1234

1234:                                             ; preds = %1232
  %1235 = add nsw i64 %.22581.us, 1
  br label %1238

1236:                                             ; preds = %1232
  %1237 = add nsw i64 %.10501580.us, 1
  br label %1238

1238:                                             ; preds = %._crit_edge.us587, %1236, %1234
  %.11502.us = phi i64 [ %1279, %._crit_edge.us587 ], [ %1237, %1236 ], [ %.10501580.us, %1234 ]
  %.23.us = phi i64 [ %1278, %._crit_edge.us587 ], [ %.22581.us, %1236 ], [ %1235, %1234 ]
  %1239 = icmp slt i64 %.23.us, %1212
  br i1 %1239, label %.lr.ph583.split.us, label %.critedge10, !llvm.loop !171

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %.17579.us = phi i64 [ %1255, %scalar.ph ], [ %.17579.us.unr, %scalar.ph.prol.loopexit ]
  %1240 = load double, ptr %1256, align 8, !tbaa !11
  %1241 = fmul double %1240, %4
  %1242 = mul nsw i64 %.17579.us, %1100
  %gep.us585 = getelementptr double, ptr %invariant.gep.us586, i64 %1242
  %1243 = load double, ptr %gep.us585, align 8, !tbaa !11
  %1244 = mul nsw i64 %.17579.us, %1101
  %gep578.us = getelementptr double, ptr %invariant.gep577, i64 %1244
  %1245 = load double, ptr %gep578.us, align 8, !tbaa !11
  %1246 = tail call double @llvm.fmuladd.f64(double %1241, double %1243, double %1245)
  store double %1246, ptr %gep578.us, align 8, !tbaa !11
  %1247 = add nuw nsw i64 %.17579.us, 1
  %1248 = load double, ptr %1256, align 8, !tbaa !11
  %1249 = fmul double %1248, %4
  %1250 = mul nsw i64 %1247, %1100
  %gep.us585.1 = getelementptr double, ptr %invariant.gep.us586, i64 %1250
  %1251 = load double, ptr %gep.us585.1, align 8, !tbaa !11
  %1252 = mul nsw i64 %1247, %1101
  %gep578.us.1 = getelementptr double, ptr %invariant.gep577, i64 %1252
  %1253 = load double, ptr %gep578.us.1, align 8, !tbaa !11
  %1254 = tail call double @llvm.fmuladd.f64(double %1249, double %1251, double %1253)
  store double %1254, ptr %gep578.us.1, align 8, !tbaa !11
  %1255 = add nuw nsw i64 %.17579.us, 2
  %exitcond780.not.1 = icmp eq i64 %1255, %1097
  br i1 %exitcond780.not.1, label %._crit_edge.us587, label %scalar.ph, !llvm.loop !172

.preheader557.us:                                 ; preds = %1221
  %invariant.gep.us586 = getelementptr double, ptr %5, i64 %1228
  %1256 = getelementptr inbounds double, ptr %1217, i64 %.22581.us
  %brmerge1349 = or i1 %min.iters.check, %1103
  br i1 %brmerge1349, label %scalar.ph.preheader, label %vector.memcheck

scalar.ph.preheader:                              ; preds = %.preheader557.us, %middle.block, %vector.memcheck
  %.17579.us.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader557.us ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod1308.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %1257 = load double, ptr %1256, align 8, !tbaa !11
  %1258 = fmul double %1257, %4
  %1259 = mul nsw i64 %.17579.us.ph, %1100
  %gep.us585.prol = getelementptr double, ptr %invariant.gep.us586, i64 %1259
  %1260 = load double, ptr %gep.us585.prol, align 8, !tbaa !11
  %1261 = mul nsw i64 %.17579.us.ph, %1101
  %gep578.us.prol = getelementptr double, ptr %invariant.gep577, i64 %1261
  %1262 = load double, ptr %gep578.us.prol, align 8, !tbaa !11
  %1263 = tail call double @llvm.fmuladd.f64(double %1258, double %1260, double %1262)
  store double %1263, ptr %gep578.us.prol, align 8, !tbaa !11
  %1264 = or disjoint i64 %.17579.us.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %.17579.us.unr = phi i64 [ %.17579.us.ph, %scalar.ph.preheader ], [ %1264, %scalar.ph.prol ]
  %1265 = icmp eq i64 %.17579.us.ph, %1104
  br i1 %1265, label %._crit_edge.us587, label %scalar.ph

vector.memcheck:                                  ; preds = %.preheader557.us
  %1266 = shl i64 %.22581.us, 3
  %scevgep849 = getelementptr i8, ptr %scevgep848, i64 %1266
  %1267 = shl nsw i64 %1228, 3
  %scevgep851 = getelementptr i8, ptr %scevgep850, i64 %1267
  %bound0 = icmp ult ptr %invariant.gep577, %scevgep849
  %bound1 = icmp ult ptr %1256, %scevgep847
  %found.conflict = and i1 %bound0, %bound1
  %bound0852 = icmp ult ptr %invariant.gep577, %scevgep851
  %bound1853 = icmp ult ptr %invariant.gep.us586, %scevgep847
  %found.conflict854 = and i1 %bound0852, %bound1853
  %conflict.rdx = or i1 %found.conflict, %found.conflict854
  br i1 %conflict.rdx, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %1268 = load double, ptr %1256, align 8, !tbaa !11, !alias.scope !173
  %broadcast.splatinsert857 = insertelement <2 x double> poison, double %1268, i64 0
  %broadcast.splat858 = shufflevector <2 x double> %broadcast.splatinsert857, <2 x double> poison, <2 x i32> zeroinitializer
  %1269 = fmul <2 x double> %broadcast.splat858, %broadcast.splat856
  %1270 = fmul <2 x double> %broadcast.splat858, %broadcast.splat856
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %1271 = getelementptr double, ptr %invariant.gep.us586, i64 %index
  %1272 = getelementptr i8, ptr %1271, i64 16
  %wide.load = load <2 x double>, ptr %1271, align 8, !tbaa !11, !alias.scope !176
  %wide.load859 = load <2 x double>, ptr %1272, align 8, !tbaa !11, !alias.scope !176
  %1273 = getelementptr double, ptr %invariant.gep577, i64 %index
  %1274 = getelementptr i8, ptr %1273, i64 16
  %wide.load860 = load <2 x double>, ptr %1273, align 8, !tbaa !11, !alias.scope !178, !noalias !180
  %wide.load861 = load <2 x double>, ptr %1274, align 8, !tbaa !11, !alias.scope !178, !noalias !180
  %1275 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1269, <2 x double> %wide.load, <2 x double> %wide.load860)
  %1276 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1270, <2 x double> %wide.load859, <2 x double> %wide.load861)
  store <2 x double> %1275, ptr %1273, align 8, !tbaa !11, !alias.scope !178, !noalias !180
  store <2 x double> %1276, ptr %1274, align 8, !tbaa !11, !alias.scope !178, !noalias !180
  %index.next = add nuw i64 %index, 4
  %1277 = icmp eq i64 %index.next, %n.vec
  br i1 %1277, label %middle.block, label %vector.body, !llvm.loop !181

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

._crit_edge.us587:                                ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %1278 = add nsw i64 %.22581.us, 1
  %1279 = add nsw i64 %.10501580.us, 1
  br label %1238

.critedge10:                                      ; preds = %1238, %.lr.ph583.split.us, %.lr.ph583, %1201
  %1280 = add nuw nsw i64 %.11588, 1
  %exitcond781.not = icmp eq i64 %1280, %1087
  br i1 %exitcond781.not, label %.loopexit, label %1201, !llvm.loop !182

.loopexit:                                        ; preds = %.critedge10, %.critedge8, %.critedge6, %._crit_edge622, %._crit_edge633, %._crit_edge644, %.critedge4, %.critedge2, %.critedge, %._crit_edge715, %._crit_edge726, %._crit_edge737, %.preheader558, %.preheader555, %.preheader552, %.preheader549, %.preheader546, %.preheader543, %.preheader531, %.preheader528, %.preheader525, %.preheader522, %.preheader519, %.preheader517
  ret i32 0
}

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

; 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>) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 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 = distinct !{!23, !24}
!24 = !{!"llvm.loop.unroll.disable"}
!25 = !{!6, !7, i64 8}
!26 = !{!6, !7, i64 0}
!27 = !{!28, !7, i64 16}
!28 = !{!"_ZTSN7qpOASES15SparseMatrixRowE", !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40}
!29 = !{!10, !10, i64 0}
!30 = !{!31}
!31 = distinct !{!31, !32}
!32 = distinct !{!32, !"LVerDomain"}
!33 = !{!34}
!34 = distinct !{!34, !32}
!35 = !{!36}
!36 = distinct !{!36, !32}
!37 = !{!31, !34}
!38 = distinct !{!38, !14, !16, !17}
!39 = distinct !{!39, !14, !16}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = !{!43}
!43 = distinct !{!43, !44}
!44 = distinct !{!44, !"LVerDomain"}
!45 = !{!46}
!46 = distinct !{!46, !44}
!47 = !{!48}
!48 = distinct !{!48, !44}
!49 = !{!43, !46}
!50 = distinct !{!50, !14, !16, !17}
!51 = distinct !{!51, !14, !16}
!52 = distinct !{!52, !14}
!53 = distinct !{!53, !14}
!54 = !{!55}
!55 = distinct !{!55, !56}
!56 = distinct !{!56, !"LVerDomain"}
!57 = !{!58}
!58 = distinct !{!58, !56}
!59 = !{!60}
!60 = distinct !{!60, !56}
!61 = !{!55, !58}
!62 = distinct !{!62, !14, !16, !17}
!63 = distinct !{!63, !14, !16}
!64 = distinct !{!64, !14}
!65 = distinct !{!65, !14}
!66 = distinct !{!66, !14}
!67 = distinct !{!67, !14, !16}
!68 = !{!69}
!69 = distinct !{!69, !70}
!70 = distinct !{!70, !"LVerDomain"}
!71 = !{!72}
!72 = distinct !{!72, !70}
!73 = !{!74}
!74 = distinct !{!74, !70}
!75 = !{!69, !72}
!76 = distinct !{!76, !14, !16, !17}
!77 = distinct !{!77, !14}
!78 = distinct !{!78, !14}
!79 = distinct !{!79, !14, !16}
!80 = !{!81}
!81 = distinct !{!81, !82}
!82 = distinct !{!82, !"LVerDomain"}
!83 = !{!84}
!84 = distinct !{!84, !82}
!85 = !{!86}
!86 = distinct !{!86, !82}
!87 = !{!81, !84}
!88 = distinct !{!88, !14, !16, !17}
!89 = distinct !{!89, !14}
!90 = distinct !{!90, !14}
!91 = distinct !{!91, !14, !16}
!92 = !{!93}
!93 = distinct !{!93, !94}
!94 = distinct !{!94, !"LVerDomain"}
!95 = !{!96}
!96 = distinct !{!96, !94}
!97 = !{!98}
!98 = distinct !{!98, !94}
!99 = !{!93, !96}
!100 = distinct !{!100, !14, !16, !17}
!101 = distinct !{!101, !14}
!102 = distinct !{!102, !14}
!103 = distinct !{!103, !24}
!104 = distinct !{!104, !14}
!105 = distinct !{!105, !14}
!106 = distinct !{!106, !24}
!107 = distinct !{!107, !14}
!108 = distinct !{!108, !14}
!109 = distinct !{!109, !24}
!110 = distinct !{!110, !14}
!111 = !{!112}
!112 = distinct !{!112, !113}
!113 = distinct !{!113, !"LVerDomain"}
!114 = !{!115}
!115 = distinct !{!115, !113}
!116 = !{!117}
!117 = distinct !{!117, !113}
!118 = !{!112, !115}
!119 = distinct !{!119, !14, !16, !17}
!120 = distinct !{!120, !14, !16}
!121 = distinct !{!121, !14}
!122 = distinct !{!122, !14}
!123 = !{!124}
!124 = distinct !{!124, !125}
!125 = distinct !{!125, !"LVerDomain"}
!126 = !{!127}
!127 = distinct !{!127, !125}
!128 = !{!129}
!129 = distinct !{!129, !125}
!130 = !{!124, !127}
!131 = distinct !{!131, !14, !16, !17}
!132 = distinct !{!132, !14, !16}
!133 = distinct !{!133, !14}
!134 = distinct !{!134, !14}
!135 = !{!136}
!136 = distinct !{!136, !137}
!137 = distinct !{!137, !"LVerDomain"}
!138 = !{!139}
!139 = distinct !{!139, !137}
!140 = !{!141}
!141 = distinct !{!141, !137}
!142 = !{!136, !139}
!143 = distinct !{!143, !14, !16, !17}
!144 = distinct !{!144, !14, !16}
!145 = distinct !{!145, !14}
!146 = distinct !{!146, !14}
!147 = distinct !{!147, !14}
!148 = distinct !{!148, !14, !16}
!149 = !{!150}
!150 = distinct !{!150, !151}
!151 = distinct !{!151, !"LVerDomain"}
!152 = !{!153}
!153 = distinct !{!153, !151}
!154 = !{!155}
!155 = distinct !{!155, !151}
!156 = !{!150, !153}
!157 = distinct !{!157, !14, !16, !17}
!158 = distinct !{!158, !14}
!159 = distinct !{!159, !14}
!160 = distinct !{!160, !14, !16}
!161 = !{!162}
!162 = distinct !{!162, !163}
!163 = distinct !{!163, !"LVerDomain"}
!164 = !{!165}
!165 = distinct !{!165, !163}
!166 = !{!167}
!167 = distinct !{!167, !163}
!168 = !{!162, !165}
!169 = distinct !{!169, !14, !16, !17}
!170 = distinct !{!170, !14}
!171 = distinct !{!171, !14}
!172 = distinct !{!172, !14, !16}
!173 = !{!174}
!174 = distinct !{!174, !175}
!175 = distinct !{!175, !"LVerDomain"}
!176 = !{!177}
!177 = distinct !{!177, !175}
!178 = !{!179}
!179 = distinct !{!179, !175}
!180 = !{!174, !177}
!181 = distinct !{!181, !14, !16, !17}
!182 = distinct !{!182, !14}


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