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

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

; 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #1

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7qpOASES14SQProblemSchur4copyERKS0_(ptr noundef nonnull align 8 dereferenceable(1256) %0, ptr noundef nonnull align 8 dereferenceable(1256) %1) #3 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %8 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  %9 = load ptr, ptr %4, align 8, !tbaa !5
  %10 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %9, i32 0, i32 1
  %11 = load ptr, ptr %10, align 8, !tbaa !9
  %12 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 1
  %13 = load ptr, ptr %12, align 8, !tbaa !9
  %14 = load ptr, ptr %13, align 8, !tbaa !28
  %15 = getelementptr inbounds ptr, ptr %14, i64 2
  %16 = load ptr, ptr %15, align 8
  %17 = call noundef nonnull align 8 dereferenceable(8) ptr %16(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %11)
  %18 = load ptr, ptr %4, align 8, !tbaa !5
  %19 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %18, i32 0, i32 3
  %20 = load i32, ptr %19, align 8, !tbaa !30
  %21 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  store i32 %20, ptr %21, align 8, !tbaa !30
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %22, i32 0, i32 4
  %24 = load i32, ptr %23, align 4, !tbaa !31
  %25 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  store i32 %24, ptr %25, align 4, !tbaa !31
  %26 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %27 = load i32, ptr %26, align 4, !tbaa !31
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %29, label %290

29:                                               ; preds = %2
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %30, i32 0, i32 7
  %32 = load double, ptr %31, align 8, !tbaa !32
  %33 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 7
  store double %32, ptr %33, align 8, !tbaa !32
  %34 = load ptr, ptr %4, align 8, !tbaa !5
  %35 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %34, i32 0, i32 8
  %36 = load double, ptr %35, align 8, !tbaa !33
  %37 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 8
  store double %36, ptr %37, align 8, !tbaa !33
  %38 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %39 = load i32, ptr %38, align 4, !tbaa !31
  %40 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %41 = load i32, ptr %40, align 4, !tbaa !31
  %42 = mul nsw i32 %39, %41
  %43 = sext i32 %42 to i64
  %44 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %43, i64 8)
  %45 = extractvalue { i64, i1 } %44, 1
  %46 = extractvalue { i64, i1 } %44, 0
  %47 = select i1 %45, i64 -1, i64 %46
  %48 = call noalias noundef nonnull ptr @_Znam(i64 noundef %47) #7
  %49 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 2
  store ptr %48, ptr %49, align 8, !tbaa !34
  %50 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %51 = load i32, ptr %50, align 4, !tbaa !31
  %52 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %53 = load i32, ptr %52, align 4, !tbaa !31
  %54 = mul nsw i32 %51, %53
  %55 = sext i32 %54 to i64
  %56 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %55, i64 8)
  %57 = extractvalue { i64, i1 } %56, 1
  %58 = extractvalue { i64, i1 } %56, 0
  %59 = select i1 %57, i64 -1, i64 %58
  %60 = call noalias noundef nonnull ptr @_Znam(i64 noundef %59) #7
  %61 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 5
  store ptr %60, ptr %61, align 8, !tbaa !35
  %62 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %63 = load i32, ptr %62, align 4, !tbaa !31
  %64 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %65 = load i32, ptr %64, align 4, !tbaa !31
  %66 = mul nsw i32 %63, %65
  %67 = sext i32 %66 to i64
  %68 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %67, i64 8)
  %69 = extractvalue { i64, i1 } %68, 1
  %70 = extractvalue { i64, i1 } %68, 0
  %71 = select i1 %69, i64 -1, i64 %70
  %72 = call noalias noundef nonnull ptr @_Znam(i64 noundef %71) #7
  %73 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 6
  store ptr %72, ptr %73, align 8, !tbaa !36
  %74 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %75 = load i32, ptr %74, align 4, !tbaa !31
  %76 = sext i32 %75 to i64
  %77 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %76, i64 4)
  %78 = extractvalue { i64, i1 } %77, 1
  %79 = extractvalue { i64, i1 } %77, 0
  %80 = select i1 %78, i64 -1, i64 %79
  %81 = call noalias noundef nonnull ptr @_Znam(i64 noundef %80) #7
  %82 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 10
  store ptr %81, ptr %82, align 8, !tbaa !37
  %83 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %84 = load i32, ptr %83, align 4, !tbaa !31
  %85 = sext i32 %84 to i64
  %86 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %85, i64 4)
  %87 = extractvalue { i64, i1 } %86, 1
  %88 = extractvalue { i64, i1 } %86, 0
  %89 = select i1 %87, i64 -1, i64 %88
  %90 = call noalias noundef nonnull ptr @_Znam(i64 noundef %89) #7
  %91 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 11
  store ptr %90, ptr %91, align 8, !tbaa !38
  %92 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %93 = load i32, ptr %92, align 8, !tbaa !30
  %94 = icmp sgt i32 %93, 0
  br i1 %94, label %95, label %200

95:                                               ; preds = %29
  store i32 0, ptr %5, align 4, !tbaa !39
  br label %96

96:                                               ; preds = %178, %95
  %97 = load i32, ptr %5, align 4, !tbaa !39
  %98 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %99 = load i32, ptr %98, align 8, !tbaa !30
  %100 = icmp slt i32 %97, %99
  br i1 %100, label %101, label %181

101:                                              ; preds = %96
  store i32 0, ptr %6, align 4, !tbaa !39
  br label %102

102:                                              ; preds = %174, %101
  %103 = load i32, ptr %6, align 4, !tbaa !39
  %104 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %105 = load i32, ptr %104, align 8, !tbaa !30
  %106 = icmp slt i32 %103, %105
  br i1 %106, label %107, label %177

107:                                              ; preds = %102
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %108, i32 0, i32 2
  %110 = load ptr, ptr %109, align 8, !tbaa !34
  %111 = load i32, ptr %5, align 4, !tbaa !39
  %112 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %113 = load i32, ptr %112, align 4, !tbaa !31
  %114 = mul nsw i32 %111, %113
  %115 = load i32, ptr %6, align 4, !tbaa !39
  %116 = add nsw i32 %114, %115
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds double, ptr %110, i64 %117
  %119 = load double, ptr %118, align 8, !tbaa !40
  %120 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 2
  %121 = load ptr, ptr %120, align 8, !tbaa !34
  %122 = load i32, ptr %5, align 4, !tbaa !39
  %123 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %124 = load i32, ptr %123, align 4, !tbaa !31
  %125 = mul nsw i32 %122, %124
  %126 = load i32, ptr %6, align 4, !tbaa !39
  %127 = add nsw i32 %125, %126
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds double, ptr %121, i64 %128
  store double %119, ptr %129, align 8, !tbaa !40
  %130 = load ptr, ptr %4, align 8, !tbaa !5
  %131 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %130, i32 0, i32 5
  %132 = load ptr, ptr %131, align 8, !tbaa !35
  %133 = load i32, ptr %5, align 4, !tbaa !39
  %134 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %135 = load i32, ptr %134, align 4, !tbaa !31
  %136 = mul nsw i32 %133, %135
  %137 = load i32, ptr %6, align 4, !tbaa !39
  %138 = add nsw i32 %136, %137
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds double, ptr %132, i64 %139
  %141 = load double, ptr %140, align 8, !tbaa !40
  %142 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 5
  %143 = load ptr, ptr %142, align 8, !tbaa !35
  %144 = load i32, ptr %5, align 4, !tbaa !39
  %145 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %146 = load i32, ptr %145, align 4, !tbaa !31
  %147 = mul nsw i32 %144, %146
  %148 = load i32, ptr %6, align 4, !tbaa !39
  %149 = add nsw i32 %147, %148
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds double, ptr %143, i64 %150
  store double %141, ptr %151, align 8, !tbaa !40
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %152, i32 0, i32 6
  %154 = load ptr, ptr %153, align 8, !tbaa !36
  %155 = load i32, ptr %5, align 4, !tbaa !39
  %156 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %157 = load i32, ptr %156, align 4, !tbaa !31
  %158 = mul nsw i32 %155, %157
  %159 = load i32, ptr %6, align 4, !tbaa !39
  %160 = add nsw i32 %158, %159
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds double, ptr %154, i64 %161
  %163 = load double, ptr %162, align 8, !tbaa !40
  %164 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 6
  %165 = load ptr, ptr %164, align 8, !tbaa !36
  %166 = load i32, ptr %5, align 4, !tbaa !39
  %167 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %168 = load i32, ptr %167, align 4, !tbaa !31
  %169 = mul nsw i32 %166, %168
  %170 = load i32, ptr %6, align 4, !tbaa !39
  %171 = add nsw i32 %169, %170
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds double, ptr %165, i64 %172
  store double %163, ptr %173, align 8, !tbaa !40
  br label %174

174:                                              ; preds = %107
  %175 = load i32, ptr %6, align 4, !tbaa !39
  %176 = add nsw i32 %175, 1
  store i32 %176, ptr %6, align 4, !tbaa !39
  br label %102, !llvm.loop !41

177:                                              ; preds = %102
  br label %178

178:                                              ; preds = %177
  %179 = load i32, ptr %5, align 4, !tbaa !39
  %180 = add nsw i32 %179, 1
  store i32 %180, ptr %5, align 4, !tbaa !39
  br label %96, !llvm.loop !43

181:                                              ; preds = %96
  %182 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 10
  %183 = load ptr, ptr %182, align 8, !tbaa !37
  %184 = load ptr, ptr %4, align 8, !tbaa !5
  %185 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %184, i32 0, i32 10
  %186 = load ptr, ptr %185, align 8, !tbaa !37
  %187 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %188 = load i32, ptr %187, align 8, !tbaa !30
  %189 = zext i32 %188 to i64
  %190 = mul i64 %189, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %183, ptr align 4 %186, i64 %190, i1 false)
  %191 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 11
  %192 = load ptr, ptr %191, align 8, !tbaa !38
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %193, i32 0, i32 11
  %195 = load ptr, ptr %194, align 8, !tbaa !38
  %196 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %197 = load i32, ptr %196, align 8, !tbaa !30
  %198 = zext i32 %197 to i64
  %199 = mul i64 %198, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %192, ptr align 4 %195, i64 %199, i1 false)
  br label %200

200:                                              ; preds = %181, %29
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %201, i32 0, i32 12
  %203 = load i32, ptr %202, align 8, !tbaa !44
  %204 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 12
  store i32 %203, ptr %204, align 8, !tbaa !44
  %205 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 12
  %206 = load i32, ptr %205, align 8, !tbaa !44
  %207 = icmp sgt i32 %206, 0
  br i1 %207, label %208, label %289

