; LLVM IR from darnstrom/daqp :: src (hierarchical)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.DAQPWorkspace = type { ptr, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, ptr, ptr, ptr, ptr, i32, ptr, i32, i32, i32, double, ptr, ptr, i32, ptr }
%struct.DAQPSettings = type { double, double, double, double, double, i32, i32, double, double, double, double, double, double }

; Function Attrs: nounwind uwtable
define dso_local i32 @daqp_hiqp(ptr noundef %0) #0 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca double, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  store i32 0, ptr %10, align 4, !tbaa !9
  %16 = load ptr, ptr %3, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.DAQPWorkspace, ptr %16, i32 0, i32 30
  %18 = load i32, ptr %17, align 8, !tbaa !11
  %19 = icmp slt i32 %18, 2
  br i1 %19, label %20, label %23

20:                                               ; preds = %1
  %21 = load ptr, ptr %3, align 8, !tbaa !5
  %22 = call i32 @daqp_ldp(ptr noundef %21)
  store i32 %22, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %398

23:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.DAQPWorkspace, ptr %24, i32 0, i32 31
  %26 = load ptr, ptr %25, align 8, !tbaa !14
  %27 = getelementptr inbounds i32, ptr %26, i64 0
  %28 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %28, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  %29 = load ptr, ptr %3, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.DAQPWorkspace, ptr %29, i32 0, i32 1
  %31 = load i32, ptr %30, align 8, !tbaa !15
  store i32 %31, ptr %13, align 4, !tbaa !9
  store i32 1, ptr %4, align 4, !tbaa !9
  br label %32

32:                                               ; preds = %361, %23
  %33 = load i32, ptr %4, align 4, !tbaa !9
  %34 = load ptr, ptr %3, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.DAQPWorkspace, ptr %34, i32 0, i32 30
  %36 = load i32, ptr %35, align 8, !tbaa !11
  %37 = icmp slt i32 %33, %36
  br i1 %37, label %38, label %364

38:                                               ; preds = %32
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.DAQPWorkspace, ptr %39, i32 0, i32 31
  %41 = load ptr, ptr %40, align 8, !tbaa !14
  %42 = load i32, ptr %4, align 4, !tbaa !9
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds i32, ptr %41, i64 %43
  %45 = load i32, ptr %44, align 4, !tbaa !9
  store i32 %45, ptr %8, align 4, !tbaa !9
  %46 = load i32, ptr %8, align 4, !tbaa !9
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.DAQPWorkspace, ptr %47, i32 0, i32 2
  store i32 %46, ptr %48, align 4, !tbaa !16
  %49 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %49, ptr %5, align 4, !tbaa !9
  br label %50

50:                                               ; preds = %98, %38
  %51 = load i32, ptr %5, align 4, !tbaa !9
  %52 = load i32, ptr %8, align 4, !tbaa !9
  %53 = icmp slt i32 %51, %52
  br i1 %53, label %54, label %101

54:                                               ; preds = %50
  %55 = load ptr, ptr %3, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.DAQPWorkspace, ptr %55, i32 0, i32 9
  %57 = load ptr, ptr %56, align 8, !tbaa !17
  %58 = load i32, ptr %5, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i32, ptr %57, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !9
  %62 = or i32 %61, 8
  store i32 %62, ptr %60, align 4, !tbaa !9
  %63 = load ptr, ptr %3, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.DAQPWorkspace, ptr %63, i32 0, i32 9
  %65 = load ptr, ptr %64, align 8, !tbaa !17
  %66 = load i32, ptr %5, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds i32, ptr %65, i64 %67
  %69 = load i32, ptr %68, align 4, !tbaa !9
  %70 = and i32 %69, 1
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %72, label %97

72:                                               ; preds = %54
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.DAQPWorkspace, ptr %73, i32 0, i32 9
  %75 = load ptr, ptr %74, align 8, !tbaa !17
  %76 = load i32, ptr %5, align 4, !tbaa !9
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds i32, ptr %75, i64 %77
  %79 = load i32, ptr %78, align 4, !tbaa !9
  %80 = and i32 %79, 2
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %85

82:                                               ; preds = %72
  %83 = load ptr, ptr %3, align 8, !tbaa !5
  %84 = load i32, ptr %5, align 4, !tbaa !9
  call void @add_constraint(ptr noundef %83, i32 noundef %84, double noundef -1.000000e+00)
  br label %88

85:                                               ; preds = %72
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = load i32, ptr %5, align 4, !tbaa !9
  call void @add_constraint(ptr noundef %86, i32 noundef %87, double noundef 1.000000e+00)
  br label %88

88:                                               ; preds = %85, %82
  %89 = load i32, ptr %13, align 4, !tbaa !9
  %90 = add nsw i32 %89, -1
  store i32 %90, ptr %13, align 4, !tbaa !9
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.DAQPWorkspace, ptr %91, i32 0, i32 26
  %93 = load i32, ptr %92, align 8, !tbaa !18
  %94 = icmp ne i32 %93, -1
  br i1 %94, label %95, label %96

95:                                               ; preds = %88
  store i32 -6, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %397

96:                                               ; preds = %88
  br label %97

97:                                               ; preds = %96, %54
  br label %98

98:                                               ; preds = %97
  %99 = load i32, ptr %5, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %5, align 4, !tbaa !9
  br label %50, !llvm.loop !19

101:                                              ; preds = %50
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %102

102:                                              ; preds = %122, %101
  %103 = load i32, ptr %5, align 4, !tbaa !9
  %104 = load ptr, ptr %3, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.DAQPWorkspace, ptr %104, i32 0, i32 1
  %106 = load i32, ptr %105, align 8, !tbaa !15
  %107 = icmp slt i32 %103, %106
  br i1 %107, label %108, label %125

108:                                              ; preds = %102
  %109 = load ptr, ptr %3, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.DAQPWorkspace, ptr %109, i32 0, i32 12
  %111 = load ptr, ptr %110, align 8, !tbaa !21
  %112 = load i32, ptr %5, align 4, !tbaa !9
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds double, ptr %111, i64 %113
  %115 = load double, ptr %114, align 8, !tbaa !22
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.DAQPWorkspace, ptr %116, i32 0, i32 13
  %118 = load ptr, ptr %117, align 8, !tbaa !23
  %119 = load i32, ptr %5, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds double, ptr %118, i64 %120
  store double %115, ptr %121, align 8, !tbaa !22
  br label %122

122:                                              ; preds = %108
  %123 = load i32, ptr %5, align 4, !tbaa !9
  %124 = add nsw i32 %123, 1
  store i32 %124, ptr %5, align 4, !tbaa !9
  br label %102, !llvm.loop !24

