; LLVM IR from sympiler/nasoq :: src/symbolic (ColumnCount)

; 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.nasoq::sympiler_CSC" = type { i64, i64, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i = external hidden unnamed_addr constant [114 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5nasoq15initialize_nodeEiPiS0_S0_S0_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq12process_edgeEiiiPiS0_S0_S0_S0_S0_S0_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq13finalize_nodeEiPiS0_(i32 noundef, ptr noundef, ptr noundef) #0

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11, i32 noundef %12) #2 {
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %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 i32, align 4
  %28 = alloca double, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i64, align 8
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store i64 %2, ptr %17, align 8, !tbaa !9
  store ptr %3, ptr %18, align 8, !tbaa !5
  store ptr %4, ptr %19, align 8, !tbaa !5
  store ptr %5, ptr %20, align 8, !tbaa !5
  store ptr %6, ptr %21, align 8, !tbaa !5
  store ptr %7, ptr %22, align 8, !tbaa !5
  store ptr %8, ptr %23, align 8, !tbaa !5
  store ptr %9, ptr %24, align 8, !tbaa !5
  store ptr %10, ptr %25, align 8, !tbaa !5
  store ptr %11, ptr %26, align 8, !tbaa !5
  store i32 %12, ptr %27, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  store i32 1, ptr %59, align 4, !tbaa !11
  %63 = load ptr, ptr %15, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %63, i32 0, i32 8
  %65 = load i32, ptr %64, align 8, !tbaa !13
  store i32 %65, ptr %48, align 4, !tbaa !11
  %66 = load i32, ptr %48, align 4, !tbaa !11
  %67 = icmp sgt i32 %66, 0
  br i1 %67, label %68, label %69

68:                                               ; preds = %13
  store i32 0, ptr %14, align 4
  store i32 1, ptr %60, align 4
  br label %788

69:                                               ; preds = %13
  store i32 1, ptr %27, align 4, !tbaa !11
  %70 = load ptr, ptr %15, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %70, i32 0, i32 0
  %72 = load i64, ptr %71, align 8, !tbaa !15
  %73 = trunc i64 %72 to i32
  store i32 %73, ptr %53, align 4, !tbaa !11
  %74 = load ptr, ptr %15, align 8, !tbaa !5
  %75 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %74, i32 0, i32 1
  %76 = load i64, ptr %75, align 8, !tbaa !16
  %77 = trunc i64 %76 to i32
  store i32 %77, ptr %54, align 4, !tbaa !11
  %78 = load i32, ptr %53, align 4, !tbaa !11
  %79 = sext i32 %78 to i64
  %80 = call noundef i64 @_ZN5nasoq11mult_size_tEmmPi(i64 noundef %79, i64 noundef 2, ptr noundef %59)
  store i64 %80, ptr %58, align 8, !tbaa !9
  %81 = load i64, ptr %58, align 8, !tbaa !9
  %82 = load i32, ptr %48, align 4, !tbaa !11
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %84, label %85

84:                                               ; preds = %69
  br label %87

85:                                               ; preds = %69
  %86 = load i32, ptr %54, align 4, !tbaa !11
  br label %87

87:                                               ; preds = %85, %84
  %88 = phi i32 [ 0, %84 ], [ %86, %85 ]
  %89 = sext i32 %88 to i64
  %90 = call noundef i64 @_ZN5nasoq10add_size_tEmmPi(i64 noundef %81, i64 noundef %89, ptr noundef %59)
  store i64 %90, ptr %58, align 8, !tbaa !9
  %91 = load i32, ptr %59, align 4, !tbaa !11
  %92 = icmp ne i32 %91, 0
  br i1 %92, label %94, label %93

93:                                               ; preds = %87
  store i32 0, ptr %14, align 4
  store i32 1, ptr %60, align 4
  br label %788

94:                                               ; preds = %87
  %95 = load ptr, ptr %15, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %95, i32 0, i32 3
  %97 = load ptr, ptr %96, align 8, !tbaa !17
  store ptr %97, ptr %29, align 8, !tbaa !5
  %98 = load ptr, ptr %15, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %98, i32 0, i32 4
  %100 = load ptr, ptr %99, align 8, !tbaa !18
  store ptr %100, ptr %30, align 8, !tbaa !5
  %101 = load ptr, ptr %15, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %101, i32 0, i32 5
  %103 = load ptr, ptr %102, align 8, !tbaa !19
  store ptr %103, ptr %31, align 8, !tbaa !5
  %104 = load ptr, ptr %15, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %104, i32 0, i32 13
  %106 = load i32, ptr %105, align 4, !tbaa !20
  store i32 %106, ptr %55, align 4, !tbaa !11
  %107 = load i64, ptr %58, align 8, !tbaa !9
  %108 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %107, i64 4)
  %109 = extractvalue { i64, i1 } %108, 1
  %110 = extractvalue { i64, i1 } %108, 0
  %111 = select i1 %109, i64 -1, i64 %110
  %112 = call noalias noundef nonnull ptr @_Znam(i64 noundef %111) #10
  call void @llvm.memset.p0.i64(ptr align 4 %112, i8 0, i64 %111, i1 false)
  store ptr %112, ptr %38, align 8, !tbaa !5
  %113 = load ptr, ptr %38, align 8, !tbaa !5
  store ptr %113, ptr %33, align 8, !tbaa !5
  %114 = load ptr, ptr %38, align 8, !tbaa !5
  %115 = load i32, ptr %53, align 4, !tbaa !11
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds i32, ptr %114, i64 %116
  store ptr %117, ptr %32, align 8, !tbaa !5
  %118 = load ptr, ptr %38, align 8, !tbaa !5
  %119 = load i32, ptr %53, align 4, !tbaa !11
  %120 = sext i32 %119 to i64
  %121 = mul i64 2, %120
  %122 = getelementptr inbounds i32, ptr %118, i64 %121
  store ptr %122, ptr %36, align 8, !tbaa !5
  %123 = load i32, ptr %53, align 4, !tbaa !11
  %124 = sext i32 %123 to i64
  %125 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %124, i64 4)
  %126 = extractvalue { i64, i1 } %125, 1
  %127 = extractvalue { i64, i1 } %125, 0
  %128 = select i1 %126, i64 -1, i64 %127
  %129 = call noalias noundef nonnull ptr @_Znam(i64 noundef %128) #10
  store ptr %129, ptr %35, align 8, !tbaa !5
  %130 = load i32, ptr %53, align 4, !tbaa !11
  %131 = add nsw i32 %130, 1
  %132 = sext i32 %131 to i64
  %133 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %132, i64 4)
  %134 = extractvalue { i64, i1 } %133, 1
  %135 = extractvalue { i64, i1 } %133, 0
  %136 = select i1 %134, i64 -1, i64 %135
  %137 = call noalias noundef nonnull ptr @_Znam(i64 noundef %136) #10
  store ptr %137, ptr %34, align 8, !tbaa !5
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %138

138:                                              ; preds = %147, %94
  %139 = load i32, ptr %39, align 4, !tbaa !11
  %140 = load i32, ptr %53, align 4, !tbaa !11
  %141 = icmp slt i32 %139, %140
  br i1 %141, label %142, label %150

142:                                              ; preds = %138
  %143 = load ptr, ptr %22, align 8, !tbaa !5
  %144 = load i32, ptr %39, align 4, !tbaa !11
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds i32, ptr %143, i64 %145
  store i32 -1, ptr %146, align 4, !tbaa !11
  br label %147

147:                                              ; preds = %142
  %148 = load i32, ptr %39, align 4, !tbaa !11
  %149 = add nsw i32 %148, 1
  store i32 %149, ptr %39, align 4, !tbaa !11
  br label %138, !llvm.loop !21

150:                                              ; preds = %138
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %151

151:                                              ; preds = %234, %150
  %152 = load i32, ptr %42, align 4, !tbaa !11
  %153 = load i32, ptr %53, align 4, !tbaa !11
  %154 = icmp slt i32 %152, %153
  br i1 %154, label %155, label %237

155:                                              ; preds = %151
  %156 = load ptr, ptr %19, align 8, !tbaa !5
  %157 = load i32, ptr %42, align 4, !tbaa !11
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds i32, ptr %156, i64 %158
  %160 = load i32, ptr %159, align 4, !tbaa !11
  store i32 %160, ptr %39, align 4, !tbaa !11
  %161 = load ptr, ptr %22, align 8, !tbaa !5
  %162 = load i32, ptr %39, align 4, !tbaa !11
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds i32, ptr %161, i64 %163
  %165 = load i32, ptr %164, align 4, !tbaa !11
  %166 = icmp eq i32 %165, -1
  %167 = zext i1 %166 to i64
  %168 = select i1 %166, i32 1, i32 0
  %169 = load ptr, ptr %21, align 8, !tbaa !5
  %170 = load i32, ptr %39, align 4, !tbaa !11
  %171 = sext i32 %170 to i64
  %172 = getelementptr inbounds i32, ptr %169, i64 %171
  store i32 %168, ptr %172, align 4, !tbaa !11
  store i32 0, ptr %43, align 4, !tbaa !11
  %173 = load i32, ptr %39, align 4, !tbaa !11
  store i32 %173, ptr %41, align 4, !tbaa !11
  br label %174

174:                                              ; preds = %194, %155
  %175 = load i32, ptr %41, align 4, !tbaa !11
  %176 = icmp ne i32 %175, -1
  br i1 %176, label %177, label %184

177:                                              ; preds = %174
  %178 = load ptr, ptr %22, align 8, !tbaa !5
  %179 = load i32, ptr %41, align 4, !tbaa !11
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %178, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !11
  %183 = icmp eq i32 %182, -1
  br label %184

184:                                              ; preds = %177, %174
  %185 = phi i1 [ false, %174 ], [ %183, %177 ]
  br i1 %185, label %186, label %200

186:                                              ; preds = %184
  %187 = load i32, ptr %42, align 4, !tbaa !11
  %188 = load ptr, ptr %22, align 8, !tbaa !5
  %189 = load i32, ptr %41, align 4, !tbaa !11
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i32, ptr %188, i64 %190
  store i32 %187, ptr %191, align 4, !tbaa !11
  %192 = load i32, ptr %43, align 4, !tbaa !11
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %43, align 4, !tbaa !11
  br label %194

194:                                              ; preds = %186
  %195 = load ptr, ptr %18, align 8, !tbaa !5
  %196 = load i32, ptr %41, align 4, !tbaa !11
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds i32, ptr %195, i64 %197
  %199 = load i32, ptr %198, align 4, !tbaa !11
  store i32 %199, ptr %41, align 4, !tbaa !11
  br label %174, !llvm.loop !23

200:                                              ; preds = %184
  %201 = load i32, ptr %41, align 4, !tbaa !11
  %202 = icmp eq i32 %201, -1
  br i1 %202, label %203, label %206

203:                                              ; preds = %200
  %204 = load i32, ptr %43, align 4, !tbaa !11
  %205 = add nsw i32 %204, -1
  store i32 %205, ptr %43, align 4, !tbaa !11
  br label %214

206:                                              ; preds = %200
  %207 = load ptr, ptr %23, align 8, !tbaa !5
  %208 = load i32, ptr %41, align 4, !tbaa !11
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i32, ptr %207, i64 %209
  %211 = load i32, ptr %210, align 4, !tbaa !11
  %212 = load i32, ptr %43, align 4, !tbaa !11
  %213 = add nsw i32 %212, %211
  store i32 %213, ptr %43, align 4, !tbaa !11
  br label %214

214:                                              ; preds = %206, %203
  %215 = load i32, ptr %39, align 4, !tbaa !11
  store i32 %215, ptr %44, align 4, !tbaa !11
  br label %216

216:                                              ; preds = %227, %214
  %217 = load i32, ptr %44, align 4, !tbaa !11
  %218 = load i32, ptr %41, align 4, !tbaa !11
  %219 = icmp ne i32 %217, %218
  br i1 %219, label %220, label %233

220:                                              ; preds = %216
  %221 = load i32, ptr %43, align 4, !tbaa !11
  %222 = add nsw i32 %221, -1
  store i32 %222, ptr %43, align 4, !tbaa !11
  %223 = load ptr, ptr %23, align 8, !tbaa !5
  %224 = load i32, ptr %44, align 4, !tbaa !11
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds i32, ptr %223, i64 %225
  store i32 %221, ptr %226, align 4, !tbaa !11
  br label %227

227:                                              ; preds = %220
  %228 = load ptr, ptr %18, align 8, !tbaa !5
  %229 = load i32, ptr %44, align 4, !tbaa !11
  %230 = sext i32 %229 to i64
  %231 = getelementptr inbounds i32, ptr %228, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !11
  store i32 %232, ptr %44, align 4, !tbaa !11
  br label %216, !llvm.loop !24