208:                                              ; preds = %200
  %209 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 12
  %210 = load i32, ptr %209, align 8, !tbaa !44
  %211 = sext i32 %210 to i64
  %212 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %211, i64 8)
  %213 = extractvalue { i64, i1 } %212, 1
  %214 = extractvalue { i64, i1 } %212, 0
  %215 = select i1 %213, i64 -1, i64 %214
  %216 = call noalias noundef nonnull ptr @_Znam(i64 noundef %215) #7
  %217 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 13
  store ptr %216, ptr %217, align 8, !tbaa !45
  %218 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 12
  %219 = load i32, ptr %218, align 8, !tbaa !44
  %220 = sext i32 %219 to i64
  %221 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %220, i64 4)
  %222 = extractvalue { i64, i1 } %221, 1
  %223 = extractvalue { i64, i1 } %221, 0
  %224 = select i1 %222, i64 -1, i64 %223
  %225 = call noalias noundef nonnull ptr @_Znam(i64 noundef %224) #7
  %226 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 14
  store ptr %225, ptr %226, align 8, !tbaa !46
  %227 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 4
  %228 = load i32, ptr %227, align 4, !tbaa !31
  %229 = add nsw i32 %228, 1
  %230 = sext i32 %229 to i64
  %231 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %230, i64 4)
  %232 = extractvalue { i64, i1 } %231, 1
  %233 = extractvalue { i64, i1 } %231, 0
  %234 = select i1 %232, i64 -1, i64 %233
  %235 = call noalias noundef nonnull ptr @_Znam(i64 noundef %234) #7
  %236 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 15
  store ptr %235, ptr %236, align 8, !tbaa !47
  %237 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %238 = load i32, ptr %237, align 8, !tbaa !30
  %239 = icmp sgt i32 %238, 0
  br i1 %239, label %240, label %274

240:                                              ; preds = %208
  %241 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 15
  %242 = load ptr, ptr %241, align 8, !tbaa !47
  %243 = load ptr, ptr %4, align 8, !tbaa !5
  %244 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %243, i32 0, i32 15
  %245 = load ptr, ptr %244, align 8, !tbaa !47
  %246 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %247 = load i32, ptr %246, align 8, !tbaa !30
  %248 = add nsw i32 %247, 1
  %249 = zext i32 %248 to i64
  %250 = mul i64 %249, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %242, ptr align 4 %245, i64 %250, i1 false)
  %251 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 15
  %252 = load ptr, ptr %251, align 8, !tbaa !47
  %253 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %254 = load i32, ptr %253, align 8, !tbaa !30
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %252, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !39
  store i32 %257, ptr %7, align 4, !tbaa !39
  %258 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 13
  %259 = load ptr, ptr %258, align 8, !tbaa !45
  %260 = load ptr, ptr %4, align 8, !tbaa !5
  %261 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %260, i32 0, i32 13
  %262 = load ptr, ptr %261, align 8, !tbaa !45
  %263 = load i32, ptr %7, align 4, !tbaa !39
  %264 = zext i32 %263 to i64
  %265 = mul i64 %264, 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %259, ptr align 8 %262, i64 %265, i1 false)
  %266 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 14
  %267 = load ptr, ptr %266, align 8, !tbaa !46
  %268 = load ptr, ptr %4, align 8, !tbaa !5
  %269 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %268, i32 0, i32 14
  %270 = load ptr, ptr %269, align 8, !tbaa !46
  %271 = load i32, ptr %7, align 4, !tbaa !39
  %272 = zext i32 %271 to i64
  %273 = mul i64 %272, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %267, ptr align 4 %270, i64 %273, i1 false)
  br label %288

274:                                              ; preds = %208
  %275 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 3
  %276 = load i32, ptr %275, align 8, !tbaa !30
  %277 = icmp eq i32 %276, 0
  br i1 %277, label %278, label %287

278:                                              ; preds = %274
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %279, i32 0, i32 15
  %281 = load ptr, ptr %280, align 8, !tbaa !47
  %282 = getelementptr inbounds i32, ptr %281, i64 0
  %283 = load i32, ptr %282, align 4, !tbaa !39
  %284 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 15
  %285 = load ptr, ptr %284, align 8, !tbaa !47
  %286 = getelementptr inbounds i32, ptr %285, i64 0
  store i32 %283, ptr %286, align 4, !tbaa !39
  br label %287

287:                                              ; preds = %278, %274
  br label %288

288:                                              ; preds = %287, %240
  br label %289

289:                                              ; preds = %288, %200
  br label %302

290:                                              ; preds = %2
  %291 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 2
  store ptr null, ptr %291, align 8, !tbaa !34
  %292 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 5
  store ptr null, ptr %292, align 8, !tbaa !35
  %293 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 6
  store ptr null, ptr %293, align 8, !tbaa !36
  %294 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 7
  store double 0.000000e+00, ptr %294, align 8, !tbaa !32
  %295 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 8
  store double 0.000000e+00, ptr %295, align 8, !tbaa !33
  %296 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 10
  store ptr null, ptr %296, align 8, !tbaa !37
  %297 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 11
  store ptr null, ptr %297, align 8, !tbaa !38
  %298 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 12
  store i32 0, ptr %298, align 8, !tbaa !44
  %299 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 13
  store ptr null, ptr %299, align 8, !tbaa !45
  %300 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 14
  store ptr null, ptr %300, align 8, !tbaa !46
  %301 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 15
  store ptr null, ptr %301, align 8, !tbaa !47
  br label %302