125:                                              ; preds = %102
  %126 = load ptr, ptr %3, align 8, !tbaa !5
  %127 = call i32 @daqp_ldp(ptr noundef %126)
  store i32 %127, ptr %10, align 4, !tbaa !9
  %128 = load ptr, ptr %3, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.DAQPWorkspace, ptr %128, i32 0, i32 25
  %130 = load i32, ptr %129, align 4, !tbaa !25
  %131 = load i32, ptr %9, align 4, !tbaa !9
  %132 = add nsw i32 %131, %130
  store i32 %132, ptr %9, align 4, !tbaa !9
  %133 = load i32, ptr %10, align 4, !tbaa !9
  %134 = icmp slt i32 %133, 0
  br i1 %134, label %135, label %136

135:                                              ; preds = %125
  br label %364

136:                                              ; preds = %125
  %137 = load i32, ptr %9, align 4, !tbaa !9
  %138 = load ptr, ptr %3, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.DAQPWorkspace, ptr %138, i32 0, i32 28
  %140 = load ptr, ptr %139, align 8, !tbaa !26
  %141 = getelementptr inbounds %struct.DAQPSettings, ptr %140, i32 0, i32 6
  %142 = load i32, ptr %141, align 4, !tbaa !27
  %143 = icmp sge i32 %137, %142
  br i1 %143, label %144, label %145

144:                                              ; preds = %136
  store i32 -4, ptr %10, align 4, !tbaa !9
  br label %364

145:                                              ; preds = %136
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %146

146:                                              ; preds = %227, %145
  %147 = load i32, ptr %5, align 4, !tbaa !9
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.DAQPWorkspace, ptr %148, i32 0, i32 24
  %150 = load i32, ptr %149, align 8, !tbaa !29
  %151 = icmp slt i32 %147, %150
  br i1 %151, label %152, label %230

152:                                              ; preds = %146
  %153 = load ptr, ptr %3, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.DAQPWorkspace, ptr %153, i32 0, i32 23
  %155 = load ptr, ptr %154, align 8, !tbaa !30
  %156 = load i32, ptr %5, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds i32, ptr %155, i64 %157
  %159 = load i32, ptr %158, align 4, !tbaa !9
  store i32 %159, ptr %6, align 4, !tbaa !9
  %160 = load ptr, ptr %3, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.DAQPWorkspace, ptr %160, i32 0, i32 9
  %162 = load ptr, ptr %161, align 8, !tbaa !17
  %163 = load i32, ptr %6, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds i32, ptr %162, i64 %164
  %166 = load i32, ptr %165, align 4, !tbaa !9
  %167 = and i32 %166, 8
  %168 = icmp ne i32 %167, 0
  br i1 %168, label %169, label %226

169:                                              ; preds = %152
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.DAQPWorkspace, ptr %170, i32 0, i32 15
  %172 = load ptr, ptr %171, align 8, !tbaa !31
  %173 = load i32, ptr %5, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %172, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !22
  %177 = load ptr, ptr %3, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.DAQPWorkspace, ptr %177, i32 0, i32 28
  %179 = load ptr, ptr %178, align 8, !tbaa !26
  %180 = getelementptr inbounds %struct.DAQPSettings, ptr %179, i32 0, i32 10
  %181 = load double, ptr %180, align 8, !tbaa !32
  %182 = fmul double %176, %181
  store double %182, ptr %12, align 8, !tbaa !22
  %183 = load ptr, ptr %3, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.DAQPWorkspace, ptr %183, i32 0, i32 9
  %185 = load ptr, ptr %184, align 8, !tbaa !17
  %186 = load i32, ptr %6, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds i32, ptr %185, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = and i32 %189, 2
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %202

192:                                              ; preds = %169
  %193 = load double, ptr %12, align 8, !tbaa !22
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.DAQPWorkspace, ptr %194, i32 0, i32 6
  %196 = load ptr, ptr %195, align 8, !tbaa !33
  %197 = load i32, ptr %6, align 4, !tbaa !9
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds double, ptr %196, i64 %198
  %200 = load double, ptr %199, align 8, !tbaa !22
  %201 = fadd double %200, %193
  store double %201, ptr %199, align 8, !tbaa !22
  br label %212

202:                                              ; preds = %169
  %203 = load double, ptr %12, align 8, !tbaa !22
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.DAQPWorkspace, ptr %204, i32 0, i32 5
  %206 = load ptr, ptr %205, align 8, !tbaa !34
  %207 = load i32, ptr %6, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  %210 = load double, ptr %209, align 8, !tbaa !22
  %211 = fadd double %210, %203
  store double %211, ptr %209, align 8, !tbaa !22
  br label %212

212:                                              ; preds = %202, %192
  %213 = load ptr, ptr %3, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.DAQPWorkspace, ptr %213, i32 0, i32 9
  %215 = load ptr, ptr %214, align 8, !tbaa !17
  %216 = load i32, ptr %6, align 4, !tbaa !9
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds i32, ptr %215, i64 %217
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = and i32 %219, 4
  %221 = icmp ne i32 %220, 0
  br i1 %221, label %222, label %223

222:                                              ; preds = %212
  br label %227

223:                                              ; preds = %212
  %224 = load i32, ptr %13, align 4, !tbaa !9
  %225 = add nsw i32 %224, -1
  store i32 %225, ptr %13, align 4, !tbaa !9
  br label %226

226:                                              ; preds = %223, %152
  br label %227

227:                                              ; preds = %226, %222
  %228 = load i32, ptr %5, align 4, !tbaa !9
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr %5, align 4, !tbaa !9
  br label %146, !llvm.loop !35

230:                                              ; preds = %146
  %231 = load i32, ptr %13, align 4, !tbaa !9
  %232 = icmp sle i32 %231, 0
  br i1 %232, label %233, label %234

233:                                              ; preds = %230
  br label %364

234:                                              ; preds = %230
  %235 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %235, ptr %5, align 4, !tbaa !9
  br label %236

236:                                              ; preds = %249, %234
  %237 = load i32, ptr %5, align 4, !tbaa !9
  %238 = load i32, ptr %8, align 4, !tbaa !9
  %239 = icmp slt i32 %237, %238
  br i1 %239, label %240, label %252

240:                                              ; preds = %236
  %241 = load ptr, ptr %3, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.DAQPWorkspace, ptr %241, i32 0, i32 9
  %243 = load ptr, ptr %242, align 8, !tbaa !17
  %244 = load i32, ptr %5, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %243, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !9
  %248 = and i32 %247, -9
  store i32 %248, ptr %246, align 4, !tbaa !9
  br label %249

249:                                              ; preds = %240
  %250 = load i32, ptr %5, align 4, !tbaa !9
  %251 = add nsw i32 %250, 1
  store i32 %251, ptr %5, align 4, !tbaa !9
  br label %236, !llvm.loop !36

252:                                              ; preds = %236
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %253

253:                                              ; preds = %271, %252
  %254 = load i32, ptr %5, align 4, !tbaa !9
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.DAQPWorkspace, ptr %255, i32 0, i32 24
  %257 = load i32, ptr %256, align 8, !tbaa !29
  %258 = icmp slt i32 %254, %257
  br i1 %258, label %259, label %274