233:                                              ; preds = %216
  br label %234

234:                                              ; preds = %233
  %235 = load i32, ptr %42, align 4, !tbaa !11
  %236 = add nsw i32 %235, 1
  store i32 %236, ptr %42, align 4, !tbaa !11
  br label %151, !llvm.loop !25

237:                                              ; preds = %151
  %238 = load ptr, ptr %24, align 8, !tbaa !5
  store i32 0, ptr %238, align 4, !tbaa !11
  %239 = load i32, ptr %48, align 4, !tbaa !11
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %241, label %463

241:                                              ; preds = %237
  %242 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %242, ptr %37, align 8, !tbaa !5
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %243

243:                                              ; preds = %257, %241
  %244 = load i32, ptr %42, align 4, !tbaa !11
  %245 = load i32, ptr %53, align 4, !tbaa !11
  %246 = icmp slt i32 %244, %245
  br i1 %246, label %247, label %260

247:                                              ; preds = %243
  %248 = load i32, ptr %42, align 4, !tbaa !11
  %249 = load ptr, ptr %37, align 8, !tbaa !5
  %250 = load ptr, ptr %19, align 8, !tbaa !5
  %251 = load i32, ptr %42, align 4, !tbaa !11
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %250, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !11
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %249, i64 %255
  store i32 %248, ptr %256, align 4, !tbaa !11
  br label %257

257:                                              ; preds = %247
  %258 = load i32, ptr %42, align 4, !tbaa !11
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr %42, align 4, !tbaa !11
  br label %243, !llvm.loop !26

260:                                              ; preds = %243
  %261 = load ptr, ptr %16, align 8, !tbaa !5
  %262 = icmp ne ptr %261, null
  %263 = zext i1 %262 to i32
  store i32 %263, ptr %56, align 4, !tbaa !11
  %264 = load i32, ptr %56, align 4, !tbaa !11
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %327

266:                                              ; preds = %260
  %267 = load i64, ptr %17, align 8, !tbaa !9
  %268 = trunc i64 %267 to i32
  store i32 %268, ptr %49, align 4, !tbaa !11
  store i32 0, ptr %40, align 4, !tbaa !11
  br label %269

269:                                              ; preds = %278, %266
  %270 = load i32, ptr %40, align 4, !tbaa !11
  %271 = load i32, ptr %54, align 4, !tbaa !11
  %272 = icmp slt i32 %270, %271
  br i1 %272, label %273, label %281

273:                                              ; preds = %269
  %274 = load ptr, ptr %36, align 8, !tbaa !5
  %275 = load i32, ptr %40, align 4, !tbaa !11
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i32, ptr %274, i64 %276
  store i32 -2, ptr %277, align 4, !tbaa !11
  br label %278

278:                                              ; preds = %273
  %279 = load i32, ptr %40, align 4, !tbaa !11
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %40, align 4, !tbaa !11
  br label %269, !llvm.loop !27

281:                                              ; preds = %269
  store i32 0, ptr %57, align 4, !tbaa !11
  br label %282

282:                                              ; preds = %323, %281
  %283 = load i32, ptr %57, align 4, !tbaa !11
  %284 = load i32, ptr %49, align 4, !tbaa !11
  %285 = icmp slt i32 %283, %284
  br i1 %285, label %286, label %326

286:                                              ; preds = %282
  %287 = load ptr, ptr %16, align 8, !tbaa !5
  %288 = load i32, ptr %57, align 4, !tbaa !11
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds i32, ptr %287, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !11
  store i32 %291, ptr %40, align 4, !tbaa !11
  %292 = load i32, ptr %40, align 4, !tbaa !11
  %293 = icmp slt i32 %292, 0
  br i1 %293, label %305, label %294

294:                                              ; preds = %286
  %295 = load i32, ptr %40, align 4, !tbaa !11
  %296 = load i32, ptr %54, align 4, !tbaa !11
  %297 = icmp sgt i32 %295, %296
  br i1 %297, label %305, label %298

298:                                              ; preds = %294
  %299 = load ptr, ptr %36, align 8, !tbaa !5
  %300 = load i32, ptr %40, align 4, !tbaa !11
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i32, ptr %299, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !11
  %304 = icmp ne i32 %303, -2
  br i1 %304, label %305, label %318

305:                                              ; preds = %298, %294, %286
  %306 = load ptr, ptr %38, align 8, !tbaa !5
  %307 = icmp eq ptr %306, null
  br i1 %307, label %309, label %308

308:                                              ; preds = %305
  call void @_ZdaPv(ptr noundef %306) #11
  br label %309

309:                                              ; preds = %308, %305
  %310 = load ptr, ptr %35, align 8, !tbaa !5
  %311 = icmp eq ptr %310, null
  br i1 %311, label %313, label %312

312:                                              ; preds = %309
  call void @_ZdaPv(ptr noundef %310) #11
  br label %313

313:                                              ; preds = %312, %309
  %314 = load ptr, ptr %34, align 8, !tbaa !5
  %315 = icmp eq ptr %314, null
  br i1 %315, label %317, label %316

316:                                              ; preds = %313
  call void @_ZdaPv(ptr noundef %314) #11
  br label %317

317:                                              ; preds = %316, %313
  store i32 0, ptr %14, align 4
  store i32 1, ptr %60, align 4
  br label %788

318:                                              ; preds = %298
  %319 = load ptr, ptr %36, align 8, !tbaa !5
  %320 = load i32, ptr %40, align 4, !tbaa !11
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  store i32 -1, ptr %322, align 4, !tbaa !11
  br label %323

323:                                              ; preds = %318
  %324 = load i32, ptr %57, align 4, !tbaa !11
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %57, align 4, !tbaa !11
  br label %282, !llvm.loop !28

326:                                              ; preds = %282
  br label %329

327:                                              ; preds = %260
  %328 = load i32, ptr %54, align 4, !tbaa !11
  store i32 %328, ptr %49, align 4, !tbaa !11
  br label %329

329:                                              ; preds = %327, %326
  store i32 0, ptr %57, align 4, !tbaa !11
  br label %330

330:                                              ; preds = %459, %329
  %331 = load i32, ptr %57, align 4, !tbaa !11
  %332 = load i32, ptr %49, align 4, !tbaa !11
  %333 = icmp slt i32 %331, %332
  br i1 %333, label %334, label %462

334:                                              ; preds = %330
  %335 = load i32, ptr %56, align 4, !tbaa !11
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %337, label %343

337:                                              ; preds = %334
  %338 = load ptr, ptr %16, align 8, !tbaa !5
  %339 = load i32, ptr %57, align 4, !tbaa !11
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i32, ptr %338, i64 %340
  %342 = load i32, ptr %341, align 4, !tbaa !11
  br label %345

343:                                              ; preds = %334
  %344 = load i32, ptr %57, align 4, !tbaa !11
  br label %345

345:                                              ; preds = %343, %337
  %346 = phi i32 [ %342, %337 ], [ %344, %343 ]
  store i32 %346, ptr %40, align 4, !tbaa !11
  %347 = load ptr, ptr %29, align 8, !tbaa !5
  %348 = load i32, ptr %40, align 4, !tbaa !11
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i32, ptr %347, i64 %349
  %351 = load i32, ptr %350, align 4, !tbaa !11
  store i32 %351, ptr %45, align 4, !tbaa !11
  %352 = load i32, ptr %55, align 4, !tbaa !11
  %353 = icmp ne i32 %352, 0
  br i1 %353, label %354, label %361

354:                                              ; preds = %345
  %355 = load ptr, ptr %29, align 8, !tbaa !5
  %356 = load i32, ptr %40, align 4, !tbaa !11
  %357 = add nsw i32 %356, 1
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds i32, ptr %355, i64 %358
  %360 = load i32, ptr %359, align 4, !tbaa !11
  br label %369

361:                                              ; preds = %345
  %362 = load i32, ptr %45, align 4, !tbaa !11
  %363 = load ptr, ptr %31, align 8, !tbaa !5
  %364 = load i32, ptr %40, align 4, !tbaa !11
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i32, ptr %363, i64 %365
  %367 = load i32, ptr %366, align 4, !tbaa !11
  %368 = add nsw i32 %362, %367
  br label %369

369:                                              ; preds = %361, %354
  %370 = phi i32 [ %360, %354 ], [ %368, %361 ]
  store i32 %370, ptr %46, align 4, !tbaa !11
  %371 = load i32, ptr %46, align 4, !tbaa !11
  %372 = load i32, ptr %45, align 4, !tbaa !11
  %373 = sub nsw i32 %371, %372
  %374 = icmp sgt i32 0, %373
  br i1 %374, label %375, label %376

375:                                              ; preds = %369
  br label %380

376:                                              ; preds = %369
  %377 = load i32, ptr %46, align 4, !tbaa !11
  %378 = load i32, ptr %45, align 4, !tbaa !11
  %379 = sub nsw i32 %377, %378
  br label %380

380:                                              ; preds = %376, %375
  %381 = phi i32 [ 0, %375 ], [ %379, %376 ]
  %382 = sitofp i32 %381 to double
  store double %382, ptr %28, align 8, !tbaa !29
  %383 = load double, ptr %28, align 8, !tbaa !29
  %384 = load double, ptr %28, align 8, !tbaa !29
  %385 = load double, ptr %28, align 8, !tbaa !29
  %386 = call double @llvm.fmuladd.f64(double %383, double %384, double %385)
  %387 = load ptr, ptr %24, align 8, !tbaa !5
  %388 = load i32, ptr %387, align 4, !tbaa !11
  %389 = sitofp i32 %388 to double
  %390 = fadd double %389, %386
  %391 = fptosi double %390 to i32
  store i32 %391, ptr %387, align 4, !tbaa !11
  %392 = load i32, ptr %46, align 4, !tbaa !11
  %393 = load i32, ptr %45, align 4, !tbaa !11
  %394 = icmp sgt i32 %392, %393
  br i1 %394, label %395, label %458

395:                                              ; preds = %380
  %396 = load ptr, ptr %37, align 8, !tbaa !5
  %397 = load ptr, ptr %30, align 8, !tbaa !5
  %398 = load i32, ptr %45, align 4, !tbaa !11
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !11
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds i32, ptr %396, i64 %402
  %404 = load i32, ptr %403, align 4, !tbaa !11
  store i32 %404, ptr %42, align 4, !tbaa !11
  br label %405

405:                                              ; preds = %428, %395
  %406 = load i32, ptr %45, align 4, !tbaa !11
  %407 = load i32, ptr %46, align 4, !tbaa !11
  %408 = icmp slt i32 %406, %407
  br i1 %408, label %409, label %431

409:                                              ; preds = %405
  %410 = load ptr, ptr %37, align 8, !tbaa !5
  %411 = load ptr, ptr %30, align 8, !tbaa !5
  %412 = load i32, ptr %45, align 4, !tbaa !11
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds i32, ptr %411, i64 %413
  %415 = load i32, ptr %414, align 4, !tbaa !11
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds i32, ptr %410, i64 %416
  %418 = load i32, ptr %417, align 4, !tbaa !11
  store i32 %418, ptr %47, align 4, !tbaa !11
  %419 = load i32, ptr %42, align 4, !tbaa !11
  %420 = load i32, ptr %47, align 4, !tbaa !11
  %421 = icmp slt i32 %419, %420
  br i1 %421, label %422, label %424

422:                                              ; preds = %409
  %423 = load i32, ptr %42, align 4, !tbaa !11
  br label %426

424:                                              ; preds = %409
  %425 = load i32, ptr %47, align 4, !tbaa !11
  br label %426

426:                                              ; preds = %424, %422
  %427 = phi i32 [ %423, %422 ], [ %425, %424 ]
  store i32 %427, ptr %42, align 4, !tbaa !11
  br label %428

428:                                              ; preds = %426
  %429 = load i32, ptr %45, align 4, !tbaa !11
  %430 = add nsw i32 %429, 1
  store i32 %430, ptr %45, align 4, !tbaa !11
  br label %405, !llvm.loop !31

431:                                              ; preds = %405
  %432 = load i32, ptr %42, align 4, !tbaa !11
  %433 = icmp sge i32 %432, 0
  br i1 %433, label %434, label %438

434:                                              ; preds = %431
  %435 = load i32, ptr %42, align 4, !tbaa !11
  %436 = load i32, ptr %53, align 4, !tbaa !11
  %437 = icmp slt i32 %435, %436
  br label %438

438:                                              ; preds = %434, %431
  %439 = phi i1 [ false, %431 ], [ %437, %434 ]
  br i1 %439, label %440, label %441

440:                                              ; preds = %438
  br label %443

441:                                              ; preds = %438
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 245, ptr noundef @__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i) #12
  unreachable

442:                                              ; No predecessors!
  br label %443

443:                                              ; preds = %442, %440
  %444 = load ptr, ptr %34, align 8, !tbaa !5
  %445 = load i32, ptr %42, align 4, !tbaa !11
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds i32, ptr %444, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !11
  %449 = load ptr, ptr %36, align 8, !tbaa !5
  %450 = load i32, ptr %40, align 4, !tbaa !11
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i32, ptr %449, i64 %451
  store i32 %448, ptr %452, align 4, !tbaa !11
  %453 = load i32, ptr %40, align 4, !tbaa !11
  %454 = load ptr, ptr %34, align 8, !tbaa !5
  %455 = load i32, ptr %42, align 4, !tbaa !11
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds i32, ptr %454, i64 %456
  store i32 %453, ptr %457, align 4, !tbaa !11
  br label %458

458:                                              ; preds = %443, %380
  br label %459

459:                                              ; preds = %458
  %460 = load i32, ptr %57, align 4, !tbaa !11
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %57, align 4, !tbaa !11
  br label %330, !llvm.loop !32

462:                                              ; preds = %330
  br label %463

463:                                              ; preds = %462, %237
  %464 = load ptr, ptr %20, align 8, !tbaa !5
  %465 = icmp ne ptr %464, null
  br i1 %465, label %466, label %480

466:                                              ; preds = %463
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %467

467:                                              ; preds = %476, %466
  %468 = load i32, ptr %39, align 4, !tbaa !11
  %469 = load i32, ptr %53, align 4, !tbaa !11
  %470 = icmp slt i32 %468, %469
  br i1 %470, label %471, label %479

471:                                              ; preds = %467
  %472 = load ptr, ptr %20, align 8, !tbaa !5
  %473 = load i32, ptr %39, align 4, !tbaa !11
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds i32, ptr %472, i64 %474
  store i32 1, ptr %475, align 4, !tbaa !11
  br label %476

476:                                              ; preds = %471
  %477 = load i32, ptr %39, align 4, !tbaa !11
  %478 = add nsw i32 %477, 1
  store i32 %478, ptr %39, align 4, !tbaa !11
  br label %467, !llvm.loop !33

479:                                              ; preds = %467
  br label %480

480:                                              ; preds = %479, %463
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %481

481:                                              ; preds = %499, %480
  %482 = load i32, ptr %39, align 4, !tbaa !11
  %483 = load i32, ptr %53, align 4, !tbaa !11
  %484 = icmp slt i32 %482, %483
  br i1 %484, label %485, label %502

485:                                              ; preds = %481
  %486 = load ptr, ptr %35, align 8, !tbaa !5
  %487 = load i32, ptr %39, align 4, !tbaa !11
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds i32, ptr %486, i64 %488
  store i32 -1, ptr %489, align 4, !tbaa !11
  %490 = load ptr, ptr %32, align 8, !tbaa !5
  %491 = load i32, ptr %39, align 4, !tbaa !11
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds i32, ptr %490, i64 %492
  store i32 -1, ptr %493, align 4, !tbaa !11
  %494 = load i32, ptr %39, align 4, !tbaa !11
  %495 = load ptr, ptr %33, align 8, !tbaa !5
  %496 = load i32, ptr %39, align 4, !tbaa !11
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds i32, ptr %495, i64 %497
  store i32 %494, ptr %498, align 4, !tbaa !11
  br label %499

499:                                              ; preds = %485
  %500 = load i32, ptr %39, align 4, !tbaa !11
  %501 = add nsw i32 %500, 1
  store i32 %501, ptr %39, align 4, !tbaa !11
  br label %481, !llvm.loop !34

502:                                              ; preds = %481
  %503 = load i32, ptr %48, align 4, !tbaa !11
  %504 = icmp ne i32 %503, 0
  br i1 %504, label %505, label %580

505:                                              ; preds = %502
  %506 = load i32, ptr %53, align 4, !tbaa !11
  store i32 %506, ptr %50, align 4, !tbaa !11
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %507

507:                                              ; preds = %576, %505
  %508 = load i32, ptr %42, align 4, !tbaa !11
  %509 = load i32, ptr %53, align 4, !tbaa !11
  %510 = icmp slt i32 %508, %509
  br i1 %510, label %511, label %579

511:                                              ; preds = %507
  %512 = load i32, ptr %42, align 4, !tbaa !11
  %513 = load ptr, ptr %19, align 8, !tbaa !5
  %514 = load ptr, ptr %18, align 8, !tbaa !5
  %515 = load ptr, ptr %21, align 8, !tbaa !5
  %516 = load ptr, ptr %32, align 8, !tbaa !5
  %517 = call noundef i32 @_ZN5nasoq15initialize_nodeEiPiS0_S0_S0_(i32 noundef %512, ptr noundef %513, ptr noundef %514, ptr noundef %515, ptr noundef %516)
  store i32 %517, ptr %40, align 4, !tbaa !11
  %518 = load ptr, ptr %29, align 8, !tbaa !5
  %519 = load i32, ptr %40, align 4, !tbaa !11
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds i32, ptr %518, i64 %520
  %522 = load i32, ptr %521, align 4, !tbaa !11
  store i32 %522, ptr %45, align 4, !tbaa !11
  %523 = load i32, ptr %55, align 4, !tbaa !11
  %524 = icmp ne i32 %523, 0
  br i1 %524, label %525, label %532

525:                                              ; preds = %511
  %526 = load ptr, ptr %29, align 8, !tbaa !5
  %527 = load i32, ptr %40, align 4, !tbaa !11
  %528 = add nsw i32 %527, 1
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i32, ptr %526, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !11
  br label %540

532:                                              ; preds = %511
  %533 = load i32, ptr %45, align 4, !tbaa !11
  %534 = load ptr, ptr %31, align 8, !tbaa !5
  %535 = load i32, ptr %40, align 4, !tbaa !11
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds i32, ptr %534, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !11
  %539 = add nsw i32 %533, %538
  br label %540

540:                                              ; preds = %532, %525
  %541 = phi i32 [ %531, %525 ], [ %539, %532 ]
  store i32 %541, ptr %46, align 4, !tbaa !11
  br label %542

542:                                              ; preds = %569, %540
  %543 = load i32, ptr %45, align 4, !tbaa !11
  %544 = load i32, ptr %46, align 4, !tbaa !11
  %545 = icmp slt i32 %543, %544
  br i1 %545, label %546, label %572

546:                                              ; preds = %542
  %547 = load ptr, ptr %30, align 8, !tbaa !5
  %548 = load i32, ptr %45, align 4, !tbaa !11
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  %551 = load i32, ptr %550, align 4, !tbaa !11
  store i32 %551, ptr %39, align 4, !tbaa !11
  %552 = load i32, ptr %39, align 4, !tbaa !11
  %553 = load i32, ptr %40, align 4, !tbaa !11
  %554 = icmp sgt i32 %552, %553
  br i1 %554, label %555, label %568

555:                                              ; preds = %546
  %556 = load i32, ptr %50, align 4, !tbaa !11
  %557 = add nsw i32 %556, 1
  store i32 %557, ptr %50, align 4, !tbaa !11
  %558 = load i32, ptr %40, align 4, !tbaa !11
  %559 = load i32, ptr %39, align 4, !tbaa !11
  %560 = load i32, ptr %42, align 4, !tbaa !11
  %561 = load ptr, ptr %22, align 8, !tbaa !5
  %562 = load ptr, ptr %32, align 8, !tbaa !5
  %563 = load ptr, ptr %21, align 8, !tbaa !5
  %564 = load ptr, ptr %35, align 8, !tbaa !5
  %565 = load ptr, ptr %20, align 8, !tbaa !5
  %566 = load ptr, ptr %33, align 8, !tbaa !5
  %567 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN5nasoq12process_edgeEiiiPiS0_S0_S0_S0_S0_S0_(i32 noundef %558, i32 noundef %559, i32 noundef %560, ptr noundef %561, ptr noundef %562, ptr noundef %563, ptr noundef %564, ptr noundef %565, ptr noundef %566, ptr noundef %567)
  br label %568

568:                                              ; preds = %555, %546
  br label %569

569:                                              ; preds = %568
  %570 = load i32, ptr %45, align 4, !tbaa !11
  %571 = add nsw i32 %570, 1
  store i32 %571, ptr %45, align 4, !tbaa !11
  br label %542, !llvm.loop !35

572:                                              ; preds = %542
  %573 = load i32, ptr %40, align 4, !tbaa !11
  %574 = load ptr, ptr %18, align 8, !tbaa !5
  %575 = load ptr, ptr %33, align 8, !tbaa !5
  call void @_ZN5nasoq13finalize_nodeEiPiS0_(i32 noundef %573, ptr noundef %574, ptr noundef %575)
  br label %576

576:                                              ; preds = %572
  %577 = load i32, ptr %42, align 4, !tbaa !11
  %578 = add nsw i32 %577, 1
  store i32 %578, ptr %42, align 4, !tbaa !11
  br label %507, !llvm.loop !36

579:                                              ; preds = %507
  br label %676

580:                                              ; preds = %502
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %581

581:                                              ; preds = %672, %580
  %582 = load i32, ptr %42, align 4, !tbaa !11
  %583 = load i32, ptr %53, align 4, !tbaa !11
  %584 = icmp slt i32 %582, %583
  br i1 %584, label %585, label %675

585:                                              ; preds = %581
  %586 = load i32, ptr %42, align 4, !tbaa !11
  %587 = load ptr, ptr %19, align 8, !tbaa !5
  %588 = load ptr, ptr %18, align 8, !tbaa !5
  %589 = load ptr, ptr %21, align 8, !tbaa !5
  %590 = load ptr, ptr %32, align 8, !tbaa !5
  %591 = call noundef i32 @_ZN5nasoq15initialize_nodeEiPiS0_S0_S0_(i32 noundef %586, ptr noundef %587, ptr noundef %588, ptr noundef %589, ptr noundef %590)
  store i32 %591, ptr %51, align 4, !tbaa !11
  %592 = load ptr, ptr %34, align 8, !tbaa !5
  %593 = load i32, ptr %42, align 4, !tbaa !11
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds i32, ptr %592, i64 %594
  %596 = load i32, ptr %595, align 4, !tbaa !11
  store i32 %596, ptr %40, align 4, !tbaa !11
  br label %597

597:                                              ; preds = %658, %585
  %598 = load i32, ptr %40, align 4, !tbaa !11
  %599 = icmp ne i32 %598, -1
  br i1 %599, label %600, label %664

600:                                              ; preds = %597
  %601 = load ptr, ptr %29, align 8, !tbaa !5
  %602 = load i32, ptr %40, align 4, !tbaa !11
  %603 = sext i32 %602 to i64
  %604 = getelementptr inbounds i32, ptr %601, i64 %603
  %605 = load i32, ptr %604, align 4, !tbaa !11
  store i32 %605, ptr %45, align 4, !tbaa !11
  %606 = load i32, ptr %55, align 4, !tbaa !11
  %607 = icmp ne i32 %606, 0
  br i1 %607, label %608, label %615

608:                                              ; preds = %600
  %609 = load ptr, ptr %29, align 8, !tbaa !5
  %610 = load i32, ptr %40, align 4, !tbaa !11
  %611 = add nsw i32 %610, 1
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds i32, ptr %609, i64 %612
  %614 = load i32, ptr %613, align 4, !tbaa !11
  br label %623

615:                                              ; preds = %600
  %616 = load i32, ptr %45, align 4, !tbaa !11
  %617 = load ptr, ptr %31, align 8, !tbaa !5
  %618 = load i32, ptr %40, align 4, !tbaa !11
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds i32, ptr %617, i64 %619
  %621 = load i32, ptr %620, align 4, !tbaa !11
  %622 = add nsw i32 %616, %621
  br label %623

623:                                              ; preds = %615, %608
  %624 = phi i32 [ %614, %608 ], [ %622, %615 ]
  store i32 %624, ptr %46, align 4, !tbaa !11
  br label %625

625:                                              ; preds = %654, %623
  %626 = load i32, ptr %45, align 4, !tbaa !11
  %627 = load i32, ptr %46, align 4, !tbaa !11
  %628 = icmp slt i32 %626, %627
  br i1 %628, label %629, label %657

629:                                              ; preds = %625
  %630 = load ptr, ptr %30, align 8, !tbaa !5
  %631 = load i32, ptr %45, align 4, !tbaa !11
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds i32, ptr %630, i64 %632
  %634 = load i32, ptr %633, align 4, !tbaa !11
  store i32 %634, ptr %39, align 4, !tbaa !11
  %635 = load ptr, ptr %32, align 8, !tbaa !5
  %636 = load i32, ptr %39, align 4, !tbaa !11
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds i32, ptr %635, i64 %637
  %639 = load i32, ptr %638, align 4, !tbaa !11
  %640 = load i32, ptr %42, align 4, !tbaa !11
  %641 = icmp slt i32 %639, %640
  br i1 %641, label %642, label %653