302:                                              ; preds = %290, %289
  %303 = load ptr, ptr %4, align 8, !tbaa !5
  %304 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %303, i32 0, i32 9
  %305 = load i32, ptr %304, align 8, !tbaa !48
  %306 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 9
  store i32 %305, ptr %306, align 8, !tbaa !48
  %307 = load ptr, ptr %4, align 8, !tbaa !5
  %308 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %307, i32 0, i32 16
  %309 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 16
  %310 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN7qpOASES9IndexlistaSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %309, ptr noundef nonnull align 8 dereferenceable(36) %308)
  %311 = load ptr, ptr %4, align 8, !tbaa !5
  %312 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %311, i32 0, i32 17
  %313 = getelementptr inbounds %"class.qpOASES::SQProblemSchur", ptr %8, i32 0, i32 17
  %314 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN7qpOASES9IndexlistaSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %313, ptr noundef nonnull align 8 dereferenceable(36) %312)
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  ret i32 0
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare noundef nonnull align 8 dereferenceable(36) ptr @_ZN7qpOASES9IndexlistaSERKS0_(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(36)) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { builtin allocsize(0) }

!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, !6, i64 1064}
!10 = !{!"_ZTSN7qpOASES14SQProblemSchurE", !11, i64 0, !6, i64 1064, !6, i64 1072, !17, i64 1080, !17, i64 1084, !6, i64 1088, !6, i64 1096, !19, i64 1104, !19, i64 1112, !17, i64 1120, !6, i64 1128, !6, i64 1136, !17, i64 1144, !6, i64 1152, !6, i64 1160, !6, i64 1168, !18, i64 1176, !18, i64 1216}
!11 = !{!"_ZTSN7qpOASES9SQProblemE", !12, i64 0}
!12 = !{!"_ZTSN7qpOASES8QProblemE", !13, i64 0, !14, i64 800, !6, i64 808, !6, i64 816, !6, i64 824, !26, i64 832, !6, i64 952, !6, i64 960, !17, i64 968, !6, i64 976, !6, i64 984, !6, i64 992, !6, i64 1000, !6, i64 1008, !6, i64 1016, !6, i64 1024, !6, i64 1032, !6, i64 1040, !6, i64 1048, !6, i64 1056}
!13 = !{!"_ZTSN7qpOASES9QProblemBE", !14, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !15, i64 48, !6, i64 168, !14, i64 176, !6, i64 184, !6, i64 192, !19, i64 200, !20, i64 208, !14, i64 212, !14, i64 216, !21, i64 220, !19, i64 224, !17, i64 232, !6, i64 240, !19, i64 248, !19, i64 256, !17, i64 264, !22, i64 272, !25, i64 496, !27, i64 768}
!14 = !{!"_ZTSN7qpOASES11BooleanTypeE", !7, i64 0}
!15 = !{!"_ZTSN7qpOASES6BoundsE", !16, i64 0, !18, i64 40, !18, i64 80}
!16 = !{!"_ZTSN7qpOASES9SubjectToE", !17, i64 8, !6, i64 16, !6, i64 24, !14, i64 32, !14, i64 36}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTSN7qpOASES9IndexlistE", !6, i64 0, !6, i64 8, !17, i64 16, !17, i64 20, !17, i64 24, !17, i64 28, !17, i64 32}
!19 = !{!"double", !7, i64 0}
!20 = !{!"_ZTSN7qpOASES14QProblemStatusE", !7, i64 0}
!21 = !{!"_ZTSN7qpOASES11HessianTypeE", !7, i64 0}
!22 = !{!"_ZTSN7qpOASES7OptionsE", !23, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !17, i64 28, !17, i64 32, !14, i64 36, !19, i64 40, !19, i64 48, !19, i64 56, !19, i64 64, !19, i64 72, !19, i64 80, !19, i64 88, !19, i64 96, !19, i64 104, !19, i64 112, !19, i64 120, !24, i64 128, !19, i64 136, !17, i64 144, !19, i64 152, !17, i64 160, !19, i64 168, !19, i64 176, !19, i64 184, !19, i64 192, !14, i64 200, !14, i64 204, !17, i64 208, !17, i64 212, !17, i64 216}
!23 = !{!"_ZTSN7qpOASES10PrintLevelE", !7, i64 0}
!24 = !{!"_ZTSN7qpOASES15SubjectToStatusE", !7, i64 0}
!25 = !{!"_ZTSN7qpOASES7FlipperE", !17, i64 0, !17, i64 4, !15, i64 8, !26, i64 128, !6, i64 248, !6, i64 256, !6, i64 264}
!26 = !{!"_ZTSN7qpOASES11ConstraintsE", !16, i64 0, !18, i64 40, !18, i64 80}
!27 = !{!"_ZTSN7qpOASES13TabularOutputE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !17, i64 24, !17, i64 28}
!28 = !{!29, !29, i64 0}
!29 = !{!"vtable pointer", !8, i64 0}
!30 = !{!10, !17, i64 1080}
!31 = !{!10, !17, i64 1084}
!32 = !{!10, !19, i64 1104}
!33 = !{!10, !19, i64 1112}
!34 = !{!10, !6, i64 1072}
!35 = !{!10, !6, i64 1088}
!36 = !{!10, !6, i64 1096}
!37 = !{!10, !6, i64 1128}
!38 = !{!10, !6, i64 1136}
!39 = !{!17, !17, i64 0}
!40 = !{!19, !19, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = distinct !{!43, !42}
!44 = !{!10, !17, i64 1144}
!45 = !{!10, !6, i64 1152}
!46 = !{!10, !6, i64 1160}
!47 = !{!10, !6, i64 1168}
!48 = !{!10, !17, i64 1120}


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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7qpOASES14SQProblemSchur4copyERKS0_(ptr noundef nonnull align 8 dereferenceable(1256) %0, ptr noundef nonnull align 8 dereferenceable(1256) %1) local_unnamed_addr #1 align 2 {
  %3 = getelementptr inbounds i8, ptr %1, i64 1064
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 1064
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %7 = load ptr, ptr %6, align 8, !tbaa !27
  %8 = getelementptr inbounds i8, ptr %7, i64 16
  %9 = load ptr, ptr %8, align 8
  %10 = tail call noundef nonnull align 8 dereferenceable(8) ptr %9(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %4)
  %11 = getelementptr inbounds i8, ptr %1, i64 1080
  %12 = load i32, ptr %11, align 8, !tbaa !29
  %13 = getelementptr inbounds i8, ptr %0, i64 1080
  store i32 %12, ptr %13, align 8, !tbaa !29
  %14 = getelementptr inbounds i8, ptr %1, i64 1084
  %15 = load i32, ptr %14, align 4, !tbaa !30
  %16 = getelementptr inbounds i8, ptr %0, i64 1084
  store i32 %15, ptr %16, align 4, !tbaa !30
  %17 = icmp sgt i32 %15, 0
  br i1 %17, label %18, label %154

18:                                               ; preds = %2
  %19 = getelementptr inbounds i8, ptr %1, i64 1104
  %20 = getelementptr inbounds i8, ptr %0, i64 1104
  %21 = load <2 x double>, ptr %19, align 8, !tbaa !31
  store <2 x double> %21, ptr %20, align 8, !tbaa !31
  %22 = mul nuw nsw i32 %15, %15
  %23 = zext nneg i32 %22 to i64
  %24 = shl nuw nsw i64 %23, 3
  %25 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %24) #5
  %26 = getelementptr inbounds i8, ptr %0, i64 1072
  store ptr %25, ptr %26, align 8, !tbaa !32
  %27 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %24) #5
  %28 = getelementptr inbounds i8, ptr %0, i64 1088
  store ptr %27, ptr %28, align 8, !tbaa !33
  %29 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %24) #5
  %30 = getelementptr inbounds i8, ptr %0, i64 1096
  store ptr %29, ptr %30, align 8, !tbaa !34
  %31 = zext nneg i32 %15 to i64
  %32 = shl nuw nsw i64 %31, 2
  %33 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %32) #5
  %34 = getelementptr inbounds i8, ptr %0, i64 1128
  store ptr %33, ptr %34, align 8, !tbaa !35
  %35 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %32) #5
  %36 = getelementptr inbounds i8, ptr %0, i64 1136
  store ptr %35, ptr %36, align 8, !tbaa !36
  %37 = icmp sgt i32 %12, 0
  br i1 %37, label %.preheader40, label %114