259:                                              ; preds = %253
  %260 = load ptr, ptr %3, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.DAQPWorkspace, ptr %260, i32 0, i32 23
  %262 = load ptr, ptr %261, align 8, !tbaa !30
  %263 = load i32, ptr %5, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds i32, ptr %262, i64 %264
  %266 = load i32, ptr %265, align 4, !tbaa !9
  %267 = load i32, ptr %7, align 4, !tbaa !9
  %268 = icmp sge i32 %266, %267
  br i1 %268, label %269, label %270

269:                                              ; preds = %259
  br label %274

270:                                              ; preds = %259
  br label %271

271:                                              ; preds = %270
  %272 = load i32, ptr %5, align 4, !tbaa !9
  %273 = add nsw i32 %272, 1
  store i32 %273, ptr %5, align 4, !tbaa !9
  br label %253, !llvm.loop !37

274:                                              ; preds = %269, %253
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  %275 = load ptr, ptr %3, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.DAQPWorkspace, ptr %275, i32 0, i32 24
  %277 = load i32, ptr %276, align 8, !tbaa !29
  %278 = load ptr, ptr %3, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.DAQPWorkspace, ptr %278, i32 0, i32 1
  %280 = load i32, ptr %279, align 8, !tbaa !15
  %281 = icmp slt i32 %277, %280
  br i1 %281, label %282, label %286

282:                                              ; preds = %274
  %283 = load ptr, ptr %3, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.DAQPWorkspace, ptr %283, i32 0, i32 24
  %285 = load i32, ptr %284, align 8, !tbaa !29
  br label %290

286:                                              ; preds = %274
  %287 = load ptr, ptr %3, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.DAQPWorkspace, ptr %287, i32 0, i32 1
  %289 = load i32, ptr %288, align 8, !tbaa !15
  br label %290

290:                                              ; preds = %286, %282
  %291 = phi i32 [ %285, %282 ], [ %289, %286 ]
  store i32 %291, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %292 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %292, ptr %15, align 4, !tbaa !9
  br label %293

293:                                              ; preds = %315, %290
  %294 = load i32, ptr %15, align 4, !tbaa !9
  %295 = load ptr, ptr %3, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.DAQPWorkspace, ptr %295, i32 0, i32 24
  %297 = load i32, ptr %296, align 8, !tbaa !29
  %298 = icmp slt i32 %294, %297
  br i1 %298, label %300, label %299

299:                                              ; preds = %293
  store i32 20, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  br label %318

300:                                              ; preds = %293
  %301 = load ptr, ptr %3, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.DAQPWorkspace, ptr %301, i32 0, i32 9
  %303 = load ptr, ptr %302, align 8, !tbaa !17
  %304 = load ptr, ptr %3, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.DAQPWorkspace, ptr %304, i32 0, i32 23
  %306 = load ptr, ptr %305, align 8, !tbaa !30
  %307 = load i32, ptr %15, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds i32, ptr %306, i64 %308
  %310 = load i32, ptr %309, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds i32, ptr %303, i64 %311
  %313 = load i32, ptr %312, align 4, !tbaa !9
  %314 = and i32 %313, -2
  store i32 %314, ptr %312, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %300
  %316 = load i32, ptr %15, align 4, !tbaa !9
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %15, align 4, !tbaa !9
  br label %293, !llvm.loop !38

318:                                              ; preds = %299
  %319 = load i32, ptr %5, align 4, !tbaa !9
  %320 = load ptr, ptr %3, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.DAQPWorkspace, ptr %320, i32 0, i32 24
  store i32 %319, ptr %321, align 8, !tbaa !29
  %322 = load i32, ptr %5, align 4, !tbaa !9
  %323 = load ptr, ptr %3, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.DAQPWorkspace, ptr %323, i32 0, i32 22
  store i32 %322, ptr %324, align 8, !tbaa !39
  %325 = load ptr, ptr %3, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.DAQPWorkspace, ptr %325, i32 0, i32 26
  store i32 -1, ptr %326, align 8, !tbaa !18
  br label %327

327:                                              ; preds = %353, %318
  %328 = load i32, ptr %5, align 4, !tbaa !9
  %329 = load i32, ptr %14, align 4, !tbaa !9
  %330 = icmp slt i32 %328, %329
  br i1 %330, label %331, label %356

331:                                              ; preds = %327
  %332 = load ptr, ptr %3, align 8, !tbaa !5
  %333 = load ptr, ptr %3, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.DAQPWorkspace, ptr %333, i32 0, i32 23
  %335 = load ptr, ptr %334, align 8, !tbaa !30
  %336 = load i32, ptr %5, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds i32, ptr %335, i64 %337
  %339 = load i32, ptr %338, align 4, !tbaa !9
  %340 = load ptr, ptr %3, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.DAQPWorkspace, ptr %340, i32 0, i32 15
  %342 = load ptr, ptr %341, align 8, !tbaa !31
  %343 = load i32, ptr %5, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds double, ptr %342, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !22
  call void @add_constraint(ptr noundef %332, i32 noundef %339, double noundef %346)
  %347 = load ptr, ptr %3, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.DAQPWorkspace, ptr %347, i32 0, i32 26
  %349 = load i32, ptr %348, align 8, !tbaa !18
  %350 = icmp ne i32 %349, -1
  br i1 %350, label %351, label %352

351:                                              ; preds = %331
  store i32 -6, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %358

352:                                              ; preds = %331
  br label %353

353:                                              ; preds = %352
  %354 = load i32, ptr %5, align 4, !tbaa !9
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %5, align 4, !tbaa !9
  br label %327, !llvm.loop !40

356:                                              ; preds = %327
  %357 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %357, ptr %7, align 4, !tbaa !9
  store i32 0, ptr %11, align 4
  br label %358

358:                                              ; preds = %356, %351
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  %359 = load i32, ptr %11, align 4
  switch i32 %359, label %397 [
    i32 0, label %360
  ]

360:                                              ; preds = %358
  br label %361

361:                                              ; preds = %360
  %362 = load i32, ptr %4, align 4, !tbaa !9
  %363 = add nsw i32 %362, 1
  store i32 %363, ptr %4, align 4, !tbaa !9
  br label %32, !llvm.loop !41

364:                                              ; preds = %233, %144, %135, %32
  %365 = load i32, ptr %10, align 4, !tbaa !9
  %366 = icmp slt i32 %365, 0
  br i1 %366, label %367, label %392

367:                                              ; preds = %364
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %388, %367
  %369 = load i32, ptr %5, align 4, !tbaa !9
  %370 = load ptr, ptr %3, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.DAQPWorkspace, ptr %370, i32 0, i32 1
  %372 = load i32, ptr %371, align 8, !tbaa !15
  %373 = icmp slt i32 %369, %372
  br i1 %373, label %374, label %391

