; LLVM IR from mist64/perfect6502 :: netlist_sim (setupNodesAndTransistors)

; 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.c1c2_t = type { i16, i16 }
%struct.state_t = type { i16, i16, i16, i16, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.list_t, ptr, %struct.list_t, ptr, ptr, i16, ptr, i32 }
%struct.list_t = type { ptr, i16 }
%struct.netlist_transdefs = type { i32, i32, i32 }

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

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

; Function Attrs: nounwind uwtable
define dso_local ptr @setupNodesAndTransistors(ptr noundef %0, ptr noundef %1, i16 noundef zeroext %2, i16 noundef zeroext %3, i16 noundef zeroext %4, i16 noundef zeroext %5) #1 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i16, align 2
  %10 = alloca i16, align 2
  %11 = alloca i16, align 2
  %12 = alloca i16, align 2
  %13 = alloca ptr, align 8
  %14 = alloca i16, align 2
  %15 = alloca i16, align 2
  %16 = alloca i16, align 2
  %17 = alloca i16, align 2
  %18 = alloca i16, align 2
  %19 = alloca i16, align 2
  %20 = alloca i16, align 2
  %21 = alloca i16, align 2
  %22 = alloca i32, align 4
  %23 = alloca i16, align 2
  %24 = alloca ptr, align 8
  %25 = alloca i16, align 2
  %26 = alloca i16, align 2
  %27 = alloca i16, align 2
  %28 = alloca i16, align 2
  %29 = alloca i16, align 2
  %30 = alloca %struct.c1c2_t, align 2
  %31 = alloca %struct.c1c2_t, align 2
  %32 = alloca i16, align 2
  %33 = alloca i16, align 2
  %34 = alloca i16, align 2
  %35 = alloca i16, align 2
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i16 %2, ptr %9, align 2, !tbaa !9
  store i16 %3, ptr %10, align 2, !tbaa !9
  store i16 %4, ptr %11, align 2, !tbaa !9
  store i16 %5, ptr %12, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %36 = call noalias ptr @malloc(i64 noundef 216) #9
  store ptr %36, ptr %13, align 8, !tbaa !5
  %37 = load i16, ptr %9, align 2, !tbaa !9
  %38 = load ptr, ptr %13, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.state_t, ptr %38, i32 0, i32 0
  store i16 %37, ptr %39, align 8, !tbaa !11
  %40 = load i16, ptr %10, align 2, !tbaa !9
  %41 = load ptr, ptr %13, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.state_t, ptr %41, i32 0, i32 1
  store i16 %40, ptr %42, align 2, !tbaa !15
  %43 = load i16, ptr %11, align 2, !tbaa !9
  %44 = load ptr, ptr %13, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.state_t, ptr %44, i32 0, i32 2
  store i16 %43, ptr %45, align 4, !tbaa !16
  %46 = load i16, ptr %12, align 2, !tbaa !9
  %47 = load ptr, ptr %13, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.state_t, ptr %47, i32 0, i32 3
  store i16 %46, ptr %48, align 2, !tbaa !17
  %49 = load ptr, ptr %13, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.state_t, ptr %49, i32 0, i32 0
  %51 = load i16, ptr %50, align 8, !tbaa !11
  %52 = zext i16 %51 to i64
  %53 = udiv i64 %52, 64
  %54 = add i64 %53, 1
  %55 = call noalias ptr @calloc(i64 noundef %54, i64 noundef 8) #10
  %56 = load ptr, ptr %13, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.state_t, ptr %56, i32 0, i32 4
  store ptr %55, ptr %57, align 8, !tbaa !18
  %58 = load ptr, ptr %13, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.state_t, ptr %58, i32 0, i32 0
  %60 = load i16, ptr %59, align 8, !tbaa !11
  %61 = zext i16 %60 to i64
  %62 = udiv i64 %61, 64
  %63 = add i64 %62, 1
  %64 = call noalias ptr @calloc(i64 noundef %63, i64 noundef 8) #10
  %65 = load ptr, ptr %13, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.state_t, ptr %65, i32 0, i32 5
  store ptr %64, ptr %66, align 8, !tbaa !19
  %67 = load ptr, ptr %13, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.state_t, ptr %67, i32 0, i32 0
  %69 = load i16, ptr %68, align 8, !tbaa !11
  %70 = zext i16 %69 to i64
  %71 = udiv i64 %70, 64
  %72 = add i64 %71, 1
  %73 = call noalias ptr @calloc(i64 noundef %72, i64 noundef 8) #10
  %74 = load ptr, ptr %13, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.state_t, ptr %74, i32 0, i32 6
  store ptr %73, ptr %75, align 8, !tbaa !20
  %76 = load ptr, ptr %13, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.state_t, ptr %76, i32 0, i32 0
  %78 = load i16, ptr %77, align 8, !tbaa !11
  %79 = zext i16 %78 to i64
  %80 = mul i64 %79, 8
  %81 = call noalias ptr @malloc(i64 noundef %80) #9
  %82 = load ptr, ptr %13, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.state_t, ptr %82, i32 0, i32 7
  store ptr %81, ptr %83, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #8
  store i16 0, ptr %14, align 2, !tbaa !9
  br label %84

84:                                               ; preds = %105, %6
  %85 = load i16, ptr %14, align 2, !tbaa !9
  %86 = zext i16 %85 to i32
  %87 = load ptr, ptr %13, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.state_t, ptr %87, i32 0, i32 0
  %89 = load i16, ptr %88, align 8, !tbaa !11
  %90 = zext i16 %89 to i32
  %91 = icmp slt i32 %86, %90
  br i1 %91, label %93, label %92

92:                                               ; preds = %84
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #8
  br label %108

93:                                               ; preds = %84
  %94 = load ptr, ptr %13, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.state_t, ptr %94, i32 0, i32 0
  %96 = load i16, ptr %95, align 8, !tbaa !11
  %97 = zext i16 %96 to i64
  %98 = call noalias ptr @calloc(i64 noundef %97, i64 noundef 2) #10
  %99 = load ptr, ptr %13, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.state_t, ptr %99, i32 0, i32 7
  %101 = load ptr, ptr %100, align 8, !tbaa !21
  %102 = load i16, ptr %14, align 2, !tbaa !9
  %103 = zext i16 %102 to i64
  %104 = getelementptr inbounds ptr, ptr %101, i64 %103
  store ptr %98, ptr %104, align 8, !tbaa !5
  br label %105

105:                                              ; preds = %93
  %106 = load i16, ptr %14, align 2, !tbaa !9
  %107 = add i16 %106, 1
  store i16 %107, ptr %14, align 2, !tbaa !9
  br label %84, !llvm.loop !22

108:                                              ; preds = %92
  %109 = load ptr, ptr %13, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.state_t, ptr %109, i32 0, i32 0
  %111 = load i16, ptr %110, align 8, !tbaa !11
  %112 = zext i16 %111 to i64
  %113 = call noalias ptr @calloc(i64 noundef %112, i64 noundef 2) #10
  %114 = load ptr, ptr %13, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.state_t, ptr %114, i32 0, i32 9
  store ptr %113, ptr %115, align 8, !tbaa !24
  %116 = load ptr, ptr %13, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.state_t, ptr %116, i32 0, i32 0
  %118 = load i16, ptr %117, align 8, !tbaa !11
  %119 = zext i16 %118 to i32
  %120 = add nsw i32 %119, 1
  %121 = sext i32 %120 to i64
  %122 = call noalias ptr @calloc(i64 noundef %121, i64 noundef 2) #10
  %123 = load ptr, ptr %13, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.state_t, ptr %123, i32 0, i32 10
  store ptr %122, ptr %124, align 8, !tbaa !25
  %125 = load ptr, ptr %13, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.state_t, ptr %125, i32 0, i32 0
  %127 = load i16, ptr %126, align 8, !tbaa !11
  %128 = zext i16 %127 to i64
  %129 = call noalias ptr @calloc(i64 noundef %128, i64 noundef 2) #10
  %130 = load ptr, ptr %13, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.state_t, ptr %130, i32 0, i32 11
  store ptr %129, ptr %131, align 8, !tbaa !26
  %132 = load ptr, ptr %13, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.state_t, ptr %132, i32 0, i32 0
  %134 = load i16, ptr %133, align 8, !tbaa !11
  %135 = zext i16 %134 to i64
  %136 = call noalias ptr @calloc(i64 noundef %135, i64 noundef 2) #10
  %137 = load ptr, ptr %13, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.state_t, ptr %137, i32 0, i32 12
  store ptr %136, ptr %138, align 8, !tbaa !27
  %139 = load ptr, ptr %13, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.state_t, ptr %139, i32 0, i32 0
  %141 = load i16, ptr %140, align 8, !tbaa !11
  %142 = zext i16 %141 to i64
  %143 = mul i64 %142, 8
  %144 = call noalias ptr @malloc(i64 noundef %143) #9
  %145 = load ptr, ptr %13, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.state_t, ptr %145, i32 0, i32 13
  store ptr %144, ptr %146, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #8
  store i16 0, ptr %15, align 2, !tbaa !9
  br label %147

147:                                              ; preds = %168, %108
  %148 = load i16, ptr %15, align 2, !tbaa !9
  %149 = zext i16 %148 to i32
  %150 = load ptr, ptr %13, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.state_t, ptr %150, i32 0, i32 0
  %152 = load i16, ptr %151, align 8, !tbaa !11
  %153 = zext i16 %152 to i32
  %154 = icmp slt i32 %149, %153
  br i1 %154, label %156, label %155

155:                                              ; preds = %147
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #8
  br label %171

156:                                              ; preds = %147
  %157 = load ptr, ptr %13, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.state_t, ptr %157, i32 0, i32 0
  %159 = load i16, ptr %158, align 8, !tbaa !11
  %160 = zext i16 %159 to i64
  %161 = call noalias ptr @calloc(i64 noundef %160, i64 noundef 2) #10
  %162 = load ptr, ptr %13, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.state_t, ptr %162, i32 0, i32 13
  %164 = load ptr, ptr %163, align 8, !tbaa !28
  %165 = load i16, ptr %15, align 2, !tbaa !9
  %166 = zext i16 %165 to i64
  %167 = getelementptr inbounds ptr, ptr %164, i64 %166
  store ptr %161, ptr %167, align 8, !tbaa !5
  br label %168

168:                                              ; preds = %156
  %169 = load i16, ptr %15, align 2, !tbaa !9
  %170 = add i16 %169, 1
  store i16 %170, ptr %15, align 2, !tbaa !9
  br label %147, !llvm.loop !29