.preheader40:                                     ; preds = %18
  %38 = ptrtoint ptr %29 to i64
  %39 = ptrtoint ptr %27 to i64
  %40 = ptrtoint ptr %25 to i64
  %41 = getelementptr inbounds i8, ptr %1, i64 1072
  %42 = load ptr, ptr %41, align 8
  %43 = ptrtoint ptr %42 to i64
  %44 = getelementptr inbounds i8, ptr %1, i64 1088
  %45 = load ptr, ptr %44, align 8
  %46 = ptrtoint ptr %45 to i64
  %47 = getelementptr inbounds i8, ptr %1, i64 1096
  %48 = load ptr, ptr %47, align 8
  %49 = ptrtoint ptr %48 to i64
  %wide.trip.count47 = zext nneg i32 %12 to i64
  %50 = sub i64 %39, %40
  %51 = sub i64 %38, %40
  %52 = sub i64 %40, %43
  %53 = sub i64 %46, %40
  %54 = sub i64 %49, %40
  %55 = sub i64 %38, %39
  %56 = sub i64 %39, %43
  %57 = sub i64 %39, %46
  %58 = sub i64 %49, %39
  %59 = sub i64 %38, %43
  %60 = sub i64 %38, %46
  %61 = sub i64 %38, %49
  %min.iters.check = icmp ult i32 %12, 14
  %diff.check = icmp ult i64 %50, 32
  %diff.check49 = icmp ult i64 %51, 32
  %conflict.rdx = or i1 %diff.check, %diff.check49
  %diff.check50 = icmp ult i64 %52, 32
  %conflict.rdx51 = or i1 %conflict.rdx, %diff.check50
  %diff.check52 = icmp ult i64 %53, 32
  %conflict.rdx53 = or i1 %conflict.rdx51, %diff.check52
  %diff.check54 = icmp ult i64 %54, 32
  %conflict.rdx55 = or i1 %conflict.rdx53, %diff.check54
  %diff.check56 = icmp ult i64 %55, 32
  %conflict.rdx57 = or i1 %conflict.rdx55, %diff.check56
  %diff.check58 = icmp ult i64 %56, 32
  %conflict.rdx59 = or i1 %conflict.rdx57, %diff.check58
  %diff.check60 = icmp ult i64 %57, 32
  %conflict.rdx61 = or i1 %conflict.rdx59, %diff.check60
  %diff.check62 = icmp ult i64 %58, 32
  %conflict.rdx63 = or i1 %conflict.rdx61, %diff.check62
  %diff.check64 = icmp ult i64 %59, 32
  %conflict.rdx65 = or i1 %conflict.rdx63, %diff.check64
  %diff.check66 = icmp ult i64 %60, 32
  %conflict.rdx67 = or i1 %conflict.rdx65, %diff.check66
  %diff.check68 = icmp ult i64 %61, 32
  %conflict.rdx69 = or i1 %conflict.rdx67, %diff.check68
  %n.vec = and i64 %wide.trip.count47, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count47
  %xtraiter = and i64 %wide.trip.count47, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %62 = add nsw i64 %wide.trip.count47, -1
  br label %.preheader.us

.preheader.us:                                    ; preds = %._crit_edge.us, %.preheader40
  %indvars.iv44 = phi i64 [ %indvars.iv.next45, %._crit_edge.us ], [ 0, %.preheader40 ]
  %63 = mul nuw nsw i64 %indvars.iv44, %31
  %brmerge = select i1 %min.iters.check, i1 true, i1 %conflict.rdx69
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader.us ]
  %64 = add nuw nsw i64 %index, %63
  %65 = getelementptr inbounds double, ptr %42, i64 %64
  %66 = getelementptr inbounds i8, ptr %65, i64 16
  %wide.load = load <2 x double>, ptr %65, align 8, !tbaa !31
  %wide.load70 = load <2 x double>, ptr %66, align 8, !tbaa !31
  %67 = getelementptr inbounds double, ptr %25, i64 %64
  %68 = getelementptr inbounds i8, ptr %67, i64 16
  store <2 x double> %wide.load, ptr %67, align 8, !tbaa !31
  store <2 x double> %wide.load70, ptr %68, align 8, !tbaa !31
  %69 = getelementptr inbounds double, ptr %45, i64 %64
  %70 = getelementptr inbounds i8, ptr %69, i64 16
  %wide.load71 = load <2 x double>, ptr %69, align 8, !tbaa !31
  %wide.load72 = load <2 x double>, ptr %70, align 8, !tbaa !31
  %71 = getelementptr inbounds double, ptr %27, i64 %64
  %72 = getelementptr inbounds i8, ptr %71, i64 16
  store <2 x double> %wide.load71, ptr %71, align 8, !tbaa !31
  store <2 x double> %wide.load72, ptr %72, align 8, !tbaa !31
  %73 = getelementptr inbounds double, ptr %48, i64 %64
  %74 = getelementptr inbounds i8, ptr %73, i64 16
  %wide.load73 = load <2 x double>, ptr %73, align 8, !tbaa !31
  %wide.load74 = load <2 x double>, ptr %74, align 8, !tbaa !31
  %75 = getelementptr inbounds double, ptr %29, i64 %64
  %76 = getelementptr inbounds i8, ptr %75, i64 16
  store <2 x double> %wide.load73, ptr %75, align 8, !tbaa !31
  store <2 x double> %wide.load74, ptr %76, align 8, !tbaa !31
  %index.next = add nuw i64 %index, 4
  %77 = icmp eq i64 %index.next, %n.vec
  br i1 %77, label %middle.block, label %vector.body, !llvm.loop !37

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

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

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %78 = add nuw nsw i64 %indvars.iv.ph, %63
  %79 = getelementptr inbounds double, ptr %42, i64 %78
  %80 = load double, ptr %79, align 8, !tbaa !31
  %81 = getelementptr inbounds double, ptr %25, i64 %78
  store double %80, ptr %81, align 8, !tbaa !31
  %82 = getelementptr inbounds double, ptr %45, i64 %78
  %83 = load double, ptr %82, align 8, !tbaa !31
  %84 = getelementptr inbounds double, ptr %27, i64 %78
  store double %83, ptr %84, align 8, !tbaa !31
  %85 = getelementptr inbounds double, ptr %48, i64 %78
  %86 = load double, ptr %85, align 8, !tbaa !31
  %87 = getelementptr inbounds double, ptr %29, i64 %78
  store double %86, ptr %87, align 8, !tbaa !31
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %88 = icmp eq i64 %indvars.iv.ph, %62
  br i1 %88, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %89 = add nuw nsw i64 %indvars.iv, %63
  %90 = getelementptr inbounds double, ptr %42, i64 %89
  %91 = load double, ptr %90, align 8, !tbaa !31
  %92 = getelementptr inbounds double, ptr %25, i64 %89
  store double %91, ptr %92, align 8, !tbaa !31
  %93 = getelementptr inbounds double, ptr %45, i64 %89
  %94 = load double, ptr %93, align 8, !tbaa !31
  %95 = getelementptr inbounds double, ptr %27, i64 %89
  store double %94, ptr %95, align 8, !tbaa !31
  %96 = getelementptr inbounds double, ptr %48, i64 %89
  %97 = load double, ptr %96, align 8, !tbaa !31
  %98 = getelementptr inbounds double, ptr %29, i64 %89
  store double %97, ptr %98, align 8, !tbaa !31
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %99 = add nuw nsw i64 %indvars.iv.next, %63
  %100 = getelementptr inbounds double, ptr %42, i64 %99
  %101 = load double, ptr %100, align 8, !tbaa !31
  %102 = getelementptr inbounds double, ptr %25, i64 %99
  store double %101, ptr %102, align 8, !tbaa !31
  %103 = getelementptr inbounds double, ptr %45, i64 %99
  %104 = load double, ptr %103, align 8, !tbaa !31
  %105 = getelementptr inbounds double, ptr %27, i64 %99
  store double %104, ptr %105, align 8, !tbaa !31
  %106 = getelementptr inbounds double, ptr %48, i64 %99
  %107 = load double, ptr %106, align 8, !tbaa !31
  %108 = getelementptr inbounds double, ptr %29, i64 %99
  store double %107, ptr %108, align 8, !tbaa !31
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count47
  br i1 %exitcond.not.1, label %._crit_edge.us, label %scalar.ph, !llvm.loop !41

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next45 = add nuw nsw i64 %indvars.iv44, 1
  %exitcond48.not = icmp eq i64 %indvars.iv.next45, %wide.trip.count47
  br i1 %exitcond48.not, label %.split.us, label %.preheader.us, !llvm.loop !42