374:                                              ; preds = %368
  %375 = load ptr, ptr %3, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.DAQPWorkspace, ptr %375, i32 0, i32 13
  %377 = load ptr, ptr %376, align 8, !tbaa !23
  %378 = load i32, ptr %5, align 4, !tbaa !9
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds double, ptr %377, i64 %379
  %381 = load double, ptr %380, align 8, !tbaa !22
  %382 = load ptr, ptr %3, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.DAQPWorkspace, ptr %382, i32 0, i32 12
  %384 = load ptr, ptr %383, align 8, !tbaa !21
  %385 = load i32, ptr %5, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds double, ptr %384, i64 %386
  store double %381, ptr %387, align 8, !tbaa !22
  br label %388

388:                                              ; preds = %374
  %389 = load i32, ptr %5, align 4, !tbaa !9
  %390 = add nsw i32 %389, 1
  store i32 %390, ptr %5, align 4, !tbaa !9
  br label %368, !llvm.loop !42

391:                                              ; preds = %368
  store i32 3, ptr %10, align 4, !tbaa !9
  br label %392

392:                                              ; preds = %391, %364
  %393 = load i32, ptr %9, align 4, !tbaa !9
  %394 = load ptr, ptr %3, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.DAQPWorkspace, ptr %394, i32 0, i32 25
  store i32 %393, ptr %395, align 4, !tbaa !25
  %396 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %396, ptr %2, align 4
  store i32 1, ptr %11, align 4
  br label %397

397:                                              ; preds = %392, %358, %95
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  br label %398

398:                                              ; preds = %397, %20
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #3
  %399 = load i32, ptr %2, align 4
  ret i32 %399
}

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

declare i32 @daqp_ldp(ptr noundef) #2