642:                                              ; preds = %629
  %643 = load i32, ptr %51, align 4, !tbaa !11
  %644 = load i32, ptr %39, align 4, !tbaa !11
  %645 = load i32, ptr %42, align 4, !tbaa !11
  %646 = load ptr, ptr %22, align 8, !tbaa !5
  %647 = load ptr, ptr %32, align 8, !tbaa !5
  %648 = load ptr, ptr %21, align 8, !tbaa !5
  %649 = load ptr, ptr %35, align 8, !tbaa !5
  %650 = load ptr, ptr %20, align 8, !tbaa !5
  %651 = load ptr, ptr %33, align 8, !tbaa !5
  %652 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN5nasoq12process_edgeEiiiPiS0_S0_S0_S0_S0_S0_(i32 noundef %643, i32 noundef %644, i32 noundef %645, ptr noundef %646, ptr noundef %647, ptr noundef %648, ptr noundef %649, ptr noundef %650, ptr noundef %651, ptr noundef %652)
  br label %653

653:                                              ; preds = %642, %629
  br label %654

654:                                              ; preds = %653
  %655 = load i32, ptr %45, align 4, !tbaa !11
  %656 = add nsw i32 %655, 1
  store i32 %656, ptr %45, align 4, !tbaa !11
  br label %625, !llvm.loop !37

657:                                              ; preds = %625
  br label %658

658:                                              ; preds = %657
  %659 = load ptr, ptr %36, align 8, !tbaa !5
  %660 = load i32, ptr %40, align 4, !tbaa !11
  %661 = sext i32 %660 to i64
  %662 = getelementptr inbounds i32, ptr %659, i64 %661
  %663 = load i32, ptr %662, align 4, !tbaa !11
  store i32 %663, ptr %40, align 4, !tbaa !11
  br label %597, !llvm.loop !38

664:                                              ; preds = %597
  %665 = load ptr, ptr %34, align 8, !tbaa !5
  %666 = load i32, ptr %42, align 4, !tbaa !11
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds i32, ptr %665, i64 %667
  store i32 -1, ptr %668, align 4, !tbaa !11
  %669 = load i32, ptr %51, align 4, !tbaa !11
  %670 = load ptr, ptr %18, align 8, !tbaa !5
  %671 = load ptr, ptr %33, align 8, !tbaa !5
  call void @_ZN5nasoq13finalize_nodeEiPiS0_(i32 noundef %669, ptr noundef %670, ptr noundef %671)
  br label %672

672:                                              ; preds = %664
  %673 = load i32, ptr %42, align 4, !tbaa !11
  %674 = add nsw i32 %673, 1
  store i32 %674, ptr %42, align 4, !tbaa !11
  br label %581, !llvm.loop !39

675:                                              ; preds = %581
  br label %676

676:                                              ; preds = %675, %579
  store i32 0, ptr %40, align 4, !tbaa !11
  br label %677

677:                                              ; preds = %702, %676
  %678 = load i32, ptr %40, align 4, !tbaa !11
  %679 = load i32, ptr %53, align 4, !tbaa !11
  %680 = icmp slt i32 %678, %679
  br i1 %680, label %681, label %705

681:                                              ; preds = %677
  %682 = load ptr, ptr %18, align 8, !tbaa !5
  %683 = load i32, ptr %40, align 4, !tbaa !11
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds i32, ptr %682, i64 %684
  %686 = load i32, ptr %685, align 4, !tbaa !11
  store i32 %686, ptr %52, align 4, !tbaa !11
  %687 = load i32, ptr %52, align 4, !tbaa !11
  %688 = icmp ne i32 %687, -1
  br i1 %688, label %689, label %701

689:                                              ; preds = %681
  %690 = load ptr, ptr %21, align 8, !tbaa !5
  %691 = load i32, ptr %40, align 4, !tbaa !11
  %692 = sext i32 %691 to i64
  %693 = getelementptr inbounds i32, ptr %690, i64 %692
  %694 = load i32, ptr %693, align 4, !tbaa !11
  %695 = load ptr, ptr %21, align 8, !tbaa !5
  %696 = load i32, ptr %52, align 4, !tbaa !11
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds i32, ptr %695, i64 %697
  %699 = load i32, ptr %698, align 4, !tbaa !11
  %700 = add nsw i32 %699, %694
  store i32 %700, ptr %698, align 4, !tbaa !11
  br label %701

701:                                              ; preds = %689, %681
  br label %702

702:                                              ; preds = %701
  %703 = load i32, ptr %40, align 4, !tbaa !11
  %704 = add nsw i32 %703, 1
  store i32 %704, ptr %40, align 4, !tbaa !11
  br label %677, !llvm.loop !40

705:                                              ; preds = %677
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  store i32 0, ptr %61, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #9
  store i32 0, ptr %62, align 4, !tbaa !11
  br label %706

706:                                              ; preds = %732, %705
  %707 = load i32, ptr %62, align 4, !tbaa !11
  %708 = load i32, ptr %53, align 4, !tbaa !11
  %709 = icmp slt i32 %707, %708
  br i1 %709, label %711, label %710

710:                                              ; preds = %706
  store i32 53, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  br label %735

711:                                              ; preds = %706
  %712 = load ptr, ptr %21, align 8, !tbaa !5
  %713 = load i32, ptr %62, align 4, !tbaa !11
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds i32, ptr %712, i64 %714
  %716 = load i32, ptr %715, align 4, !tbaa !11
  %717 = load i32, ptr %53, align 4, !tbaa !11
  %718 = load i32, ptr %62, align 4, !tbaa !11
  %719 = sub nsw i32 %717, %718
  %720 = icmp sle i32 %716, %719
  br i1 %720, label %721, label %722

721:                                              ; preds = %711
  br label %724

722:                                              ; preds = %711
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 346, ptr noundef @__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i) #12
  unreachable

723:                                              ; No predecessors!
  br label %724

724:                                              ; preds = %723, %721
  %725 = load ptr, ptr %21, align 8, !tbaa !5
  %726 = load i32, ptr %62, align 4, !tbaa !11
  %727 = sext i32 %726 to i64
  %728 = getelementptr inbounds i32, ptr %725, i64 %727
  %729 = load i32, ptr %728, align 4, !tbaa !11
  %730 = load i32, ptr %61, align 4, !tbaa !11
  %731 = add nsw i32 %730, %729
  store i32 %731, ptr %61, align 4, !tbaa !11
  br label %732

732:                                              ; preds = %724
  %733 = load i32, ptr %62, align 4, !tbaa !11
  %734 = add nsw i32 %733, 1
  store i32 %734, ptr %62, align 4, !tbaa !11
  br label %706, !llvm.loop !41

735:                                              ; preds = %710
  %736 = load ptr, ptr %24, align 8, !tbaa !5
  %737 = load i32, ptr %736, align 4, !tbaa !11
  %738 = load ptr, ptr %25, align 8, !tbaa !5
  store i32 %737, ptr %738, align 4, !tbaa !11
  %739 = load ptr, ptr %26, align 8, !tbaa !5
  store i32 0, ptr %739, align 4, !tbaa !11
  %740 = load ptr, ptr %24, align 8, !tbaa !5
  store i32 0, ptr %740, align 4, !tbaa !11
  store i32 0, ptr %40, align 4, !tbaa !11
  br label %741

741:                                              ; preds = %772, %735
  %742 = load i32, ptr %40, align 4, !tbaa !11
  %743 = load i32, ptr %53, align 4, !tbaa !11
  %744 = icmp slt i32 %742, %743
  br i1 %744, label %745, label %775

745:                                              ; preds = %741
  %746 = load ptr, ptr %21, align 8, !tbaa !5
  %747 = load i32, ptr %40, align 4, !tbaa !11
  %748 = sext i32 %747 to i64
  %749 = getelementptr inbounds i32, ptr %746, i64 %748
  %750 = load i32, ptr %749, align 4, !tbaa !11
  %751 = sitofp i32 %750 to double
  store double %751, ptr %28, align 8, !tbaa !29
  %752 = load double, ptr %28, align 8, !tbaa !29
  %753 = load ptr, ptr %26, align 8, !tbaa !5
  %754 = load i32, ptr %753, align 4, !tbaa !11
  %755 = sitofp i32 %754 to double
  %756 = fadd double %755, %752
  %757 = fptosi double %756 to i32
  store i32 %757, ptr %753, align 4, !tbaa !11
  %758 = load ptr, ptr %26, align 8, !tbaa !5
  %759 = load i32, ptr %758, align 4, !tbaa !11
  %760 = icmp sgt i32 %759, 0
  br i1 %760, label %761, label %762

761:                                              ; preds = %745
  br label %764

762:                                              ; preds = %745
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 373, ptr noundef @__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i) #12
  unreachable

763:                                              ; No predecessors!
  br label %764

764:                                              ; preds = %763, %761
  %765 = load double, ptr %28, align 8, !tbaa !29
  %766 = load double, ptr %28, align 8, !tbaa !29
  %767 = load ptr, ptr %24, align 8, !tbaa !5
  %768 = load i32, ptr %767, align 4, !tbaa !11
  %769 = sitofp i32 %768 to double
  %770 = call double @llvm.fmuladd.f64(double %765, double %766, double %769)
  %771 = fptosi double %770 to i32
  store i32 %771, ptr %767, align 4, !tbaa !11
  br label %772

772:                                              ; preds = %764
  %773 = load i32, ptr %40, align 4, !tbaa !11
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %40, align 4, !tbaa !11
  br label %741, !llvm.loop !42

775:                                              ; preds = %741
  %776 = load ptr, ptr %38, align 8, !tbaa !5
  %777 = icmp eq ptr %776, null
  br i1 %777, label %779, label %778

778:                                              ; preds = %775
  call void @_ZdaPv(ptr noundef %776) #11
  br label %779

779:                                              ; preds = %778, %775
  %780 = load ptr, ptr %35, align 8, !tbaa !5
  %781 = icmp eq ptr %780, null
  br i1 %781, label %783, label %782

782:                                              ; preds = %779
  call void @_ZdaPv(ptr noundef %780) #11
  br label %783

783:                                              ; preds = %782, %779
  %784 = load ptr, ptr %34, align 8, !tbaa !5
  %785 = icmp eq ptr %784, null
  br i1 %785, label %787, label %786

786:                                              ; preds = %783
  call void @_ZdaPv(ptr noundef %784) #11
  br label %787

787:                                              ; preds = %786, %783
  store i32 1, ptr %14, align 4
  store i32 1, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  br label %788

788:                                              ; preds = %787, %317, %93, %68
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  %789 = load i32, ptr %14, align 4
  ret i32 %789
}

declare noundef i64 @_ZN5nasoq11mult_size_tEmmPi(i64 noundef, i64 noundef, ptr noundef) #3

declare noundef i64 @_ZN5nasoq10add_size_tEmmPi(i64 noundef, i64 noundef, ptr noundef) #3

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

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

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

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #8

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin nounwind }
attributes #12 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 64}
!14 = !{!"_ZTSN5nasoq12sympiler_CSCE", !10, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84}
!15 = !{!14, !10, i64 0}
!16 = !{!14, !10, i64 8}
!17 = !{!14, !6, i64 24}
!18 = !{!14, !6, i64 32}
!19 = !{!14, !6, i64 40}
!20 = !{!14, !12, i64 84}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}
!29 = !{!30, !30, i64 0}
!30 = !{!"double", !7, i64 0}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !22}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22}
!40 = distinct !{!40, !22}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !22}


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