.split.us:                                        ; preds = %._crit_edge.us
  %109 = getelementptr inbounds i8, ptr %1, i64 1128
  %110 = load ptr, ptr %109, align 8, !tbaa !35
  %111 = shl nuw nsw i64 %wide.trip.count47, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %33, ptr align 4 %110, i64 %111, i1 false)
  %112 = getelementptr inbounds i8, ptr %1, i64 1136
  %113 = load ptr, ptr %112, align 8, !tbaa !36
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %35, ptr align 4 %113, i64 %111, i1 false)
  br label %114

114:                                              ; preds = %.split.us, %18
  %115 = getelementptr inbounds i8, ptr %1, i64 1144
  %116 = load i32, ptr %115, align 8, !tbaa !43
  %117 = getelementptr inbounds i8, ptr %0, i64 1144
  store i32 %116, ptr %117, align 8, !tbaa !43
  %118 = icmp sgt i32 %116, 0
  br i1 %118, label %119, label %159

119:                                              ; preds = %114
  %120 = zext nneg i32 %116 to i64
  %121 = shl nuw nsw i64 %120, 3
  %122 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %121) #5
  %123 = getelementptr inbounds i8, ptr %0, i64 1152
  store ptr %122, ptr %123, align 8, !tbaa !44
  %124 = shl nuw nsw i64 %120, 2
  %125 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %124) #5
  %126 = getelementptr inbounds i8, ptr %0, i64 1160
  store ptr %125, ptr %126, align 8, !tbaa !45
  %127 = add nuw nsw i32 %15, 1
  %128 = zext nneg i32 %127 to i64
  %129 = shl nuw nsw i64 %128, 2
  %130 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %129) #5
  %131 = getelementptr inbounds i8, ptr %0, i64 1168
  store ptr %130, ptr %131, align 8, !tbaa !46
  br i1 %37, label %132, label %148

132:                                              ; preds = %119
  %133 = getelementptr inbounds i8, ptr %1, i64 1168
  %134 = load ptr, ptr %133, align 8, !tbaa !46
  %135 = add nuw nsw i32 %12, 1
  %136 = zext nneg i32 %135 to i64
  %137 = shl nuw nsw i64 %136, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %130, ptr noundef nonnull align 4 dereferenceable(1) %134, i64 %137, i1 false)
  %138 = zext nneg i32 %12 to i64
  %139 = getelementptr inbounds i32, ptr %130, i64 %138
  %140 = load i32, ptr %139, align 4, !tbaa !47
  %141 = getelementptr inbounds i8, ptr %1, i64 1152
  %142 = load ptr, ptr %141, align 8, !tbaa !44
  %143 = zext i32 %140 to i64
  %144 = shl nuw nsw i64 %143, 3
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %122, ptr align 8 %142, i64 %144, i1 false)
  %145 = getelementptr inbounds i8, ptr %1, i64 1160
  %146 = load ptr, ptr %145, align 8, !tbaa !45
  %147 = shl nuw nsw i64 %143, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %125, ptr align 4 %146, i64 %147, i1 false)
  br label %159

148:                                              ; preds = %119
  %149 = icmp eq i32 %12, 0
  br i1 %149, label %150, label %159

150:                                              ; preds = %148
  %151 = getelementptr inbounds i8, ptr %1, i64 1168
  %152 = load ptr, ptr %151, align 8, !tbaa !46
  %153 = load i32, ptr %152, align 4, !tbaa !47
  store i32 %153, ptr %130, align 4, !tbaa !47
  br label %159

154:                                              ; preds = %2
  %155 = getelementptr inbounds i8, ptr %0, i64 1072
  store ptr null, ptr %155, align 8, !tbaa !32
  %156 = getelementptr inbounds i8, ptr %0, i64 1088
  %157 = getelementptr inbounds i8, ptr %0, i64 1128
  %158 = getelementptr inbounds i8, ptr %0, i64 1152
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(32) %156, i8 0, i64 32, i1 false)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(20) %157, i8 0, i64 20, i1 false)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %158, i8 0, i64 24, i1 false)
  br label %159

159:                                              ; preds = %114, %148, %150, %132, %154
  %160 = getelementptr inbounds i8, ptr %1, i64 1120
  %161 = load i32, ptr %160, align 8, !tbaa !48
  %162 = getelementptr inbounds i8, ptr %0, i64 1120
  store i32 %161, ptr %162, align 8, !tbaa !48
  %163 = getelementptr inbounds i8, ptr %1, i64 1176
  %164 = getelementptr inbounds i8, ptr %0, i64 1176
  %165 = tail call noundef nonnull align 8 dereferenceable(36) ptr @_ZN7qpOASES9IndexlistaSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %164, ptr noundef nonnull align 8 dereferenceable(36) %163)
  %166 = getelementptr inbounds i8, ptr %1, i64 1216
  %167 = getelementptr inbounds i8, ptr %0, i64 1216
  %168 = tail call noundef nonnull align 8 dereferenceable(36) ptr @_ZN7qpOASES9IndexlistaSERKS0_(ptr noundef nonnull align 8 dereferenceable(36) %167, ptr noundef nonnull align 8 dereferenceable(36) %166)
  ret i32 0
}

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