declare void @add_constraint(ptr noundef, i32 noundef, double noundef) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 224}
!12 = !{!"", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !13, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !10, i64 184, !10, i64 188, !10, i64 192, !13, i64 200, !6, i64 208, !6, i64 216, !10, i64 224, !6, i64 232}
!13 = !{!"double", !7, i64 0}
!14 = !{!12, !6, i64 232}
!15 = !{!12, !10, i64 8}
!16 = !{!12, !10, i64 12}
!17 = !{!12, !6, i64 64}
!18 = !{!12, !10, i64 192}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!12, !6, i64 88}
!22 = !{!13, !13, i64 0}
!23 = !{!12, !6, i64 96}
!24 = distinct !{!24, !20}
!25 = !{!12, !10, i64 188}
!26 = !{!12, !6, i64 208}
!27 = !{!28, !10, i64 44}
!28 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !10, i64 40, !10, i64 44, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88}
!29 = !{!12, !10, i64 184}
!30 = !{!12, !6, i64 176}
!31 = !{!12, !6, i64 112}
!32 = !{!28, !13, i64 72}
!33 = !{!12, !6, i64 40}
!34 = !{!12, !6, i64 32}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = !{!12, !10, i64 168}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !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: nounwind uwtable
define dso_local i32 @daqp_hiqp(ptr noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 224
  %3 = load i32, ptr %2, align 8, !tbaa !5
  %4 = icmp slt i32 %3, 2
  br i1 %4, label %5, label %.lr.ph189

5:                                                ; preds = %1
  %6 = tail call i32 @daqp_ldp(ptr noundef nonnull %0) #3
  br label %.thread

.lr.ph189:                                        ; preds = %1
  %7 = getelementptr inbounds i8, ptr %0, i64 232
  %8 = getelementptr inbounds i8, ptr %0, i64 8
  %9 = load i32, ptr %8, align 8, !tbaa !12
  %10 = load ptr, ptr %7, align 8, !tbaa !13
  %11 = load i32, ptr %10, align 4, !tbaa !14
  %12 = getelementptr inbounds i8, ptr %0, i64 12
  %13 = getelementptr inbounds i8, ptr %0, i64 64
  %14 = getelementptr inbounds i8, ptr %0, i64 192
  %15 = getelementptr inbounds i8, ptr %0, i64 88
  %16 = getelementptr inbounds i8, ptr %0, i64 96
  %17 = getelementptr inbounds i8, ptr %0, i64 188
  %18 = getelementptr inbounds i8, ptr %0, i64 208
  %19 = getelementptr inbounds i8, ptr %0, i64 184
  %20 = getelementptr inbounds i8, ptr %0, i64 176
  %21 = getelementptr inbounds i8, ptr %0, i64 112
  %22 = getelementptr inbounds i8, ptr %0, i64 168
  br label %23

23:                                               ; preds = %.lr.ph189, %._crit_edge183
  %indvars.iv231 = phi i64 [ 1, %.lr.ph189 ], [ %indvars.iv.next232, %._crit_edge183 ]
  %.0113187 = phi i32 [ %9, %.lr.ph189 ], [ %.3116.lcssa, %._crit_edge183 ]
  %.0122185 = phi i32 [ 0, %.lr.ph189 ], [ %71, %._crit_edge183 ]
  %.0129184 = phi i32 [ %11, %.lr.ph189 ], [ %26, %._crit_edge183 ]
  %24 = load ptr, ptr %7, align 8, !tbaa !13
  %25 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv231
  %26 = load i32, ptr %25, align 4, !tbaa !14
  store i32 %26, ptr %12, align 4, !tbaa !15
  %27 = icmp slt i32 %.0129184, %26
  br i1 %27, label %.lr.ph.preheader, label %.preheader151

.lr.ph.preheader:                                 ; preds = %23
  %28 = sext i32 %.0129184 to i64
  br label %.lr.ph

.preheader151:                                    ; preds = %56, %23
  %.1114.lcssa = phi i32 [ %.0113187, %23 ], [ %.2115, %56 ]
  %29 = load i32, ptr %8, align 8, !tbaa !12
  %30 = icmp sgt i32 %29, 0
  br i1 %30, label %.lr.ph159, label %._crit_edge

.lr.ph159:                                        ; preds = %.preheader151
  %31 = load ptr, ptr %15, align 8, !tbaa !16
  %32 = load ptr, ptr %16, align 8, !tbaa !17
  %wide.trip.count = zext nneg i32 %29 to i64
  %min.iters.check266 = icmp ult i32 %29, 4
  %33 = ptrtoint ptr %32 to i64
  %34 = ptrtoint ptr %31 to i64
  %35 = sub i64 %33, %34
  %diff.check = icmp ult i64 %35, 32
  %or.cond = select i1 %min.iters.check266, i1 true, i1 %diff.check
  br i1 %or.cond, label %scalar.ph265.preheader, label %vector.ph267

scalar.ph265.preheader:                           ; preds = %middle.block264, %.lr.ph159
  %indvars.iv207.ph = phi i64 [ 0, %.lr.ph159 ], [ %n.vec269, %middle.block264 ]
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph265.prol.loopexit, label %scalar.ph265.prol

scalar.ph265.prol:                                ; preds = %scalar.ph265.preheader, %scalar.ph265.prol
  %indvars.iv207.prol = phi i64 [ %indvars.iv.next208.prol, %scalar.ph265.prol ], [ %indvars.iv207.ph, %scalar.ph265.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph265.prol ], [ 0, %scalar.ph265.preheader ]
  %36 = getelementptr inbounds double, ptr %31, i64 %indvars.iv207.prol
  %37 = load double, ptr %36, align 8, !tbaa !18
  %38 = getelementptr inbounds double, ptr %32, i64 %indvars.iv207.prol
  store double %37, ptr %38, align 8, !tbaa !18
  %indvars.iv.next208.prol = add nuw nsw i64 %indvars.iv207.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph265.prol.loopexit, label %scalar.ph265.prol, !llvm.loop !19

scalar.ph265.prol.loopexit:                       ; preds = %scalar.ph265.prol, %scalar.ph265.preheader
  %indvars.iv207.unr = phi i64 [ %indvars.iv207.ph, %scalar.ph265.preheader ], [ %indvars.iv.next208.prol, %scalar.ph265.prol ]
  %39 = sub nsw i64 %indvars.iv207.ph, %wide.trip.count
  %40 = icmp ugt i64 %39, -4
  br i1 %40, label %._crit_edge, label %scalar.ph265

vector.ph267:                                     ; preds = %.lr.ph159
  %n.vec269 = and i64 %wide.trip.count, 2147483644
  br label %vector.body271

vector.body271:                                   ; preds = %vector.body271, %vector.ph267
  %index272 = phi i64 [ 0, %vector.ph267 ], [ %index.next275, %vector.body271 ]
  %41 = getelementptr inbounds double, ptr %31, i64 %index272
  %42 = getelementptr inbounds i8, ptr %41, i64 16
  %wide.load273 = load <2 x double>, ptr %41, align 8, !tbaa !18
  %wide.load274 = load <2 x double>, ptr %42, align 8, !tbaa !18
  %43 = getelementptr inbounds double, ptr %32, i64 %index272
  %44 = getelementptr inbounds i8, ptr %43, i64 16
  store <2 x double> %wide.load273, ptr %43, align 8, !tbaa !18
  store <2 x double> %wide.load274, ptr %44, align 8, !tbaa !18
  %index.next275 = add nuw i64 %index272, 4
  %45 = icmp eq i64 %index.next275, %n.vec269
  br i1 %45, label %middle.block264, label %vector.body271, !llvm.loop !21

middle.block264:                                  ; preds = %vector.body271
  %cmp.n276 = icmp eq i64 %n.vec269, %wide.trip.count
  br i1 %cmp.n276, label %._crit_edge, label %scalar.ph265.preheader

.lr.ph:                                           ; preds = %.lr.ph.preheader, %56
  %indvars.iv = phi i64 [ %28, %.lr.ph.preheader ], [ %indvars.iv.next, %56 ]
  %.1114157 = phi i32 [ %.0113187, %.lr.ph.preheader ], [ %.2115, %56 ]
  %46 = load ptr, ptr %13, align 8, !tbaa !25
  %47 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv
  %48 = load i32, ptr %47, align 4, !tbaa !14
  %49 = or i32 %48, 8
  store i32 %49, ptr %47, align 4, !tbaa !14
  %50 = and i32 %48, 1
  %.not144 = icmp eq i32 %50, 0
  br i1 %.not144, label %56, label %51

51:                                               ; preds = %.lr.ph
  %52 = and i32 %48, 2
  %.not145 = icmp eq i32 %52, 0
  %53 = trunc nsw i64 %indvars.iv to i32
  %.254 = select i1 %.not145, double 1.000000e+00, double -1.000000e+00
  tail call void @add_constraint(ptr noundef nonnull %0, i32 noundef %53, double noundef %.254) #3
  %54 = add nsw i32 %.1114157, -1
  %55 = load i32, ptr %14, align 8, !tbaa !26
  %.not146 = icmp eq i32 %55, -1
  br i1 %.not146, label %56, label %.thread

56:                                               ; preds = %.lr.ph, %51
  %.2115 = phi i32 [ %54, %51 ], [ %.1114157, %.lr.ph ]
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
  %exitcond.not = icmp eq i32 %26, %lftr.wideiv
  br i1 %exitcond.not, label %.preheader151, label %.lr.ph, !llvm.loop !27

scalar.ph265:                                     ; preds = %scalar.ph265.prol.loopexit, %scalar.ph265
  %indvars.iv207 = phi i64 [ %indvars.iv.next208.3, %scalar.ph265 ], [ %indvars.iv207.unr, %scalar.ph265.prol.loopexit ]
  %57 = getelementptr inbounds double, ptr %31, i64 %indvars.iv207
  %58 = load double, ptr %57, align 8, !tbaa !18
  %59 = getelementptr inbounds double, ptr %32, i64 %indvars.iv207
  store double %58, ptr %59, align 8, !tbaa !18
  %indvars.iv.next208 = add nuw nsw i64 %indvars.iv207, 1
  %60 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next208
  %61 = load double, ptr %60, align 8, !tbaa !18
  %62 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next208
  store double %61, ptr %62, align 8, !tbaa !18
  %indvars.iv.next208.1 = add nuw nsw i64 %indvars.iv207, 2
  %63 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next208.1
  %64 = load double, ptr %63, align 8, !tbaa !18
  %65 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next208.1
  store double %64, ptr %65, align 8, !tbaa !18
  %indvars.iv.next208.2 = add nuw nsw i64 %indvars.iv207, 3
  %66 = getelementptr inbounds double, ptr %31, i64 %indvars.iv.next208.2
  %67 = load double, ptr %66, align 8, !tbaa !18
  %68 = getelementptr inbounds double, ptr %32, i64 %indvars.iv.next208.2
  store double %67, ptr %68, align 8, !tbaa !18
  %indvars.iv.next208.3 = add nuw nsw i64 %indvars.iv207, 4
  %exitcond210.not.3 = icmp eq i64 %indvars.iv.next208.3, %wide.trip.count
  br i1 %exitcond210.not.3, label %._crit_edge, label %scalar.ph265, !llvm.loop !28

._crit_edge:                                      ; preds = %scalar.ph265.prol.loopexit, %scalar.ph265, %middle.block264, %.preheader151
  %69 = tail call i32 @daqp_ldp(ptr noundef nonnull %0) #3
  %70 = load i32, ptr %17, align 4, !tbaa !29
  %71 = add nsw i32 %70, %.0122185
  %72 = icmp slt i32 %69, 0
  br i1 %72, label %.preheader, label %73

73:                                               ; preds = %._crit_edge
  %74 = load ptr, ptr %18, align 8, !tbaa !30
  %75 = getelementptr inbounds i8, ptr %74, i64 44
  %76 = load i32, ptr %75, align 4, !tbaa !31
  %.not = icmp slt i32 %71, %76
  br i1 %.not, label %.preheader150, label %.preheader

.preheader150:                                    ; preds = %73
  %77 = load i32, ptr %19, align 8, !tbaa !33
  %78 = icmp sgt i32 %77, 0
  br i1 %78, label %.lr.ph162, label %._crit_edge163

.lr.ph162:                                        ; preds = %.preheader150
  %79 = load ptr, ptr %20, align 8, !tbaa !34
  %80 = load ptr, ptr %13, align 8, !tbaa !25
  %81 = getelementptr inbounds i8, ptr %74, i64 72
  %wide.trip.count214 = zext nneg i32 %77 to i64
  br label %82

82:                                               ; preds = %.lr.ph162, %102
  %indvars.iv211 = phi i64 [ 0, %.lr.ph162 ], [ %indvars.iv.next212, %102 ]
  %.3116161 = phi i32 [ %.1114.lcssa, %.lr.ph162 ], [ %.4, %102 ]
  %83 = getelementptr inbounds i32, ptr %79, i64 %indvars.iv211
  %84 = load i32, ptr %83, align 4, !tbaa !14
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds i32, ptr %80, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !14
  %88 = and i32 %87, 8
  %.not141 = icmp eq i32 %88, 0
  br i1 %.not141, label %102, label %89

89:                                               ; preds = %82
  %90 = load ptr, ptr %21, align 8, !tbaa !35
  %91 = getelementptr inbounds double, ptr %90, i64 %indvars.iv211
  %92 = load double, ptr %91, align 8, !tbaa !18
  %93 = load double, ptr %81, align 8, !tbaa !36
  %94 = fmul double %92, %93
  %95 = and i32 %87, 2
  %.not142 = icmp eq i32 %95, 0
  %.255.v = select i1 %.not142, i64 32, i64 40
  %.255 = getelementptr inbounds i8, ptr %0, i64 %.255.v
  %96 = load ptr, ptr %.255, align 8, !tbaa !37
  %97 = getelementptr inbounds double, ptr %96, i64 %85
  %98 = load double, ptr %97, align 8, !tbaa !18
  %99 = fadd double %94, %98
  store double %99, ptr %97, align 8, !tbaa !18
  %100 = lshr i32 %87, 2
  %101 = and i32 %100, 1
  %sext = add i32 %.3116161, -1
  %spec.select = add i32 %sext, %101
  br label %102

102:                                              ; preds = %89, %82
  %.4 = phi i32 [ %.3116161, %82 ], [ %spec.select, %89 ]
  %indvars.iv.next212 = add nuw nsw i64 %indvars.iv211, 1
  %exitcond215.not = icmp eq i64 %indvars.iv.next212, %wide.trip.count214
  br i1 %exitcond215.not, label %._crit_edge163, label %82, !llvm.loop !38

._crit_edge163:                                   ; preds = %102, %.preheader150
  %.3116.lcssa = phi i32 [ %.1114.lcssa, %.preheader150 ], [ %.4, %102 ]
  %103 = icmp slt i32 %.3116.lcssa, 1
  br i1 %103, label %.loopexit, label %.preheader149

.preheader149:                                    ; preds = %._crit_edge163
  br i1 %27, label %.lr.ph166, label %.preheader148

.lr.ph166:                                        ; preds = %.preheader149
  %104 = load ptr, ptr %13, align 8, !tbaa !25
  %105 = sext i32 %.0129184 to i64
  %wide.trip.count219 = sext i32 %26 to i64
  %106 = sub nsw i64 %wide.trip.count219, %105
  %min.iters.check = icmp ult i64 %106, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph166
  %indvars.iv216.ph = phi i64 [ %105, %.lr.ph166 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph166
  %n.vec = and i64 %106, -8
  %ind.end = add nsw i64 %n.vec, %105
  %invariant.gep = getelementptr i32, ptr %104, i64 %105
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %gep = getelementptr i32, ptr %invariant.gep, i64 %index
  %107 = getelementptr inbounds i8, ptr %gep, i64 16
  %wide.load = load <4 x i32>, ptr %gep, align 4, !tbaa !14
  %wide.load263 = load <4 x i32>, ptr %107, align 4, !tbaa !14
  %108 = and <4 x i32> %wide.load, <i32 -9, i32 -9, i32 -9, i32 -9>
  %109 = and <4 x i32> %wide.load263, <i32 -9, i32 -9, i32 -9, i32 -9>
  store <4 x i32> %108, ptr %gep, align 4, !tbaa !14
  store <4 x i32> %109, ptr %107, align 4, !tbaa !14
  %index.next = add nuw i64 %index, 8
  %110 = icmp eq i64 %index.next, %n.vec
  br i1 %110, label %middle.block, label %vector.body, !llvm.loop !39

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %106, %n.vec
  br i1 %cmp.n, label %.preheader148.loopexit, label %scalar.ph.preheader

.preheader148.loopexit:                           ; preds = %scalar.ph, %middle.block
  %.pre = load i32, ptr %19, align 8, !tbaa !33
  br label %.preheader148

.preheader148:                                    ; preds = %.preheader148.loopexit, %.preheader149
  %111 = phi i32 [ %.pre, %.preheader148.loopexit ], [ %77, %.preheader149 ]
  %112 = icmp sgt i32 %111, 0
  br i1 %112, label %.lr.ph168, label %._crit_edge169

.lr.ph168:                                        ; preds = %.preheader148
  %113 = load ptr, ptr %20, align 8, !tbaa !34
  %wide.trip.count224 = zext nneg i32 %111 to i64
  br label %117

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv216 = phi i64 [ %indvars.iv.next217, %scalar.ph ], [ %indvars.iv216.ph, %scalar.ph.preheader ]
  %114 = getelementptr inbounds i32, ptr %104, i64 %indvars.iv216
  %115 = load i32, ptr %114, align 4, !tbaa !14
  %116 = and i32 %115, -9
  store i32 %116, ptr %114, align 4, !tbaa !14
  %indvars.iv.next217 = add nsw i64 %indvars.iv216, 1
  %exitcond220.not = icmp eq i64 %indvars.iv.next217, %wide.trip.count219
  br i1 %exitcond220.not, label %.preheader148.loopexit, label %scalar.ph, !llvm.loop !40

117:                                              ; preds = %.lr.ph168, %120
  %indvars.iv221 = phi i64 [ 0, %.lr.ph168 ], [ %indvars.iv.next222, %120 ]
  %118 = getelementptr inbounds i32, ptr %113, i64 %indvars.iv221
  %119 = load i32, ptr %118, align 4, !tbaa !14
  %.not138 = icmp slt i32 %119, %.0129184
  br i1 %.not138, label %120, label %._crit_edge169.loopexit.split.loop.exit

120:                                              ; preds = %117
  %indvars.iv.next222 = add nuw nsw i64 %indvars.iv221, 1
  %exitcond225.not = icmp eq i64 %indvars.iv.next222, %wide.trip.count224
  br i1 %exitcond225.not, label %._crit_edge169, label %117, !llvm.loop !41

._crit_edge169.loopexit.split.loop.exit:          ; preds = %117
  %121 = trunc nuw nsw i64 %indvars.iv221 to i32
  br label %._crit_edge169

._crit_edge169:                                   ; preds = %120, %._crit_edge169.loopexit.split.loop.exit, %.preheader148
  %.4128.lcssa = phi i32 [ 0, %.preheader148 ], [ %121, %._crit_edge169.loopexit.split.loop.exit ], [ %111, %120 ]
  %122 = load i32, ptr %8, align 8, !tbaa !12
  %. = tail call i32 @llvm.smin.i32(i32 %111, i32 %122)
  %123 = icmp slt i32 %122, %111
  br i1 %123, label %.lr.ph177, label %._crit_edge178

.lr.ph177:                                        ; preds = %._crit_edge169
  %124 = load ptr, ptr %13, align 8, !tbaa !25
  %125 = load ptr, ptr %20, align 8, !tbaa !34
  %126 = sext i32 %122 to i64
  br label %128

._crit_edge178:                                   ; preds = %128, %._crit_edge169
  store i32 %.4128.lcssa, ptr %19, align 8, !tbaa !33
  store i32 %.4128.lcssa, ptr %22, align 8, !tbaa !42
  store i32 -1, ptr %14, align 8, !tbaa !26
  %.not140179 = icmp slt i32 %.4128.lcssa, %.
  br i1 %.not140179, label %.lr.ph182.preheader, label %._crit_edge183

.lr.ph182.preheader:                              ; preds = %._crit_edge178
  %127 = zext i32 %.4128.lcssa to i64
  br label %.lr.ph182

128:                                              ; preds = %.lr.ph177, %128
  %indvars.iv226 = phi i64 [ %126, %.lr.ph177 ], [ %indvars.iv.next227, %128 ]
  %129 = getelementptr inbounds i32, ptr %125, i64 %indvars.iv226
  %130 = load i32, ptr %129, align 4, !tbaa !14
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds i32, ptr %124, i64 %131
  %133 = load i32, ptr %132, align 4, !tbaa !14
  %134 = and i32 %133, -2
  store i32 %134, ptr %132, align 4, !tbaa !14
  %indvars.iv.next227 = add nsw i64 %indvars.iv226, 1
  %135 = load i32, ptr %19, align 8, !tbaa !33
  %136 = sext i32 %135 to i64
  %137 = icmp slt i64 %indvars.iv.next227, %136
  br i1 %137, label %128, label %._crit_edge178, !llvm.loop !43

138:                                              ; preds = %.lr.ph182
  %indvars.iv.next229 = add nuw nsw i64 %indvars.iv228, 1
  %139 = trunc nuw i64 %indvars.iv.next229 to i32
  %.not140 = icmp sgt i32 %., %139
  br i1 %.not140, label %.lr.ph182, label %._crit_edge183, !llvm.loop !44

.lr.ph182:                                        ; preds = %.lr.ph182.preheader, %138
  %indvars.iv228 = phi i64 [ %127, %.lr.ph182.preheader ], [ %indvars.iv.next229, %138 ]
  %140 = load ptr, ptr %20, align 8, !tbaa !34
  %141 = getelementptr inbounds i32, ptr %140, i64 %indvars.iv228
  %142 = load i32, ptr %141, align 4, !tbaa !14
  %143 = load ptr, ptr %21, align 8, !tbaa !35
  %144 = getelementptr inbounds double, ptr %143, i64 %indvars.iv228
  %145 = load double, ptr %144, align 8, !tbaa !18
  tail call void @add_constraint(ptr noundef nonnull %0, i32 noundef %142, double noundef %145) #3
  %146 = load i32, ptr %14, align 8, !tbaa !26
  %.not139 = icmp eq i32 %146, -1
  br i1 %.not139, label %138, label %.thread

._crit_edge183:                                   ; preds = %138, %._crit_edge178
  %indvars.iv.next232 = add nuw nsw i64 %indvars.iv231, 1
  %147 = load i32, ptr %2, align 8, !tbaa !5
  %148 = sext i32 %147 to i64
  %149 = icmp slt i64 %indvars.iv.next232, %148
  br i1 %149, label %23, label %.loopexit, !llvm.loop !45

.preheader:                                       ; preds = %73, %._crit_edge
  %150 = load i32, ptr %8, align 8, !tbaa !12
  %151 = icmp sgt i32 %150, 0
  br i1 %151, label %.lr.ph203, label %.loopexit

.lr.ph203:                                        ; preds = %.preheader
  %152 = getelementptr inbounds i8, ptr %0, i64 96
  %153 = load ptr, ptr %152, align 8, !tbaa !17
  %154 = getelementptr inbounds i8, ptr %0, i64 88
  %155 = load ptr, ptr %154, align 8, !tbaa !16
  %wide.trip.count237 = zext nneg i32 %150 to i64
  %min.iters.check281 = icmp ult i32 %150, 6
  %156 = ptrtoint ptr %155 to i64
  %157 = ptrtoint ptr %153 to i64
  %158 = sub i64 %156, %157
  %diff.check278 = icmp ult i64 %158, 32
  %or.cond296 = select i1 %min.iters.check281, i1 true, i1 %diff.check278
  br i1 %or.cond296, label %scalar.ph280.preheader, label %vector.ph282

vector.ph282:                                     ; preds = %.lr.ph203
  %n.vec284 = and i64 %wide.trip.count237, 2147483644
  br label %vector.body286

vector.body286:                                   ; preds = %vector.body286, %vector.ph282
  %index287 = phi i64 [ 0, %vector.ph282 ], [ %index.next290, %vector.body286 ]
  %159 = getelementptr inbounds double, ptr %153, i64 %index287
  %160 = getelementptr inbounds i8, ptr %159, i64 16
  %wide.load288 = load <2 x double>, ptr %159, align 8, !tbaa !18
  %wide.load289 = load <2 x double>, ptr %160, align 8, !tbaa !18
  %161 = getelementptr inbounds double, ptr %155, i64 %index287
  %162 = getelementptr inbounds i8, ptr %161, i64 16
  store <2 x double> %wide.load288, ptr %161, align 8, !tbaa !18
  store <2 x double> %wide.load289, ptr %162, align 8, !tbaa !18
  %index.next290 = add nuw i64 %index287, 4
  %163 = icmp eq i64 %index.next290, %n.vec284
  br i1 %163, label %middle.block279, label %vector.body286, !llvm.loop !46

middle.block279:                                  ; preds = %vector.body286
  %cmp.n291 = icmp eq i64 %n.vec284, %wide.trip.count237
  br i1 %cmp.n291, label %.loopexit, label %scalar.ph280.preheader

scalar.ph280.preheader:                           ; preds = %middle.block279, %.lr.ph203
  %indvars.iv234.ph = phi i64 [ 0, %.lr.ph203 ], [ %n.vec284, %middle.block279 ]
  %xtraiter305 = and i64 %wide.trip.count237, 3
  %lcmp.mod306.not = icmp eq i64 %xtraiter305, 0
  br i1 %lcmp.mod306.not, label %scalar.ph280.prol.loopexit, label %scalar.ph280.prol

scalar.ph280.prol:                                ; preds = %scalar.ph280.preheader, %scalar.ph280.prol
  %indvars.iv234.prol = phi i64 [ %indvars.iv.next235.prol, %scalar.ph280.prol ], [ %indvars.iv234.ph, %scalar.ph280.preheader ]
  %prol.iter307 = phi i64 [ %prol.iter307.next, %scalar.ph280.prol ], [ 0, %scalar.ph280.preheader ]
  %164 = getelementptr inbounds double, ptr %153, i64 %indvars.iv234.prol
  %165 = load double, ptr %164, align 8, !tbaa !18
  %166 = getelementptr inbounds double, ptr %155, i64 %indvars.iv234.prol
  store double %165, ptr %166, align 8, !tbaa !18
  %indvars.iv.next235.prol = add nuw nsw i64 %indvars.iv234.prol, 1
  %prol.iter307.next = add i64 %prol.iter307, 1
  %prol.iter307.cmp.not = icmp eq i64 %prol.iter307.next, %xtraiter305
  br i1 %prol.iter307.cmp.not, label %scalar.ph280.prol.loopexit, label %scalar.ph280.prol, !llvm.loop !47

scalar.ph280.prol.loopexit:                       ; preds = %scalar.ph280.prol, %scalar.ph280.preheader
  %indvars.iv234.unr = phi i64 [ %indvars.iv234.ph, %scalar.ph280.preheader ], [ %indvars.iv.next235.prol, %scalar.ph280.prol ]
  %167 = sub nsw i64 %indvars.iv234.ph, %wide.trip.count237
  %168 = icmp ugt i64 %167, -4
  br i1 %168, label %.loopexit, label %scalar.ph280

scalar.ph280:                                     ; preds = %scalar.ph280.prol.loopexit, %scalar.ph280
  %indvars.iv234 = phi i64 [ %indvars.iv.next235.3, %scalar.ph280 ], [ %indvars.iv234.unr, %scalar.ph280.prol.loopexit ]
  %169 = getelementptr inbounds double, ptr %153, i64 %indvars.iv234
  %170 = load double, ptr %169, align 8, !tbaa !18
  %171 = getelementptr inbounds double, ptr %155, i64 %indvars.iv234
  store double %170, ptr %171, align 8, !tbaa !18
  %indvars.iv.next235 = add nuw nsw i64 %indvars.iv234, 1
  %172 = getelementptr inbounds double, ptr %153, i64 %indvars.iv.next235
  %173 = load double, ptr %172, align 8, !tbaa !18
  %174 = getelementptr inbounds double, ptr %155, i64 %indvars.iv.next235
  store double %173, ptr %174, align 8, !tbaa !18
  %indvars.iv.next235.1 = add nuw nsw i64 %indvars.iv234, 2
  %175 = getelementptr inbounds double, ptr %153, i64 %indvars.iv.next235.1
  %176 = load double, ptr %175, align 8, !tbaa !18
  %177 = getelementptr inbounds double, ptr %155, i64 %indvars.iv.next235.1
  store double %176, ptr %177, align 8, !tbaa !18
  %indvars.iv.next235.2 = add nuw nsw i64 %indvars.iv234, 3
  %178 = getelementptr inbounds double, ptr %153, i64 %indvars.iv.next235.2
  %179 = load double, ptr %178, align 8, !tbaa !18
  %180 = getelementptr inbounds double, ptr %155, i64 %indvars.iv.next235.2
  store double %179, ptr %180, align 8, !tbaa !18
  %indvars.iv.next235.3 = add nuw nsw i64 %indvars.iv234, 4
  %exitcond238.not.3 = icmp eq i64 %indvars.iv.next235.3, %wide.trip.count237
  br i1 %exitcond238.not.3, label %.loopexit, label %scalar.ph280, !llvm.loop !48

.loopexit:                                        ; preds = %._crit_edge163, %._crit_edge183, %scalar.ph280.prol.loopexit, %scalar.ph280, %middle.block279, %.preheader
  %.2121 = phi i32 [ 3, %.preheader ], [ 3, %middle.block279 ], [ 3, %scalar.ph280 ], [ 3, %scalar.ph280.prol.loopexit ], [ %69, %._crit_edge183 ], [ %69, %._crit_edge163 ]
  %181 = getelementptr inbounds i8, ptr %0, i64 188
  store i32 %71, ptr %181, align 4, !tbaa !29
  br label %.thread

.thread:                                          ; preds = %51, %.lr.ph182, %.loopexit, %5
  %.3 = phi i32 [ %6, %5 ], [ %.2121, %.loopexit ], [ -6, %.lr.ph182 ], [ -6, %51 ]
  ret i32 %.3
}

declare i32 @daqp_ldp(ptr noundef) local_unnamed_addr #1

declare void @add_constraint(ptr noundef, i32 noundef, double noundef) local_unnamed_addr #1

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

attributes #0 = { 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 = { "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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 224}
!6 = !{!"", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !11, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !10, i64 168, !7, i64 176, !10, i64 184, !10, i64 188, !10, i64 192, !11, i64 200, !7, i64 208, !7, i64 216, !10, i64 224, !7, i64 232}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!6, !10, i64 8}
!13 = !{!6, !7, i64 232}
!14 = !{!10, !10, i64 0}
!15 = !{!6, !10, i64 12}
!16 = !{!6, !7, i64 88}
!17 = !{!6, !7, i64 96}
!18 = !{!11, !11, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.unroll.disable"}
!21 = distinct !{!21, !22, !23, !24}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!"llvm.loop.isvectorized", i32 1}
!24 = !{!"llvm.loop.unroll.runtime.disable"}
!25 = !{!6, !7, i64 64}
!26 = !{!6, !10, i64 192}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22, !23}
!29 = !{!6, !10, i64 188}
!30 = !{!6, !7, i64 208}
!31 = !{!32, !10, i64 44}
!32 = !{!"", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !10, i64 40, !10, i64 44, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88}
!33 = !{!6, !10, i64 184}
!34 = !{!6, !7, i64 176}
!35 = !{!6, !7, i64 112}
!36 = !{!32, !11, i64 72}
!37 = !{!7, !7, i64 0}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22, !23, !24}
!40 = distinct !{!40, !22, !24, !23}
!41 = distinct !{!41, !22}
!42 = !{!6, !10, i64 168}
!43 = distinct !{!43, !22}
!44 = distinct !{!44, !22}
!45 = distinct !{!45, !22}
!46 = distinct !{!46, !22, !23, !24}
!47 = distinct !{!47, !20}
!48 = distinct !{!48, !22, !23}


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