171:                                              ; preds = %155
  %172 = load ptr, ptr %13, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.state_t, ptr %172, i32 0, i32 0
  %174 = load i16, ptr %173, align 8, !tbaa !11
  %175 = zext i16 %174 to i64
  %176 = mul i64 %175, 8
  %177 = call noalias ptr @malloc(i64 noundef %176) #9
  %178 = load ptr, ptr %13, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.state_t, ptr %178, i32 0, i32 14
  store ptr %177, ptr %179, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 2, ptr %16) #8
  store i16 0, ptr %16, align 2, !tbaa !9
  br label %180

180:                                              ; preds = %201, %171
  %181 = load i16, ptr %16, align 2, !tbaa !9
  %182 = zext i16 %181 to i32
  %183 = load ptr, ptr %13, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.state_t, ptr %183, i32 0, i32 0
  %185 = load i16, ptr %184, align 8, !tbaa !11
  %186 = zext i16 %185 to i32
  %187 = icmp slt i32 %182, %186
  br i1 %187, label %189, label %188

188:                                              ; preds = %180
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #8
  br label %204

189:                                              ; preds = %180
  %190 = load ptr, ptr %13, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.state_t, ptr %190, i32 0, i32 0
  %192 = load i16, ptr %191, align 8, !tbaa !11
  %193 = zext i16 %192 to i64
  %194 = call noalias ptr @calloc(i64 noundef %193, i64 noundef 2) #10
  %195 = load ptr, ptr %13, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.state_t, ptr %195, i32 0, i32 14
  %197 = load ptr, ptr %196, align 8, !tbaa !30
  %198 = load i16, ptr %16, align 2, !tbaa !9
  %199 = zext i16 %198 to i64
  %200 = getelementptr inbounds ptr, ptr %197, i64 %199
  store ptr %194, ptr %200, align 8, !tbaa !5
  br label %201

201:                                              ; preds = %189
  %202 = load i16, ptr %16, align 2, !tbaa !9
  %203 = add i16 %202, 1
  store i16 %203, ptr %16, align 2, !tbaa !9
  br label %180, !llvm.loop !31

204:                                              ; preds = %188
  %205 = load ptr, ptr %13, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.state_t, ptr %205, i32 0, i32 1
  %207 = load i16, ptr %206, align 2, !tbaa !15
  %208 = zext i16 %207 to i64
  %209 = call noalias ptr @calloc(i64 noundef %208, i64 noundef 2) #10
  %210 = load ptr, ptr %13, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.state_t, ptr %210, i32 0, i32 15
  store ptr %209, ptr %211, align 8, !tbaa !32
  %212 = load ptr, ptr %13, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.state_t, ptr %212, i32 0, i32 1
  %214 = load i16, ptr %213, align 2, !tbaa !15
  %215 = zext i16 %214 to i64
  %216 = call noalias ptr @calloc(i64 noundef %215, i64 noundef 2) #10
  %217 = load ptr, ptr %13, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.state_t, ptr %217, i32 0, i32 16
  store ptr %216, ptr %218, align 8, !tbaa !33
  %219 = load ptr, ptr %13, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.state_t, ptr %219, i32 0, i32 1
  %221 = load i16, ptr %220, align 2, !tbaa !15
  %222 = zext i16 %221 to i64
  %223 = call noalias ptr @calloc(i64 noundef %222, i64 noundef 2) #10
  %224 = load ptr, ptr %13, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.state_t, ptr %224, i32 0, i32 17
  store ptr %223, ptr %225, align 8, !tbaa !34
  %226 = load ptr, ptr %13, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.state_t, ptr %226, i32 0, i32 1
  %228 = load i16, ptr %227, align 2, !tbaa !15
  %229 = zext i16 %228 to i64
  %230 = udiv i64 %229, 64
  %231 = add i64 %230, 1
  %232 = call noalias ptr @calloc(i64 noundef %231, i64 noundef 8) #10
  %233 = load ptr, ptr %13, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.state_t, ptr %233, i32 0, i32 18
  store ptr %232, ptr %234, align 8, !tbaa !35
  %235 = load ptr, ptr %13, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.state_t, ptr %235, i32 0, i32 0
  %237 = load i16, ptr %236, align 8, !tbaa !11
  %238 = zext i16 %237 to i64
  %239 = call noalias ptr @calloc(i64 noundef %238, i64 noundef 2) #10
  %240 = load ptr, ptr %13, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.state_t, ptr %240, i32 0, i32 19
  store ptr %239, ptr %241, align 8, !tbaa !36
  %242 = load ptr, ptr %13, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.state_t, ptr %242, i32 0, i32 0
  %244 = load i16, ptr %243, align 8, !tbaa !11
  %245 = zext i16 %244 to i64
  %246 = call noalias ptr @calloc(i64 noundef %245, i64 noundef 2) #10
  %247 = load ptr, ptr %13, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.state_t, ptr %247, i32 0, i32 21
  store ptr %246, ptr %248, align 8, !tbaa !37
  %249 = load ptr, ptr %13, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.state_t, ptr %249, i32 0, i32 0
  %251 = load i16, ptr %250, align 8, !tbaa !11
  %252 = zext i16 %251 to i64
  %253 = udiv i64 %252, 64
  %254 = add i64 %253, 1
  %255 = call noalias ptr @calloc(i64 noundef %254, i64 noundef 8) #10
  %256 = load ptr, ptr %13, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.state_t, ptr %256, i32 0, i32 23
  store ptr %255, ptr %257, align 8, !tbaa !38
  %258 = load ptr, ptr %13, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.state_t, ptr %258, i32 0, i32 0
  %260 = load i16, ptr %259, align 8, !tbaa !11
  %261 = zext i16 %260 to i64
  %262 = mul i64 %261, 2
  %263 = call noalias ptr @malloc(i64 noundef %262) #9
  %264 = load ptr, ptr %13, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.state_t, ptr %264, i32 0, i32 24
  store ptr %263, ptr %265, align 8, !tbaa !39
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.state_t, ptr %266, i32 0, i32 0
  %268 = load i16, ptr %267, align 8, !tbaa !11
  %269 = zext i16 %268 to i64
  %270 = udiv i64 %269, 64
  %271 = add i64 %270, 1
  %272 = call noalias ptr @calloc(i64 noundef %271, i64 noundef 8) #10
  %273 = load ptr, ptr %13, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.state_t, ptr %273, i32 0, i32 26
  store ptr %272, ptr %274, align 8, !tbaa !40
  %275 = load ptr, ptr %13, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.state_t, ptr %275, i32 0, i32 19
  %277 = load ptr, ptr %276, align 8, !tbaa !36
  %278 = load ptr, ptr %13, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.state_t, ptr %278, i32 0, i32 20
  %280 = getelementptr inbounds %struct.list_t, ptr %279, i32 0, i32 0
  store ptr %277, ptr %280, align 8, !tbaa !41
  %281 = load ptr, ptr %13, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.state_t, ptr %281, i32 0, i32 20
  %283 = getelementptr inbounds %struct.list_t, ptr %282, i32 0, i32 1
  store i16 0, ptr %283, align 8, !tbaa !42
  %284 = load ptr, ptr %13, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.state_t, ptr %284, i32 0, i32 21
  %286 = load ptr, ptr %285, align 8, !tbaa !37
  %287 = load ptr, ptr %13, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.state_t, ptr %287, i32 0, i32 22
  %289 = getelementptr inbounds %struct.list_t, ptr %288, i32 0, i32 0
  store ptr %286, ptr %289, align 8, !tbaa !43
  %290 = load ptr, ptr %13, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.state_t, ptr %290, i32 0, i32 22
  %292 = getelementptr inbounds %struct.list_t, ptr %291, i32 0, i32 1
  store i16 0, ptr %292, align 8, !tbaa !44
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #8
  store i16 0, ptr %17, align 2, !tbaa !9
  br label %293

293:                                              ; preds = %315, %204
  %294 = load i16, ptr %17, align 2, !tbaa !9
  %295 = zext i16 %294 to i32
  %296 = load ptr, ptr %13, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.state_t, ptr %296, i32 0, i32 0
  %298 = load i16, ptr %297, align 8, !tbaa !11
  %299 = zext i16 %298 to i32
  %300 = icmp slt i32 %295, %299
  br i1 %300, label %301, label %318

301:                                              ; preds = %293
  %302 = load ptr, ptr %13, align 8, !tbaa !5
  %303 = load i16, ptr %17, align 2, !tbaa !9
  %304 = load ptr, ptr %8, align 8, !tbaa !5
  %305 = load i16, ptr %17, align 2, !tbaa !9
  %306 = zext i16 %305 to i64
  %307 = getelementptr inbounds i32, ptr %304, i64 %306
  %308 = load i32, ptr %307, align 4, !tbaa !45
  call void @set_nodes_pullup(ptr noundef %302, i16 noundef zeroext %303, i32 noundef %308)
  %309 = load ptr, ptr %13, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.state_t, ptr %309, i32 0, i32 9
  %311 = load ptr, ptr %310, align 8, !tbaa !24
  %312 = load i16, ptr %17, align 2, !tbaa !9
  %313 = zext i16 %312 to i64
  %314 = getelementptr inbounds i16, ptr %311, i64 %313
  store i16 0, ptr %314, align 2, !tbaa !9
  br label %315

315:                                              ; preds = %301
  %316 = load i16, ptr %17, align 2, !tbaa !9
  %317 = add i16 %316, 1
  store i16 %317, ptr %17, align 2, !tbaa !9
  br label %293, !llvm.loop !46

318:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #8
  store i16 0, ptr %18, align 2, !tbaa !9
  store i16 0, ptr %17, align 2, !tbaa !9
  br label %319

319:                                              ; preds = %449, %318
  %320 = load i16, ptr %17, align 2, !tbaa !9
  %321 = zext i16 %320 to i32
  %322 = load ptr, ptr %13, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.state_t, ptr %322, i32 0, i32 1
  %324 = load i16, ptr %323, align 2, !tbaa !15
  %325 = zext i16 %324 to i32
  %326 = icmp slt i32 %321, %325
  br i1 %326, label %327, label %452

327:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #8
  %328 = load ptr, ptr %7, align 8, !tbaa !5
  %329 = load i16, ptr %17, align 2, !tbaa !9
  %330 = zext i16 %329 to i64
  %331 = getelementptr inbounds %struct.netlist_transdefs, ptr %328, i64 %330
  %332 = getelementptr inbounds %struct.netlist_transdefs, ptr %331, i32 0, i32 0
  %333 = load i32, ptr %332, align 4, !tbaa !47
  %334 = trunc i32 %333 to i16
  store i16 %334, ptr %19, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #8
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  %336 = load i16, ptr %17, align 2, !tbaa !9
  %337 = zext i16 %336 to i64
  %338 = getelementptr inbounds %struct.netlist_transdefs, ptr %335, i64 %337
  %339 = getelementptr inbounds %struct.netlist_transdefs, ptr %338, i32 0, i32 1
  %340 = load i32, ptr %339, align 4, !tbaa !49
  %341 = trunc i32 %340 to i16
  store i16 %341, ptr %20, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #8
  %342 = load ptr, ptr %7, align 8, !tbaa !5
  %343 = load i16, ptr %17, align 2, !tbaa !9
  %344 = zext i16 %343 to i64
  %345 = getelementptr inbounds %struct.netlist_transdefs, ptr %342, i64 %344
  %346 = getelementptr inbounds %struct.netlist_transdefs, ptr %345, i32 0, i32 2
  %347 = load i32, ptr %346, align 4, !tbaa !50
  %348 = trunc i32 %347 to i16
  store i16 %348, ptr %21, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #8
  store i16 0, ptr %23, align 2, !tbaa !9
  br label %349

349:                                              ; preds = %418, %327
  %350 = load i16, ptr %23, align 2, !tbaa !9
  %351 = zext i16 %350 to i32
  %352 = load i16, ptr %18, align 2, !tbaa !9
  %353 = zext i16 %352 to i32
  %354 = icmp slt i32 %351, %353
  br i1 %354, label %356, label %355

355:                                              ; preds = %349
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #8
  br label %421

356:                                              ; preds = %349
  %357 = load ptr, ptr %13, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.state_t, ptr %357, i32 0, i32 15
  %359 = load ptr, ptr %358, align 8, !tbaa !32
  %360 = load i16, ptr %23, align 2, !tbaa !9
  %361 = zext i16 %360 to i64
  %362 = getelementptr inbounds i16, ptr %359, i64 %361
  %363 = load i16, ptr %362, align 2, !tbaa !9
  %364 = zext i16 %363 to i32
  %365 = load i16, ptr %19, align 2, !tbaa !9
  %366 = zext i16 %365 to i32
  %367 = icmp eq i32 %364, %366
  br i1 %367, label %368, label %417

368:                                              ; preds = %356
  %369 = load ptr, ptr %13, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.state_t, ptr %369, i32 0, i32 16
  %371 = load ptr, ptr %370, align 8, !tbaa !33
  %372 = load i16, ptr %23, align 2, !tbaa !9
  %373 = zext i16 %372 to i64
  %374 = getelementptr inbounds i16, ptr %371, i64 %373
  %375 = load i16, ptr %374, align 2, !tbaa !9
  %376 = zext i16 %375 to i32
  %377 = load i16, ptr %20, align 2, !tbaa !9
  %378 = zext i16 %377 to i32
  %379 = icmp eq i32 %376, %378
  br i1 %379, label %380, label %392

380:                                              ; preds = %368
  %381 = load ptr, ptr %13, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.state_t, ptr %381, i32 0, i32 17
  %383 = load ptr, ptr %382, align 8, !tbaa !34
  %384 = load i16, ptr %23, align 2, !tbaa !9
  %385 = zext i16 %384 to i64
  %386 = getelementptr inbounds i16, ptr %383, i64 %385
  %387 = load i16, ptr %386, align 2, !tbaa !9
  %388 = zext i16 %387 to i32
  %389 = load i16, ptr %21, align 2, !tbaa !9
  %390 = zext i16 %389 to i32
  %391 = icmp eq i32 %388, %390
  br i1 %391, label %416, label %392

392:                                              ; preds = %380, %368
  %393 = load ptr, ptr %13, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.state_t, ptr %393, i32 0, i32 16
  %395 = load ptr, ptr %394, align 8, !tbaa !33
  %396 = load i16, ptr %23, align 2, !tbaa !9
  %397 = zext i16 %396 to i64
  %398 = getelementptr inbounds i16, ptr %395, i64 %397
  %399 = load i16, ptr %398, align 2, !tbaa !9
  %400 = zext i16 %399 to i32
  %401 = load i16, ptr %21, align 2, !tbaa !9
  %402 = zext i16 %401 to i32
  %403 = icmp eq i32 %400, %402
  br i1 %403, label %404, label %417

404:                                              ; preds = %392
  %405 = load ptr, ptr %13, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.state_t, ptr %405, i32 0, i32 17
  %407 = load ptr, ptr %406, align 8, !tbaa !34
  %408 = load i16, ptr %23, align 2, !tbaa !9
  %409 = zext i16 %408 to i64
  %410 = getelementptr inbounds i16, ptr %407, i64 %409
  %411 = load i16, ptr %410, align 2, !tbaa !9
  %412 = zext i16 %411 to i32
  %413 = load i16, ptr %20, align 2, !tbaa !9
  %414 = zext i16 %413 to i32
  %415 = icmp eq i32 %412, %414
  br i1 %415, label %416, label %417

416:                                              ; preds = %404, %380
  store i32 1, ptr %22, align 4, !tbaa !45
  br label %417

417:                                              ; preds = %416, %404, %392, %356
  br label %418

418:                                              ; preds = %417
  %419 = load i16, ptr %23, align 2, !tbaa !9
  %420 = add i16 %419, 1
  store i16 %420, ptr %23, align 2, !tbaa !9
  br label %349, !llvm.loop !51

421:                                              ; preds = %355
  %422 = load i32, ptr %22, align 4, !tbaa !45
  %423 = icmp ne i32 %422, 0
  br i1 %423, label %448, label %424

424:                                              ; preds = %421
  %425 = load i16, ptr %19, align 2, !tbaa !9
  %426 = load ptr, ptr %13, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.state_t, ptr %426, i32 0, i32 15
  %428 = load ptr, ptr %427, align 8, !tbaa !32
  %429 = load i16, ptr %18, align 2, !tbaa !9
  %430 = zext i16 %429 to i64
  %431 = getelementptr inbounds i16, ptr %428, i64 %430
  store i16 %425, ptr %431, align 2, !tbaa !9
  %432 = load i16, ptr %20, align 2, !tbaa !9
  %433 = load ptr, ptr %13, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.state_t, ptr %433, i32 0, i32 16
  %435 = load ptr, ptr %434, align 8, !tbaa !33
  %436 = load i16, ptr %18, align 2, !tbaa !9
  %437 = zext i16 %436 to i64
  %438 = getelementptr inbounds i16, ptr %435, i64 %437
  store i16 %432, ptr %438, align 2, !tbaa !9
  %439 = load i16, ptr %21, align 2, !tbaa !9
  %440 = load ptr, ptr %13, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.state_t, ptr %440, i32 0, i32 17
  %442 = load ptr, ptr %441, align 8, !tbaa !34
  %443 = load i16, ptr %18, align 2, !tbaa !9
  %444 = zext i16 %443 to i64
  %445 = getelementptr inbounds i16, ptr %442, i64 %444
  store i16 %439, ptr %445, align 2, !tbaa !9
  %446 = load i16, ptr %18, align 2, !tbaa !9
  %447 = add i16 %446, 1
  store i16 %447, ptr %18, align 2, !tbaa !9
  br label %448

448:                                              ; preds = %424, %421
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #8
  br label %449

449:                                              ; preds = %448
  %450 = load i16, ptr %17, align 2, !tbaa !9
  %451 = add i16 %450, 1
  store i16 %451, ptr %17, align 2, !tbaa !9
  br label %319, !llvm.loop !52

452:                                              ; preds = %319
  %453 = load i16, ptr %18, align 2, !tbaa !9
  %454 = load ptr, ptr %13, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.state_t, ptr %454, i32 0, i32 1
  store i16 %453, ptr %455, align 2, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %456 = load ptr, ptr %13, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.state_t, ptr %456, i32 0, i32 0
  %458 = load i16, ptr %457, align 8, !tbaa !11
  %459 = zext i16 %458 to i64
  %460 = call noalias ptr @calloc(i64 noundef %459, i64 noundef 2) #10
  store ptr %460, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #8
  store i16 0, ptr %25, align 2, !tbaa !9
  store i16 0, ptr %17, align 2, !tbaa !9
  br label %461

461:                                              ; preds = %523, %452
  %462 = load i16, ptr %17, align 2, !tbaa !9
  %463 = zext i16 %462 to i32
  %464 = load ptr, ptr %13, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.state_t, ptr %464, i32 0, i32 1
  %466 = load i16, ptr %465, align 2, !tbaa !15
  %467 = zext i16 %466 to i32
  %468 = icmp slt i32 %463, %467
  br i1 %468, label %469, label %526

469:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #8
  %470 = load ptr, ptr %13, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.state_t, ptr %470, i32 0, i32 15
  %472 = load ptr, ptr %471, align 8, !tbaa !32
  %473 = load i16, ptr %17, align 2, !tbaa !9
  %474 = zext i16 %473 to i64
  %475 = getelementptr inbounds i16, ptr %472, i64 %474
  %476 = load i16, ptr %475, align 2, !tbaa !9
  store i16 %476, ptr %26, align 2, !tbaa !9
  %477 = load i16, ptr %17, align 2, !tbaa !9
  %478 = load ptr, ptr %13, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.state_t, ptr %478, i32 0, i32 7
  %480 = load ptr, ptr %479, align 8, !tbaa !21
  %481 = load i16, ptr %26, align 2, !tbaa !9
  %482 = zext i16 %481 to i64
  %483 = getelementptr inbounds ptr, ptr %480, i64 %482
  %484 = load ptr, ptr %483, align 8, !tbaa !5
  %485 = load ptr, ptr %13, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.state_t, ptr %485, i32 0, i32 9
  %487 = load ptr, ptr %486, align 8, !tbaa !24
  %488 = load i16, ptr %26, align 2, !tbaa !9
  %489 = zext i16 %488 to i64
  %490 = getelementptr inbounds i16, ptr %487, i64 %489
  %491 = load i16, ptr %490, align 2, !tbaa !9
  %492 = add i16 %491, 1
  store i16 %492, ptr %490, align 2, !tbaa !9
  %493 = zext i16 %491 to i64
  %494 = getelementptr inbounds i16, ptr %484, i64 %493
  store i16 %477, ptr %494, align 2, !tbaa !9
  %495 = load ptr, ptr %24, align 8, !tbaa !5
  %496 = load ptr, ptr %13, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.state_t, ptr %496, i32 0, i32 16
  %498 = load ptr, ptr %497, align 8, !tbaa !33
  %499 = load i16, ptr %17, align 2, !tbaa !9
  %500 = zext i16 %499 to i64
  %501 = getelementptr inbounds i16, ptr %498, i64 %500
  %502 = load i16, ptr %501, align 2, !tbaa !9
  %503 = zext i16 %502 to i64
  %504 = getelementptr inbounds i16, ptr %495, i64 %503
  %505 = load i16, ptr %504, align 2, !tbaa !9
  %506 = add i16 %505, 1
  store i16 %506, ptr %504, align 2, !tbaa !9
  %507 = load ptr, ptr %24, align 8, !tbaa !5
  %508 = load ptr, ptr %13, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.state_t, ptr %508, i32 0, i32 17
  %510 = load ptr, ptr %509, align 8, !tbaa !34
  %511 = load i16, ptr %17, align 2, !tbaa !9
  %512 = zext i16 %511 to i64
  %513 = getelementptr inbounds i16, ptr %510, i64 %512
  %514 = load i16, ptr %513, align 2, !tbaa !9
  %515 = zext i16 %514 to i64
  %516 = getelementptr inbounds i16, ptr %507, i64 %515
  %517 = load i16, ptr %516, align 2, !tbaa !9
  %518 = add i16 %517, 1
  store i16 %518, ptr %516, align 2, !tbaa !9
  %519 = load i16, ptr %25, align 2, !tbaa !9
  %520 = zext i16 %519 to i32
  %521 = add nsw i32 %520, 2
  %522 = trunc i32 %521 to i16
  store i16 %522, ptr %25, align 2, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #8
  br label %523