@.str = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i = external hidden unnamed_addr constant [114 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN5nasoq15initialize_nodeEiPiS0_S0_S0_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq12process_edgeEiiiPiS0_S0_S0_S0_S0_S0_(i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN5nasoq13finalize_nodeEiPiS0_(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 2) i32 @_ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i(ptr nocapture noundef readonly %0, ptr noundef readonly %1, i64 noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr nocapture noundef nonnull align 4 dereferenceable(4) %9, ptr nocapture noundef nonnull writeonly align 4 dereferenceable(4) %10, ptr nocapture noundef nonnull align 4 dereferenceable(4) %11, i32 noundef %12) local_unnamed_addr #2 {
  %14 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #10
  store i32 1, ptr %14, align 4, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %0, i64 64
  %16 = load i32, ptr %15, align 8, !tbaa !9
  %17 = icmp sgt i32 %16, 0
  br i1 %17, label %347, label %18

18:                                               ; preds = %13
  %19 = load i64, ptr %0, align 8, !tbaa !13
  %20 = trunc i64 %19 to i32
  %21 = getelementptr inbounds i8, ptr %0, i64 8
  %22 = load i64, ptr %21, align 8, !tbaa !14
  %23 = trunc i64 %22 to i32
  %sext = shl i64 %19, 32
  %24 = ashr exact i64 %sext, 32
  %25 = call noundef i64 @_ZN5nasoq11mult_size_tEmmPi(i64 noundef %24, i64 noundef 2, ptr noundef nonnull %14)
  %.not = icmp eq i32 %16, 0
  %26 = shl i64 %22, 32
  %27 = ashr exact i64 %26, 32
  %28 = select i1 %.not, i64 %27, i64 0
  %29 = call noundef i64 @_ZN5nasoq10add_size_tEmmPi(i64 noundef %25, i64 noundef %28, ptr noundef nonnull %14)
  %30 = load i32, ptr %14, align 4, !tbaa !5
  %.not315 = icmp eq i32 %30, 0
  br i1 %.not315, label %347, label %31

31:                                               ; preds = %18
  %32 = getelementptr inbounds i8, ptr %0, i64 24
  %33 = load ptr, ptr %32, align 8, !tbaa !15
  %34 = getelementptr inbounds i8, ptr %0, i64 32
  %35 = load ptr, ptr %34, align 8, !tbaa !16
  %36 = getelementptr inbounds i8, ptr %0, i64 40
  %37 = load ptr, ptr %36, align 8, !tbaa !17
  %38 = getelementptr inbounds i8, ptr %0, i64 84
  %39 = load i32, ptr %38, align 4, !tbaa !18
  %40 = icmp ugt i64 %29, 4611686018427387903
  %41 = shl nuw i64 %29, 2
  %42 = select i1 %40, i64 -1, i64 %41
  %43 = call noalias noundef nonnull ptr @_Znam(i64 noundef %42) #11
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %43, i8 0, i64 %42, i1 false)
  %44 = getelementptr i32, ptr %43, i64 %24
  %45 = ashr exact i64 %sext, 29
  %46 = getelementptr inbounds i8, ptr %43, i64 %45
  %47 = icmp ugt i64 %24, 4611686018427387903
  %48 = ashr exact i64 %sext, 30
  %49 = select i1 %47, i64 -1, i64 %48
  %50 = call noalias noundef nonnull ptr @_Znam(i64 noundef %49) #11
  %sext316 = add i64 %sext, 4294967296
  %51 = ashr exact i64 %sext316, 30
  %.inv = icmp sgt i64 %sext316, -1
  %52 = select i1 %.inv, i64 %51, i64 -1
  %53 = call noalias noundef nonnull ptr @_Znam(i64 noundef %52) #11
  %54 = icmp sgt i32 %20, 0
  br i1 %54, label %.lr.ph355.preheader, label %._crit_edge356.thread

.lr.ph355.preheader:                              ; preds = %31
  %55 = shl i64 %19, 2
  %56 = and i64 %55, 8589934588
  call void @llvm.memset.p0.i64(ptr align 4 %7, i8 -1, i64 %56, i1 false), !tbaa !5
  %wide.trip.count = and i64 %19, 2147483647
  br label %.lr.ph355

.lr.ph355:                                        ; preds = %.lr.ph355.preheader, %._crit_edge352
  %indvars.iv = phi i64 [ 0, %.lr.ph355.preheader ], [ %indvars.iv.next, %._crit_edge352 ]
  %57 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv
  %58 = load i32, ptr %57, align 4, !tbaa !5
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i32, ptr %7, i64 %59
  %61 = load i32, ptr %60, align 4, !tbaa !5
  %62 = icmp eq i32 %61, -1
  %63 = zext i1 %62 to i32
  %64 = getelementptr inbounds i32, ptr %6, i64 %59
  store i32 %63, ptr %64, align 4, !tbaa !5
  %cond342 = icmp eq i32 %58, -1
  br i1 %cond342, label %._crit_edge352, label %.lr.ph345.preheader

.lr.ph345.preheader:                              ; preds = %.lr.ph355
  %65 = trunc nuw nsw i64 %indvars.iv to i32
  br label %.lr.ph345

.lr.ph345:                                        ; preds = %.lr.ph345.preheader, %70
  %.0284344 = phi i32 [ %73, %70 ], [ %58, %.lr.ph345.preheader ]
  %.0293343 = phi i32 [ %71, %70 ], [ 0, %.lr.ph345.preheader ]
  %66 = sext i32 %.0284344 to i64
  %67 = getelementptr inbounds i32, ptr %7, i64 %66
  %68 = load i32, ptr %67, align 4, !tbaa !5
  %69 = icmp eq i32 %68, -1
  br i1 %69, label %70, label %.critedge

70:                                               ; preds = %.lr.ph345
  store i32 %65, ptr %67, align 4, !tbaa !5
  %71 = add nuw nsw i32 %.0293343, 1
  %72 = getelementptr inbounds i32, ptr %3, i64 %66
  %73 = load i32, ptr %72, align 4, !tbaa !5
  %cond = icmp eq i32 %73, -1
  br i1 %cond, label %._crit_edge, label %.lr.ph345, !llvm.loop !19

.critedge:                                        ; preds = %.lr.ph345
  %74 = getelementptr inbounds i32, ptr %8, i64 %66
  %75 = load i32, ptr %74, align 4, !tbaa !5
  %76 = add nsw i32 %75, %.0293343
  br label %._crit_edge

._crit_edge:                                      ; preds = %70, %.critedge
  %.0284339 = phi i32 [ %.0284344, %.critedge ], [ -1, %70 ]
  %.1294 = phi i32 [ %76, %.critedge ], [ %.0293343, %70 ]
  %.not327347 = icmp eq i32 %58, %.0284339
  br i1 %.not327347, label %._crit_edge352, label %.lr.ph351

.lr.ph351:                                        ; preds = %._crit_edge, %.lr.ph351
  %.2295349 = phi i32 [ %77, %.lr.ph351 ], [ %.1294, %._crit_edge ]
  %.0299348 = phi i32 [ %81, %.lr.ph351 ], [ %58, %._crit_edge ]
  %77 = add nsw i32 %.2295349, -1
  %78 = sext i32 %.0299348 to i64
  %79 = getelementptr inbounds i32, ptr %8, i64 %78
  store i32 %.2295349, ptr %79, align 4, !tbaa !5
  %80 = getelementptr inbounds i32, ptr %3, i64 %78
  %81 = load i32, ptr %80, align 4, !tbaa !5
  %.not327 = icmp eq i32 %81, %.0284339
  br i1 %.not327, label %._crit_edge352, label %.lr.ph351, !llvm.loop !21

._crit_edge352:                                   ; preds = %.lr.ph351, %.lr.ph355, %._crit_edge
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge356, label %.lr.ph355, !llvm.loop !22

._crit_edge356:                                   ; preds = %._crit_edge352
  store i32 0, ptr %9, align 4, !tbaa !5
  br i1 %.not, label %.preheader336, label %.loopexit333

._crit_edge356.thread:                            ; preds = %31
  store i32 0, ptr %9, align 4, !tbaa !5
  br i1 %.not, label %._crit_edge359, label %._crit_edge403.thread

.preheader336:                                    ; preds = %._crit_edge356
  br i1 %54, label %.lr.ph358.preheader, label %._crit_edge359

.lr.ph358.preheader:                              ; preds = %.preheader336
  %82 = add nsw i64 %wide.trip.count, -1
  %xtraiter = and i64 %19, 3
  %83 = icmp ult i64 %82, 3
  br i1 %83, label %._crit_edge359.loopexit.unr-lcssa, label %.lr.ph358.preheader.new

.lr.ph358.preheader.new:                          ; preds = %.lr.ph358.preheader
  %unroll_iter = sub nsw i64 %wide.trip.count, %xtraiter
  br label %.lr.ph358

.lr.ph358:                                        ; preds = %.lr.ph358, %.lr.ph358.preheader.new
  %indvars.iv418 = phi i64 [ 0, %.lr.ph358.preheader.new ], [ %indvars.iv.next419.3, %.lr.ph358 ]
  %niter = phi i64 [ 0, %.lr.ph358.preheader.new ], [ %niter.next.3, %.lr.ph358 ]
  %84 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv418
  %85 = load i32, ptr %84, align 4, !tbaa !5
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds i32, ptr %44, i64 %86
  %88 = trunc nuw nsw i64 %indvars.iv418 to i32
  store i32 %88, ptr %87, align 4, !tbaa !5
  %indvars.iv.next419 = or disjoint i64 %indvars.iv418, 1
  %89 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv.next419
  %90 = load i32, ptr %89, align 4, !tbaa !5
  %91 = sext i32 %90 to i64
  %92 = getelementptr inbounds i32, ptr %44, i64 %91
  %93 = trunc nuw nsw i64 %indvars.iv.next419 to i32
  store i32 %93, ptr %92, align 4, !tbaa !5
  %indvars.iv.next419.1 = or disjoint i64 %indvars.iv418, 2
  %94 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv.next419.1
  %95 = load i32, ptr %94, align 4, !tbaa !5
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds i32, ptr %44, i64 %96
  %98 = trunc nuw nsw i64 %indvars.iv.next419.1 to i32
  store i32 %98, ptr %97, align 4, !tbaa !5
  %indvars.iv.next419.2 = or disjoint i64 %indvars.iv418, 3
  %99 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv.next419.2
  %100 = load i32, ptr %99, align 4, !tbaa !5
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds i32, ptr %44, i64 %101
  %103 = trunc nuw nsw i64 %indvars.iv.next419.2 to i32
  store i32 %103, ptr %102, align 4, !tbaa !5
  %indvars.iv.next419.3 = add nuw nsw i64 %indvars.iv418, 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_edge359.loopexit.unr-lcssa, label %.lr.ph358, !llvm.loop !23

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

.lr.ph358.epil:                                   ; preds = %._crit_edge359.loopexit.unr-lcssa, %.lr.ph358.epil
  %indvars.iv418.epil = phi i64 [ %indvars.iv.next419.epil, %.lr.ph358.epil ], [ %indvars.iv418.unr, %._crit_edge359.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph358.epil ], [ 0, %._crit_edge359.loopexit.unr-lcssa ]
  %104 = getelementptr inbounds i32, ptr %4, i64 %indvars.iv418.epil
  %105 = load i32, ptr %104, align 4, !tbaa !5
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds i32, ptr %44, i64 %106
  %108 = trunc nuw nsw i64 %indvars.iv418.epil to i32
  store i32 %108, ptr %107, align 4, !tbaa !5
  %indvars.iv.next419.epil = add nuw nsw i64 %indvars.iv418.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_edge359, label %.lr.ph358.epil, !llvm.loop !24

._crit_edge359:                                   ; preds = %._crit_edge359.loopexit.unr-lcssa, %.lr.ph358.epil, %._crit_edge356.thread, %.preheader336
  %.not317 = icmp eq ptr %1, null
  br i1 %.not317, label %.loopexit335, label %109

109:                                              ; preds = %._crit_edge359
  %110 = trunc i64 %2 to i32
  %111 = icmp sgt i32 %23, 0
  br i1 %111, label %.lr.ph362.preheader, label %.preheader334

.lr.ph362.preheader:                              ; preds = %109
  %wide.trip.count426 = and i64 %22, 2147483647
  %min.iters.check = icmp ult i64 %wide.trip.count426, 8
  br i1 %min.iters.check, label %.lr.ph362.preheader536, label %vector.ph

.lr.ph362.preheader536:                           ; preds = %middle.block, %.lr.ph362.preheader
  %indvars.iv423.ph = phi i64 [ 0, %.lr.ph362.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph362

vector.ph:                                        ; preds = %.lr.ph362.preheader
  %n.mod.vf = and i64 %22, 7
  %n.vec = sub nsw i64 %wide.trip.count426, %n.mod.vf
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %112 = getelementptr inbounds i32, ptr %46, i64 %index
  %113 = getelementptr inbounds i8, ptr %112, i64 16
  store <4 x i32> <i32 -2, i32 -2, i32 -2, i32 -2>, ptr %112, align 4, !tbaa !5
  store <4 x i32> <i32 -2, i32 -2, i32 -2, i32 -2>, ptr %113, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %114 = icmp eq i64 %index.next, %n.vec
  br i1 %114, label %middle.block, label %vector.body, !llvm.loop !26

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.mod.vf, 0
  br i1 %cmp.n, label %.preheader334, label %.lr.ph362.preheader536

.preheader334:                                    ; preds = %.lr.ph362, %middle.block, %109
  %115 = icmp sgt i32 %110, 0
  br i1 %115, label %.lr.ph364.preheader, label %.loopexit333

.lr.ph364.preheader:                              ; preds = %.preheader334
  %wide.trip.count431 = and i64 %2, 2147483647
  br label %.lr.ph364

.lr.ph362:                                        ; preds = %.lr.ph362.preheader536, %.lr.ph362
  %indvars.iv423 = phi i64 [ %indvars.iv.next424, %.lr.ph362 ], [ %indvars.iv423.ph, %.lr.ph362.preheader536 ]
  %116 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv423
  store i32 -2, ptr %116, align 4, !tbaa !5
  %indvars.iv.next424 = add nuw nsw i64 %indvars.iv423, 1
  %exitcond427.not = icmp eq i64 %indvars.iv.next424, %wide.trip.count426
  br i1 %exitcond427.not, label %.preheader334, label %.lr.ph362, !llvm.loop !29

.lr.ph364:                                        ; preds = %.lr.ph364.preheader, %125
  %indvars.iv428 = phi i64 [ 0, %.lr.ph364.preheader ], [ %indvars.iv.next429, %125 ]
  %117 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv428
  %118 = load i32, ptr %117, align 4, !tbaa !5
  %119 = icmp slt i32 %118, 0
  %120 = icmp sgt i32 %118, %23
  %or.cond = select i1 %119, i1 true, i1 %120
  br i1 %or.cond, label %.sink.split, label %121

121:                                              ; preds = %.lr.ph364
  %122 = zext nneg i32 %118 to i64
  %123 = getelementptr inbounds i32, ptr %46, i64 %122
  %124 = load i32, ptr %123, align 4, !tbaa !5
  %.not325 = icmp eq i32 %124, -2
  br i1 %.not325, label %125, label %.sink.split

125:                                              ; preds = %121
  store i32 -1, ptr %123, align 4, !tbaa !5
  %indvars.iv.next429 = add nuw nsw i64 %indvars.iv428, 1
  %exitcond432.not = icmp eq i64 %indvars.iv.next429, %wide.trip.count431
  br i1 %exitcond432.not, label %.loopexit335, label %.lr.ph364, !llvm.loop !30

.loopexit335:                                     ; preds = %125, %._crit_edge359
  %.0288 = phi i32 [ %23, %._crit_edge359 ], [ %110, %125 ]
  %126 = icmp sgt i32 %.0288, 0
  br i1 %126, label %.lr.ph369, label %.loopexit333

.lr.ph369:                                        ; preds = %.loopexit335
  %.not324 = icmp eq i32 %39, 0
  %wide.trip.count441 = zext nneg i32 %.0288 to i64
  %invariant.gep = getelementptr i8, ptr %35, i64 4
  %invariant.gep557 = getelementptr i8, ptr %35, i64 8
  %invariant.gep559 = getelementptr i8, ptr %35, i64 12
  br label %127

127:                                              ; preds = %.lr.ph369, %201
  %indvars.iv438 = phi i64 [ 0, %.lr.ph369 ], [ %indvars.iv.next439, %201 ]
  %128 = phi i32 [ 0, %.lr.ph369 ], [ %153, %201 ]
  %129 = trunc nuw nsw i64 %indvars.iv438 to i32
  br i1 %.not317, label %133, label %130

130:                                              ; preds = %127
  %131 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv438
  %132 = load i32, ptr %131, align 4, !tbaa !5
  br label %133

133:                                              ; preds = %127, %130
  %134 = phi i32 [ %132, %130 ], [ %129, %127 ]
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds i32, ptr %33, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !5
  br i1 %.not324, label %141, label %138

138:                                              ; preds = %133
  %139 = getelementptr i8, ptr %136, i64 4
  %140 = load i32, ptr %139, align 4, !tbaa !5
  br label %145

141:                                              ; preds = %133
  %142 = getelementptr inbounds i32, ptr %37, i64 %135
  %143 = load i32, ptr %142, align 4, !tbaa !5
  %144 = add nsw i32 %143, %137
  br label %145

145:                                              ; preds = %141, %138
  %146 = phi i32 [ %140, %138 ], [ %144, %141 ]
  %147 = sub nsw i32 %146, %137
  %148 = call i32 @llvm.smax.i32(i32 %147, i32 0)
  %149 = uitofp nneg i32 %148 to double
  %150 = call double @llvm.fmuladd.f64(double %149, double %149, double %149)
  %151 = sitofp i32 %128 to double
  %152 = fadd double %150, %151
  %153 = fptosi double %152 to i32
  store i32 %153, ptr %9, align 4, !tbaa !5
  %154 = icmp sgt i32 %146, %137
  br i1 %154, label %155, label %201

155:                                              ; preds = %145
  %156 = sext i32 %137 to i64
  %157 = getelementptr inbounds i32, ptr %35, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds i32, ptr %44, i64 %159
  %161 = load i32, ptr %160, align 4, !tbaa !5
  %wide.trip.count436 = sext i32 %146 to i64
  %162 = sub nsw i64 %wide.trip.count436, %156
  %xtraiter541 = and i64 %162, 3
  %lcmp.mod542.not = icmp eq i64 %xtraiter541, 0
  br i1 %lcmp.mod542.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %155, %.prol.preheader
  %indvars.iv433.prol = phi i64 [ %indvars.iv.next434.prol, %.prol.preheader ], [ %156, %155 ]
  %.2291366.prol = phi i32 [ %168, %.prol.preheader ], [ %161, %155 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.prol.preheader ], [ 0, %155 ]
  %163 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv433.prol
  %164 = load i32, ptr %163, align 4, !tbaa !5
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds i32, ptr %44, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !5
  %168 = call i32 @llvm.smin.i32(i32 %.2291366.prol, i32 %167)
  %indvars.iv.next434.prol = add nsw i64 %indvars.iv433.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter541
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !31

.prol.loopexit:                                   ; preds = %.prol.preheader, %155
  %.lcssa.unr = phi i32 [ poison, %155 ], [ %168, %.prol.preheader ]
  %indvars.iv433.unr = phi i64 [ %156, %155 ], [ %indvars.iv.next434.prol, %.prol.preheader ]
  %.2291366.unr = phi i32 [ %161, %155 ], [ %168, %.prol.preheader ]
  %169 = sub nsw i64 %156, %wide.trip.count436
  %170 = icmp ugt i64 %169, -4
  br i1 %170, label %.unr-lcssa, label %.new

.new:                                             ; preds = %.prol.loopexit, %.new
  %indvars.iv433 = phi i64 [ %indvars.iv.next434.3, %.new ], [ %indvars.iv433.unr, %.prol.loopexit ]
  %.2291366 = phi i32 [ %191, %.new ], [ %.2291366.unr, %.prol.loopexit ]
  %171 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv433
  %172 = load i32, ptr %171, align 4, !tbaa !5
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i32, ptr %44, i64 %173
  %175 = load i32, ptr %174, align 4, !tbaa !5
  %176 = call i32 @llvm.smin.i32(i32 %.2291366, i32 %175)
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv433
  %177 = load i32, ptr %gep, align 4, !tbaa !5
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds i32, ptr %44, i64 %178
  %180 = load i32, ptr %179, align 4, !tbaa !5
  %181 = call i32 @llvm.smin.i32(i32 %176, i32 %180)
  %gep558 = getelementptr i32, ptr %invariant.gep557, i64 %indvars.iv433
  %182 = load i32, ptr %gep558, align 4, !tbaa !5
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds i32, ptr %44, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !5
  %186 = call i32 @llvm.smin.i32(i32 %181, i32 %185)
  %gep560 = getelementptr i32, ptr %invariant.gep559, i64 %indvars.iv433
  %187 = load i32, ptr %gep560, align 4, !tbaa !5
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %44, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !5
  %191 = call i32 @llvm.smin.i32(i32 %186, i32 %190)
  %indvars.iv.next434.3 = add nsw i64 %indvars.iv433, 4
  %exitcond437.not.3 = icmp eq i64 %indvars.iv.next434.3, %wide.trip.count436
  br i1 %exitcond437.not.3, label %.unr-lcssa, label %.new, !llvm.loop !32

.unr-lcssa:                                       ; preds = %.new, %.prol.loopexit
  %.lcssa = phi i32 [ %.lcssa.unr, %.prol.loopexit ], [ %191, %.new ]
  %192 = icmp sgt i32 %.lcssa, -1
  %193 = icmp slt i32 %.lcssa, %20
  %194 = and i1 %192, %193
  br i1 %194, label %196, label %195

195:                                              ; preds = %.unr-lcssa
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 245, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i) #12
  unreachable

196:                                              ; preds = %.unr-lcssa
  %197 = zext nneg i32 %.lcssa to i64
  %198 = getelementptr inbounds i32, ptr %53, i64 %197
  %199 = load i32, ptr %198, align 4, !tbaa !5
  %200 = getelementptr inbounds i32, ptr %46, i64 %135
  store i32 %199, ptr %200, align 4, !tbaa !5
  store i32 %134, ptr %198, align 4, !tbaa !5
  br label %201

201:                                              ; preds = %145, %196
  %indvars.iv.next439 = add nuw nsw i64 %indvars.iv438, 1
  %exitcond442.not = icmp eq i64 %indvars.iv.next439, %wide.trip.count441
  br i1 %exitcond442.not, label %.loopexit333, label %127, !llvm.loop !33

.loopexit333:                                     ; preds = %201, %.preheader334, %.loopexit335, %._crit_edge356
  %.not318 = icmp ne ptr %5, null
  %or.cond408 = and i1 %.not318, %54
  br i1 %or.cond408, label %.lr.ph371.preheader, label %.loopexit332

.lr.ph371.preheader:                              ; preds = %.loopexit333
  %wide.trip.count446 = and i64 %19, 2147483647
  %min.iters.check509 = icmp ult i64 %wide.trip.count446, 8
  br i1 %min.iters.check509, label %.lr.ph371.preheader534, label %vector.ph510

vector.ph510:                                     ; preds = %.lr.ph371.preheader
  %n.mod.vf511 = and i64 %19, 7
  %n.vec512 = sub nsw i64 %wide.trip.count446, %n.mod.vf511
  br label %vector.body514

vector.body514:                                   ; preds = %vector.body514, %vector.ph510
  %index515 = phi i64 [ 0, %vector.ph510 ], [ %index.next516, %vector.body514 ]
  %202 = getelementptr inbounds i32, ptr %5, i64 %index515
  %203 = getelementptr inbounds i8, ptr %202, i64 16
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %202, align 4, !tbaa !5
  store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %203, align 4, !tbaa !5
  %index.next516 = add nuw i64 %index515, 8
  %204 = icmp eq i64 %index.next516, %n.vec512
  br i1 %204, label %middle.block507, label %vector.body514, !llvm.loop !34

middle.block507:                                  ; preds = %vector.body514
  %cmp.n517 = icmp eq i64 %n.mod.vf511, 0
  br i1 %cmp.n517, label %.loopexit332, label %.lr.ph371.preheader534

.lr.ph371.preheader534:                           ; preds = %middle.block507, %.lr.ph371.preheader
  %indvars.iv443.ph = phi i64 [ 0, %.lr.ph371.preheader ], [ %n.vec512, %middle.block507 ]
  br label %.lr.ph371

.lr.ph371:                                        ; preds = %.lr.ph371.preheader534, %.lr.ph371
  %indvars.iv443 = phi i64 [ %indvars.iv.next444, %.lr.ph371 ], [ %indvars.iv443.ph, %.lr.ph371.preheader534 ]
  %205 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv443
  store i32 1, ptr %205, align 4, !tbaa !5
  %indvars.iv.next444 = add nuw nsw i64 %indvars.iv443, 1
  %exitcond447.not = icmp eq i64 %indvars.iv.next444, %wide.trip.count446
  br i1 %exitcond447.not, label %.loopexit332, label %.lr.ph371, !llvm.loop !35

.loopexit332:                                     ; preds = %.lr.ph371, %middle.block507, %.loopexit333
  br i1 %54, label %.lr.ph374.preheader, label %._crit_edge403.thread

.lr.ph374.preheader:                              ; preds = %.loopexit332
  %206 = and i64 %19, 2147483647
  %207 = shl nuw nsw i64 %206, 2
  call void @llvm.memset.p0.i64(ptr nonnull align 4 %50, i8 -1, i64 %207, i1 false), !tbaa !5
  %min.iters.check520 = icmp ult i64 %206, 8
  %208 = mul nsw i64 %24, -4
  %diff.check = icmp ult i64 %208, 32
  %or.cond530 = select i1 %min.iters.check520, i1 true, i1 %diff.check
  br i1 %or.cond530, label %.lr.ph374.preheader533, label %vector.ph521

vector.ph521:                                     ; preds = %.lr.ph374.preheader
  %n.mod.vf522 = and i64 %19, 7
  %n.vec523 = sub nsw i64 %206, %n.mod.vf522
  br label %vector.body525

vector.body525:                                   ; preds = %vector.body525, %vector.ph521
  %index526 = phi i64 [ 0, %vector.ph521 ], [ %index.next528, %vector.body525 ]
  %vec.ind = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph521 ], [ %vec.ind.next, %vector.body525 ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %209 = getelementptr inbounds i32, ptr %44, i64 %index526
  %210 = getelementptr inbounds i8, ptr %209, i64 16
  store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, ptr %209, align 4, !tbaa !5
  store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, ptr %210, align 4, !tbaa !5
  %211 = getelementptr inbounds i32, ptr %43, i64 %index526
  %212 = getelementptr inbounds i8, ptr %211, i64 16
  store <4 x i32> %vec.ind, ptr %211, align 4, !tbaa !5
  store <4 x i32> %step.add, ptr %212, align 4, !tbaa !5
  %index.next528 = add nuw i64 %index526, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %213 = icmp eq i64 %index.next528, %n.vec523
  br i1 %213, label %middle.block518, label %vector.body525, !llvm.loop !36

middle.block518:                                  ; preds = %vector.body525
  %cmp.n529 = icmp eq i64 %n.mod.vf522, 0
  br i1 %cmp.n529, label %._crit_edge375, label %.lr.ph374.preheader533

.lr.ph374.preheader533:                           ; preds = %middle.block518, %.lr.ph374.preheader
  %indvars.iv448.ph = phi i64 [ 0, %.lr.ph374.preheader ], [ %n.vec523, %middle.block518 ]
  %214 = sub i64 %19, %indvars.iv448.ph
  %xtraiter543 = and i64 %214, 3
  %lcmp.mod544.not = icmp eq i64 %xtraiter543, 0
  br i1 %lcmp.mod544.not, label %.lr.ph374.prol.loopexit, label %.lr.ph374.prol

.lr.ph374.prol:                                   ; preds = %.lr.ph374.preheader533, %.lr.ph374.prol
  %indvars.iv448.prol = phi i64 [ %indvars.iv.next449.prol, %.lr.ph374.prol ], [ %indvars.iv448.ph, %.lr.ph374.preheader533 ]
  %prol.iter545 = phi i64 [ %prol.iter545.next, %.lr.ph374.prol ], [ 0, %.lr.ph374.preheader533 ]
  %215 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv448.prol
  store i32 -1, ptr %215, align 4, !tbaa !5
  %216 = getelementptr inbounds i32, ptr %43, i64 %indvars.iv448.prol
  %217 = trunc nuw nsw i64 %indvars.iv448.prol to i32
  store i32 %217, ptr %216, align 4, !tbaa !5
  %indvars.iv.next449.prol = add nuw nsw i64 %indvars.iv448.prol, 1
  %prol.iter545.next = add i64 %prol.iter545, 1
  %prol.iter545.cmp.not = icmp eq i64 %prol.iter545.next, %xtraiter543
  br i1 %prol.iter545.cmp.not, label %.lr.ph374.prol.loopexit, label %.lr.ph374.prol, !llvm.loop !37

.lr.ph374.prol.loopexit:                          ; preds = %.lr.ph374.prol, %.lr.ph374.preheader533
  %indvars.iv448.unr = phi i64 [ %indvars.iv448.ph, %.lr.ph374.preheader533 ], [ %indvars.iv.next449.prol, %.lr.ph374.prol ]
  %218 = sub nsw i64 %indvars.iv448.ph, %206
  %219 = icmp ugt i64 %218, -4
  br i1 %219, label %._crit_edge375, label %.lr.ph374

.lr.ph374:                                        ; preds = %.lr.ph374.prol.loopexit, %.lr.ph374
  %indvars.iv448 = phi i64 [ %indvars.iv.next449.3, %.lr.ph374 ], [ %indvars.iv448.unr, %.lr.ph374.prol.loopexit ]
  %220 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv448
  store i32 -1, ptr %220, align 4, !tbaa !5
  %221 = getelementptr inbounds i32, ptr %43, i64 %indvars.iv448
  %222 = trunc nuw nsw i64 %indvars.iv448 to i32
  store i32 %222, ptr %221, align 4, !tbaa !5
  %indvars.iv.next449 = add nuw nsw i64 %indvars.iv448, 1
  %223 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv.next449
  store i32 -1, ptr %223, align 4, !tbaa !5
  %224 = getelementptr inbounds i32, ptr %43, i64 %indvars.iv.next449
  %225 = trunc nuw nsw i64 %indvars.iv.next449 to i32
  store i32 %225, ptr %224, align 4, !tbaa !5
  %indvars.iv.next449.1 = add nuw nsw i64 %indvars.iv448, 2
  %226 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv.next449.1
  store i32 -1, ptr %226, align 4, !tbaa !5
  %227 = getelementptr inbounds i32, ptr %43, i64 %indvars.iv.next449.1
  %228 = trunc nuw nsw i64 %indvars.iv.next449.1 to i32
  store i32 %228, ptr %227, align 4, !tbaa !5
  %indvars.iv.next449.2 = add nuw nsw i64 %indvars.iv448, 3
  %229 = getelementptr inbounds i32, ptr %44, i64 %indvars.iv.next449.2
  store i32 -1, ptr %229, align 4, !tbaa !5
  %230 = getelementptr inbounds i32, ptr %43, i64 %indvars.iv.next449.2
  %231 = trunc nuw nsw i64 %indvars.iv.next449.2 to i32
  store i32 %231, ptr %230, align 4, !tbaa !5
  %indvars.iv.next449.3 = add nuw nsw i64 %indvars.iv448, 4
  %exitcond452.not.3 = icmp eq i64 %indvars.iv.next449.3, %206
  br i1 %exitcond452.not.3, label %._crit_edge375, label %.lr.ph374, !llvm.loop !38

._crit_edge375:                                   ; preds = %.lr.ph374.prol.loopexit, %.lr.ph374, %middle.block518
  br i1 %.not, label %.preheader328, label %.preheader329

.preheader329:                                    ; preds = %._crit_edge375
  br i1 %54, label %.lr.ph384, label %._crit_edge403.thread

.lr.ph384:                                        ; preds = %.preheader329
  %.not323 = icmp eq i32 %39, 0
  br label %232

.preheader328:                                    ; preds = %._crit_edge375
  br i1 %54, label %.lr.ph397, label %._crit_edge403.thread

.lr.ph397:                                        ; preds = %.preheader328
  %.not320 = icmp eq i32 %39, 0
  %wide.trip.count469 = and i64 %19, 2147483647
  br label %254

232:                                              ; preds = %.lr.ph384, %._crit_edge380
  %.3292382 = phi i32 [ 0, %.lr.ph384 ], [ %253, %._crit_edge380 ]
  %233 = call noundef i32 @_ZN5nasoq15initialize_nodeEiPiS0_S0_S0_(i32 noundef %.3292382, ptr noundef %4, ptr noundef %3, ptr noundef %6, ptr noundef nonnull %44)
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds i32, ptr %33, i64 %234
  %236 = load i32, ptr %235, align 4, !tbaa !5
  br i1 %.not323, label %240, label %237

237:                                              ; preds = %232
  %238 = getelementptr i8, ptr %235, i64 4
  %239 = load i32, ptr %238, align 4, !tbaa !5
  br label %244

240:                                              ; preds = %232
  %241 = getelementptr inbounds i32, ptr %37, i64 %234
  %242 = load i32, ptr %241, align 4, !tbaa !5
  %243 = add nsw i32 %242, %236
  br label %244

244:                                              ; preds = %240, %237
  %245 = phi i32 [ %239, %237 ], [ %243, %240 ]
  %246 = icmp slt i32 %236, %245
  br i1 %246, label %.lr.ph379.preheader, label %._crit_edge380

.lr.ph379.preheader:                              ; preds = %244
  %247 = sext i32 %236 to i64
  br label %.lr.ph379

.lr.ph379:                                        ; preds = %.lr.ph379.preheader, %252
  %indvars.iv453 = phi i64 [ %247, %.lr.ph379.preheader ], [ %indvars.iv.next454, %252 ]
  %248 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv453
  %249 = load i32, ptr %248, align 4, !tbaa !5
  %250 = icmp sgt i32 %249, %233
  br i1 %250, label %251, label %252

251:                                              ; preds = %.lr.ph379
  call void @_ZN5nasoq12process_edgeEiiiPiS0_S0_S0_S0_S0_S0_(i32 noundef %233, i32 noundef %249, i32 noundef %.3292382, ptr noundef %7, ptr noundef nonnull %44, ptr noundef %6, ptr noundef nonnull %50, ptr noundef %5, ptr noundef nonnull %43, ptr noundef %8)
  br label %252

252:                                              ; preds = %.lr.ph379, %251
  %indvars.iv.next454 = add nsw i64 %indvars.iv453, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next454 to i32
  %exitcond456.not = icmp eq i32 %245, %lftr.wideiv
  br i1 %exitcond456.not, label %._crit_edge380, label %.lr.ph379, !llvm.loop !39

._crit_edge380:                                   ; preds = %252, %244
  call void @_ZN5nasoq13finalize_nodeEiPiS0_(i32 noundef %233, ptr noundef %3, ptr noundef nonnull %43)
  %253 = add nuw nsw i32 %.3292382, 1
  %exitcond457.not = icmp eq i32 %253, %20
  br i1 %exitcond457.not, label %.loopexit, label %232, !llvm.loop !40

254:                                              ; preds = %.lr.ph397, %._crit_edge394
  %indvars.iv466 = phi i64 [ 0, %.lr.ph397 ], [ %indvars.iv.next467, %._crit_edge394 ]
  %255 = trunc nuw nsw i64 %indvars.iv466 to i32
  %256 = call noundef i32 @_ZN5nasoq15initialize_nodeEiPiS0_S0_S0_(i32 noundef %255, ptr noundef %4, ptr noundef %3, ptr noundef %6, ptr noundef nonnull %44)
  %257 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv466
  %.1282389 = load i32, ptr %257, align 4, !tbaa !5
  %.not319390 = icmp eq i32 %.1282389, -1
  br i1 %.not319390, label %._crit_edge394, label %.lr.ph393

.lr.ph393:                                        ; preds = %254
  br i1 %.not320, label %.lr.ph393.split.us, label %.lr.ph393.split

.lr.ph393.split.us:                               ; preds = %.lr.ph393, %._crit_edge388.us
  %.1282391.us = phi i32 [ %.1282.us, %._crit_edge388.us ], [ %.1282389, %.lr.ph393 ]
  %258 = sext i32 %.1282391.us to i64
  %259 = getelementptr inbounds i32, ptr %37, i64 %258
  %260 = load i32, ptr %259, align 4, !tbaa !5
  %261 = icmp sgt i32 %260, 0
  br i1 %261, label %.lr.ph387.us.preheader, label %._crit_edge388.us

.lr.ph387.us.preheader:                           ; preds = %.lr.ph393.split.us
  %262 = getelementptr inbounds i32, ptr %33, i64 %258
  %263 = load i32, ptr %262, align 4, !tbaa !5
  %264 = add nsw i32 %260, %263
  %265 = sext i32 %263 to i64
  %266 = sext i32 %264 to i64
  br label %.lr.ph387.us

._crit_edge388.us:                                ; preds = %276, %.lr.ph393.split.us
  %267 = getelementptr inbounds i32, ptr %46, i64 %258
  %.1282.us = load i32, ptr %267, align 4, !tbaa !5
  %.not319.us = icmp eq i32 %.1282.us, -1
  br i1 %.not319.us, label %._crit_edge394, label %.lr.ph393.split.us, !llvm.loop !41

.lr.ph387.us:                                     ; preds = %.lr.ph387.us.preheader, %276
  %indvars.iv463 = phi i64 [ %265, %.lr.ph387.us.preheader ], [ %indvars.iv.next464, %276 ]
  %268 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv463
  %269 = load i32, ptr %268, align 4, !tbaa !5
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i32, ptr %44, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !5
  %273 = sext i32 %272 to i64
  %274 = icmp sgt i64 %indvars.iv466, %273
  br i1 %274, label %275, label %276

275:                                              ; preds = %.lr.ph387.us
  call void @_ZN5nasoq12process_edgeEiiiPiS0_S0_S0_S0_S0_S0_(i32 noundef %256, i32 noundef %269, i32 noundef %255, ptr noundef %7, ptr noundef nonnull %44, ptr noundef %6, ptr noundef nonnull %50, ptr noundef %5, ptr noundef nonnull %43, ptr noundef %8)
  br label %276

276:                                              ; preds = %275, %.lr.ph387.us
  %indvars.iv.next464 = add nsw i64 %indvars.iv463, 1
  %277 = icmp slt i64 %indvars.iv.next464, %266
  br i1 %277, label %.lr.ph387.us, label %._crit_edge388.us, !llvm.loop !42

.lr.ph393.split:                                  ; preds = %.lr.ph393, %._crit_edge388
  %.1282391 = phi i32 [ %.1282, %._crit_edge388 ], [ %.1282389, %.lr.ph393 ]
  %278 = sext i32 %.1282391 to i64
  %279 = getelementptr inbounds i32, ptr %33, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !5
  %281 = getelementptr i8, ptr %279, i64 4
  %282 = load i32, ptr %281, align 4, !tbaa !5
  %283 = icmp slt i32 %280, %282
  br i1 %283, label %.lr.ph387.preheader, label %._crit_edge388

.lr.ph387.preheader:                              ; preds = %.lr.ph393.split
  %284 = sext i32 %280 to i64
  br label %.lr.ph387

.lr.ph387:                                        ; preds = %.lr.ph387.preheader, %293
  %indvars.iv458 = phi i64 [ %284, %.lr.ph387.preheader ], [ %indvars.iv.next459, %293 ]
  %285 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv458
  %286 = load i32, ptr %285, align 4, !tbaa !5
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds i32, ptr %44, i64 %287
  %289 = load i32, ptr %288, align 4, !tbaa !5
  %290 = sext i32 %289 to i64
  %291 = icmp sgt i64 %indvars.iv466, %290
  br i1 %291, label %292, label %293

292:                                              ; preds = %.lr.ph387
  call void @_ZN5nasoq12process_edgeEiiiPiS0_S0_S0_S0_S0_S0_(i32 noundef %256, i32 noundef %286, i32 noundef %255, ptr noundef %7, ptr noundef nonnull %44, ptr noundef %6, ptr noundef nonnull %50, ptr noundef %5, ptr noundef nonnull %43, ptr noundef %8)
  br label %293

293:                                              ; preds = %.lr.ph387, %292
  %indvars.iv.next459 = add nsw i64 %indvars.iv458, 1
  %lftr.wideiv461 = trunc i64 %indvars.iv.next459 to i32
  %exitcond462.not = icmp eq i32 %282, %lftr.wideiv461
  br i1 %exitcond462.not, label %._crit_edge388, label %.lr.ph387, !llvm.loop !42

._crit_edge388:                                   ; preds = %293, %.lr.ph393.split
  %294 = getelementptr inbounds i32, ptr %46, i64 %278
  %.1282 = load i32, ptr %294, align 4, !tbaa !5
  %.not319 = icmp eq i32 %.1282, -1
  br i1 %.not319, label %._crit_edge394, label %.lr.ph393.split, !llvm.loop !41

._crit_edge394:                                   ; preds = %._crit_edge388, %._crit_edge388.us, %254
  store i32 -1, ptr %257, align 4, !tbaa !5
  call void @_ZN5nasoq13finalize_nodeEiPiS0_(i32 noundef %256, ptr noundef %3, ptr noundef nonnull %43)
  %indvars.iv.next467 = add nuw nsw i64 %indvars.iv466, 1
  %exitcond470.not = icmp eq i64 %indvars.iv.next467, %wide.trip.count469
  br i1 %exitcond470.not, label %.loopexit, label %254, !llvm.loop !43

.loopexit:                                        ; preds = %._crit_edge380, %._crit_edge394
  br i1 %54, label %.lr.ph400.preheader, label %._crit_edge403.thread

.lr.ph400.preheader:                              ; preds = %.loopexit
  %wide.trip.count474 = and i64 %19, 2147483647
  %xtraiter546 = and i64 %19, 1
  %295 = icmp eq i64 %wide.trip.count474, 1
  br i1 %295, label %.preheader.unr-lcssa, label %.lr.ph400.preheader.new

.lr.ph400.preheader.new:                          ; preds = %.lr.ph400.preheader
  %unroll_iter549 = sub nsw i64 %wide.trip.count474, %xtraiter546
  br label %.lr.ph400

.preheader.unr-lcssa:                             ; preds = %324, %.lr.ph400.preheader
  %indvars.iv471.unr = phi i64 [ 0, %.lr.ph400.preheader ], [ %indvars.iv.next472.1, %324 ]
  %lcmp.mod548.not = icmp eq i64 %xtraiter546, 0
  br i1 %lcmp.mod548.not, label %.preheader, label %.lr.ph400.epil

.lr.ph400.epil:                                   ; preds = %.preheader.unr-lcssa
  %296 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv471.unr
  %297 = load i32, ptr %296, align 4, !tbaa !5
  %.not322.epil = icmp eq i32 %297, -1
  br i1 %.not322.epil, label %.preheader, label %298

298:                                              ; preds = %.lr.ph400.epil
  %299 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv471.unr
  %300 = load i32, ptr %299, align 4, !tbaa !5
  %301 = sext i32 %297 to i64
  %302 = getelementptr inbounds i32, ptr %6, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !5
  %304 = add nsw i32 %303, %300
  store i32 %304, ptr %302, align 4, !tbaa !5
  br label %.preheader

.preheader:                                       ; preds = %.lr.ph400.epil, %298, %.preheader.unr-lcssa
  br i1 %54, label %.lr.ph402.preheader, label %._crit_edge403.thread

.lr.ph402.preheader:                              ; preds = %.preheader
  %305 = and i64 %19, 2147483647
  %wide.trip.count479 = and i64 %19, 2147483647
  br label %.lr.ph402

.lr.ph400:                                        ; preds = %324, %.lr.ph400.preheader.new
  %indvars.iv471 = phi i64 [ 0, %.lr.ph400.preheader.new ], [ %indvars.iv.next472.1, %324 ]
  %niter550 = phi i64 [ 0, %.lr.ph400.preheader.new ], [ %niter550.next.1, %324 ]
  %306 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv471
  %307 = load i32, ptr %306, align 4, !tbaa !5
  %.not322 = icmp eq i32 %307, -1
  br i1 %.not322, label %.lr.ph400.1, label %308

308:                                              ; preds = %.lr.ph400
  %309 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv471
  %310 = load i32, ptr %309, align 4, !tbaa !5
  %311 = sext i32 %307 to i64
  %312 = getelementptr inbounds i32, ptr %6, i64 %311
  %313 = load i32, ptr %312, align 4, !tbaa !5
  %314 = add nsw i32 %313, %310
  store i32 %314, ptr %312, align 4, !tbaa !5
  br label %.lr.ph400.1

.lr.ph400.1:                                      ; preds = %.lr.ph400, %308
  %indvars.iv.next472 = or disjoint i64 %indvars.iv471, 1
  %315 = getelementptr inbounds i32, ptr %3, i64 %indvars.iv.next472
  %316 = load i32, ptr %315, align 4, !tbaa !5
  %.not322.1 = icmp eq i32 %316, -1
  br i1 %.not322.1, label %324, label %317

317:                                              ; preds = %.lr.ph400.1
  %318 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv.next472
  %319 = load i32, ptr %318, align 4, !tbaa !5
  %320 = sext i32 %316 to i64
  %321 = getelementptr inbounds i32, ptr %6, i64 %320
  %322 = load i32, ptr %321, align 4, !tbaa !5
  %323 = add nsw i32 %322, %319
  store i32 %323, ptr %321, align 4, !tbaa !5
  br label %324

324:                                              ; preds = %317, %.lr.ph400.1
  %indvars.iv.next472.1 = add nuw nsw i64 %indvars.iv471, 2
  %niter550.next.1 = add i64 %niter550, 2
  %niter550.ncmp.1 = icmp eq i64 %niter550.next.1, %unroll_iter549
  br i1 %niter550.ncmp.1, label %.preheader.unr-lcssa, label %.lr.ph400, !llvm.loop !44

325:                                              ; preds = %.lr.ph402
  %indvars.iv.next477 = add nuw nsw i64 %indvars.iv476, 1
  %exitcond480.not = icmp eq i64 %indvars.iv.next477, %wide.trip.count479
  br i1 %exitcond480.not, label %._crit_edge403, label %.lr.ph402, !llvm.loop !45

._crit_edge403.thread:                            ; preds = %.loopexit332, %.preheader, %.loopexit, %.preheader329, %.preheader328, %._crit_edge356.thread
  %326 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %326, ptr %10, align 4, !tbaa !5
  store i32 0, ptr %11, align 4, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %.sink.split

._crit_edge403:                                   ; preds = %325
  %327 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %327, ptr %10, align 4, !tbaa !5
  store i32 0, ptr %11, align 4, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !5
  br i1 %54, label %.lr.ph406.preheader, label %.sink.split

.lr.ph406.preheader:                              ; preds = %._crit_edge403
  %wide.trip.count484 = and i64 %19, 2147483647
  br label %.lr.ph406

.lr.ph402:                                        ; preds = %.lr.ph402.preheader, %325
  %indvars.iv476 = phi i64 [ 0, %.lr.ph402.preheader ], [ %indvars.iv.next477, %325 ]
  %328 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv476
  %329 = load i32, ptr %328, align 4, !tbaa !5
  %330 = sub nsw i64 %305, %indvars.iv476
  %331 = sext i32 %329 to i64
  %.not321 = icmp slt i64 %330, %331
  br i1 %.not321, label %332, label %325

332:                                              ; preds = %.lr.ph402
  call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 346, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i) #12
  unreachable

.lr.ph406:                                        ; preds = %.lr.ph406.preheader, %342
  %indvars.iv481 = phi i64 [ 0, %.lr.ph406.preheader ], [ %indvars.iv.next482, %342 ]
  %333 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv481
  %334 = load i32, ptr %333, align 4, !tbaa !5
  %335 = sitofp i32 %334 to double
  %336 = load i32, ptr %11, align 4, !tbaa !5
  %337 = sitofp i32 %336 to double
  %338 = fadd double %335, %337
  %339 = fptosi double %338 to i32
  store i32 %339, ptr %11, align 4, !tbaa !5
  %340 = icmp sgt i32 %339, 0
  br i1 %340, label %342, label %341

341:                                              ; preds = %.lr.ph406
  call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 373, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN5nasoq12rowcolcountsEPNS_12sympiler_CSCEPimS2_S2_S2_S2_S2_S2_RiS3_S3_i) #12
  unreachable

342:                                              ; preds = %.lr.ph406
  %343 = load i32, ptr %9, align 4, !tbaa !5
  %344 = sitofp i32 %343 to double
  %345 = call double @llvm.fmuladd.f64(double %335, double %335, double %344)
  %346 = fptosi double %345 to i32
  store i32 %346, ptr %9, align 4, !tbaa !5
  %indvars.iv.next482 = add nuw nsw i64 %indvars.iv481, 1
  %exitcond485.not = icmp eq i64 %indvars.iv.next482, %wide.trip.count484
  br i1 %exitcond485.not, label %.sink.split, label %.lr.ph406, !llvm.loop !46

.sink.split:                                      ; preds = %121, %.lr.ph364, %342, %._crit_edge403, %._crit_edge403.thread
  %.0278.ph = phi i32 [ 1, %._crit_edge403.thread ], [ 1, %._crit_edge403 ], [ 1, %342 ], [ 0, %.lr.ph364 ], [ 0, %121 ]
  call void @_ZdaPv(ptr noundef nonnull %43) #13
  call void @_ZdaPv(ptr noundef nonnull %50) #13
  call void @_ZdaPv(ptr noundef nonnull %53) #13
  br label %347

347:                                              ; preds = %.sink.split, %18, %13
  %.0278 = phi i32 [ 0, %13 ], [ 0, %18 ], [ %.0278.ph, %.sink.split ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #10
  ret i32 %.0278
}

declare noundef i64 @_ZN5nasoq11mult_size_tEmmPi(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

declare noundef i64 @_ZN5nasoq10add_size_tEmmPi(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

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

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

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #8

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

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { noreturn nounwind }
attributes #13 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 64}
!10 = !{!"_ZTSN5nasoq12sympiler_CSCE", !11, i64 0, !11, i64 8, !11, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84}
!11 = !{!"long", !7, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!10, !11, i64 0}
!14 = !{!10, !11, i64 8}
!15 = !{!10, !12, i64 24}
!16 = !{!10, !12, i64 32}
!17 = !{!10, !12, i64 40}
!18 = !{!10, !6, i64 84}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.unroll.disable"}
!26 = distinct !{!26, !20, !27, !28}
!27 = !{!"llvm.loop.isvectorized", i32 1}
!28 = !{!"llvm.loop.unroll.runtime.disable"}
!29 = distinct !{!29, !20, !28, !27}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20, !27, !28}
!35 = distinct !{!35, !20, !28, !27}
!36 = distinct !{!36, !20, !27, !28}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !20, !27}
!39 = distinct !{!39, !20}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = distinct !{!46, !20}


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