; LLVM IR from siconos/siconos :: externals/lbl/metis4/kwayvolfm.ll_ (ComputeKWayVolume)

; 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.graphdef = type { ptr, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr }
%struct.vrinfodef = type { i32, i32, i32, i32, i32, ptr }
%struct.vedegreedef = type { i32, i32, i32, i32 }

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

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

; Function Attrs: nounwind uwtable
define dso_local void @__ComputeKWayVolume(ptr noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #1 {
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #2
  %32 = load ptr, ptr %6, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.graphdef, ptr %32, i32 0, i32 2
  %34 = load i32, ptr %33, align 8, !tbaa !11
  store i32 %34, ptr %18, align 4, !tbaa !9
  %35 = load ptr, ptr %6, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.graphdef, ptr %35, i32 0, i32 4
  %37 = load ptr, ptr %36, align 8, !tbaa !13
  store ptr %37, ptr %22, align 8, !tbaa !5
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.graphdef, ptr %38, i32 0, i32 6
  %40 = load ptr, ptr %39, align 8, !tbaa !14
  store ptr %40, ptr %23, align 8, !tbaa !5
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.graphdef, ptr %41, i32 0, i32 7
  %43 = load ptr, ptr %42, align 8, !tbaa !15
  store ptr %43, ptr %24, align 8, !tbaa !5
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.graphdef, ptr %44, i32 0, i32 8
  %46 = load ptr, ptr %45, align 8, !tbaa !16
  store ptr %46, ptr %25, align 8, !tbaa !5
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graphdef, ptr %47, i32 0, i32 14
  %49 = load ptr, ptr %48, align 8, !tbaa !17
  store ptr %49, ptr %26, align 8, !tbaa !5
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graphdef, ptr %50, i32 0, i32 22
  %52 = load ptr, ptr %51, align 8, !tbaa !18
  store ptr %52, ptr %27, align 8, !tbaa !5
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %53

53:                                               ; preds = %365, %5
  %54 = load i32, ptr %12, align 4, !tbaa !9
  %55 = load i32, ptr %7, align 4, !tbaa !9
  %56 = icmp slt i32 %54, %55
  br i1 %56, label %57, label %368

57:                                               ; preds = %53
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = load i32, ptr %12, align 4, !tbaa !9
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds i32, ptr %58, i64 %60
  %62 = load i32, ptr %61, align 4, !tbaa !9
  store i32 %62, ptr %13, align 4, !tbaa !9
  %63 = load ptr, ptr %26, align 8, !tbaa !5
  %64 = load i32, ptr %13, align 4, !tbaa !9
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds i32, ptr %63, i64 %65
  %67 = load i32, ptr %66, align 4, !tbaa !9
  store i32 %67, ptr %19, align 4, !tbaa !9
  %68 = load ptr, ptr %27, align 8, !tbaa !5
  %69 = load i32, ptr %13, align 4, !tbaa !9
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds %struct.vrinfodef, ptr %68, i64 %70
  store ptr %71, ptr %28, align 8, !tbaa !5
  %72 = load ptr, ptr %28, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.vrinfodef, ptr %72, i32 0, i32 5
  %74 = load ptr, ptr %73, align 8, !tbaa !19
  store ptr %74, ptr %30, align 8, !tbaa !5
  %75 = load ptr, ptr %9, align 8, !tbaa !5
  %76 = load i32, ptr %13, 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 = icmp eq i32 %79, 1
  br i1 %80, label %81, label %311

81:                                               ; preds = %57
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %94, %81
  %83 = load i32, ptr %15, align 4, !tbaa !9
  %84 = load ptr, ptr %28, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.vrinfodef, ptr %84, i32 0, i32 4
  %86 = load i32, ptr %85, align 8, !tbaa !21
  %87 = icmp slt i32 %83, %86
  br i1 %87, label %88, label %97

88:                                               ; preds = %82
  %89 = load ptr, ptr %30, align 8, !tbaa !5
  %90 = load i32, ptr %15, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds %struct.vedegreedef, ptr %89, i64 %91
  %93 = getelementptr inbounds %struct.vedegreedef, ptr %92, i32 0, i32 3
  store i32 0, ptr %93, align 4, !tbaa !22
  br label %94

94:                                               ; preds = %88
  %95 = load i32, ptr %15, align 4, !tbaa !9
  %96 = add nsw i32 %95, 1
  store i32 %96, ptr %15, align 4, !tbaa !9
  br label %82, !llvm.loop !24

97:                                               ; preds = %82
  %98 = load ptr, ptr %22, align 8, !tbaa !5
  %99 = load i32, ptr %13, align 4, !tbaa !9
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds i32, ptr %98, i64 %100
  %102 = load i32, ptr %101, align 4, !tbaa !9
  store i32 %102, ptr %14, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %307, %97
  %104 = load i32, ptr %14, align 4, !tbaa !9
  %105 = load ptr, ptr %22, align 8, !tbaa !5
  %106 = load i32, ptr %13, align 4, !tbaa !9
  %107 = add nsw i32 %106, 1
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds i32, ptr %105, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = icmp slt i32 %104, %110
  br i1 %111, label %112, label %310

112:                                              ; preds = %103
  %113 = load ptr, ptr %24, align 8, !tbaa !5
  %114 = load i32, ptr %14, align 4, !tbaa !9
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds i32, ptr %113, i64 %115
  %117 = load i32, ptr %116, align 4, !tbaa !9
  store i32 %117, ptr %11, align 4, !tbaa !9
  %118 = load ptr, ptr %26, align 8, !tbaa !5
  %119 = load i32, ptr %11, align 4, !tbaa !9
  %120 = sext i32 %119 to i64
  %121 = getelementptr inbounds i32, ptr %118, i64 %120
  %122 = load i32, ptr %121, align 4, !tbaa !9
  store i32 %122, ptr %20, align 4, !tbaa !9
  %123 = load ptr, ptr %27, align 8, !tbaa !5
  %124 = load i32, ptr %11, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds %struct.vrinfodef, ptr %123, i64 %125
  store ptr %126, ptr %29, align 8, !tbaa !5
  %127 = load ptr, ptr %29, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.vrinfodef, ptr %127, i32 0, i32 5
  %129 = load ptr, ptr %128, align 8, !tbaa !19
  store ptr %129, ptr %31, align 8, !tbaa !5
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %130

130:                                              ; preds = %147, %112
  %131 = load i32, ptr %16, align 4, !tbaa !9
  %132 = load ptr, ptr %29, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.vrinfodef, ptr %132, i32 0, i32 4
  %134 = load i32, ptr %133, align 8, !tbaa !21
  %135 = icmp slt i32 %131, %134
  br i1 %135, label %136, label %150

136:                                              ; preds = %130
  %137 = load i32, ptr %16, align 4, !tbaa !9
  %138 = load ptr, ptr %10, align 8, !tbaa !5
  %139 = load ptr, ptr %31, align 8, !tbaa !5
  %140 = load i32, ptr %16, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds %struct.vedegreedef, ptr %139, i64 %141
  %143 = getelementptr inbounds %struct.vedegreedef, ptr %142, i32 0, i32 0
  %144 = load i32, ptr %143, align 4, !tbaa !26
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds i32, ptr %138, i64 %145
  store i32 %137, ptr %146, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %136
  %148 = load i32, ptr %16, align 4, !tbaa !9
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %16, align 4, !tbaa !9
  br label %130, !llvm.loop !27

150:                                              ; preds = %130
  %151 = load ptr, ptr %10, align 8, !tbaa !5
  %152 = load i32, ptr %20, align 4, !tbaa !9
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i32, ptr %151, i64 %153
  store i32 1, ptr %154, align 4, !tbaa !9
  %155 = load i32, ptr %19, align 4, !tbaa !9
  %156 = load i32, ptr %20, align 4, !tbaa !9
  %157 = icmp eq i32 %155, %156
  br i1 %157, label %158, label %195

158:                                              ; preds = %150
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %159

159:                                              ; preds = %191, %158
  %160 = load i32, ptr %15, align 4, !tbaa !9
  %161 = load ptr, ptr %28, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.vrinfodef, ptr %161, i32 0, i32 4
  %163 = load i32, ptr %162, align 8, !tbaa !21
  %164 = icmp slt i32 %160, %163
  br i1 %164, label %165, label %194

165:                                              ; preds = %159
  %166 = load ptr, ptr %10, align 8, !tbaa !5
  %167 = load ptr, ptr %30, align 8, !tbaa !5
  %168 = load i32, ptr %15, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds %struct.vedegreedef, ptr %167, i64 %169
  %171 = getelementptr inbounds %struct.vedegreedef, ptr %170, i32 0, i32 0
  %172 = load i32, ptr %171, align 4, !tbaa !26
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i32, ptr %166, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !9
  %176 = icmp eq i32 %175, -1
  br i1 %176, label %177, label %190

177:                                              ; preds = %165
  %178 = load ptr, ptr %23, align 8, !tbaa !5
  %179 = load i32, ptr %11, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %178, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !9
  %183 = load ptr, ptr %30, align 8, !tbaa !5
  %184 = load i32, ptr %15, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds %struct.vedegreedef, ptr %183, i64 %185
  %187 = getelementptr inbounds %struct.vedegreedef, ptr %186, i32 0, i32 3
  %188 = load i32, ptr %187, align 4, !tbaa !22
  %189 = sub nsw i32 %188, %182
  store i32 %189, ptr %187, align 4, !tbaa !22
  br label %190

190:                                              ; preds = %177, %165
  br label %191

191:                                              ; preds = %190
  %192 = load i32, ptr %15, align 4, !tbaa !9
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %15, align 4, !tbaa !9
  br label %159, !llvm.loop !28

194:                                              ; preds = %159
  br label %282

195:                                              ; preds = %150
  %196 = load ptr, ptr %31, align 8, !tbaa !5
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = load i32, ptr %19, align 4, !tbaa !9
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i32, ptr %197, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds %struct.vedegreedef, ptr %196, i64 %202
  %204 = getelementptr inbounds %struct.vedegreedef, ptr %203, i32 0, i32 2
  %205 = load i32, ptr %204, align 4, !tbaa !29
  %206 = icmp eq i32 %205, 1
  br i1 %206, label %207, label %244

207:                                              ; preds = %195
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %240, %207
  %209 = load i32, ptr %15, align 4, !tbaa !9
  %210 = load ptr, ptr %28, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.vrinfodef, ptr %210, i32 0, i32 4
  %212 = load i32, ptr %211, align 8, !tbaa !21
  %213 = icmp slt i32 %209, %212
  br i1 %213, label %214, label %243

214:                                              ; preds = %208
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = load ptr, ptr %30, align 8, !tbaa !5
  %217 = load i32, ptr %15, align 4, !tbaa !9
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds %struct.vedegreedef, ptr %216, i64 %218
  %220 = getelementptr inbounds %struct.vedegreedef, ptr %219, i32 0, i32 0
  %221 = load i32, ptr %220, align 4, !tbaa !26
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds i32, ptr %215, i64 %222
  %224 = load i32, ptr %223, align 4, !tbaa !9
  %225 = icmp ne i32 %224, -1
  br i1 %225, label %226, label %239

226:                                              ; preds = %214
  %227 = load ptr, ptr %23, align 8, !tbaa !5
  %228 = load i32, ptr %11, align 4, !tbaa !9
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds i32, ptr %227, i64 %229
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = load ptr, ptr %30, align 8, !tbaa !5
  %233 = load i32, ptr %15, align 4, !tbaa !9
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %struct.vedegreedef, ptr %232, i64 %234
  %236 = getelementptr inbounds %struct.vedegreedef, ptr %235, i32 0, i32 3
  %237 = load i32, ptr %236, align 4, !tbaa !22
  %238 = add nsw i32 %237, %231
  store i32 %238, ptr %236, align 4, !tbaa !22
  br label %239

239:                                              ; preds = %226, %214
  br label %240

240:                                              ; preds = %239
  %241 = load i32, ptr %15, align 4, !tbaa !9
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %15, align 4, !tbaa !9
  br label %208, !llvm.loop !30

243:                                              ; preds = %208
  br label %281

244:                                              ; preds = %195
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %245

245:                                              ; preds = %277, %244
  %246 = load i32, ptr %15, align 4, !tbaa !9
  %247 = load ptr, ptr %28, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.vrinfodef, ptr %247, i32 0, i32 4
  %249 = load i32, ptr %248, align 8, !tbaa !21
  %250 = icmp slt i32 %246, %249
  br i1 %250, label %251, label %280

251:                                              ; preds = %245
  %252 = load ptr, ptr %10, align 8, !tbaa !5
  %253 = load ptr, ptr %30, align 8, !tbaa !5
  %254 = load i32, ptr %15, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds %struct.vedegreedef, ptr %253, i64 %255
  %257 = getelementptr inbounds %struct.vedegreedef, ptr %256, i32 0, i32 0
  %258 = load i32, ptr %257, align 4, !tbaa !26
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds i32, ptr %252, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !9
  %262 = icmp eq i32 %261, -1
  br i1 %262, label %263, label %276

263:                                              ; preds = %251
  %264 = load ptr, ptr %23, align 8, !tbaa !5
  %265 = load i32, ptr %11, align 4, !tbaa !9
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds i32, ptr %264, i64 %266
  %268 = load i32, ptr %267, align 4, !tbaa !9
  %269 = load ptr, ptr %30, align 8, !tbaa !5
  %270 = load i32, ptr %15, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds %struct.vedegreedef, ptr %269, i64 %271
  %273 = getelementptr inbounds %struct.vedegreedef, ptr %272, i32 0, i32 3
  %274 = load i32, ptr %273, align 4, !tbaa !22
  %275 = sub nsw i32 %274, %268
  store i32 %275, ptr %273, align 4, !tbaa !22
  br label %276

276:                                              ; preds = %263, %251
  br label %277

277:                                              ; preds = %276
  %278 = load i32, ptr %15, align 4, !tbaa !9
  %279 = add nsw i32 %278, 1
  store i32 %279, ptr %15, align 4, !tbaa !9
  br label %245, !llvm.loop !31

280:                                              ; preds = %245
  br label %281

281:                                              ; preds = %280, %243
  br label %282

282:                                              ; preds = %281, %194
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %299, %282
  %284 = load i32, ptr %16, align 4, !tbaa !9
  %285 = load ptr, ptr %29, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.vrinfodef, ptr %285, i32 0, i32 4
  %287 = load i32, ptr %286, align 8, !tbaa !21
  %288 = icmp slt i32 %284, %287
  br i1 %288, label %289, label %302

289:                                              ; preds = %283
  %290 = load ptr, ptr %10, align 8, !tbaa !5
  %291 = load ptr, ptr %31, align 8, !tbaa !5
  %292 = load i32, ptr %16, align 4, !tbaa !9
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds %struct.vedegreedef, ptr %291, i64 %293
  %295 = getelementptr inbounds %struct.vedegreedef, ptr %294, i32 0, i32 0
  %296 = load i32, ptr %295, align 4, !tbaa !26
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds i32, ptr %290, i64 %297
  store i32 -1, ptr %298, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %289
  %300 = load i32, ptr %16, align 4, !tbaa !9
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %16, align 4, !tbaa !9
  br label %283, !llvm.loop !32

302:                                              ; preds = %283
  %303 = load ptr, ptr %10, align 8, !tbaa !5
  %304 = load i32, ptr %20, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds i32, ptr %303, i64 %305
  store i32 -1, ptr %306, align 4, !tbaa !9
  br label %307

307:                                              ; preds = %302
  %308 = load i32, ptr %14, align 4, !tbaa !9
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %14, align 4, !tbaa !9
  br label %103, !llvm.loop !33

310:                                              ; preds = %103
  br label %311

311:                                              ; preds = %310, %57
  %312 = load ptr, ptr %28, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.vrinfodef, ptr %312, i32 0, i32 3
  store i32 -1073741824, ptr %313, align 4, !tbaa !34
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %314

314:                                              ; preds = %341, %311
  %315 = load i32, ptr %15, align 4, !tbaa !9
  %316 = load ptr, ptr %28, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.vrinfodef, ptr %316, i32 0, i32 4
  %318 = load i32, ptr %317, align 8, !tbaa !21
  %319 = icmp slt i32 %315, %318
  br i1 %319, label %320, label %344

320:                                              ; preds = %314
  %321 = load ptr, ptr %30, align 8, !tbaa !5
  %322 = load i32, ptr %15, align 4, !tbaa !9
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds %struct.vedegreedef, ptr %321, i64 %323
  %325 = getelementptr inbounds %struct.vedegreedef, ptr %324, i32 0, i32 3
  %326 = load i32, ptr %325, align 4, !tbaa !22
  %327 = load ptr, ptr %28, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.vrinfodef, ptr %327, i32 0, i32 3
  %329 = load i32, ptr %328, align 4, !tbaa !34
  %330 = icmp sgt i32 %326, %329
  br i1 %330, label %331, label %340

331:                                              ; preds = %320
  %332 = load ptr, ptr %30, align 8, !tbaa !5
  %333 = load i32, ptr %15, align 4, !tbaa !9
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds %struct.vedegreedef, ptr %332, i64 %334
  %336 = getelementptr inbounds %struct.vedegreedef, ptr %335, i32 0, i32 3
  %337 = load i32, ptr %336, align 4, !tbaa !22
  %338 = load ptr, ptr %28, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.vrinfodef, ptr %338, i32 0, i32 3
  store i32 %337, ptr %339, align 4, !tbaa !34
  br label %340

340:                                              ; preds = %331, %320
  br label %341

341:                                              ; preds = %340
  %342 = load i32, ptr %15, align 4, !tbaa !9
  %343 = add nsw i32 %342, 1
  store i32 %343, ptr %15, align 4, !tbaa !9
  br label %314, !llvm.loop !35

344:                                              ; preds = %314
  %345 = load ptr, ptr %28, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.vrinfodef, ptr %345, i32 0, i32 1
  %347 = load i32, ptr %346, align 4, !tbaa !36
  %348 = icmp sgt i32 %347, 0
  br i1 %348, label %349, label %364

349:                                              ; preds = %344
  %350 = load ptr, ptr %28, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.vrinfodef, ptr %350, i32 0, i32 0
  %352 = load i32, ptr %351, align 8, !tbaa !37
  %353 = icmp eq i32 %352, 0
  br i1 %353, label %354, label %364

354:                                              ; preds = %349
  %355 = load ptr, ptr %23, align 8, !tbaa !5
  %356 = load i32, ptr %13, align 4, !tbaa !9
  %357 = sext i32 %356 to i64
  %358 = getelementptr inbounds i32, ptr %355, i64 %357
  %359 = load i32, ptr %358, align 4, !tbaa !9
  %360 = load ptr, ptr %28, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.vrinfodef, ptr %360, i32 0, i32 3
  %362 = load i32, ptr %361, align 4, !tbaa !34
  %363 = add nsw i32 %362, %359
  store i32 %363, ptr %361, align 4, !tbaa !34
  br label %364

364:                                              ; preds = %354, %349, %344
  br label %365

365:                                              ; preds = %364
  %366 = load i32, ptr %12, align 4, !tbaa !9
  %367 = add nsw i32 %366, 1
  store i32 %367, ptr %12, align 4, !tbaa !9
  br label %53, !llvm.loop !38

368:                                              ; preds = %53
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 16}
!12 = !{!"graphdef", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !6, i64 96, !6, i64 104, !10, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !10, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208}
!13 = !{!12, !6, i64 24}
!14 = !{!12, !6, i64 40}
!15 = !{!12, !6, i64 48}
!16 = !{!12, !6, i64 56}
!17 = !{!12, !6, i64 96}
!18 = !{!12, !6, i64 160}
!19 = !{!20, !6, i64 24}
!20 = !{!"vrinfodef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !6, i64 24}
!21 = !{!20, !10, i64 16}
!22 = !{!23, !10, i64 12}
!23 = !{!"vedegreedef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!23, !10, i64 0}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = !{!23, !10, i64 8}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = !{!20, !10, i64 12}
!35 = distinct !{!35, !25}
!36 = !{!20, !10, i64 4}
!37 = !{!20, !10, i64 0}
!38 = distinct !{!38, !25}


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

%struct.vrinfodef = type { i32, i32, i32, i32, i32, ptr }
%struct.vedegreedef = type { i32, i32, i32, i32 }

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @__ComputeKWayVolume(ptr nocapture noundef readonly %0, i32 noundef %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef %4) local_unnamed_addr #0 {
  %6 = getelementptr inbounds i8, ptr %0, i64 24
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 40
  %9 = load ptr, ptr %8, align 8, !tbaa !11
  %10 = getelementptr inbounds i8, ptr %0, i64 48
  %11 = load ptr, ptr %10, align 8, !tbaa !12
  %12 = getelementptr inbounds i8, ptr %0, i64 96
  %13 = load ptr, ptr %12, align 8, !tbaa !13
  %14 = getelementptr inbounds i8, ptr %0, i64 160
  %15 = load ptr, ptr %14, align 8, !tbaa !14
  %16 = icmp sgt i32 %1, 0
  br i1 %16, label %.lr.ph140.preheader, label %._crit_edge141

.lr.ph140.preheader:                              ; preds = %5
  %wide.trip.count177 = zext nneg i32 %1 to i64
  br label %.lr.ph140

.lr.ph140:                                        ; preds = %.lr.ph140.preheader, %235
  %indvars.iv174 = phi i64 [ 0, %.lr.ph140.preheader ], [ %indvars.iv.next175, %235 ]
  %17 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv174
  %18 = load i32, ptr %17, align 4, !tbaa !15
  %19 = sext i32 %18 to i64
  %20 = getelementptr inbounds i32, ptr %13, i64 %19
  %21 = load i32, ptr %20, align 4, !tbaa !15
  %22 = getelementptr inbounds %struct.vrinfodef, ptr %15, i64 %19
  %23 = getelementptr inbounds i8, ptr %22, i64 24
  %24 = load ptr, ptr %23, align 8, !tbaa !16
  %25 = getelementptr inbounds i32, ptr %3, i64 %19
  %26 = load i32, ptr %25, align 4, !tbaa !15
  %27 = icmp eq i32 %26, 1
  br i1 %27, label %.preheader114, label %.loopexit113

.preheader114:                                    ; preds = %.lr.ph140
  %28 = getelementptr inbounds i8, ptr %22, i64 16
  %29 = load i32, ptr %28, align 8, !tbaa !18
  %30 = icmp sgt i32 %29, 0
  br i1 %30, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.preheader114
  %wide.trip.count = zext nneg i32 %29 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %31 = icmp ult i32 %29, 4
  br i1 %31, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

.lr.ph.preheader.new:                             ; preds = %.lr.ph.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483644
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %32 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv, i32 3
  store i32 0, ptr %32, align 4, !tbaa !19
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %33 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.next, i32 3
  store i32 0, ptr %33, align 4, !tbaa !19
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %34 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.next.1, i32 3
  store i32 0, ptr %34, align 4, !tbaa !19
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %35 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.next.2, i32 3
  store i32 0, ptr %35, align 4, !tbaa !19
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !21

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %36 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.epil, i32 3
  store i32 0, ptr %36, align 4, !tbaa !19
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.lr.ph.epil, !llvm.loop !23

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %.preheader114
  %37 = getelementptr inbounds i32, ptr %7, i64 %19
  %38 = load i32, ptr %37, align 4, !tbaa !15
  %39 = getelementptr i8, ptr %37, i64 4
  %40 = load i32, ptr %39, align 4, !tbaa !15
  %41 = icmp slt i32 %38, %40
  br i1 %41, label %.lr.ph133, label %.loopexit113

.lr.ph133:                                        ; preds = %._crit_edge
  %42 = sext i32 %21 to i64
  %43 = getelementptr inbounds i32, ptr %4, i64 %42
  %44 = sext i32 %38 to i64
  br label %45

45:                                               ; preds = %.lr.ph133, %._crit_edge130
  %indvars.iv166 = phi i64 [ %44, %.lr.ph133 ], [ %indvars.iv.next167, %._crit_edge130 ]
  %46 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv166
  %47 = load i32, ptr %46, align 4, !tbaa !15
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds i32, ptr %13, i64 %48
  %50 = load i32, ptr %49, align 4, !tbaa !15
  %51 = getelementptr inbounds %struct.vrinfodef, ptr %15, i64 %48
  %52 = getelementptr inbounds i8, ptr %51, i64 24
  %53 = load ptr, ptr %52, align 8, !tbaa !16
  %54 = getelementptr inbounds i8, ptr %51, i64 16
  %55 = load i32, ptr %54, align 8, !tbaa !18
  %56 = icmp sgt i32 %55, 0
  br i1 %56, label %.lr.ph119, label %._crit_edge120

.lr.ph119:                                        ; preds = %45, %.lr.ph119
  %indvars.iv145 = phi i64 [ %indvars.iv.next146, %.lr.ph119 ], [ 0, %45 ]
  %57 = getelementptr inbounds %struct.vedegreedef, ptr %53, i64 %indvars.iv145
  %58 = load i32, ptr %57, align 4, !tbaa !25
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i32, ptr %4, i64 %59
  %61 = trunc nuw nsw i64 %indvars.iv145 to i32
  store i32 %61, ptr %60, align 4, !tbaa !15
  %indvars.iv.next146 = add nuw nsw i64 %indvars.iv145, 1
  %62 = load i32, ptr %54, align 8, !tbaa !18
  %63 = sext i32 %62 to i64
  %64 = icmp slt i64 %indvars.iv.next146, %63
  br i1 %64, label %.lr.ph119, label %._crit_edge120, !llvm.loop !26

._crit_edge120:                                   ; preds = %.lr.ph119, %45
  %65 = sext i32 %50 to i64
  %66 = getelementptr inbounds i32, ptr %4, i64 %65
  store i32 1, ptr %66, align 4, !tbaa !15
  %67 = icmp eq i32 %21, %50
  br i1 %67, label %.preheader, label %97

.preheader:                                       ; preds = %._crit_edge120
  %68 = load i32, ptr %28, align 8, !tbaa !18
  %69 = icmp sgt i32 %68, 0
  br i1 %69, label %.lr.ph126, label %.loopexit

.lr.ph126:                                        ; preds = %.preheader
  %70 = getelementptr inbounds i32, ptr %9, i64 %48
  %wide.trip.count161 = zext nneg i32 %68 to i64
  %xtraiter197 = and i64 %wide.trip.count161, 1
  %71 = icmp eq i32 %68, 1
  br i1 %71, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph126.new

.lr.ph126.new:                                    ; preds = %.lr.ph126
  %unroll_iter200 = and i64 %wide.trip.count161, 2147483646
  br label %72

72:                                               ; preds = %96, %.lr.ph126.new
  %indvars.iv158 = phi i64 [ 0, %.lr.ph126.new ], [ %indvars.iv.next159.1, %96 ]
  %niter201 = phi i64 [ 0, %.lr.ph126.new ], [ %niter201.next.1, %96 ]
  %73 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv158
  %74 = load i32, ptr %73, align 4, !tbaa !25
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds i32, ptr %4, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !15
  %78 = icmp eq i32 %77, -1
  br i1 %78, label %79, label %84

79:                                               ; preds = %72
  %80 = load i32, ptr %70, align 4, !tbaa !15
  %81 = getelementptr inbounds i8, ptr %73, i64 12
  %82 = load i32, ptr %81, align 4, !tbaa !19
  %83 = sub nsw i32 %82, %80
  store i32 %83, ptr %81, align 4, !tbaa !19
  br label %84

84:                                               ; preds = %72, %79
  %indvars.iv.next159 = or disjoint i64 %indvars.iv158, 1
  %85 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.next159
  %86 = load i32, ptr %85, align 4, !tbaa !25
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds i32, ptr %4, i64 %87
  %89 = load i32, ptr %88, align 4, !tbaa !15
  %90 = icmp eq i32 %89, -1
  br i1 %90, label %91, label %96

91:                                               ; preds = %84
  %92 = load i32, ptr %70, align 4, !tbaa !15
  %93 = getelementptr inbounds i8, ptr %85, i64 12
  %94 = load i32, ptr %93, align 4, !tbaa !19
  %95 = sub nsw i32 %94, %92
  store i32 %95, ptr %93, align 4, !tbaa !19
  br label %96

96:                                               ; preds = %91, %84
  %indvars.iv.next159.1 = add nuw nsw i64 %indvars.iv158, 2
  %niter201.next.1 = add i64 %niter201, 2
  %niter201.ncmp.1 = icmp eq i64 %niter201.next.1, %unroll_iter200
  br i1 %niter201.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %72, !llvm.loop !27

97:                                               ; preds = %._crit_edge120
  %98 = load i32, ptr %43, align 4, !tbaa !15
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds %struct.vedegreedef, ptr %53, i64 %99, i32 2
  %101 = load i32, ptr %100, align 4, !tbaa !28
  %102 = icmp eq i32 %101, 1
  %103 = load i32, ptr %28, align 8, !tbaa !18
  %104 = icmp sgt i32 %103, 0
  br i1 %102, label %.preheader109, label %.preheader111

.preheader111:                                    ; preds = %97
  br i1 %104, label %.lr.ph122, label %.loopexit

.lr.ph122:                                        ; preds = %.preheader111
  %105 = getelementptr inbounds i32, ptr %9, i64 %48
  %wide.trip.count151 = zext nneg i32 %103 to i64
  %xtraiter185 = and i64 %wide.trip.count151, 1
  %106 = icmp eq i32 %103, 1
  br i1 %106, label %.loopexit.loopexit184.unr-lcssa, label %.lr.ph122.new

.lr.ph122.new:                                    ; preds = %.lr.ph122
  %unroll_iter188 = and i64 %wide.trip.count151, 2147483646
  br label %132

.preheader109:                                    ; preds = %97
  br i1 %104, label %.lr.ph124, label %.loopexit

.lr.ph124:                                        ; preds = %.preheader109
  %107 = getelementptr inbounds i32, ptr %9, i64 %48
  %wide.trip.count156 = zext nneg i32 %103 to i64
  %xtraiter191 = and i64 %wide.trip.count156, 1
  %108 = icmp eq i32 %103, 1
  br i1 %108, label %.loopexit.loopexit183.unr-lcssa, label %.lr.ph124.new

.lr.ph124.new:                                    ; preds = %.lr.ph124
  %unroll_iter194 = and i64 %wide.trip.count156, 2147483646
  br label %109

109:                                              ; preds = %131, %.lr.ph124.new
  %indvars.iv153 = phi i64 [ 0, %.lr.ph124.new ], [ %indvars.iv.next154.1, %131 ]
  %niter195 = phi i64 [ 0, %.lr.ph124.new ], [ %niter195.next.1, %131 ]
  %110 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv153
  %111 = load i32, ptr %110, align 4, !tbaa !25
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds i32, ptr %4, i64 %112
  %114 = load i32, ptr %113, align 4, !tbaa !15
  %.not = icmp eq i32 %114, -1
  br i1 %.not, label %120, label %115

115:                                              ; preds = %109
  %116 = load i32, ptr %107, align 4, !tbaa !15
  %117 = getelementptr inbounds i8, ptr %110, i64 12
  %118 = load i32, ptr %117, align 4, !tbaa !19
  %119 = add nsw i32 %118, %116
  store i32 %119, ptr %117, align 4, !tbaa !19
  br label %120

120:                                              ; preds = %109, %115
  %indvars.iv.next154 = or disjoint i64 %indvars.iv153, 1
  %121 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.next154
  %122 = load i32, ptr %121, align 4, !tbaa !25
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds i32, ptr %4, i64 %123
  %125 = load i32, ptr %124, align 4, !tbaa !15
  %.not.1 = icmp eq i32 %125, -1
  br i1 %.not.1, label %131, label %126

126:                                              ; preds = %120
  %127 = load i32, ptr %107, align 4, !tbaa !15
  %128 = getelementptr inbounds i8, ptr %121, i64 12
  %129 = load i32, ptr %128, align 4, !tbaa !19
  %130 = add nsw i32 %129, %127
  store i32 %130, ptr %128, align 4, !tbaa !19
  br label %131

131:                                              ; preds = %126, %120
  %indvars.iv.next154.1 = add nuw nsw i64 %indvars.iv153, 2
  %niter195.next.1 = add i64 %niter195, 2
  %niter195.ncmp.1 = icmp eq i64 %niter195.next.1, %unroll_iter194
  br i1 %niter195.ncmp.1, label %.loopexit.loopexit183.unr-lcssa, label %109, !llvm.loop !29

132:                                              ; preds = %156, %.lr.ph122.new
  %indvars.iv148 = phi i64 [ 0, %.lr.ph122.new ], [ %indvars.iv.next149.1, %156 ]
  %niter189 = phi i64 [ 0, %.lr.ph122.new ], [ %niter189.next.1, %156 ]
  %133 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv148
  %134 = load i32, ptr %133, align 4, !tbaa !25
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds i32, ptr %4, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !15
  %138 = icmp eq i32 %137, -1
  br i1 %138, label %139, label %144

139:                                              ; preds = %132
  %140 = load i32, ptr %105, align 4, !tbaa !15
  %141 = getelementptr inbounds i8, ptr %133, i64 12
  %142 = load i32, ptr %141, align 4, !tbaa !19
  %143 = sub nsw i32 %142, %140
  store i32 %143, ptr %141, align 4, !tbaa !19
  br label %144

144:                                              ; preds = %132, %139
  %indvars.iv.next149 = or disjoint i64 %indvars.iv148, 1
  %145 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.next149
  %146 = load i32, ptr %145, align 4, !tbaa !25
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds i32, ptr %4, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !15
  %150 = icmp eq i32 %149, -1
  br i1 %150, label %151, label %156

151:                                              ; preds = %144
  %152 = load i32, ptr %105, align 4, !tbaa !15
  %153 = getelementptr inbounds i8, ptr %145, i64 12
  %154 = load i32, ptr %153, align 4, !tbaa !19
  %155 = sub nsw i32 %154, %152
  store i32 %155, ptr %153, align 4, !tbaa !19
  br label %156

156:                                              ; preds = %151, %144
  %indvars.iv.next149.1 = add nuw nsw i64 %indvars.iv148, 2
  %niter189.next.1 = add i64 %niter189, 2
  %niter189.ncmp.1 = icmp eq i64 %niter189.next.1, %unroll_iter188
  br i1 %niter189.ncmp.1, label %.loopexit.loopexit184.unr-lcssa, label %132, !llvm.loop !30

.loopexit.loopexit.unr-lcssa:                     ; preds = %96, %.lr.ph126
  %indvars.iv158.unr = phi i64 [ 0, %.lr.ph126 ], [ %indvars.iv.next159.1, %96 ]
  %lcmp.mod199.not = icmp eq i64 %xtraiter197, 0
  br i1 %lcmp.mod199.not, label %.loopexit, label %.epil.preheader196

.epil.preheader196:                               ; preds = %.loopexit.loopexit.unr-lcssa
  %157 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv158.unr
  %158 = load i32, ptr %157, align 4, !tbaa !25
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds i32, ptr %4, i64 %159
  %161 = load i32, ptr %160, align 4, !tbaa !15
  %162 = icmp eq i32 %161, -1
  br i1 %162, label %163, label %.loopexit

163:                                              ; preds = %.epil.preheader196
  %164 = load i32, ptr %70, align 4, !tbaa !15
  %165 = getelementptr inbounds i8, ptr %157, i64 12
  %166 = load i32, ptr %165, align 4, !tbaa !19
  %167 = sub nsw i32 %166, %164
  store i32 %167, ptr %165, align 4, !tbaa !19
  br label %.loopexit

.loopexit.loopexit183.unr-lcssa:                  ; preds = %131, %.lr.ph124
  %indvars.iv153.unr = phi i64 [ 0, %.lr.ph124 ], [ %indvars.iv.next154.1, %131 ]
  %lcmp.mod193.not = icmp eq i64 %xtraiter191, 0
  br i1 %lcmp.mod193.not, label %.loopexit, label %.epil.preheader190

.epil.preheader190:                               ; preds = %.loopexit.loopexit183.unr-lcssa
  %168 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv153.unr
  %169 = load i32, ptr %168, align 4, !tbaa !25
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds i32, ptr %4, i64 %170
  %172 = load i32, ptr %171, align 4, !tbaa !15
  %.not.epil = icmp eq i32 %172, -1
  br i1 %.not.epil, label %.loopexit, label %173

173:                                              ; preds = %.epil.preheader190
  %174 = load i32, ptr %107, align 4, !tbaa !15
  %175 = getelementptr inbounds i8, ptr %168, i64 12
  %176 = load i32, ptr %175, align 4, !tbaa !19
  %177 = add nsw i32 %176, %174
  store i32 %177, ptr %175, align 4, !tbaa !19
  br label %.loopexit

.loopexit.loopexit184.unr-lcssa:                  ; preds = %156, %.lr.ph122
  %indvars.iv148.unr = phi i64 [ 0, %.lr.ph122 ], [ %indvars.iv.next149.1, %156 ]
  %lcmp.mod187.not = icmp eq i64 %xtraiter185, 0
  br i1 %lcmp.mod187.not, label %.loopexit, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit.loopexit184.unr-lcssa
  %178 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv148.unr
  %179 = load i32, ptr %178, align 4, !tbaa !25
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %4, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !15
  %183 = icmp eq i32 %182, -1
  br i1 %183, label %184, label %.loopexit

184:                                              ; preds = %.epil.preheader
  %185 = load i32, ptr %105, align 4, !tbaa !15
  %186 = getelementptr inbounds i8, ptr %178, i64 12
  %187 = load i32, ptr %186, align 4, !tbaa !19
  %188 = sub nsw i32 %187, %185
  store i32 %188, ptr %186, align 4, !tbaa !19
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit184.unr-lcssa, %184, %.epil.preheader, %.loopexit.loopexit183.unr-lcssa, %173, %.epil.preheader190, %.loopexit.loopexit.unr-lcssa, %163, %.epil.preheader196, %.preheader111, %.preheader109, %.preheader
  %189 = load i32, ptr %54, align 8, !tbaa !18
  %190 = icmp sgt i32 %189, 0
  br i1 %190, label %.lr.ph129, label %._crit_edge130

.lr.ph129:                                        ; preds = %.loopexit, %.lr.ph129
  %indvars.iv163 = phi i64 [ %indvars.iv.next164, %.lr.ph129 ], [ 0, %.loopexit ]
  %191 = getelementptr inbounds %struct.vedegreedef, ptr %53, i64 %indvars.iv163
  %192 = load i32, ptr %191, align 4, !tbaa !25
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i32, ptr %4, i64 %193
  store i32 -1, ptr %194, align 4, !tbaa !15
  %indvars.iv.next164 = add nuw nsw i64 %indvars.iv163, 1
  %195 = load i32, ptr %54, align 8, !tbaa !18
  %196 = sext i32 %195 to i64
  %197 = icmp slt i64 %indvars.iv.next164, %196
  br i1 %197, label %.lr.ph129, label %._crit_edge130, !llvm.loop !31

._crit_edge130:                                   ; preds = %.lr.ph129, %.loopexit
  store i32 -1, ptr %66, align 4, !tbaa !15
  %indvars.iv.next167 = add nsw i64 %indvars.iv166, 1
  %198 = load i32, ptr %39, align 4, !tbaa !15
  %199 = sext i32 %198 to i64
  %200 = icmp slt i64 %indvars.iv.next167, %199
  br i1 %200, label %45, label %.loopexit113, !llvm.loop !32

.loopexit113:                                     ; preds = %._crit_edge130, %._crit_edge, %.lr.ph140
  %201 = getelementptr inbounds i8, ptr %22, i64 12
  store i32 -1073741824, ptr %201, align 4, !tbaa !33
  %202 = getelementptr inbounds i8, ptr %22, i64 16
  %203 = load i32, ptr %202, align 8, !tbaa !18
  %204 = icmp sgt i32 %203, 0
  br i1 %204, label %.lr.ph136, label %._crit_edge137

.lr.ph136:                                        ; preds = %.loopexit113
  %wide.trip.count172 = zext nneg i32 %203 to i64
  %xtraiter203 = and i64 %wide.trip.count172, 1
  %205 = icmp eq i32 %203, 1
  br i1 %205, label %._crit_edge137.loopexit.unr-lcssa, label %.lr.ph136.new

.lr.ph136.new:                                    ; preds = %.lr.ph136
  %unroll_iter207 = and i64 %wide.trip.count172, 2147483646
  br label %206

206:                                              ; preds = %218, %.lr.ph136.new
  %indvars.iv169 = phi i64 [ 0, %.lr.ph136.new ], [ %indvars.iv.next170.1, %218 ]
  %207 = phi i32 [ -1073741824, %.lr.ph136.new ], [ %219, %218 ]
  %niter208 = phi i64 [ 0, %.lr.ph136.new ], [ %niter208.next.1, %218 ]
  %208 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv169, i32 3
  %209 = load i32, ptr %208, align 4, !tbaa !19
  %210 = icmp sgt i32 %209, %207
  br i1 %210, label %211, label %212

211:                                              ; preds = %206
  store i32 %209, ptr %201, align 4, !tbaa !33
  br label %212

212:                                              ; preds = %206, %211
  %213 = phi i32 [ %207, %206 ], [ %209, %211 ]
  %indvars.iv.next170 = or disjoint i64 %indvars.iv169, 1
  %214 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv.next170, i32 3
  %215 = load i32, ptr %214, align 4, !tbaa !19
  %216 = icmp sgt i32 %215, %213
  br i1 %216, label %217, label %218

217:                                              ; preds = %212
  store i32 %215, ptr %201, align 4, !tbaa !33
  br label %218

218:                                              ; preds = %217, %212
  %219 = phi i32 [ %213, %212 ], [ %215, %217 ]
  %indvars.iv.next170.1 = add nuw nsw i64 %indvars.iv169, 2
  %niter208.next.1 = add i64 %niter208, 2
  %niter208.ncmp.1 = icmp eq i64 %niter208.next.1, %unroll_iter207
  br i1 %niter208.ncmp.1, label %._crit_edge137.loopexit.unr-lcssa, label %206, !llvm.loop !34

._crit_edge137.loopexit.unr-lcssa:                ; preds = %218, %.lr.ph136
  %.lcssa.ph = phi i32 [ poison, %.lr.ph136 ], [ %219, %218 ]
  %indvars.iv169.unr = phi i64 [ 0, %.lr.ph136 ], [ %indvars.iv.next170.1, %218 ]
  %.unr = phi i32 [ -1073741824, %.lr.ph136 ], [ %219, %218 ]
  %lcmp.mod205.not = icmp eq i64 %xtraiter203, 0
  br i1 %lcmp.mod205.not, label %._crit_edge137, label %.epil.preheader202

.epil.preheader202:                               ; preds = %._crit_edge137.loopexit.unr-lcssa
  %220 = getelementptr inbounds %struct.vedegreedef, ptr %24, i64 %indvars.iv169.unr, i32 3
  %221 = load i32, ptr %220, align 4, !tbaa !19
  %222 = icmp sgt i32 %221, %.unr
  br i1 %222, label %223, label %._crit_edge137

223:                                              ; preds = %.epil.preheader202
  store i32 %221, ptr %201, align 4, !tbaa !33
  br label %._crit_edge137

._crit_edge137:                                   ; preds = %._crit_edge137.loopexit.unr-lcssa, %223, %.epil.preheader202, %.loopexit113
  %224 = phi i32 [ -1073741824, %.loopexit113 ], [ %.lcssa.ph, %._crit_edge137.loopexit.unr-lcssa ], [ %.unr, %.epil.preheader202 ], [ %221, %223 ]
  %225 = getelementptr inbounds i8, ptr %22, i64 4
  %226 = load i32, ptr %225, align 4, !tbaa !35
  %227 = icmp sgt i32 %226, 0
  br i1 %227, label %228, label %235

228:                                              ; preds = %._crit_edge137
  %229 = load i32, ptr %22, align 8, !tbaa !36
  %230 = icmp eq i32 %229, 0
  br i1 %230, label %231, label %235

231:                                              ; preds = %228
  %232 = getelementptr inbounds i32, ptr %9, i64 %19
  %233 = load i32, ptr %232, align 4, !tbaa !15
  %234 = add nsw i32 %224, %233
  store i32 %234, ptr %201, align 4, !tbaa !33
  br label %235

235:                                              ; preds = %._crit_edge137, %228, %231
  %indvars.iv.next175 = add nuw nsw i64 %indvars.iv174, 1
  %exitcond178.not = icmp eq i64 %indvars.iv.next175, %wide.trip.count177
  br i1 %exitcond178.not, label %._crit_edge141, label %.lr.ph140, !llvm.loop !37

._crit_edge141:                                   ; preds = %235, %5
  ret void
}

attributes #0 = { nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) 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" }

!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, !7, i64 24}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !10, i64 88, !10, i64 92, !7, i64 96, !7, i64 104, !10, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !7, i64 160, !7, i64 168, !10, i64 176, !7, i64 184, !7, i64 192, !7, i64 200, !7, i64 208}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !7, i64 40}
!12 = !{!6, !7, i64 48}
!13 = !{!6, !7, i64 96}
!14 = !{!6, !7, i64 160}
!15 = !{!10, !10, i64 0}
!16 = !{!17, !7, i64 24}
!17 = !{!"vrinfodef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 24}
!18 = !{!17, !10, i64 16}
!19 = !{!20, !10, i64 12}
!20 = !{!"vedegreedef", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.unroll.disable"}
!25 = !{!20, !10, i64 0}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = !{!20, !10, i64 8}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = !{!17, !10, i64 12}
!34 = distinct !{!34, !22}
!35 = !{!17, !10, i64 4}
!36 = !{!17, !10, i64 0}
!37 = distinct !{!37, !22}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass