; LLVM IR from stivalaa/EstimNetDirected :: src (changeStatisticsBipartiteUndirected)

; 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.graph_s = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i32, ptr, ptr, i32, ptr, ptr, i32, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, i32, i32, ptr, ptr, i32, ptr, i32, ptr, ptr, i32, i32, ptr, i32, ptr }

@.str = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA = external hidden unnamed_addr constant [99 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [36 x i8], align 1

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

declare i32 @bipartite_node_mode(ptr noundef, i32 noundef) #1

declare i32 @isEdge(ptr noundef, i32 noundef, i32 noundef) #1

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @count_neighbours_with_binattr_a(ptr noundef, i32 noundef, i32 noundef) #3

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

26:                                               ; preds = %6
  br label %28

27:                                               ; preds = %6
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1243, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

28:                                               ; preds = %26
  %29 = load ptr, ptr %7, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.graph_s, ptr %29, i32 0, i32 1
  %31 = load i32, ptr %30, align 4, !tbaa !15
  %32 = icmp ne i32 %31, 0
  br i1 %32, label %34, label %33

33:                                               ; preds = %28
  br label %35

34:                                               ; preds = %28
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 1244, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

35:                                               ; preds = %33
  %36 = load ptr, ptr %7, align 8, !tbaa !5
  %37 = load i32, ptr %8, align 4, !tbaa !9
  %38 = call i32 @bipartite_node_mode(ptr noundef %36, i32 noundef %37)
  %39 = icmp eq i32 %38, 0
  br i1 %39, label %40, label %41

40:                                               ; preds = %35
  br label %42

41:                                               ; preds = %35
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 1245, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

42:                                               ; preds = %40
  %43 = load ptr, ptr %7, align 8, !tbaa !5
  %44 = load i32, ptr %9, align 4, !tbaa !9
  %45 = call i32 @bipartite_node_mode(ptr noundef %43, i32 noundef %44)
  %46 = icmp eq i32 %45, 1
  br i1 %46, label %47, label %48

47:                                               ; preds = %42
  br label %49

48:                                               ; preds = %42
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 1246, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

49:                                               ; preds = %47
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = load i32, ptr %8, align 4, !tbaa !9
  %52 = load i32, ptr %9, align 4, !tbaa !9
  %53 = call i32 @isEdge(ptr noundef %50, i32 noundef %51, i32 noundef %52)
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %56, label %55

55:                                               ; preds = %49
  br label %57

56:                                               ; preds = %49
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 1247, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

57:                                               ; preds = %55
  %58 = load ptr, ptr %7, align 8, !tbaa !5
  %59 = load i32, ptr %8, align 4, !tbaa !9
  %60 = load i32, ptr %10, align 4, !tbaa !9
  %61 = call i32 @count_neighbours_with_binattr_a(ptr noundef %58, i32 noundef %59, i32 noundef %60)
  store i32 %61, ptr %18, align 4, !tbaa !9
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graph_s, ptr %62, i32 0, i32 17
  %64 = load ptr, ptr %63, align 8, !tbaa !16
  %65 = load i32, ptr %10, align 4, !tbaa !9
  %66 = zext i32 %65 to i64
  %67 = getelementptr inbounds ptr, ptr %64, i64 %66
  %68 = load ptr, ptr %67, align 8, !tbaa !5
  %69 = load i32, ptr %9, align 4, !tbaa !9
  %70 = zext i32 %69 to i64
  %71 = getelementptr inbounds i32, ptr %68, i64 %70
  %72 = load i32, ptr %71, align 4, !tbaa !9
  %73 = icmp ne i32 %72, -1
  br i1 %73, label %74, label %321

74:                                               ; preds = %57
  %75 = load ptr, ptr %7, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.graph_s, ptr %75, i32 0, i32 17
  %77 = load ptr, ptr %76, align 8, !tbaa !16
  %78 = load i32, ptr %10, align 4, !tbaa !9
  %79 = zext i32 %78 to i64
  %80 = getelementptr inbounds ptr, ptr %77, i64 %79
  %81 = load ptr, ptr %80, align 8, !tbaa !5
  %82 = load i32, ptr %9, align 4, !tbaa !9
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds i32, ptr %81, i64 %83
  %85 = load i32, ptr %84, align 4, !tbaa !9
  %86 = icmp ne i32 %85, 0
  br i1 %86, label %87, label %321

87:                                               ; preds = %74
  %88 = load i32, ptr %18, align 4, !tbaa !9
  %89 = icmp eq i32 %88, 0
  br i1 %89, label %90, label %230

90:                                               ; preds = %87
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %91

91:                                               ; preds = %172, %90
  %92 = load i32, ptr %13, align 4, !tbaa !9
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.graph_s, ptr %93, i32 0, i32 10
  %95 = load ptr, ptr %94, align 8, !tbaa !17
  %96 = load i32, ptr %8, align 4, !tbaa !9
  %97 = zext i32 %96 to i64
  %98 = getelementptr inbounds i32, ptr %95, i64 %97
  %99 = load i32, ptr %98, align 4, !tbaa !9
  %100 = icmp ult i32 %92, %99
  br i1 %100, label %101, label %175

101:                                              ; preds = %91
  %102 = load ptr, ptr %7, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.graph_s, ptr %102, i32 0, i32 11
  %104 = load ptr, ptr %103, align 8, !tbaa !18
  %105 = load i32, ptr %8, align 4, !tbaa !9
  %106 = zext i32 %105 to i64
  %107 = getelementptr inbounds ptr, ptr %104, i64 %106
  %108 = load ptr, ptr %107, align 8, !tbaa !5
  %109 = load i32, ptr %13, align 4, !tbaa !9
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds i32, ptr %108, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !9
  store i32 %112, ptr %14, align 4, !tbaa !9
  %113 = load ptr, ptr %7, align 8, !tbaa !5
  %114 = load i32, ptr %14, align 4, !tbaa !9
  %115 = call i32 @bipartite_node_mode(ptr noundef %113, i32 noundef %114)
  %116 = icmp eq i32 %115, 1
  br i1 %116, label %117, label %118

117:                                              ; preds = %101
  br label %119

118:                                              ; preds = %101
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 1261, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

119:                                              ; preds = %117
  %120 = load i32, ptr %14, align 4, !tbaa !9
  %121 = load i32, ptr %9, align 4, !tbaa !9
  %122 = icmp ne i32 %120, %121
  br i1 %122, label %123, label %124

123:                                              ; preds = %119
  br label %125

124:                                              ; preds = %119
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 1262, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

125:                                              ; preds = %123
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %168, %125
  %127 = load i32, ptr %15, align 4, !tbaa !9
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.graph_s, ptr %128, i32 0, i32 10
  %130 = load ptr, ptr %129, align 8, !tbaa !17
  %131 = load i32, ptr %14, align 4, !tbaa !9
  %132 = zext i32 %131 to i64
  %133 = getelementptr inbounds i32, ptr %130, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = icmp ult i32 %127, %134
  br i1 %135, label %136, label %171

136:                                              ; preds = %126
  %137 = load ptr, ptr %7, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.graph_s, ptr %137, i32 0, i32 11
  %139 = load ptr, ptr %138, align 8, !tbaa !18
  %140 = load i32, ptr %14, align 4, !tbaa !9
  %141 = zext i32 %140 to i64
  %142 = getelementptr inbounds ptr, ptr %139, i64 %141
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  %144 = load i32, ptr %15, align 4, !tbaa !9
  %145 = zext i32 %144 to i64
  %146 = getelementptr inbounds i32, ptr %143, i64 %145
  %147 = load i32, ptr %146, align 4, !tbaa !9
  store i32 %147, ptr %16, align 4, !tbaa !9
  %148 = load ptr, ptr %7, align 8, !tbaa !5
  %149 = load i32, ptr %16, align 4, !tbaa !9
  %150 = call i32 @bipartite_node_mode(ptr noundef %148, i32 noundef %149)
  %151 = icmp eq i32 %150, 0
  br i1 %151, label %152, label %153

152:                                              ; preds = %136
  br label %154

153:                                              ; preds = %136
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.1, i32 noundef 1265, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

154:                                              ; preds = %152
  %155 = load i32, ptr %16, align 4, !tbaa !9
  %156 = load i32, ptr %8, align 4, !tbaa !9
  %157 = icmp ne i32 %155, %156
  br i1 %157, label %158, label %167

158:                                              ; preds = %154
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  %160 = load i32, ptr %16, align 4, !tbaa !9
  %161 = load i32, ptr %10, align 4, !tbaa !9
  %162 = call i32 @count_neighbours_with_binattr_a(ptr noundef %159, i32 noundef %160, i32 noundef %161)
  %163 = icmp eq i32 %162, 1
  br i1 %163, label %164, label %167

164:                                              ; preds = %158
  %165 = load i32, ptr %17, align 4, !tbaa !9
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %17, align 4, !tbaa !9
  br label %167

167:                                              ; preds = %164, %158, %154
  br label %168

168:                                              ; preds = %167
  %169 = load i32, ptr %15, align 4, !tbaa !9
  %170 = add i32 %169, 1
  store i32 %170, ptr %15, align 4, !tbaa !9
  br label %126, !llvm.loop !19

171:                                              ; preds = %126
  br label %172

172:                                              ; preds = %171
  %173 = load i32, ptr %13, align 4, !tbaa !9
  %174 = add i32 %173, 1
  store i32 %174, ptr %13, align 4, !tbaa !9
  br label %91, !llvm.loop !21

175:                                              ; preds = %91
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %176

176:                                              ; preds = %226, %175
  %177 = load i32, ptr %13, align 4, !tbaa !9
  %178 = load ptr, ptr %7, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.graph_s, ptr %178, i32 0, i32 10
  %180 = load ptr, ptr %179, align 8, !tbaa !17
  %181 = load i32, ptr %9, align 4, !tbaa !9
  %182 = zext i32 %181 to i64
  %183 = getelementptr inbounds i32, ptr %180, i64 %182
  %184 = load i32, ptr %183, align 4, !tbaa !9
  %185 = icmp ult i32 %177, %184
  br i1 %185, label %186, label %229

186:                                              ; preds = %176
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.graph_s, ptr %187, i32 0, i32 11
  %189 = load ptr, ptr %188, align 8, !tbaa !18
  %190 = load i32, ptr %9, align 4, !tbaa !9
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds ptr, ptr %189, i64 %191
  %193 = load ptr, ptr %192, align 8, !tbaa !5
  %194 = load i32, ptr %13, align 4, !tbaa !9
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds i32, ptr %193, i64 %195
  %197 = load i32, ptr %196, align 4, !tbaa !9
  store i32 %197, ptr %14, align 4, !tbaa !9
  %198 = load i32, ptr %14, align 4, !tbaa !9
  %199 = load i32, ptr %9, align 4, !tbaa !9
  %200 = icmp ne i32 %198, %199
  br i1 %200, label %201, label %202

201:                                              ; preds = %186
  br label %203

202:                                              ; preds = %186
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 1275, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

203:                                              ; preds = %201
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = load i32, ptr %14, align 4, !tbaa !9
  %206 = call i32 @bipartite_node_mode(ptr noundef %204, i32 noundef %205)
  %207 = icmp eq i32 %206, 0
  br i1 %207, label %208, label %209

208:                                              ; preds = %203
  br label %210

209:                                              ; preds = %203
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 1276, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

210:                                              ; preds = %208
  %211 = load i32, ptr %14, align 4, !tbaa !9
  %212 = load i32, ptr %8, align 4, !tbaa !9
  %213 = icmp ne i32 %211, %212
  br i1 %213, label %214, label %225

214:                                              ; preds = %210
  %215 = load ptr, ptr %7, align 8, !tbaa !5
  %216 = load i32, ptr %14, align 4, !tbaa !9
  %217 = load i32, ptr %10, align 4, !tbaa !9
  %218 = call i32 @count_neighbours_with_binattr_a(ptr noundef %215, i32 noundef %216, i32 noundef %217)
  store i32 %218, ptr %19, align 4, !tbaa !9
  %219 = load i32, ptr %19, align 4, !tbaa !9
  %220 = icmp eq i32 %219, 1
  br i1 %220, label %221, label %224

221:                                              ; preds = %214
  %222 = load i32, ptr %17, align 4, !tbaa !9
  %223 = add nsw i32 %222, 1
  store i32 %223, ptr %17, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %221, %214
  br label %225

225:                                              ; preds = %224, %210
  br label %226

226:                                              ; preds = %225
  %227 = load i32, ptr %13, align 4, !tbaa !9
  %228 = add i32 %227, 1
  store i32 %228, ptr %13, align 4, !tbaa !9
  br label %176, !llvm.loop !22

229:                                              ; preds = %176
  br label %320

230:                                              ; preds = %87
  %231 = load i32, ptr %18, align 4, !tbaa !9
  %232 = icmp eq i32 %231, 1
  br i1 %232, label %233, label %319

233:                                              ; preds = %230
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %315, %233
  %235 = load i32, ptr %13, align 4, !tbaa !9
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.graph_s, ptr %236, i32 0, i32 10
  %238 = load ptr, ptr %237, align 8, !tbaa !17
  %239 = load i32, ptr %8, align 4, !tbaa !9
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds i32, ptr %238, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !9
  %243 = icmp ult i32 %235, %242
  br i1 %243, label %244, label %318

244:                                              ; preds = %234
  %245 = load ptr, ptr %7, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.graph_s, ptr %245, i32 0, i32 11
  %247 = load ptr, ptr %246, align 8, !tbaa !18
  %248 = load i32, ptr %8, align 4, !tbaa !9
  %249 = zext i32 %248 to i64
  %250 = getelementptr inbounds ptr, ptr %247, i64 %249
  %251 = load ptr, ptr %250, align 8, !tbaa !5
  %252 = load i32, ptr %13, align 4, !tbaa !9
  %253 = zext i32 %252 to i64
  %254 = getelementptr inbounds i32, ptr %251, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !9
  store i32 %255, ptr %14, align 4, !tbaa !9
  %256 = load ptr, ptr %7, align 8, !tbaa !5
  %257 = load i32, ptr %14, align 4, !tbaa !9
  %258 = call i32 @bipartite_node_mode(ptr noundef %256, i32 noundef %257)
  %259 = icmp eq i32 %258, 1
  br i1 %259, label %260, label %261

260:                                              ; preds = %244
  br label %262

261:                                              ; preds = %244
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 1290, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

262:                                              ; preds = %260
  %263 = load i32, ptr %14, align 4, !tbaa !9
  %264 = load i32, ptr %9, align 4, !tbaa !9
  %265 = icmp ne i32 %263, %264
  br i1 %265, label %266, label %267

266:                                              ; preds = %262
  br label %268

267:                                              ; preds = %262
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 1291, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

268:                                              ; preds = %266
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %269

269:                                              ; preds = %311, %268
  %270 = load i32, ptr %15, align 4, !tbaa !9
  %271 = load ptr, ptr %7, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.graph_s, ptr %271, i32 0, i32 10
  %273 = load ptr, ptr %272, align 8, !tbaa !17
  %274 = load i32, ptr %14, align 4, !tbaa !9
  %275 = zext i32 %274 to i64
  %276 = getelementptr inbounds i32, ptr %273, i64 %275
  %277 = load i32, ptr %276, align 4, !tbaa !9
  %278 = icmp ult i32 %270, %277
  br i1 %278, label %279, label %314

279:                                              ; preds = %269
  %280 = load ptr, ptr %7, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.graph_s, ptr %280, i32 0, i32 11
  %282 = load ptr, ptr %281, align 8, !tbaa !18
  %283 = load i32, ptr %14, align 4, !tbaa !9
  %284 = zext i32 %283 to i64
  %285 = getelementptr inbounds ptr, ptr %282, i64 %284
  %286 = load ptr, ptr %285, align 8, !tbaa !5
  %287 = load i32, ptr %15, align 4, !tbaa !9
  %288 = zext i32 %287 to i64
  %289 = getelementptr inbounds i32, ptr %286, i64 %288
  %290 = load i32, ptr %289, align 4, !tbaa !9
  store i32 %290, ptr %16, align 4, !tbaa !9
  %291 = load ptr, ptr %7, align 8, !tbaa !5
  %292 = load i32, ptr %16, align 4, !tbaa !9
  %293 = call i32 @bipartite_node_mode(ptr noundef %291, i32 noundef %292)
  %294 = icmp eq i32 %293, 0
  br i1 %294, label %295, label %296

295:                                              ; preds = %279
  br label %297

296:                                              ; preds = %279
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.1, i32 noundef 1294, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

297:                                              ; preds = %295
  %298 = load i32, ptr %16, align 4, !tbaa !9
  %299 = load i32, ptr %8, align 4, !tbaa !9
  %300 = icmp ne i32 %298, %299
  br i1 %300, label %301, label %310

301:                                              ; preds = %297
  %302 = load ptr, ptr %7, align 8, !tbaa !5
  %303 = load i32, ptr %16, align 4, !tbaa !9
  %304 = load i32, ptr %10, align 4, !tbaa !9
  %305 = call i32 @count_neighbours_with_binattr_a(ptr noundef %302, i32 noundef %303, i32 noundef %304)
  %306 = icmp eq i32 %305, 1
  br i1 %306, label %307, label %310

307:                                              ; preds = %301
  %308 = load i32, ptr %17, align 4, !tbaa !9
  %309 = add nsw i32 %308, -1
  store i32 %309, ptr %17, align 4, !tbaa !9
  br label %310

310:                                              ; preds = %307, %301, %297
  br label %311

311:                                              ; preds = %310
  %312 = load i32, ptr %15, align 4, !tbaa !9
  %313 = add i32 %312, 1
  store i32 %313, ptr %15, align 4, !tbaa !9
  br label %269, !llvm.loop !23

314:                                              ; preds = %269
  br label %315

315:                                              ; preds = %314
  %316 = load i32, ptr %13, align 4, !tbaa !9
  %317 = add i32 %316, 1
  store i32 %317, ptr %13, align 4, !tbaa !9
  br label %234, !llvm.loop !24

318:                                              ; preds = %234
  br label %319

319:                                              ; preds = %318, %230
  br label %320

320:                                              ; preds = %319, %229
  br label %380

321:                                              ; preds = %74, %57
  %322 = load i32, ptr %18, align 4, !tbaa !9
  %323 = icmp eq i32 %322, 1
  br i1 %323, label %324, label %379

324:                                              ; preds = %321
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %325

325:                                              ; preds = %375, %324
  %326 = load i32, ptr %13, align 4, !tbaa !9
  %327 = load ptr, ptr %7, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.graph_s, ptr %327, i32 0, i32 10
  %329 = load ptr, ptr %328, align 8, !tbaa !17
  %330 = load i32, ptr %9, align 4, !tbaa !9
  %331 = zext i32 %330 to i64
  %332 = getelementptr inbounds i32, ptr %329, i64 %331
  %333 = load i32, ptr %332, align 4, !tbaa !9
  %334 = icmp ult i32 %326, %333
  br i1 %334, label %335, label %378

335:                                              ; preds = %325
  %336 = load ptr, ptr %7, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.graph_s, ptr %336, i32 0, i32 11
  %338 = load ptr, ptr %337, align 8, !tbaa !18
  %339 = load i32, ptr %9, align 4, !tbaa !9
  %340 = zext i32 %339 to i64
  %341 = getelementptr inbounds ptr, ptr %338, i64 %340
  %342 = load ptr, ptr %341, align 8, !tbaa !5
  %343 = load i32, ptr %13, align 4, !tbaa !9
  %344 = zext i32 %343 to i64
  %345 = getelementptr inbounds i32, ptr %342, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !9
  store i32 %346, ptr %14, align 4, !tbaa !9
  %347 = load i32, ptr %14, align 4, !tbaa !9
  %348 = load i32, ptr %9, align 4, !tbaa !9
  %349 = icmp ne i32 %347, %348
  br i1 %349, label %350, label %351

350:                                              ; preds = %335
  br label %352

351:                                              ; preds = %335
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 1307, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

352:                                              ; preds = %350
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = load i32, ptr %14, align 4, !tbaa !9
  %355 = call i32 @bipartite_node_mode(ptr noundef %353, i32 noundef %354)
  %356 = icmp eq i32 %355, 0
  br i1 %356, label %357, label %358

357:                                              ; preds = %352
  br label %359

358:                                              ; preds = %352
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 1308, ptr noundef @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #5
  unreachable

359:                                              ; preds = %357
  %360 = load i32, ptr %14, align 4, !tbaa !9
  %361 = load i32, ptr %8, align 4, !tbaa !9
  %362 = icmp ne i32 %360, %361
  br i1 %362, label %363, label %374

363:                                              ; preds = %359
  %364 = load ptr, ptr %7, align 8, !tbaa !5
  %365 = load i32, ptr %14, align 4, !tbaa !9
  %366 = load i32, ptr %10, align 4, !tbaa !9
  %367 = call i32 @count_neighbours_with_binattr_a(ptr noundef %364, i32 noundef %365, i32 noundef %366)
  store i32 %367, ptr %19, align 4, !tbaa !9
  %368 = load i32, ptr %19, align 4, !tbaa !9
  %369 = icmp eq i32 %368, 1
  br i1 %369, label %370, label %373

370:                                              ; preds = %363
  %371 = load i32, ptr %17, align 4, !tbaa !9
  %372 = add nsw i32 %371, 1
  store i32 %372, ptr %17, align 4, !tbaa !9
  br label %373

373:                                              ; preds = %370, %363
  br label %374

374:                                              ; preds = %373, %359
  br label %375

375:                                              ; preds = %374
  %376 = load i32, ptr %13, align 4, !tbaa !9
  %377 = add i32 %376, 1
  store i32 %377, ptr %13, align 4, !tbaa !9
  br label %325, !llvm.loop !25

378:                                              ; preds = %325
  br label %379

379:                                              ; preds = %378, %321
  br label %380

380:                                              ; preds = %379, %320
  %381 = load i32, ptr %17, align 4, !tbaa !9
  %382 = sitofp i32 %381 to double
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  ret double %382
}

attributes #0 = { 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 #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { nounwind }
attributes #5 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !10, i64 8}
!14 = !{!"graph_s", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !10, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !10, i64 88, !10, i64 92, !10, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !10, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !6, i64 224, !10, i64 232, !10, i64 236, !6, i64 240, !6, i64 248, !10, i64 256, !6, i64 264, !10, i64 272, !6, i64 280, !6, i64 288, !10, i64 296, !10, i64 300, !6, i64 304, !10, i64 312, !6, i64 320}
!15 = !{!14, !10, i64 4}
!16 = !{!14, !6, i64 112}
!17 = !{!14, !6, i64 64}
!18 = !{!14, !6, i64 72}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}


; 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 [16 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA = external hidden unnamed_addr constant [99 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [36 x i8], align 1

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

declare i32 @bipartite_node_mode(ptr noundef, i32 noundef) local_unnamed_addr #1

declare i32 @isEdge(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i32 @count_neighbours_with_binattr_a(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local double @changeBipartiteTwoPathExactlyOneNeighbourA(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, double noundef %5) local_unnamed_addr #2 {
  %7 = getelementptr inbounds i8, ptr %0, i64 8
  %8 = load i32, ptr %7, align 8, !tbaa !5
  %.not = icmp eq i32 %8, 0
  br i1 %.not, label %9, label %10

9:                                                ; preds = %6
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1243, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

10:                                               ; preds = %6
  %11 = getelementptr inbounds i8, ptr %0, i64 4
  %12 = load i32, ptr %11, align 4, !tbaa !11
  %.not125 = icmp eq i32 %12, 0
  br i1 %.not125, label %14, label %13

13:                                               ; preds = %10
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 1244, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

14:                                               ; preds = %10
  %15 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %1) #4
  %16 = icmp eq i32 %15, 0
  br i1 %16, label %18, label %17

17:                                               ; preds = %14
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 1245, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

18:                                               ; preds = %14
  %19 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %2) #4
  %20 = icmp eq i32 %19, 1
  br i1 %20, label %22, label %21

21:                                               ; preds = %18
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 1246, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

22:                                               ; preds = %18
  %23 = tail call i32 @isEdge(ptr noundef nonnull %0, i32 noundef %1, i32 noundef %2) #4
  %.not126 = icmp eq i32 %23, 0
  br i1 %.not126, label %25, label %24

24:                                               ; preds = %22
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 1247, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

25:                                               ; preds = %22
  %26 = tail call i32 @count_neighbours_with_binattr_a(ptr noundef nonnull %0, i32 noundef %1, i32 noundef %3)
  %27 = getelementptr inbounds i8, ptr %0, i64 112
  %28 = load ptr, ptr %27, align 8, !tbaa !12
  %29 = zext i32 %3 to i64
  %30 = getelementptr inbounds ptr, ptr %28, i64 %29
  %31 = load ptr, ptr %30, align 8, !tbaa !13
  %32 = zext i32 %2 to i64
  %33 = getelementptr inbounds i32, ptr %31, i64 %32
  %34 = load i32, ptr %33, align 4, !tbaa !14
  switch i32 %34, label %35 [
    i32 -1, label %154
    i32 0, label %154
  ]

35:                                               ; preds = %25
  switch i32 %26, label %.loopexit [
    i32 0, label %.preheader141
    i32 1, label %.preheader143
  ]

.preheader143:                                    ; preds = %35
  %36 = getelementptr inbounds i8, ptr %0, i64 64
  %37 = zext i32 %1 to i64
  %38 = load ptr, ptr %36, align 8, !tbaa !15
  %39 = getelementptr inbounds i32, ptr %38, i64 %37
  %40 = load i32, ptr %39, align 4, !tbaa !14
  %.not187 = icmp eq i32 %40, 0
  br i1 %.not187, label %.loopexit, label %.lr.ph170

.lr.ph170:                                        ; preds = %.preheader143
  %41 = getelementptr inbounds i8, ptr %0, i64 72
  br label %114

.preheader141:                                    ; preds = %35
  %42 = getelementptr inbounds i8, ptr %0, i64 64
  %43 = zext i32 %1 to i64
  %44 = load ptr, ptr %42, align 8, !tbaa !15
  %45 = getelementptr inbounds i32, ptr %44, i64 %43
  %46 = load i32, ptr %45, align 4, !tbaa !14
  %.not189 = icmp eq i32 %46, 0
  br i1 %.not189, label %.preheader, label %.lr.ph179

.lr.ph179:                                        ; preds = %.preheader141
  %47 = getelementptr inbounds i8, ptr %0, i64 72
  br label %52

.preheader:                                       ; preds = %._crit_edge175, %.preheader141
  %48 = phi ptr [ %44, %.preheader141 ], [ %87, %._crit_edge175 ]
  %.0111.lcssa = phi i32 [ 0, %.preheader141 ], [ %.1112.lcssa, %._crit_edge175 ]
  %49 = getelementptr inbounds i32, ptr %48, i64 %32
  %50 = load i32, ptr %49, align 4, !tbaa !14
  %.not191 = icmp eq i32 %50, 0
  br i1 %.not191, label %.loopexit, label %.lr.ph184

.lr.ph184:                                        ; preds = %.preheader
  %51 = getelementptr inbounds i8, ptr %0, i64 72
  br label %92

52:                                               ; preds = %.lr.ph179, %._crit_edge175
  %.0178 = phi i32 [ 0, %.lr.ph179 ], [ %88, %._crit_edge175 ]
  %.0111177 = phi i32 [ 0, %.lr.ph179 ], [ %.1112.lcssa, %._crit_edge175 ]
  %53 = load ptr, ptr %47, align 8, !tbaa !16
  %54 = getelementptr inbounds ptr, ptr %53, i64 %43
  %55 = load ptr, ptr %54, align 8, !tbaa !13
  %56 = zext i32 %.0178 to i64
  %57 = getelementptr inbounds i32, ptr %55, i64 %56
  %58 = load i32, ptr %57, align 4, !tbaa !14
  %59 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %58) #4
  %60 = icmp eq i32 %59, 1
  br i1 %60, label %62, label %61

61:                                               ; preds = %52
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 1261, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

62:                                               ; preds = %52
  %.not135 = icmp eq i32 %58, %2
  br i1 %.not135, label %67, label %.preheader140

.preheader140:                                    ; preds = %62
  %63 = zext i32 %58 to i64
  %64 = load ptr, ptr %42, align 8, !tbaa !15
  %65 = getelementptr inbounds i32, ptr %64, i64 %63
  %66 = load i32, ptr %65, align 4, !tbaa !14
  %.not190 = icmp eq i32 %66, 0
  br i1 %.not190, label %._crit_edge175, label %.lr.ph174

67:                                               ; preds = %62
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 1262, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

.lr.ph174:                                        ; preds = %.preheader140, %81
  %indvars.iv198 = phi i64 [ %indvars.iv.next199, %81 ], [ 0, %.preheader140 ]
  %.1112173 = phi i32 [ %.2113, %81 ], [ %.0111177, %.preheader140 ]
  %68 = load ptr, ptr %47, align 8, !tbaa !16
  %69 = getelementptr inbounds ptr, ptr %68, i64 %63
  %70 = load ptr, ptr %69, align 8, !tbaa !13
  %71 = getelementptr inbounds i32, ptr %70, i64 %indvars.iv198
  %72 = load i32, ptr %71, align 4, !tbaa !14
  %73 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %72) #4
  %74 = icmp eq i32 %73, 0
  br i1 %74, label %76, label %75

75:                                               ; preds = %.lr.ph174
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.1, i32 noundef 1265, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

76:                                               ; preds = %.lr.ph174
  %.not136 = icmp eq i32 %72, %1
  br i1 %.not136, label %81, label %77

77:                                               ; preds = %76
  %78 = tail call i32 @count_neighbours_with_binattr_a(ptr noundef nonnull %0, i32 noundef %72, i32 noundef %3)
  %79 = icmp eq i32 %78, 1
  %80 = zext i1 %79 to i32
  %spec.select = add nsw i32 %.1112173, %80
  br label %81

81:                                               ; preds = %77, %76
  %.2113 = phi i32 [ %.1112173, %76 ], [ %spec.select, %77 ]
  %indvars.iv.next199 = add nuw nsw i64 %indvars.iv198, 1
  %82 = load ptr, ptr %42, align 8, !tbaa !15
  %83 = getelementptr inbounds i32, ptr %82, i64 %63
  %84 = load i32, ptr %83, align 4, !tbaa !14
  %85 = zext i32 %84 to i64
  %86 = icmp ult i64 %indvars.iv.next199, %85
  br i1 %86, label %.lr.ph174, label %._crit_edge175, !llvm.loop !17

._crit_edge175:                                   ; preds = %81, %.preheader140
  %87 = phi ptr [ %64, %.preheader140 ], [ %82, %81 ]
  %.1112.lcssa = phi i32 [ %.0111177, %.preheader140 ], [ %.2113, %81 ]
  %88 = add nuw i32 %.0178, 1
  %89 = getelementptr inbounds i32, ptr %87, i64 %43
  %90 = load i32, ptr %89, align 4, !tbaa !14
  %91 = icmp ult i32 %88, %90
  br i1 %91, label %52, label %.preheader, !llvm.loop !19

92:                                               ; preds = %.lr.ph184, %108
  %indvars.iv201 = phi i64 [ 0, %.lr.ph184 ], [ %indvars.iv.next202, %108 ]
  %.3114182 = phi i32 [ %.0111.lcssa, %.lr.ph184 ], [ %.4, %108 ]
  %93 = load ptr, ptr %51, align 8, !tbaa !16
  %94 = getelementptr inbounds ptr, ptr %93, i64 %32
  %95 = load ptr, ptr %94, align 8, !tbaa !13
  %96 = getelementptr inbounds i32, ptr %95, i64 %indvars.iv201
  %97 = load i32, ptr %96, align 4, !tbaa !14
  %.not133 = icmp eq i32 %97, %2
  br i1 %.not133, label %98, label %99

98:                                               ; preds = %92
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 1275, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

99:                                               ; preds = %92
  %100 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %97) #4
  %101 = icmp eq i32 %100, 0
  br i1 %101, label %103, label %102

102:                                              ; preds = %99
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 1276, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

103:                                              ; preds = %99
  %.not134 = icmp eq i32 %97, %1
  br i1 %.not134, label %108, label %104

104:                                              ; preds = %103
  %105 = tail call i32 @count_neighbours_with_binattr_a(ptr noundef nonnull %0, i32 noundef %97, i32 noundef %3)
  %106 = icmp eq i32 %105, 1
  %107 = zext i1 %106 to i32
  %spec.select137 = add nsw i32 %.3114182, %107
  br label %108

108:                                              ; preds = %104, %103
  %.4 = phi i32 [ %.3114182, %103 ], [ %spec.select137, %104 ]
  %indvars.iv.next202 = add nuw nsw i64 %indvars.iv201, 1
  %109 = load ptr, ptr %42, align 8, !tbaa !15
  %110 = getelementptr inbounds i32, ptr %109, i64 %32
  %111 = load i32, ptr %110, align 4, !tbaa !14
  %112 = zext i32 %111 to i64
  %113 = icmp ult i64 %indvars.iv.next202, %112
  br i1 %113, label %92, label %.loopexit, !llvm.loop !20

114:                                              ; preds = %.lr.ph170, %._crit_edge
  %.2169 = phi i32 [ 0, %.lr.ph170 ], [ %150, %._crit_edge ]
  %.5168 = phi i32 [ 0, %.lr.ph170 ], [ %.6.lcssa, %._crit_edge ]
  %115 = load ptr, ptr %41, align 8, !tbaa !16
  %116 = getelementptr inbounds ptr, ptr %115, i64 %37
  %117 = load ptr, ptr %116, align 8, !tbaa !13
  %118 = zext i32 %.2169 to i64
  %119 = getelementptr inbounds i32, ptr %117, i64 %118
  %120 = load i32, ptr %119, align 4, !tbaa !14
  %121 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %120) #4
  %122 = icmp eq i32 %121, 1
  br i1 %122, label %124, label %123

123:                                              ; preds = %114
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 1290, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

124:                                              ; preds = %114
  %.not131 = icmp eq i32 %120, %2
  br i1 %.not131, label %129, label %.preheader142

.preheader142:                                    ; preds = %124
  %125 = zext i32 %120 to i64
  %126 = load ptr, ptr %36, align 8, !tbaa !15
  %127 = getelementptr inbounds i32, ptr %126, i64 %125
  %128 = load i32, ptr %127, align 4, !tbaa !14
  %.not188 = icmp eq i32 %128, 0
  br i1 %.not188, label %._crit_edge, label %.lr.ph166

129:                                              ; preds = %124
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 1291, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

.lr.ph166:                                        ; preds = %.preheader142, %143
  %indvars.iv195 = phi i64 [ %indvars.iv.next196, %143 ], [ 0, %.preheader142 ]
  %.6165 = phi i32 [ %.7, %143 ], [ %.5168, %.preheader142 ]
  %130 = load ptr, ptr %41, align 8, !tbaa !16
  %131 = getelementptr inbounds ptr, ptr %130, i64 %125
  %132 = load ptr, ptr %131, align 8, !tbaa !13
  %133 = getelementptr inbounds i32, ptr %132, i64 %indvars.iv195
  %134 = load i32, ptr %133, align 4, !tbaa !14
  %135 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %134) #4
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %138, label %137

137:                                              ; preds = %.lr.ph166
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.1, i32 noundef 1294, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

138:                                              ; preds = %.lr.ph166
  %.not132 = icmp eq i32 %134, %1
  br i1 %.not132, label %143, label %139

139:                                              ; preds = %138
  %140 = tail call i32 @count_neighbours_with_binattr_a(ptr noundef nonnull %0, i32 noundef %134, i32 noundef %3)
  %141 = icmp eq i32 %140, 1
  %142 = sext i1 %141 to i32
  %spec.select138 = add nsw i32 %.6165, %142
  br label %143

143:                                              ; preds = %139, %138
  %.7 = phi i32 [ %.6165, %138 ], [ %spec.select138, %139 ]
  %indvars.iv.next196 = add nuw nsw i64 %indvars.iv195, 1
  %144 = load ptr, ptr %36, align 8, !tbaa !15
  %145 = getelementptr inbounds i32, ptr %144, i64 %125
  %146 = load i32, ptr %145, align 4, !tbaa !14
  %147 = zext i32 %146 to i64
  %148 = icmp ult i64 %indvars.iv.next196, %147
  br i1 %148, label %.lr.ph166, label %._crit_edge, !llvm.loop !21

._crit_edge:                                      ; preds = %143, %.preheader142
  %149 = phi ptr [ %126, %.preheader142 ], [ %144, %143 ]
  %.6.lcssa = phi i32 [ %.5168, %.preheader142 ], [ %.7, %143 ]
  %150 = add nuw i32 %.2169, 1
  %151 = getelementptr inbounds i32, ptr %149, i64 %37
  %152 = load i32, ptr %151, align 4, !tbaa !14
  %153 = icmp ult i32 %150, %152
  br i1 %153, label %114, label %.loopexit, !llvm.loop !22

154:                                              ; preds = %25, %25
  %155 = icmp eq i32 %26, 1
  br i1 %155, label %.preheader145, label %.loopexit

.preheader145:                                    ; preds = %154
  %156 = getelementptr inbounds i8, ptr %0, i64 64
  %157 = load ptr, ptr %156, align 8, !tbaa !15
  %158 = getelementptr inbounds i32, ptr %157, i64 %32
  %159 = load i32, ptr %158, align 4, !tbaa !14
  %.not186 = icmp eq i32 %159, 0
  br i1 %.not186, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader145
  %160 = getelementptr inbounds i8, ptr %0, i64 72
  br label %161

161:                                              ; preds = %.lr.ph, %177
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %177 ]
  %.8162 = phi i32 [ 0, %.lr.ph ], [ %.9, %177 ]
  %162 = load ptr, ptr %160, align 8, !tbaa !16
  %163 = getelementptr inbounds ptr, ptr %162, i64 %32
  %164 = load ptr, ptr %163, align 8, !tbaa !13
  %165 = getelementptr inbounds i32, ptr %164, i64 %indvars.iv
  %166 = load i32, ptr %165, align 4, !tbaa !14
  %.not129 = icmp eq i32 %166, %2
  br i1 %.not129, label %167, label %168

167:                                              ; preds = %161
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 1307, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

168:                                              ; preds = %161
  %169 = tail call i32 @bipartite_node_mode(ptr noundef nonnull %0, i32 noundef %166) #4
  %170 = icmp eq i32 %169, 0
  br i1 %170, label %172, label %171

171:                                              ; preds = %168
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 1308, ptr noundef nonnull @__PRETTY_FUNCTION__.changeBipartiteTwoPathExactlyOneNeighbourA) #3
  unreachable

172:                                              ; preds = %168
  %.not130 = icmp eq i32 %166, %1
  br i1 %.not130, label %177, label %173

173:                                              ; preds = %172
  %174 = tail call i32 @count_neighbours_with_binattr_a(ptr noundef nonnull %0, i32 noundef %166, i32 noundef %3)
  %175 = icmp eq i32 %174, 1
  %176 = zext i1 %175 to i32
  %spec.select139 = add nsw i32 %.8162, %176
  br label %177

177:                                              ; preds = %173, %172
  %.9 = phi i32 [ %.8162, %172 ], [ %spec.select139, %173 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %178 = load ptr, ptr %156, align 8, !tbaa !15
  %179 = getelementptr inbounds i32, ptr %178, i64 %32
  %180 = load i32, ptr %179, align 4, !tbaa !14
  %181 = zext i32 %180 to i64
  %182 = icmp ult i64 %indvars.iv.next, %181
  br i1 %182, label %161, label %.loopexit, !llvm.loop !23

.loopexit:                                        ; preds = %177, %._crit_edge, %108, %.preheader145, %.preheader143, %.preheader, %35, %154
  %.10 = phi i32 [ 0, %154 ], [ 0, %35 ], [ %.0111.lcssa, %.preheader ], [ 0, %.preheader143 ], [ 0, %.preheader145 ], [ %.4, %108 ], [ %.6.lcssa, %._crit_edge ], [ %.9, %177 ]
  %183 = sitofp i32 %.10 to double
  ret double %183
}

attributes #0 = { 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 #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { noreturn nounwind }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"graph_s", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !7, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !7, i64 88, !7, i64 92, !7, i64 96, !10, i64 104, !10, i64 112, !7, i64 120, !10, i64 128, !10, i64 136, !7, i64 144, !10, i64 152, !10, i64 160, !7, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !10, i64 224, !7, i64 232, !7, i64 236, !10, i64 240, !10, i64 248, !7, i64 256, !10, i64 264, !7, i64 272, !10, i64 280, !10, i64 288, !7, i64 296, !7, i64 300, !10, i64 304, !7, i64 312, !10, i64 320}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !10, i64 112}
!13 = !{!10, !10, i64 0}
!14 = !{!7, !7, i64 0}
!15 = !{!6, !10, i64 64}
!16 = !{!6, !10, i64 72}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}


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