523:                                              ; preds = %469
  %524 = load i16, ptr %17, align 2, !tbaa !9
  %525 = add i16 %524, 1
  store i16 %525, ptr %17, align 2, !tbaa !9
  br label %461, !llvm.loop !53

526:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #8
  store i16 0, ptr %27, align 2, !tbaa !9
  store i16 0, ptr %17, align 2, !tbaa !9
  br label %527

527:                                              ; preds = %553, %526
  %528 = load i16, ptr %17, align 2, !tbaa !9
  %529 = zext i16 %528 to i32
  %530 = load ptr, ptr %13, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.state_t, ptr %530, i32 0, i32 0
  %532 = load i16, ptr %531, align 8, !tbaa !11
  %533 = zext i16 %532 to i32
  %534 = icmp slt i32 %529, %533
  br i1 %534, label %535, label %556

535:                                              ; preds = %527
  %536 = load i16, ptr %27, align 2, !tbaa !9
  %537 = load ptr, ptr %13, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.state_t, ptr %537, i32 0, i32 10
  %539 = load ptr, ptr %538, align 8, !tbaa !25
  %540 = load i16, ptr %17, align 2, !tbaa !9
  %541 = zext i16 %540 to i64
  %542 = getelementptr inbounds i16, ptr %539, i64 %541
  store i16 %536, ptr %542, align 2, !tbaa !9
  %543 = load ptr, ptr %24, align 8, !tbaa !5
  %544 = load i16, ptr %17, align 2, !tbaa !9
  %545 = zext i16 %544 to i64
  %546 = getelementptr inbounds i16, ptr %543, i64 %545
  %547 = load i16, ptr %546, align 2, !tbaa !9
  %548 = zext i16 %547 to i32
  %549 = load i16, ptr %27, align 2, !tbaa !9
  %550 = zext i16 %549 to i32
  %551 = add nsw i32 %550, %548
  %552 = trunc i32 %551 to i16
  store i16 %552, ptr %27, align 2, !tbaa !9
  br label %553

553:                                              ; preds = %535
  %554 = load i16, ptr %17, align 2, !tbaa !9
  %555 = add i16 %554, 1
  store i16 %555, ptr %17, align 2, !tbaa !9
  br label %527, !llvm.loop !54

556:                                              ; preds = %527
  %557 = load i16, ptr %27, align 2, !tbaa !9
  %558 = load ptr, ptr %13, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.state_t, ptr %558, i32 0, i32 10
  %560 = load ptr, ptr %559, align 8, !tbaa !25
  %561 = load i16, ptr %17, align 2, !tbaa !9
  %562 = zext i16 %561 to i64
  %563 = getelementptr inbounds i16, ptr %560, i64 %562
  store i16 %557, ptr %563, align 2, !tbaa !9
  %564 = load i16, ptr %25, align 2, !tbaa !9
  %565 = zext i16 %564 to i64
  %566 = call noalias ptr @calloc(i64 noundef %565, i64 noundef 4) #10
  %567 = load ptr, ptr %13, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.state_t, ptr %567, i32 0, i32 8
  store ptr %566, ptr %568, align 8, !tbaa !55
  %569 = load ptr, ptr %24, align 8, !tbaa !5
  %570 = load ptr, ptr %13, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.state_t, ptr %570, i32 0, i32 0
  %572 = load i16, ptr %571, align 8, !tbaa !11
  %573 = zext i16 %572 to i64
  %574 = mul i64 %573, 2
  call void @llvm.memset.p0.i64(ptr align 2 %569, i8 0, i64 %574, i1 false)
  store i16 0, ptr %17, align 2, !tbaa !9
  br label %575

575:                                              ; preds = %646, %556
  %576 = load i16, ptr %17, align 2, !tbaa !9
  %577 = zext i16 %576 to i32
  %578 = load ptr, ptr %13, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.state_t, ptr %578, i32 0, i32 1
  %580 = load i16, ptr %579, align 2, !tbaa !15
  %581 = zext i16 %580 to i32
  %582 = icmp slt i32 %577, %581
  br i1 %582, label %583, label %649

583:                                              ; preds = %575
  call void @llvm.lifetime.start.p0(i64 2, ptr %28) #8
  %584 = load ptr, ptr %13, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.state_t, ptr %584, i32 0, i32 16
  %586 = load ptr, ptr %585, align 8, !tbaa !33
  %587 = load i16, ptr %17, align 2, !tbaa !9
  %588 = zext i16 %587 to i64
  %589 = getelementptr inbounds i16, ptr %586, i64 %588
  %590 = load i16, ptr %589, align 2, !tbaa !9
  store i16 %590, ptr %28, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %29) #8
  %591 = load ptr, ptr %13, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.state_t, ptr %591, i32 0, i32 17
  %593 = load ptr, ptr %592, align 8, !tbaa !34
  %594 = load i16, ptr %17, align 2, !tbaa !9
  %595 = zext i16 %594 to i64
  %596 = getelementptr inbounds i16, ptr %593, i64 %595
  %597 = load i16, ptr %596, align 2, !tbaa !9
  store i16 %597, ptr %29, align 2, !tbaa !9
  %598 = load ptr, ptr %13, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.state_t, ptr %598, i32 0, i32 8
  %600 = load ptr, ptr %599, align 8, !tbaa !55
  %601 = load ptr, ptr %13, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.state_t, ptr %601, i32 0, i32 10
  %603 = load ptr, ptr %602, align 8, !tbaa !25
  %604 = load i16, ptr %28, align 2, !tbaa !9
  %605 = zext i16 %604 to i64
  %606 = getelementptr inbounds i16, ptr %603, i64 %605
  %607 = load i16, ptr %606, align 2, !tbaa !9
  %608 = zext i16 %607 to i32
  %609 = load ptr, ptr %24, align 8, !tbaa !5
  %610 = load i16, ptr %28, align 2, !tbaa !9
  %611 = zext i16 %610 to i64
  %612 = getelementptr inbounds i16, ptr %609, i64 %611
  %613 = load i16, ptr %612, align 2, !tbaa !9
  %614 = add i16 %613, 1
  store i16 %614, ptr %612, align 2, !tbaa !9
  %615 = zext i16 %613 to i32
  %616 = add nsw i32 %608, %615
  %617 = sext i32 %616 to i64
  %618 = getelementptr inbounds %struct.c1c2_t, ptr %600, i64 %617
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  %619 = load i16, ptr %17, align 2, !tbaa !9
  %620 = load i16, ptr %29, align 2, !tbaa !9
  %621 = call i32 @c1c2(i16 noundef zeroext %619, i16 noundef zeroext %620)
  store i32 %621, ptr %30, align 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %618, ptr align 2 %30, i64 4, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  %622 = load ptr, ptr %13, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.state_t, ptr %622, i32 0, i32 8
  %624 = load ptr, ptr %623, align 8, !tbaa !55
  %625 = load ptr, ptr %13, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.state_t, ptr %625, i32 0, i32 10
  %627 = load ptr, ptr %626, align 8, !tbaa !25
  %628 = load i16, ptr %29, align 2, !tbaa !9
  %629 = zext i16 %628 to i64
  %630 = getelementptr inbounds i16, ptr %627, i64 %629
  %631 = load i16, ptr %630, align 2, !tbaa !9
  %632 = zext i16 %631 to i32
  %633 = load ptr, ptr %24, align 8, !tbaa !5
  %634 = load i16, ptr %29, align 2, !tbaa !9
  %635 = zext i16 %634 to i64
  %636 = getelementptr inbounds i16, ptr %633, i64 %635
  %637 = load i16, ptr %636, align 2, !tbaa !9
  %638 = add i16 %637, 1
  store i16 %638, ptr %636, align 2, !tbaa !9
  %639 = zext i16 %637 to i32
  %640 = add nsw i32 %632, %639
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds %struct.c1c2_t, ptr %624, i64 %641
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %643 = load i16, ptr %17, align 2, !tbaa !9
  %644 = load i16, ptr %28, align 2, !tbaa !9
  %645 = call i32 @c1c2(i16 noundef zeroext %643, i16 noundef zeroext %644)
  store i32 %645, ptr %31, align 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %642, ptr align 2 %31, i64 4, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %28) #8
  br label %646

646:                                              ; preds = %583
  %647 = load i16, ptr %17, align 2, !tbaa !9
  %648 = add i16 %647, 1
  store i16 %648, ptr %17, align 2, !tbaa !9
  br label %575, !llvm.loop !57

649:                                              ; preds = %575
  %650 = load ptr, ptr %24, align 8, !tbaa !5
  call void @free(ptr noundef %650) #8
  store i16 0, ptr %17, align 2, !tbaa !9
  br label %651

651:                                              ; preds = %767, %649
  %652 = load i16, ptr %17, align 2, !tbaa !9
  %653 = zext i16 %652 to i32
  %654 = load ptr, ptr %13, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.state_t, ptr %654, i32 0, i32 0
  %656 = load i16, ptr %655, align 8, !tbaa !11
  %657 = zext i16 %656 to i32
  %658 = icmp slt i32 %653, %657
  br i1 %658, label %659, label %770

659:                                              ; preds = %651
  %660 = load ptr, ptr %13, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.state_t, ptr %660, i32 0, i32 11
  %662 = load ptr, ptr %661, align 8, !tbaa !26
  %663 = load i16, ptr %17, align 2, !tbaa !9
  %664 = zext i16 %663 to i64
  %665 = getelementptr inbounds i16, ptr %662, i64 %664
  store i16 0, ptr %665, align 2, !tbaa !9
  %666 = load ptr, ptr %13, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.state_t, ptr %666, i32 0, i32 12
  %668 = load ptr, ptr %667, align 8, !tbaa !27
  %669 = load i16, ptr %17, align 2, !tbaa !9
  %670 = zext i16 %669 to i64
  %671 = getelementptr inbounds i16, ptr %668, i64 %670
  store i16 0, ptr %671, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %32) #8
  store i16 0, ptr %32, align 2, !tbaa !9
  br label %672

672:                                              ; preds = %763, %659
  %673 = load i16, ptr %32, align 2, !tbaa !9
  %674 = zext i16 %673 to i32
  %675 = load ptr, ptr %13, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.state_t, ptr %675, i32 0, i32 9
  %677 = load ptr, ptr %676, align 8, !tbaa !24
  %678 = load i16, ptr %17, align 2, !tbaa !9
  %679 = zext i16 %678 to i64
  %680 = getelementptr inbounds i16, ptr %677, i64 %679
  %681 = load i16, ptr %680, align 2, !tbaa !9
  %682 = zext i16 %681 to i32
  %683 = icmp slt i32 %674, %682
  br i1 %683, label %685, label %684

684:                                              ; preds = %672
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #8
  br label %766

685:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #8
  %686 = load ptr, ptr %13, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.state_t, ptr %686, i32 0, i32 7
  %688 = load ptr, ptr %687, align 8, !tbaa !21
  %689 = load i16, ptr %17, align 2, !tbaa !9
  %690 = zext i16 %689 to i64
  %691 = getelementptr inbounds ptr, ptr %688, i64 %690
  %692 = load ptr, ptr %691, align 8, !tbaa !5
  %693 = load i16, ptr %32, align 2, !tbaa !9
  %694 = zext i16 %693 to i64
  %695 = getelementptr inbounds i16, ptr %692, i64 %694
  %696 = load i16, ptr %695, align 2, !tbaa !9
  store i16 %696, ptr %33, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #8
  %697 = load ptr, ptr %13, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.state_t, ptr %697, i32 0, i32 16
  %699 = load ptr, ptr %698, align 8, !tbaa !33
  %700 = load i16, ptr %33, align 2, !tbaa !9
  %701 = zext i16 %700 to i64
  %702 = getelementptr inbounds i16, ptr %699, i64 %701
  %703 = load i16, ptr %702, align 2, !tbaa !9
  store i16 %703, ptr %34, align 2, !tbaa !9
  %704 = load i16, ptr %34, align 2, !tbaa !9
  %705 = zext i16 %704 to i32
  %706 = load i16, ptr %11, align 2, !tbaa !9
  %707 = zext i16 %706 to i32
  %708 = icmp ne i32 %705, %707
  br i1 %708, label %709, label %719

709:                                              ; preds = %685
  %710 = load i16, ptr %34, align 2, !tbaa !9
  %711 = zext i16 %710 to i32
  %712 = load i16, ptr %12, align 2, !tbaa !9
  %713 = zext i16 %712 to i32
  %714 = icmp ne i32 %711, %713
  br i1 %714, label %715, label %719

715:                                              ; preds = %709
  %716 = load ptr, ptr %13, align 8, !tbaa !5
  %717 = load i16, ptr %17, align 2, !tbaa !9
  %718 = load i16, ptr %34, align 2, !tbaa !9
  call void @add_nodes_dependant(ptr noundef %716, i16 noundef zeroext %717, i16 noundef zeroext %718)
  br label %719

719:                                              ; preds = %715, %709, %685
  call void @llvm.lifetime.start.p0(i64 2, ptr %35) #8
  %720 = load ptr, ptr %13, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.state_t, ptr %720, i32 0, i32 17
  %722 = load ptr, ptr %721, align 8, !tbaa !34
  %723 = load i16, ptr %33, align 2, !tbaa !9
  %724 = zext i16 %723 to i64
  %725 = getelementptr inbounds i16, ptr %722, i64 %724
  %726 = load i16, ptr %725, align 2, !tbaa !9
  store i16 %726, ptr %35, align 2, !tbaa !9
  %727 = load i16, ptr %35, align 2, !tbaa !9
  %728 = zext i16 %727 to i32
  %729 = load i16, ptr %11, align 2, !tbaa !9
  %730 = zext i16 %729 to i32
  %731 = icmp ne i32 %728, %730
  br i1 %731, label %732, label %742

732:                                              ; preds = %719
  %733 = load i16, ptr %35, align 2, !tbaa !9
  %734 = zext i16 %733 to i32
  %735 = load i16, ptr %12, align 2, !tbaa !9
  %736 = zext i16 %735 to i32
  %737 = icmp ne i32 %734, %736
  br i1 %737, label %738, label %742

738:                                              ; preds = %732
  %739 = load ptr, ptr %13, align 8, !tbaa !5
  %740 = load i16, ptr %17, align 2, !tbaa !9
  %741 = load i16, ptr %35, align 2, !tbaa !9
  call void @add_nodes_dependant(ptr noundef %739, i16 noundef zeroext %740, i16 noundef zeroext %741)
  br label %742

742:                                              ; preds = %738, %732, %719
  %743 = load i16, ptr %34, align 2, !tbaa !9
  %744 = zext i16 %743 to i32
  %745 = load i16, ptr %11, align 2, !tbaa !9
  %746 = zext i16 %745 to i32
  %747 = icmp ne i32 %744, %746
  br i1 %747, label %748, label %758

748:                                              ; preds = %742
  %749 = load i16, ptr %34, align 2, !tbaa !9
  %750 = zext i16 %749 to i32
  %751 = load i16, ptr %12, align 2, !tbaa !9
  %752 = zext i16 %751 to i32
  %753 = icmp ne i32 %750, %752
  br i1 %753, label %754, label %758

754:                                              ; preds = %748
  %755 = load ptr, ptr %13, align 8, !tbaa !5
  %756 = load i16, ptr %17, align 2, !tbaa !9
  %757 = load i16, ptr %34, align 2, !tbaa !9
  call void @add_nodes_left_dependant(ptr noundef %755, i16 noundef zeroext %756, i16 noundef zeroext %757)
  br label %762

758:                                              ; preds = %748, %742
  %759 = load ptr, ptr %13, align 8, !tbaa !5
  %760 = load i16, ptr %17, align 2, !tbaa !9
  %761 = load i16, ptr %35, align 2, !tbaa !9
  call void @add_nodes_left_dependant(ptr noundef %759, i16 noundef zeroext %760, i16 noundef zeroext %761)
  br label %762

762:                                              ; preds = %758, %754
  call void @llvm.lifetime.end.p0(i64 2, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %33) #8
  br label %763

763:                                              ; preds = %762
  %764 = load i16, ptr %32, align 2, !tbaa !9
  %765 = add i16 %764, 1
  store i16 %765, ptr %32, align 2, !tbaa !9
  br label %672, !llvm.loop !58

766:                                              ; preds = %684
  br label %767

767:                                              ; preds = %766
  %768 = load i16, ptr %17, align 2, !tbaa !9
  %769 = add i16 %768, 1
  store i16 %769, ptr %17, align 2, !tbaa !9
  br label %651, !llvm.loop !59

770:                                              ; preds = %651
  %771 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  ret ptr %771
}

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #2

; Function Attrs: nounwind allocsize(0,1)
declare noalias ptr @calloc(i64 noundef, i64 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @set_nodes_pullup(ptr noundef, i16 noundef zeroext, i32 noundef) #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @c1c2(i16 noundef zeroext, i16 noundef zeroext) #4

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @add_nodes_dependant(ptr noundef, i16 noundef zeroext, i16 noundef zeroext) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @add_nodes_left_dependant(ptr noundef, i16 noundef zeroext, i16 noundef zeroext) #4

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

!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 = !{!"short", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !10, i64 2, !10, i64 4, !10, i64 6, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !13, i64 136, !6, i64 152, !13, i64 160, !6, i64 176, !6, i64 184, !10, i64 192, !6, i64 200, !14, i64 208}
!13 = !{!"", !6, i64 0, !10, i64 8}
!14 = !{!"int", !7, i64 0}
!15 = !{!12, !10, i64 2}
!16 = !{!12, !10, i64 4}
!17 = !{!12, !10, i64 6}
!18 = !{!12, !6, i64 8}
!19 = !{!12, !6, i64 16}
!20 = !{!12, !6, i64 24}
!21 = !{!12, !6, i64 32}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!12, !6, i64 48}
!25 = !{!12, !6, i64 56}
!26 = !{!12, !6, i64 64}
!27 = !{!12, !6, i64 72}
!28 = !{!12, !6, i64 80}
!29 = distinct !{!29, !23}
!30 = !{!12, !6, i64 88}
!31 = distinct !{!31, !23}
!32 = !{!12, !6, i64 96}
!33 = !{!12, !6, i64 104}
!34 = !{!12, !6, i64 112}
!35 = !{!12, !6, i64 120}
!36 = !{!12, !6, i64 128}
!37 = !{!12, !6, i64 152}
!38 = !{!12, !6, i64 176}
!39 = !{!12, !6, i64 184}
!40 = !{!12, !6, i64 200}
!41 = !{!12, !6, i64 136}
!42 = !{!12, !10, i64 144}
!43 = !{!12, !6, i64 160}
!44 = !{!12, !10, i64 168}
!45 = !{!14, !14, i64 0}
!46 = distinct !{!46, !23}
!47 = !{!48, !14, i64 0}
!48 = !{!"", !14, i64 0, !14, i64 4, !14, i64 8}
!49 = !{!48, !14, i64 4}
!50 = !{!48, !14, i64 8}
!51 = distinct !{!51, !23}
!52 = distinct !{!52, !23}
!53 = distinct !{!53, !23}
!54 = distinct !{!54, !23}
!55 = !{!12, !6, i64 40}
!56 = !{i64 0, i64 2, !9, i64 2, i64 2, !9}
!57 = distinct !{!57, !23}
!58 = distinct !{!58, !23}
!59 = distinct !{!59, !23}


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

%struct.netlist_transdefs = type { i32, i32, i32 }
%struct.c1c2_t = type { i16, i16 }

; Function Attrs: nounwind uwtable
define dso_local noundef ptr @setupNodesAndTransistors(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, i16 noundef zeroext %2, i16 noundef zeroext %3, i16 noundef zeroext %4, i16 noundef zeroext %5) local_unnamed_addr #0 {
  %7 = tail call noalias dereferenceable_or_null(216) ptr @malloc(i64 noundef 216) #6
  store i16 %2, ptr %7, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %7, i64 2
  store i16 %3, ptr %8, align 2, !tbaa !13
  %9 = getelementptr inbounds i8, ptr %7, i64 4
  store i16 %4, ptr %9, align 4, !tbaa !14
  %10 = getelementptr inbounds i8, ptr %7, i64 6
  store i16 %5, ptr %10, align 2, !tbaa !15
  %11 = lshr i16 %2, 6
  %narrow = add nuw nsw i16 %11, 1
  %12 = zext nneg i16 %narrow to i64
  %13 = tail call noalias ptr @calloc(i64 noundef %12, i64 noundef 8) #7
  %14 = getelementptr inbounds i8, ptr %7, i64 8
  store ptr %13, ptr %14, align 8, !tbaa !16
  %15 = tail call noalias ptr @calloc(i64 noundef %12, i64 noundef 8) #7
  %16 = getelementptr inbounds i8, ptr %7, i64 16
  store ptr %15, ptr %16, align 8, !tbaa !17
  %17 = tail call noalias ptr @calloc(i64 noundef %12, i64 noundef 8) #7
  %18 = getelementptr inbounds i8, ptr %7, i64 24
  store ptr %17, ptr %18, align 8, !tbaa !18
  %19 = zext i16 %2 to i64
  %20 = shl nuw nsw i64 %19, 3
  %21 = tail call noalias ptr @malloc(i64 noundef %20) #6
  %22 = getelementptr inbounds i8, ptr %7, i64 32
  store ptr %21, ptr %22, align 8, !tbaa !19
  %.not290 = icmp eq i16 %2, 0
  br i1 %.not290, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %6
  %23 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %24 = getelementptr inbounds i8, ptr %7, i64 48
  store ptr %23, ptr %24, align 8, !tbaa !20
  %25 = add nuw nsw i64 %19, 1
  %26 = tail call noalias ptr @calloc(i64 noundef %25, i64 noundef 2) #7
  %27 = getelementptr inbounds i8, ptr %7, i64 56
  store ptr %26, ptr %27, align 8, !tbaa !21
  %28 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %29 = getelementptr inbounds i8, ptr %7, i64 64
  store ptr %28, ptr %29, align 8, !tbaa !22
  %30 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %31 = getelementptr inbounds i8, ptr %7, i64 72
  store ptr %30, ptr %31, align 8, !tbaa !23
  %32 = tail call noalias ptr @malloc(i64 noundef %20) #6
  %33 = getelementptr inbounds i8, ptr %7, i64 80
  store ptr %32, ptr %33, align 8, !tbaa !24
  br i1 %.not290, label %._crit_edge249.thread, label %.lr.ph248

._crit_edge249.thread:                            ; preds = %._crit_edge
  %34 = tail call noalias ptr @malloc(i64 noundef %20) #6
  %35 = getelementptr inbounds i8, ptr %7, i64 88
  store ptr %34, ptr %35, align 8, !tbaa !25
  br label %._crit_edge253

.lr.ph:                                           ; preds = %6, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %6 ]
  %36 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %37 = load ptr, ptr %22, align 8, !tbaa !19
  %38 = getelementptr inbounds ptr, ptr %37, i64 %indvars.iv
  store ptr %36, ptr %38, align 8, !tbaa !26
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %19
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !27

._crit_edge249:                                   ; preds = %.lr.ph248
  %39 = tail call noalias ptr @malloc(i64 noundef %20) #6
  %40 = getelementptr inbounds i8, ptr %7, i64 88
  store ptr %39, ptr %40, align 8, !tbaa !25
  br i1 %.not290, label %._crit_edge253, label %.lr.ph252

.lr.ph248:                                        ; preds = %._crit_edge, %.lr.ph248
  %indvars.iv304 = phi i64 [ %indvars.iv.next305, %.lr.ph248 ], [ 0, %._crit_edge ]
  %41 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %42 = load ptr, ptr %33, align 8, !tbaa !24
  %43 = getelementptr inbounds ptr, ptr %42, i64 %indvars.iv304
  store ptr %41, ptr %43, align 8, !tbaa !26
  %indvars.iv.next305 = add nuw nsw i64 %indvars.iv304, 1
  %exitcond308.not = icmp eq i64 %indvars.iv.next305, %19
  br i1 %exitcond308.not, label %._crit_edge249, label %.lr.ph248, !llvm.loop !29

._crit_edge253:                                   ; preds = %.lr.ph252, %._crit_edge249.thread, %._crit_edge249
  %44 = zext i16 %3 to i64
  %45 = tail call noalias ptr @calloc(i64 noundef %44, i64 noundef 2) #7
  %46 = getelementptr inbounds i8, ptr %7, i64 96
  store ptr %45, ptr %46, align 8, !tbaa !30
  %47 = tail call noalias ptr @calloc(i64 noundef %44, i64 noundef 2) #7
  %48 = getelementptr inbounds i8, ptr %7, i64 104
  store ptr %47, ptr %48, align 8, !tbaa !31
  %49 = tail call noalias ptr @calloc(i64 noundef %44, i64 noundef 2) #7
  %50 = getelementptr inbounds i8, ptr %7, i64 112
  store ptr %49, ptr %50, align 8, !tbaa !32
  %51 = lshr i16 %3, 6
  %narrow234 = add nuw nsw i16 %51, 1
  %52 = zext nneg i16 %narrow234 to i64
  %53 = tail call noalias ptr @calloc(i64 noundef %52, i64 noundef 8) #7
  %54 = getelementptr inbounds i8, ptr %7, i64 120
  store ptr %53, ptr %54, align 8, !tbaa !33
  %55 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %56 = getelementptr inbounds i8, ptr %7, i64 128
  store ptr %55, ptr %56, align 8, !tbaa !34
  %57 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %58 = getelementptr inbounds i8, ptr %7, i64 152
  store ptr %57, ptr %58, align 8, !tbaa !35
  %59 = tail call noalias ptr @calloc(i64 noundef %12, i64 noundef 8) #7
  %60 = getelementptr inbounds i8, ptr %7, i64 176
  store ptr %59, ptr %60, align 8, !tbaa !36
  %61 = shl nuw nsw i64 %19, 1
  %62 = tail call noalias ptr @malloc(i64 noundef %61) #6
  %63 = getelementptr inbounds i8, ptr %7, i64 184
  store ptr %62, ptr %63, align 8, !tbaa !37
  %64 = tail call noalias ptr @calloc(i64 noundef %12, i64 noundef 8) #7
  %65 = getelementptr inbounds i8, ptr %7, i64 200
  store ptr %64, ptr %65, align 8, !tbaa !38
  %66 = getelementptr inbounds i8, ptr %7, i64 136
  store ptr %55, ptr %66, align 8, !tbaa !39
  %67 = getelementptr inbounds i8, ptr %7, i64 144
  store i16 0, ptr %67, align 8, !tbaa !40
  %68 = getelementptr inbounds i8, ptr %7, i64 160
  store ptr %57, ptr %68, align 8, !tbaa !41
  %69 = getelementptr inbounds i8, ptr %7, i64 168
  store i16 0, ptr %69, align 8, !tbaa !42
  br i1 %.not290, label %.preheader244, label %.lr.ph256

.lr.ph252:                                        ; preds = %._crit_edge249, %.lr.ph252
  %indvars.iv309 = phi i64 [ %indvars.iv.next310, %.lr.ph252 ], [ 0, %._crit_edge249 ]
  %70 = tail call noalias ptr @calloc(i64 noundef %19, i64 noundef 2) #7
  %71 = load ptr, ptr %40, align 8, !tbaa !25
  %72 = getelementptr inbounds ptr, ptr %71, i64 %indvars.iv309
  store ptr %70, ptr %72, align 8, !tbaa !26
  %indvars.iv.next310 = add nuw nsw i64 %indvars.iv309, 1
  %exitcond313.not = icmp eq i64 %indvars.iv.next310, %19
  br i1 %exitcond313.not, label %._crit_edge253, label %.lr.ph252, !llvm.loop !43

.preheader244.loopexit:                           ; preds = %.lr.ph256
  %.pre = load i16, ptr %8, align 2, !tbaa !13
  br label %.preheader244

.preheader244:                                    ; preds = %.preheader244.loopexit, %._crit_edge253
  %73 = phi i16 [ %80, %.preheader244.loopexit ], [ 0, %._crit_edge253 ]
  %74 = phi i16 [ %.pre, %.preheader244.loopexit ], [ %3, %._crit_edge253 ]
  %.not294 = icmp eq i16 %74, 0
  br i1 %.not294, label %._crit_edge265, label %.lr.ph264

.lr.ph256:                                        ; preds = %._crit_edge253, %.lr.ph256
  %indvars.iv314 = phi i64 [ %indvars.iv.next315, %.lr.ph256 ], [ 0, %._crit_edge253 ]
  %75 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv314
  %76 = load i32, ptr %75, align 4, !tbaa !44
  %77 = trunc nuw i64 %indvars.iv314 to i16
  tail call void @set_nodes_pullup(ptr noundef nonnull %7, i16 noundef zeroext %77, i32 noundef %76)
  %78 = load ptr, ptr %24, align 8, !tbaa !20
  %79 = getelementptr inbounds i16, ptr %78, i64 %indvars.iv314
  store i16 0, ptr %79, align 2, !tbaa !45
  %indvars.iv.next315 = add nuw nsw i64 %indvars.iv314, 1
  %80 = load i16, ptr %7, align 8, !tbaa !5
  %81 = zext i16 %80 to i64
  %82 = icmp ult i64 %indvars.iv.next315, %81
  br i1 %82, label %.lr.ph256, label %.preheader244.loopexit, !llvm.loop !46

.lr.ph264:                                        ; preds = %.preheader244, %125
  %83 = phi i16 [ %126, %125 ], [ %74, %.preheader244 ]
  %indvars.iv322 = phi i64 [ %indvars.iv.next323, %125 ], [ 0, %.preheader244 ]
  %.0222262 = phi i16 [ %.1223, %125 ], [ 0, %.preheader244 ]
  %84 = getelementptr inbounds %struct.netlist_transdefs, ptr %0, i64 %indvars.iv322
  %85 = load i32, ptr %84, align 4, !tbaa !47
  %86 = trunc i32 %85 to i16
  %87 = getelementptr inbounds i8, ptr %84, i64 4
  %88 = load i32, ptr %87, align 4, !tbaa !49
  %89 = trunc i32 %88 to i16
  %90 = getelementptr inbounds i8, ptr %84, i64 8
  %91 = load i32, ptr %90, align 4, !tbaa !50
  %92 = trunc i32 %91 to i16
  %.not295 = icmp eq i16 %.0222262, 0
  br i1 %.not295, label %._crit_edge261.thread, label %.lr.ph260

.lr.ph260:                                        ; preds = %.lr.ph264
  %93 = load ptr, ptr %46, align 8, !tbaa !30
  %wide.trip.count320 = zext i16 %.0222262 to i64
  br label %94

._crit_edge261:                                   ; preds = %116
  %.not241 = icmp eq i32 %.1225, 0
  br i1 %.not241, label %._crit_edge261.thread, label %125

94:                                               ; preds = %.lr.ph260, %116
  %indvars.iv317 = phi i64 [ 0, %.lr.ph260 ], [ %indvars.iv.next318, %116 ]
  %.0224258 = phi i32 [ 0, %.lr.ph260 ], [ %.1225, %116 ]
  %95 = getelementptr inbounds i16, ptr %93, i64 %indvars.iv317
  %96 = load i16, ptr %95, align 2, !tbaa !45
  %97 = icmp eq i16 %96, %86
  br i1 %97, label %98, label %116

98:                                               ; preds = %94
  %99 = load ptr, ptr %48, align 8, !tbaa !31
  %100 = getelementptr inbounds i16, ptr %99, i64 %indvars.iv317
  %101 = load i16, ptr %100, align 2, !tbaa !45
  %102 = icmp eq i16 %101, %89
  br i1 %102, label %103, label %108

103:                                              ; preds = %98
  %104 = load ptr, ptr %50, align 8, !tbaa !32
  %105 = getelementptr inbounds i16, ptr %104, i64 %indvars.iv317
  %106 = load i16, ptr %105, align 2, !tbaa !45
  %107 = icmp eq i16 %106, %92
  br i1 %107, label %115, label %108

108:                                              ; preds = %103, %98
  %109 = icmp eq i16 %101, %92
  br i1 %109, label %110, label %116

110:                                              ; preds = %108
  %111 = load ptr, ptr %50, align 8, !tbaa !32
  %112 = getelementptr inbounds i16, ptr %111, i64 %indvars.iv317
  %113 = load i16, ptr %112, align 2, !tbaa !45
  %114 = icmp eq i16 %113, %89
  br i1 %114, label %115, label %116

115:                                              ; preds = %110, %103
  br label %116

116:                                              ; preds = %94, %108, %110, %115
  %.1225 = phi i32 [ 1, %115 ], [ %.0224258, %110 ], [ %.0224258, %108 ], [ %.0224258, %94 ]
  %indvars.iv.next318 = add nuw nsw i64 %indvars.iv317, 1
  %exitcond321.not = icmp eq i64 %indvars.iv.next318, %wide.trip.count320
  br i1 %exitcond321.not, label %._crit_edge261, label %94, !llvm.loop !51

._crit_edge261.thread:                            ; preds = %.lr.ph264, %._crit_edge261
  %117 = load ptr, ptr %46, align 8, !tbaa !30
  %118 = zext i16 %.0222262 to i64
  %119 = getelementptr inbounds i16, ptr %117, i64 %118
  store i16 %86, ptr %119, align 2, !tbaa !45
  %120 = load ptr, ptr %48, align 8, !tbaa !31
  %121 = getelementptr inbounds i16, ptr %120, i64 %118
  store i16 %89, ptr %121, align 2, !tbaa !45
  %122 = load ptr, ptr %50, align 8, !tbaa !32
  %123 = getelementptr inbounds i16, ptr %122, i64 %118
  store i16 %92, ptr %123, align 2, !tbaa !45
  %124 = add i16 %.0222262, 1
  %.pre340 = load i16, ptr %8, align 2, !tbaa !13
  br label %125

125:                                              ; preds = %._crit_edge261.thread, %._crit_edge261
  %126 = phi i16 [ %83, %._crit_edge261 ], [ %.pre340, %._crit_edge261.thread ]
  %.1223 = phi i16 [ %.0222262, %._crit_edge261 ], [ %124, %._crit_edge261.thread ]
  %indvars.iv.next323 = add nuw nsw i64 %indvars.iv322, 1
  %127 = zext i16 %126 to i64
  %128 = icmp ult i64 %indvars.iv.next323, %127
  br i1 %128, label %.lr.ph264, label %._crit_edge265.loopexit, !llvm.loop !52

._crit_edge265.loopexit:                          ; preds = %125
  %.pre341 = load i16, ptr %7, align 8, !tbaa !5
  br label %._crit_edge265

._crit_edge265:                                   ; preds = %._crit_edge265.loopexit, %.preheader244
  %129 = phi i16 [ %73, %.preheader244 ], [ %.pre341, %._crit_edge265.loopexit ]
  %.0222.lcssa = phi i16 [ 0, %.preheader244 ], [ %.1223, %._crit_edge265.loopexit ]
  store i16 %.0222.lcssa, ptr %8, align 2, !tbaa !13
  %130 = zext i16 %129 to i64
  %131 = tail call noalias ptr @calloc(i64 noundef %130, i64 noundef 2) #7
  %.not296 = icmp eq i16 %.0222.lcssa, 0
  br i1 %.not296, label %.preheader, label %.lr.ph270

.lr.ph270:                                        ; preds = %._crit_edge265
  %132 = load ptr, ptr %46, align 8, !tbaa !30
  %133 = load ptr, ptr %22, align 8, !tbaa !19
  %134 = load ptr, ptr %24, align 8, !tbaa !20
  %135 = load ptr, ptr %48, align 8, !tbaa !31
  %136 = load ptr, ptr %50, align 8, !tbaa !32
  br label %139

.preheader.loopexit:                              ; preds = %139
  %.pre342 = load i16, ptr %7, align 8, !tbaa !5
  %137 = zext i16 %163 to i64
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %._crit_edge265
  %138 = phi i16 [ %129, %._crit_edge265 ], [ %.pre342, %.preheader.loopexit ]
  %.0228.lcssa = phi i64 [ 0, %._crit_edge265 ], [ %137, %.preheader.loopexit ]
  %.not297 = icmp eq i16 %138, 0
  %.pre343 = load ptr, ptr %27, align 8, !tbaa !21
  br i1 %.not297, label %._crit_edge275, label %.lr.ph274

139:                                              ; preds = %.lr.ph270, %139
  %indvars.iv325 = phi i64 [ 0, %.lr.ph270 ], [ %indvars.iv.next326, %139 ]
  %.0228267 = phi i16 [ 0, %.lr.ph270 ], [ %163, %139 ]
  %140 = getelementptr inbounds i16, ptr %132, i64 %indvars.iv325
  %141 = load i16, ptr %140, align 2, !tbaa !45
  %142 = zext i16 %141 to i64
  %143 = getelementptr inbounds ptr, ptr %133, i64 %142
  %144 = load ptr, ptr %143, align 8, !tbaa !26
  %145 = getelementptr inbounds i16, ptr %134, i64 %142
  %146 = load i16, ptr %145, align 2, !tbaa !45
  %147 = add i16 %146, 1
  store i16 %147, ptr %145, align 2, !tbaa !45
  %148 = zext i16 %146 to i64
  %149 = getelementptr inbounds i16, ptr %144, i64 %148
  %150 = trunc nuw i64 %indvars.iv325 to i16
  store i16 %150, ptr %149, align 2, !tbaa !45
  %151 = getelementptr inbounds i16, ptr %135, i64 %indvars.iv325
  %152 = load i16, ptr %151, align 2, !tbaa !45
  %153 = zext i16 %152 to i64
  %154 = getelementptr inbounds i16, ptr %131, i64 %153
  %155 = load i16, ptr %154, align 2, !tbaa !45
  %156 = add i16 %155, 1
  store i16 %156, ptr %154, align 2, !tbaa !45
  %157 = getelementptr inbounds i16, ptr %136, i64 %indvars.iv325
  %158 = load i16, ptr %157, align 2, !tbaa !45
  %159 = zext i16 %158 to i64
  %160 = getelementptr inbounds i16, ptr %131, i64 %159
  %161 = load i16, ptr %160, align 2, !tbaa !45
  %162 = add i16 %161, 1
  store i16 %162, ptr %160, align 2, !tbaa !45
  %163 = add i16 %.0228267, 2
  %indvars.iv.next326 = add nuw nsw i64 %indvars.iv325, 1
  %164 = load i16, ptr %8, align 2, !tbaa !13
  %165 = zext i16 %164 to i64
  %166 = icmp ult i64 %indvars.iv.next326, %165
  br i1 %166, label %139, label %.preheader.loopexit, !llvm.loop !53

.lr.ph274:                                        ; preds = %.preheader, %.lr.ph274
  %indvars.iv328 = phi i64 [ %indvars.iv.next329, %.lr.ph274 ], [ 0, %.preheader ]
  %.0227272 = phi i16 [ %170, %.lr.ph274 ], [ 0, %.preheader ]
  %167 = getelementptr inbounds i16, ptr %.pre343, i64 %indvars.iv328
  store i16 %.0227272, ptr %167, align 2, !tbaa !45
  %168 = getelementptr inbounds i16, ptr %131, i64 %indvars.iv328
  %169 = load i16, ptr %168, align 2, !tbaa !45
  %170 = add i16 %169, %.0227272
  %indvars.iv.next329 = add nuw nsw i64 %indvars.iv328, 1
  %171 = load i16, ptr %7, align 8, !tbaa !5
  %172 = zext i16 %171 to i64
  %173 = icmp ult i64 %indvars.iv.next329, %172
  br i1 %173, label %.lr.ph274, label %._crit_edge275, !llvm.loop !54

._crit_edge275:                                   ; preds = %.lr.ph274, %.preheader
  %.0227.lcssa = phi i16 [ 0, %.preheader ], [ %170, %.lr.ph274 ]
  %.3.lcssa = phi i64 [ 0, %.preheader ], [ %indvars.iv.next329, %.lr.ph274 ]
  %174 = getelementptr inbounds i16, ptr %.pre343, i64 %.3.lcssa
  store i16 %.0227.lcssa, ptr %174, align 2, !tbaa !45
  %175 = tail call noalias ptr @calloc(i64 noundef %.0228.lcssa, i64 noundef 4) #7
  %176 = getelementptr inbounds i8, ptr %7, i64 40
  store ptr %175, ptr %176, align 8, !tbaa !55
  %177 = load i16, ptr %7, align 8, !tbaa !5
  %178 = zext i16 %177 to i64
  %179 = shl nuw nsw i64 %178, 1
  tail call void @llvm.memset.p0.i64(ptr align 2 %131, i8 0, i64 %179, i1 false)
  %180 = load i16, ptr %8, align 2, !tbaa !13
  %.not298 = icmp eq i16 %180, 0
  br i1 %.not298, label %._crit_edge281, label %.lr.ph280

.lr.ph280:                                        ; preds = %._crit_edge275, %.lr.ph280
  %indvars.iv331 = phi i64 [ %indvars.iv.next332, %.lr.ph280 ], [ 0, %._crit_edge275 ]
  %181 = load ptr, ptr %48, align 8, !tbaa !31
  %182 = getelementptr inbounds i16, ptr %181, i64 %indvars.iv331
  %183 = load i16, ptr %182, align 2, !tbaa !45
  %184 = load ptr, ptr %50, align 8, !tbaa !32
  %185 = getelementptr inbounds i16, ptr %184, i64 %indvars.iv331
  %186 = load i16, ptr %185, align 2, !tbaa !45
  %187 = load ptr, ptr %176, align 8, !tbaa !55
  %188 = load ptr, ptr %27, align 8, !tbaa !21
  %189 = zext i16 %183 to i64
  %190 = getelementptr inbounds i16, ptr %188, i64 %189
  %191 = load i16, ptr %190, align 2, !tbaa !45
  %192 = zext i16 %191 to i64
  %193 = getelementptr inbounds i16, ptr %131, i64 %189
  %194 = load i16, ptr %193, align 2, !tbaa !45
  %195 = add i16 %194, 1
  store i16 %195, ptr %193, align 2, !tbaa !45
  %196 = zext i16 %194 to i64
  %197 = getelementptr inbounds %struct.c1c2_t, ptr %187, i64 %192
  %198 = getelementptr inbounds %struct.c1c2_t, ptr %197, i64 %196
  %199 = trunc nuw i64 %indvars.iv331 to i16
  %200 = tail call i32 @c1c2(i16 noundef zeroext %199, i16 noundef zeroext %186)
  store i32 %200, ptr %198, align 2
  %201 = load ptr, ptr %176, align 8, !tbaa !55
  %202 = load ptr, ptr %27, align 8, !tbaa !21
  %203 = zext i16 %186 to i64
  %204 = getelementptr inbounds i16, ptr %202, i64 %203
  %205 = load i16, ptr %204, align 2, !tbaa !45
  %206 = zext i16 %205 to i64
  %207 = getelementptr inbounds i16, ptr %131, i64 %203
  %208 = load i16, ptr %207, align 2, !tbaa !45
  %209 = add i16 %208, 1
  store i16 %209, ptr %207, align 2, !tbaa !45
  %210 = zext i16 %208 to i64
  %211 = getelementptr inbounds %struct.c1c2_t, ptr %201, i64 %206
  %212 = getelementptr inbounds %struct.c1c2_t, ptr %211, i64 %210
  %213 = tail call i32 @c1c2(i16 noundef zeroext %199, i16 noundef zeroext %183)
  store i32 %213, ptr %212, align 2
  %indvars.iv.next332 = add nuw nsw i64 %indvars.iv331, 1
  %214 = load i16, ptr %8, align 2, !tbaa !13
  %215 = zext i16 %214 to i64
  %216 = icmp ult i64 %indvars.iv.next332, %215
  br i1 %216, label %.lr.ph280, label %._crit_edge281.loopexit, !llvm.loop !56

._crit_edge281.loopexit:                          ; preds = %.lr.ph280
  %.pre344 = load i16, ptr %7, align 8, !tbaa !5
  br label %._crit_edge281

._crit_edge281:                                   ; preds = %._crit_edge281.loopexit, %._crit_edge275
  %217 = phi i16 [ %.pre344, %._crit_edge281.loopexit ], [ %177, %._crit_edge275 ]
  tail call void @free(ptr noundef %131) #8
  %.not299 = icmp eq i16 %217, 0
  br i1 %.not299, label %._crit_edge289, label %.lr.ph288.preheader

.lr.ph288.preheader:                              ; preds = %._crit_edge281
  %.pre345 = load ptr, ptr %24, align 8, !tbaa !20
  br label %.lr.ph288

.lr.ph288:                                        ; preds = %.lr.ph288.preheader, %._crit_edge285
  %218 = phi ptr [ %.pre345, %.lr.ph288.preheader ], [ %229, %._crit_edge285 ]
  %indvars.iv337 = phi i64 [ 0, %.lr.ph288.preheader ], [ %indvars.iv.next338, %._crit_edge285 ]
  %219 = load ptr, ptr %29, align 8, !tbaa !22
  %220 = getelementptr inbounds i16, ptr %219, i64 %indvars.iv337
  store i16 0, ptr %220, align 2, !tbaa !45
  %221 = load ptr, ptr %31, align 8, !tbaa !23
  %222 = getelementptr inbounds i16, ptr %221, i64 %indvars.iv337
  store i16 0, ptr %222, align 2, !tbaa !45
  %223 = getelementptr inbounds i16, ptr %218, i64 %indvars.iv337
  %224 = load i16, ptr %223, align 2, !tbaa !45
  %.not300 = icmp eq i16 %224, 0
  br i1 %.not300, label %._crit_edge285, label %.lr.ph284.preheader

.lr.ph284.preheader:                              ; preds = %.lr.ph288
  %225 = trunc nuw i64 %indvars.iv337 to i16
  %226 = trunc nuw i64 %indvars.iv337 to i16
  %227 = trunc nuw i64 %indvars.iv337 to i16
  %228 = trunc nuw i64 %indvars.iv337 to i16
  br label %.lr.ph284

._crit_edge285:                                   ; preds = %251, %.lr.ph288
  %229 = phi ptr [ %218, %.lr.ph288 ], [ %252, %251 ]
  %indvars.iv.next338 = add nuw nsw i64 %indvars.iv337, 1
  %230 = load i16, ptr %7, align 8, !tbaa !5
  %231 = zext i16 %230 to i64
  %232 = icmp ult i64 %indvars.iv.next338, %231
  br i1 %232, label %.lr.ph288, label %._crit_edge289, !llvm.loop !57

.lr.ph284:                                        ; preds = %.lr.ph284.preheader, %251
  %indvars.iv334 = phi i64 [ 0, %.lr.ph284.preheader ], [ %indvars.iv.next335, %251 ]
  %233 = load ptr, ptr %22, align 8, !tbaa !19
  %234 = getelementptr inbounds ptr, ptr %233, i64 %indvars.iv337
  %235 = load ptr, ptr %234, align 8, !tbaa !26
  %236 = getelementptr inbounds i16, ptr %235, i64 %indvars.iv334
  %237 = load i16, ptr %236, align 2, !tbaa !45
  %238 = load ptr, ptr %48, align 8, !tbaa !31
  %239 = zext i16 %237 to i64
  %240 = getelementptr inbounds i16, ptr %238, i64 %239
  %241 = load i16, ptr %240, align 2, !tbaa !45
  %.not = icmp eq i16 %241, %4
  %.not237 = icmp eq i16 %241, %5
  %or.cond = or i1 %.not, %.not237
  br i1 %or.cond, label %243, label %242

242:                                              ; preds = %.lr.ph284
  tail call void @add_nodes_dependant(ptr noundef nonnull %7, i16 noundef zeroext %225, i16 noundef zeroext %241)
  br label %243

243:                                              ; preds = %242, %.lr.ph284
  %244 = load ptr, ptr %50, align 8, !tbaa !32
  %245 = getelementptr inbounds i16, ptr %244, i64 %239
  %246 = load i16, ptr %245, align 2, !tbaa !45
  %.not238 = icmp eq i16 %246, %4
  %.not239 = icmp eq i16 %246, %5
  %or.cond242 = or i1 %.not238, %.not239
  br i1 %or.cond242, label %248, label %247

247:                                              ; preds = %243
  tail call void @add_nodes_dependant(ptr noundef nonnull %7, i16 noundef zeroext %226, i16 noundef zeroext %246)
  br label %248

248:                                              ; preds = %247, %243
  br i1 %or.cond, label %250, label %249

249:                                              ; preds = %248
  tail call void @add_nodes_left_dependant(ptr noundef nonnull %7, i16 noundef zeroext %227, i16 noundef zeroext %241)
  br label %251

250:                                              ; preds = %248
  tail call void @add_nodes_left_dependant(ptr noundef nonnull %7, i16 noundef zeroext %228, i16 noundef zeroext %246)
  br label %251

251:                                              ; preds = %250, %249
  %indvars.iv.next335 = add nuw nsw i64 %indvars.iv334, 1
  %252 = load ptr, ptr %24, align 8, !tbaa !20
  %253 = getelementptr inbounds i16, ptr %252, i64 %indvars.iv337
  %254 = load i16, ptr %253, align 2, !tbaa !45
  %255 = zext i16 %254 to i64
  %256 = icmp ult i64 %indvars.iv.next335, %255
  br i1 %256, label %.lr.ph284, label %._crit_edge285, !llvm.loop !58

._crit_edge289:                                   ; preds = %._crit_edge285, %._crit_edge281
  ret ptr %7
}

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @calloc(i64 noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @set_nodes_pullup(ptr noundef, i16 noundef zeroext, i32 noundef) local_unnamed_addr #3

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @c1c2(i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @add_nodes_dependant(ptr noundef, i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @add_nodes_left_dependant(ptr noundef, i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #3

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nofree nounwind willreturn allockind("alloc,zeroed") allocsize(0,1) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { inlinehint 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind allocsize(0) }
attributes #7 = { nounwind allocsize(0,1) }
attributes #8 = { 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 0}
!6 = !{!"", !7, i64 0, !7, i64 2, !7, i64 4, !7, i64 6, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !11, i64 136, !10, i64 152, !11, i64 160, !10, i64 176, !10, i64 184, !7, i64 192, !10, i64 200, !12, i64 208}
!7 = !{!"short", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"", !10, i64 0, !7, i64 8}
!12 = !{!"int", !8, i64 0}
!13 = !{!6, !7, i64 2}
!14 = !{!6, !7, i64 4}
!15 = !{!6, !7, i64 6}
!16 = !{!6, !10, i64 8}
!17 = !{!6, !10, i64 16}
!18 = !{!6, !10, i64 24}
!19 = !{!6, !10, i64 32}
!20 = !{!6, !10, i64 48}
!21 = !{!6, !10, i64 56}
!22 = !{!6, !10, i64 64}
!23 = !{!6, !10, i64 72}
!24 = !{!6, !10, i64 80}
!25 = !{!6, !10, i64 88}
!26 = !{!10, !10, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = !{!6, !10, i64 96}
!31 = !{!6, !10, i64 104}
!32 = !{!6, !10, i64 112}
!33 = !{!6, !10, i64 120}
!34 = !{!6, !10, i64 128}
!35 = !{!6, !10, i64 152}
!36 = !{!6, !10, i64 176}
!37 = !{!6, !10, i64 184}
!38 = !{!6, !10, i64 200}
!39 = !{!6, !10, i64 136}
!40 = !{!6, !7, i64 144}
!41 = !{!6, !10, i64 160}
!42 = !{!6, !7, i64 168}
!43 = distinct !{!43, !28}
!44 = !{!12, !12, i64 0}
!45 = !{!7, !7, i64 0}
!46 = distinct !{!46, !28}
!47 = !{!48, !12, i64 0}
!48 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8}
!49 = !{!48, !12, i64 4}
!50 = !{!48, !12, i64 8}
!51 = distinct !{!51, !28}
!52 = distinct !{!52, !28}
!53 = distinct !{!53, !28}
!54 = distinct !{!54, !28}
!55 = !{!6, !10, i64 40}
!56 = distinct !{!56, !28}
!57 = distinct !{!57, !28}
!58 = distinct !{!58, !28}


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