declare noundef nonnull align 8 dereferenceable(36) ptr @_ZN7qpOASES9IndexlistaSERKS0_(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef nonnull align 8 dereferenceable(36)) local_unnamed_addr #3

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

attributes #0 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { builtin allocsize(0) }

!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, !13, i64 1064}
!6 = !{!"_ZTSN7qpOASES14SQProblemSchurE", !7, i64 0, !13, i64 1064, !13, i64 1072, !16, i64 1080, !16, i64 1084, !13, i64 1088, !13, i64 1096, !18, i64 1104, !18, i64 1112, !16, i64 1120, !13, i64 1128, !13, i64 1136, !16, i64 1144, !13, i64 1152, !13, i64 1160, !13, i64 1168, !17, i64 1176, !17, i64 1216}
!7 = !{!"_ZTSN7qpOASES9SQProblemE", !8, i64 0}
!8 = !{!"_ZTSN7qpOASES8QProblemE", !9, i64 0, !10, i64 800, !13, i64 808, !13, i64 816, !13, i64 824, !25, i64 832, !13, i64 952, !13, i64 960, !16, i64 968, !13, i64 976, !13, i64 984, !13, i64 992, !13, i64 1000, !13, i64 1008, !13, i64 1016, !13, i64 1024, !13, i64 1032, !13, i64 1040, !13, i64 1048, !13, i64 1056}
!9 = !{!"_ZTSN7qpOASES9QProblemBE", !10, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !14, i64 48, !13, i64 168, !10, i64 176, !13, i64 184, !13, i64 192, !18, i64 200, !19, i64 208, !10, i64 212, !10, i64 216, !20, i64 220, !18, i64 224, !16, i64 232, !13, i64 240, !18, i64 248, !18, i64 256, !16, i64 264, !21, i64 272, !24, i64 496, !26, i64 768}
!10 = !{!"_ZTSN7qpOASES11BooleanTypeE", !11, i64 0}
!11 = !{!"omnipotent char", !12, i64 0}
!12 = !{!"Simple C++ TBAA"}
!13 = !{!"any pointer", !11, i64 0}
!14 = !{!"_ZTSN7qpOASES6BoundsE", !15, i64 0, !17, i64 40, !17, i64 80}
!15 = !{!"_ZTSN7qpOASES9SubjectToE", !16, i64 8, !13, i64 16, !13, i64 24, !10, i64 32, !10, i64 36}
!16 = !{!"int", !11, i64 0}
!17 = !{!"_ZTSN7qpOASES9IndexlistE", !13, i64 0, !13, i64 8, !16, i64 16, !16, i64 20, !16, i64 24, !16, i64 28, !16, i64 32}
!18 = !{!"double", !11, i64 0}
!19 = !{!"_ZTSN7qpOASES14QProblemStatusE", !11, i64 0}
!20 = !{!"_ZTSN7qpOASES11HessianTypeE", !11, i64 0}
!21 = !{!"_ZTSN7qpOASES7OptionsE", !22, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !16, i64 28, !16, i64 32, !10, i64 36, !18, i64 40, !18, i64 48, !18, i64 56, !18, i64 64, !18, i64 72, !18, i64 80, !18, i64 88, !18, i64 96, !18, i64 104, !18, i64 112, !18, i64 120, !23, i64 128, !18, i64 136, !16, i64 144, !18, i64 152, !16, i64 160, !18, i64 168, !18, i64 176, !18, i64 184, !18, i64 192, !10, i64 200, !10, i64 204, !16, i64 208, !16, i64 212, !16, i64 216}
!22 = !{!"_ZTSN7qpOASES10PrintLevelE", !11, i64 0}
!23 = !{!"_ZTSN7qpOASES15SubjectToStatusE", !11, i64 0}
!24 = !{!"_ZTSN7qpOASES7FlipperE", !16, i64 0, !16, i64 4, !14, i64 8, !25, i64 128, !13, i64 248, !13, i64 256, !13, i64 264}
!25 = !{!"_ZTSN7qpOASES11ConstraintsE", !15, i64 0, !17, i64 40, !17, i64 80}
!26 = !{!"_ZTSN7qpOASES13TabularOutputE", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24, !16, i64 28}
!27 = !{!28, !28, i64 0}
!28 = !{!"vtable pointer", !12, i64 0}
!29 = !{!6, !16, i64 1080}
!30 = !{!6, !16, i64 1084}
!31 = !{!18, !18, i64 0}
!32 = !{!6, !13, i64 1072}
!33 = !{!6, !13, i64 1088}
!34 = !{!6, !13, i64 1096}
!35 = !{!6, !13, i64 1128}
!36 = !{!6, !13, i64 1136}
!37 = distinct !{!37, !38, !39, !40}
!38 = !{!"llvm.loop.mustprogress"}
!39 = !{!"llvm.loop.isvectorized", i32 1}
!40 = !{!"llvm.loop.unroll.runtime.disable"}
!41 = distinct !{!41, !38, !39}
!42 = distinct !{!42, !38}
!43 = !{!6, !16, i64 1144}
!44 = !{!6, !13, i64 1152}
!45 = !{!6, !13, i64 1160}
!46 = !{!6, !13, i64 1168}
!47 = !{!16, !16, i64 0}
!48 = !{!6, !16, i64 1120}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MemCpyOptPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass