; LLVM IR from whoiswelliton/Computer_Engineering_UTFPR-PB :: Embedded_Systems/TIVA Connected TM4C1294XL Projects/01 - lwIP_HTTPServer_on_TIVA (write)

; 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.tcp_pcb = type { %struct.ip4_addr, %struct.ip4_addr, i8, i8, i8, i8, ptr, ptr, i32, i8, i16, i16, i16, i8, i8, i8, i32, i32, i16, i16, i32, i16, i16, i32, i32, i16, i16, i16, i8, i8, i32, i16, i16, i32, i32, i32, i32, i32, i16, i16, i16, i16, i16, i16, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8 }
%struct.ip4_addr = type { i32 }
%struct.tcp_seg = type { ptr, ptr, i16, i8, ptr }
%struct.pbuf = type { ptr, ptr, i16, i16, i8, i8, i8, i8 }
%struct.pbuf_rom = type { ptr, ptr }
%struct.tcp_hdr = type { i16, i16, i32, i32, i16, i16, i16, i16 }

@.str = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [182 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local signext i8 @tcp_write(ptr noundef %0, ptr noundef %1, i16 noundef zeroext %2, i8 noundef zeroext %3) #0 {
  %5 = alloca i8, align 1
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i16, align 2
  %9 = alloca i8, align 1
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i16, align 2
  %16 = alloca i16, align 2
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i16, align 2
  %20 = alloca i16, align 2
  %21 = alloca i16, align 2
  %22 = alloca i8, align 1
  %23 = alloca i16, align 2
  %24 = alloca i32, align 4
  %25 = alloca i16, align 2
  %26 = alloca i16, align 2
  %27 = alloca i16, align 2
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i16, align 2
  %31 = alloca i16, align 2
  %32 = alloca i16, align 2
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i16 %2, ptr %8, align 2, !tbaa !9
  store i8 %3, ptr %9, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  store ptr null, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  store ptr null, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #4
  store i16 0, ptr %15, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #4
  store i8 0, ptr %18, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #4
  store i16 0, ptr %19, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #4
  store i16 0, ptr %20, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #4
  store i16 0, ptr %21, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #4
  br label %36

36:                                               ; preds = %4
  %37 = load ptr, ptr %6, align 8, !tbaa !5
  %38 = icmp ne ptr %37, null
  br i1 %38, label %44, label %39

39:                                               ; preds = %36
  br label %40

40:                                               ; preds = %39
  %41 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 414, ptr noundef @.str.2)
  br label %42

42:                                               ; preds = %40
  br label %43

43:                                               ; preds = %42
  store i8 -16, ptr %5, align 1
  store i32 1, ptr %24, align 4
  br label %926

44:                                               ; preds = %36
  br label %45

45:                                               ; preds = %44
  br label %46

46:                                               ; preds = %45
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.tcp_pcb, ptr %47, i32 0, i32 22
  %49 = load i16, ptr %48, align 2, !tbaa !12
  %50 = zext i16 %49 to i32
  %51 = load ptr, ptr %6, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.tcp_pcb, ptr %51, i32 0, i32 39
  %53 = load i16, ptr %52, align 2, !tbaa !16
  %54 = zext i16 %53 to i32
  %55 = sdiv i32 %54, 2
  %56 = icmp slt i32 %50, %55
  br i1 %56, label %57, label %62

57:                                               ; preds = %46
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.tcp_pcb, ptr %58, i32 0, i32 22
  %60 = load i16, ptr %59, align 2, !tbaa !12
  %61 = zext i16 %60 to i32
  br label %68

62:                                               ; preds = %46
  %63 = load ptr, ptr %6, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.tcp_pcb, ptr %63, i32 0, i32 39
  %65 = load i16, ptr %64, align 2, !tbaa !16
  %66 = zext i16 %65 to i32
  %67 = sdiv i32 %66, 2
  br label %68

68:                                               ; preds = %62, %57
  %69 = phi i32 [ %61, %57 ], [ %67, %62 ]
  %70 = trunc i32 %69 to i16
  store i16 %70, ptr %23, align 2, !tbaa !9
  %71 = load i16, ptr %23, align 2, !tbaa !9
  %72 = zext i16 %71 to i32
  %73 = icmp ne i32 %72, 0
  br i1 %73, label %74, label %77

74:                                               ; preds = %68
  %75 = load i16, ptr %23, align 2, !tbaa !9
  %76 = zext i16 %75 to i32
  br label %82

77:                                               ; preds = %68
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.tcp_pcb, ptr %78, i32 0, i32 22
  %80 = load i16, ptr %79, align 2, !tbaa !12
  %81 = zext i16 %80 to i32
  br label %82

82:                                               ; preds = %77, %74
  %83 = phi i32 [ %76, %74 ], [ %81, %77 ]
  %84 = trunc i32 %83 to i16
  store i16 %84, ptr %23, align 2, !tbaa !9
  br label %85

85:                                               ; preds = %82
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = icmp ne ptr %86, null
  br i1 %87, label %93, label %88

88:                                               ; preds = %85
  br label %89

89:                                               ; preds = %88
  %90 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.3, i32 noundef 430, ptr noundef @.str.2)
  br label %91

91:                                               ; preds = %89
  br label %92

92:                                               ; preds = %91
  store i8 -16, ptr %5, align 1
  store i32 1, ptr %24, align 4
  br label %926

93:                                               ; preds = %85
  br label %94

94:                                               ; preds = %93
  br label %95

95:                                               ; preds = %94
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  %97 = load i16, ptr %8, align 2, !tbaa !9
  %98 = call signext i8 @tcp_write_checks(ptr noundef %96, i16 noundef zeroext %97)
  store i8 %98, ptr %22, align 1, !tbaa !11
  %99 = load i8, ptr %22, align 1, !tbaa !11
  %100 = sext i8 %99 to i32
  %101 = icmp ne i32 %100, 0
  br i1 %101, label %102, label %104

102:                                              ; preds = %95
  %103 = load i8, ptr %22, align 1, !tbaa !11
  store i8 %103, ptr %5, align 1
  store i32 1, ptr %24, align 4
  br label %926

104:                                              ; preds = %95
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.tcp_pcb, ptr %105, i32 0, i32 41
  %107 = load i16, ptr %106, align 2, !tbaa !17
  store i16 %107, ptr %16, align 2, !tbaa !9
  store i8 0, ptr %17, align 1, !tbaa !11
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.tcp_pcb, ptr %108, i32 0, i32 44
  %110 = load ptr, ptr %109, align 8, !tbaa !18
  %111 = icmp ne ptr %110, null
  br i1 %111, label %112, label %440

112:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #4
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.tcp_pcb, ptr %113, i32 0, i32 44
  %115 = load ptr, ptr %114, align 8, !tbaa !18
  store ptr %115, ptr %11, align 8, !tbaa !5
  br label %116

116:                                              ; preds = %122, %112
  %117 = load ptr, ptr %11, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.tcp_seg, ptr %117, i32 0, i32 0
  %119 = load ptr, ptr %118, align 8, !tbaa !19
  %120 = icmp ne ptr %119, null
  br i1 %120, label %121, label %126

121:                                              ; preds = %116
  br label %122

122:                                              ; preds = %121
  %123 = load ptr, ptr %11, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.tcp_seg, ptr %123, i32 0, i32 0
  %125 = load ptr, ptr %124, align 8, !tbaa !19
  store ptr %125, ptr %11, align 8, !tbaa !5
  br label %116, !llvm.loop !21

126:                                              ; preds = %116
  %127 = load ptr, ptr %11, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.tcp_seg, ptr %127, i32 0, i32 3
  %129 = load i8, ptr %128, align 2, !tbaa !23
  %130 = zext i8 %129 to i32
  %131 = and i32 %130, 1
  %132 = icmp ne i32 %131, 0
  %133 = zext i1 %132 to i64
  %134 = select i1 %132, i32 4, i32 0
  %135 = load ptr, ptr %11, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.tcp_seg, ptr %135, i32 0, i32 3
  %137 = load i8, ptr %136, align 2, !tbaa !23
  %138 = zext i8 %137 to i32
  %139 = and i32 %138, 2
  %140 = icmp ne i32 %139, 0
  %141 = zext i1 %140 to i64
  %142 = select i1 %140, i32 0, i32 0
  %143 = add nsw i32 %134, %142
  %144 = load ptr, ptr %11, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.tcp_seg, ptr %144, i32 0, i32 3
  %146 = load i8, ptr %145, align 2, !tbaa !23
  %147 = zext i8 %146 to i32
  %148 = and i32 %147, 8
  %149 = icmp ne i32 %148, 0
  %150 = zext i1 %149 to i64
  %151 = select i1 %149, i32 0, i32 0
  %152 = add nsw i32 %143, %151
  %153 = load ptr, ptr %11, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.tcp_seg, ptr %153, i32 0, i32 3
  %155 = load i8, ptr %154, align 2, !tbaa !23
  %156 = zext i8 %155 to i32
  %157 = and i32 %156, 16
  %158 = icmp ne i32 %157, 0
  %159 = zext i1 %158 to i64
  %160 = select i1 %158, i32 0, i32 0
  %161 = add nsw i32 %152, %160
  %162 = trunc i32 %161 to i16
  store i16 %162, ptr %26, align 2, !tbaa !9
  br label %163

163:                                              ; preds = %126
  %164 = load i16, ptr %23, align 2, !tbaa !9
  %165 = zext i16 %164 to i32
  %166 = load ptr, ptr %11, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.tcp_seg, ptr %166, i32 0, i32 2
  %168 = load i16, ptr %167, align 8, !tbaa !24
  %169 = zext i16 %168 to i32
  %170 = load i16, ptr %26, align 2, !tbaa !9
  %171 = zext i16 %170 to i32
  %172 = add nsw i32 %169, %171
  %173 = icmp sge i32 %165, %172
  br i1 %173, label %179, label %174

174:                                              ; preds = %163
  br label %175

175:                                              ; preds = %174
  %176 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.4, i32 noundef 486, ptr noundef @.str.2)
  br label %177

177:                                              ; preds = %175
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178, %163
  br label %180

180:                                              ; preds = %179
  br label %181

181:                                              ; preds = %180
  %182 = load i16, ptr %23, align 2, !tbaa !9
  %183 = zext i16 %182 to i32
  %184 = load ptr, ptr %11, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.tcp_seg, ptr %184, i32 0, i32 2
  %186 = load i16, ptr %185, align 8, !tbaa !24
  %187 = zext i16 %186 to i32
  %188 = load i16, ptr %26, align 2, !tbaa !9
  %189 = zext i16 %188 to i32
  %190 = add nsw i32 %187, %189
  %191 = sub nsw i32 %183, %190
  %192 = trunc i32 %191 to i16
  store i16 %192, ptr %25, align 2, !tbaa !9
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.tcp_pcb, ptr %193, i32 0, i32 42
  %195 = load i16, ptr %194, align 8, !tbaa !25
  store i16 %195, ptr %19, align 2, !tbaa !9
  %196 = load i16, ptr %19, align 2, !tbaa !9
  %197 = zext i16 %196 to i32
  %198 = icmp sgt i32 %197, 0
  br i1 %198, label %199, label %269

199:                                              ; preds = %181
  br label %200

200:                                              ; preds = %199
  %201 = load i16, ptr %19, align 2, !tbaa !9
  %202 = zext i16 %201 to i32
  %203 = load i16, ptr %25, align 2, !tbaa !9
  %204 = zext i16 %203 to i32
  %205 = icmp sle i32 %202, %204
  br i1 %205, label %211, label %206

206:                                              ; preds = %200
  br label %207

207:                                              ; preds = %206
  %208 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.5, i32 noundef 504, ptr noundef @.str.2)
  br label %209

209:                                              ; preds = %207
  br label %210

210:                                              ; preds = %209
  br label %211

211:                                              ; preds = %210, %200
  br label %212

212:                                              ; preds = %211
  br label %213

213:                                              ; preds = %212
  %214 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %214, ptr %12, align 8, !tbaa !5
  %215 = load i16, ptr %25, align 2, !tbaa !9
  %216 = zext i16 %215 to i32
  %217 = load i16, ptr %19, align 2, !tbaa !9
  %218 = zext i16 %217 to i32
  %219 = load i16, ptr %8, align 2, !tbaa !9
  %220 = zext i16 %219 to i32
  %221 = icmp slt i32 %218, %220
  br i1 %221, label %222, label %225

222:                                              ; preds = %213
  %223 = load i16, ptr %19, align 2, !tbaa !9
  %224 = zext i16 %223 to i32
  br label %228

225:                                              ; preds = %213
  %226 = load i16, ptr %8, align 2, !tbaa !9
  %227 = zext i16 %226 to i32
  br label %228

228:                                              ; preds = %225, %222
  %229 = phi i32 [ %224, %222 ], [ %227, %225 ]
  %230 = icmp slt i32 %216, %229
  br i1 %230, label %231, label %234

231:                                              ; preds = %228
  %232 = load i16, ptr %25, align 2, !tbaa !9
  %233 = zext i16 %232 to i32
  br label %248

234:                                              ; preds = %228
  %235 = load i16, ptr %19, align 2, !tbaa !9
  %236 = zext i16 %235 to i32
  %237 = load i16, ptr %8, align 2, !tbaa !9
  %238 = zext i16 %237 to i32
  %239 = icmp slt i32 %236, %238
  br i1 %239, label %240, label %243

240:                                              ; preds = %234
  %241 = load i16, ptr %19, align 2, !tbaa !9
  %242 = zext i16 %241 to i32
  br label %246

243:                                              ; preds = %234
  %244 = load i16, ptr %8, align 2, !tbaa !9
  %245 = zext i16 %244 to i32
  br label %246

246:                                              ; preds = %243, %240
  %247 = phi i32 [ %242, %240 ], [ %245, %243 ]
  br label %248

248:                                              ; preds = %246, %231
  %249 = phi i32 [ %233, %231 ], [ %247, %246 ]
  %250 = trunc i32 %249 to i16
  store i16 %250, ptr %20, align 2, !tbaa !9
  %251 = load i16, ptr %20, align 2, !tbaa !9
  %252 = zext i16 %251 to i32
  %253 = load i16, ptr %15, align 2, !tbaa !9
  %254 = zext i16 %253 to i32
  %255 = add nsw i32 %254, %252
  %256 = trunc i32 %255 to i16
  store i16 %256, ptr %15, align 2, !tbaa !9
  %257 = load i16, ptr %20, align 2, !tbaa !9
  %258 = zext i16 %257 to i32
  %259 = load i16, ptr %19, align 2, !tbaa !9
  %260 = zext i16 %259 to i32
  %261 = sub nsw i32 %260, %258
  %262 = trunc i32 %261 to i16
  store i16 %262, ptr %19, align 2, !tbaa !9
  %263 = load i16, ptr %20, align 2, !tbaa !9
  %264 = zext i16 %263 to i32
  %265 = load i16, ptr %25, align 2, !tbaa !9
  %266 = zext i16 %265 to i32
  %267 = sub nsw i32 %266, %264
  %268 = trunc i32 %267 to i16
  store i16 %268, ptr %25, align 2, !tbaa !9
  br label %269

269:                                              ; preds = %248, %181
  br label %270

270:                                              ; preds = %269
  %271 = load i16, ptr %19, align 2, !tbaa !9
  %272 = zext i16 %271 to i32
  %273 = icmp eq i32 %272, 0
  br i1 %273, label %285, label %274

274:                                              ; preds = %270
  %275 = load i16, ptr %15, align 2, !tbaa !9
  %276 = zext i16 %275 to i32
  %277 = load i16, ptr %8, align 2, !tbaa !9
  %278 = zext i16 %277 to i32
  %279 = icmp eq i32 %276, %278
  br i1 %279, label %285, label %280

280:                                              ; preds = %274
  br label %281

281:                                              ; preds = %280
  %282 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.6, i32 noundef 512, ptr noundef @.str.2)
  br label %283

283:                                              ; preds = %281
  br label %284

284:                                              ; preds = %283
  br label %285

285:                                              ; preds = %284, %274, %270
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286
  %288 = load i16, ptr %15, align 2, !tbaa !9
  %289 = zext i16 %288 to i32
  %290 = load i16, ptr %8, align 2, !tbaa !9
  %291 = zext i16 %290 to i32
  %292 = icmp slt i32 %289, %291
  br i1 %292, label %293, label %436

293:                                              ; preds = %287
  %294 = load i16, ptr %25, align 2, !tbaa !9
  %295 = zext i16 %294 to i32
  %296 = icmp sgt i32 %295, 0
  br i1 %296, label %297, label %436

297:                                              ; preds = %293
  %298 = load ptr, ptr %11, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.tcp_seg, ptr %298, i32 0, i32 2
  %300 = load i16, ptr %299, align 8, !tbaa !24
  %301 = zext i16 %300 to i32
  %302 = icmp sgt i32 %301, 0
  br i1 %302, label %303, label %436

303:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #4
  %304 = load i16, ptr %25, align 2, !tbaa !9
  %305 = zext i16 %304 to i32
  %306 = load i16, ptr %8, align 2, !tbaa !9
  %307 = zext i16 %306 to i32
  %308 = load i16, ptr %15, align 2, !tbaa !9
  %309 = zext i16 %308 to i32
  %310 = sub nsw i32 %307, %309
  %311 = icmp slt i32 %305, %310
  br i1 %311, label %312, label %315

312:                                              ; preds = %303
  %313 = load i16, ptr %25, align 2, !tbaa !9
  %314 = zext i16 %313 to i32
  br label %321

315:                                              ; preds = %303
  %316 = load i16, ptr %8, align 2, !tbaa !9
  %317 = zext i16 %316 to i32
  %318 = load i16, ptr %15, align 2, !tbaa !9
  %319 = zext i16 %318 to i32
  %320 = sub nsw i32 %317, %319
  br label %321

321:                                              ; preds = %315, %312
  %322 = phi i32 [ %314, %312 ], [ %320, %315 ]
  %323 = trunc i32 %322 to i16
  store i16 %323, ptr %27, align 2, !tbaa !9
  %324 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %324, ptr %12, align 8, !tbaa !5
  %325 = load i8, ptr %9, align 1, !tbaa !11
  %326 = zext i8 %325 to i32
  %327 = and i32 %326, 1
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %329, label %355

329:                                              ; preds = %321
  %330 = load i16, ptr %27, align 2, !tbaa !9
  %331 = load i16, ptr %25, align 2, !tbaa !9
  %332 = load ptr, ptr %6, align 8, !tbaa !5
  %333 = load i8, ptr %9, align 1, !tbaa !11
  %334 = call ptr @tcp_pbuf_prealloc(i32 noundef 0, i16 noundef zeroext %330, i16 noundef zeroext %331, ptr noundef %19, ptr noundef %332, i8 noundef zeroext %333, i8 noundef zeroext 1)
  store ptr %334, ptr %10, align 8, !tbaa !5
  %335 = icmp eq ptr %334, null
  br i1 %335, label %336, label %337

336:                                              ; preds = %329
  store i32 25, ptr %24, align 4
  br label %433

337:                                              ; preds = %329
  %338 = load ptr, ptr %10, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.pbuf, ptr %338, i32 0, i32 1
  %340 = load ptr, ptr %339, align 8, !tbaa !26
  %341 = load ptr, ptr %7, align 8, !tbaa !5
  %342 = load i16, ptr %15, align 2, !tbaa !9
  %343 = zext i16 %342 to i32
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i8, ptr %341, i64 %344
  %346 = load i16, ptr %27, align 2, !tbaa !9
  %347 = zext i16 %346 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %340, ptr align 1 %345, i64 %347, i1 false)
  %348 = load ptr, ptr %10, align 8, !tbaa !5
  %349 = call zeroext i16 @pbuf_clen(ptr noundef %348)
  %350 = zext i16 %349 to i32
  %351 = load i16, ptr %16, align 2, !tbaa !9
  %352 = zext i16 %351 to i32
  %353 = add nsw i32 %352, %350
  %354 = trunc i32 %353 to i16
  store i16 %354, ptr %16, align 2, !tbaa !9
  br label %426

355:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %356 = load ptr, ptr %11, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.tcp_seg, ptr %356, i32 0, i32 1
  %358 = load ptr, ptr %357, align 8, !tbaa !28
  store ptr %358, ptr %28, align 8, !tbaa !5
  br label %359

359:                                              ; preds = %365, %355
  %360 = load ptr, ptr %28, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.pbuf, ptr %360, i32 0, i32 0
  %362 = load ptr, ptr %361, align 8, !tbaa !29
  %363 = icmp ne ptr %362, null
  br i1 %363, label %364, label %369

364:                                              ; preds = %359
  br label %365

365:                                              ; preds = %364
  %366 = load ptr, ptr %28, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.pbuf, ptr %366, i32 0, i32 0
  %368 = load ptr, ptr %367, align 8, !tbaa !29
  store ptr %368, ptr %28, align 8, !tbaa !5
  br label %359, !llvm.loop !30

369:                                              ; preds = %359
  %370 = load ptr, ptr %28, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.pbuf, ptr %370, i32 0, i32 4
  %372 = load i8, ptr %371, align 4, !tbaa !31
  %373 = zext i8 %372 to i32
  %374 = and i32 %373, 192
  %375 = icmp eq i32 %374, 0
  br i1 %375, label %376, label %402

376:                                              ; preds = %369
  %377 = load ptr, ptr %28, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.pbuf, ptr %377, i32 0, i32 1
  %379 = load ptr, ptr %378, align 8, !tbaa !26
  %380 = load ptr, ptr %28, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.pbuf, ptr %380, i32 0, i32 3
  %382 = load i16, ptr %381, align 2, !tbaa !32
  %383 = zext i16 %382 to i32
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i8, ptr %379, i64 %384
  %386 = load ptr, ptr %7, align 8, !tbaa !5
  %387 = icmp eq ptr %385, %386
  br i1 %387, label %388, label %402

388:                                              ; preds = %376
  br label %389

389:                                              ; preds = %388
  %390 = load i16, ptr %15, align 2, !tbaa !9
  %391 = zext i16 %390 to i32
  %392 = icmp eq i32 %391, 0
  br i1 %392, label %398, label %393

393:                                              ; preds = %389
  br label %394

394:                                              ; preds = %393
  %395 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.7, i32 noundef 561, ptr noundef @.str.2)
  br label %396

396:                                              ; preds = %394
  br label %397

397:                                              ; preds = %396
  br label %398

398:                                              ; preds = %397, %389
  br label %399

399:                                              ; preds = %398
  br label %400

400:                                              ; preds = %399
  %401 = load i16, ptr %27, align 2, !tbaa !9
  store i16 %401, ptr %21, align 2, !tbaa !9
  br label %422

402:                                              ; preds = %376, %369
  %403 = load i16, ptr %27, align 2, !tbaa !9
  %404 = call ptr @pbuf_alloc(i32 noundef 0, i16 noundef zeroext %403, i32 noundef 1)
  store ptr %404, ptr %10, align 8, !tbaa !5
  %405 = icmp eq ptr %404, null
  br i1 %405, label %406, label %407

406:                                              ; preds = %402
  store i32 25, ptr %24, align 4
  br label %423

407:                                              ; preds = %402
  %408 = load ptr, ptr %7, align 8, !tbaa !5
  %409 = load i16, ptr %15, align 2, !tbaa !9
  %410 = zext i16 %409 to i32
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds i8, ptr %408, i64 %411
  %413 = load ptr, ptr %10, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.pbuf_rom, ptr %413, i32 0, i32 1
  store ptr %412, ptr %414, align 8, !tbaa !33
  %415 = load ptr, ptr %10, align 8, !tbaa !5
  %416 = call zeroext i16 @pbuf_clen(ptr noundef %415)
  %417 = zext i16 %416 to i32
  %418 = load i16, ptr %16, align 2, !tbaa !9
  %419 = zext i16 %418 to i32
  %420 = add nsw i32 %419, %417
  %421 = trunc i32 %420 to i16
  store i16 %421, ptr %16, align 2, !tbaa !9
  br label %422

422:                                              ; preds = %407, %400
  store i32 0, ptr %24, align 4
  br label %423

423:                                              ; preds = %422, %406
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  %424 = load i32, ptr %24, align 4
  switch i32 %424, label %433 [
    i32 0, label %425
  ]

425:                                              ; preds = %423
  br label %426

426:                                              ; preds = %425, %337
  %427 = load i16, ptr %27, align 2, !tbaa !9
  %428 = zext i16 %427 to i32
  %429 = load i16, ptr %15, align 2, !tbaa !9
  %430 = zext i16 %429 to i32
  %431 = add nsw i32 %430, %428
  %432 = trunc i32 %431 to i16
  store i16 %432, ptr %15, align 2, !tbaa !9
  store i32 0, ptr %24, align 4
  br label %433

433:                                              ; preds = %426, %423, %336
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #4
  %434 = load i32, ptr %24, align 4
  switch i32 %434, label %437 [
    i32 0, label %435
  ]

435:                                              ; preds = %433
  br label %436

436:                                              ; preds = %435, %297, %293, %287
  store i32 0, ptr %24, align 4
  br label %437

437:                                              ; preds = %436, %433
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #4
  %438 = load i32, ptr %24, align 4
  switch i32 %438, label %926 [
    i32 0, label %439
    i32 25, label %878
  ]

439:                                              ; preds = %437
  br label %455

440:                                              ; preds = %104
  br label %441

441:                                              ; preds = %440
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.tcp_pcb, ptr %442, i32 0, i32 42
  %444 = load i16, ptr %443, align 8, !tbaa !25
  %445 = zext i16 %444 to i32
  %446 = icmp eq i32 %445, 0
  br i1 %446, label %452, label %447

447:                                              ; preds = %441
  br label %448

448:                                              ; preds = %447
  %449 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.8, i32 noundef 587, ptr noundef @.str.2)
  br label %450

450:                                              ; preds = %448
  br label %451

451:                                              ; preds = %450
  br label %452

452:                                              ; preds = %451, %441
  br label %453

453:                                              ; preds = %452
  br label %454

454:                                              ; preds = %453
  br label %455

455:                                              ; preds = %454, %439
  br label %456

456:                                              ; preds = %636, %455
  %457 = load i16, ptr %15, align 2, !tbaa !9
  %458 = zext i16 %457 to i32
  %459 = load i16, ptr %8, align 2, !tbaa !9
  %460 = zext i16 %459 to i32
  %461 = icmp slt i32 %458, %460
  br i1 %461, label %462, label %637

462:                                              ; preds = %456
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #4
  %463 = load i16, ptr %8, align 2, !tbaa !9
  %464 = zext i16 %463 to i32
  %465 = load i16, ptr %15, align 2, !tbaa !9
  %466 = zext i16 %465 to i32
  %467 = sub nsw i32 %464, %466
  %468 = trunc i32 %467 to i16
  store i16 %468, ptr %30, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #4
  %469 = load i16, ptr %23, align 2, !tbaa !9
  %470 = zext i16 %469 to i32
  %471 = load i8, ptr %17, align 1, !tbaa !11
  %472 = zext i8 %471 to i32
  %473 = sub nsw i32 %470, %472
  %474 = trunc i32 %473 to i16
  store i16 %474, ptr %31, align 2, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %32) #4
  %475 = load i16, ptr %30, align 2, !tbaa !9
  %476 = zext i16 %475 to i32
  %477 = load i16, ptr %31, align 2, !tbaa !9
  %478 = zext i16 %477 to i32
  %479 = icmp slt i32 %476, %478
  br i1 %479, label %480, label %483

480:                                              ; preds = %462
  %481 = load i16, ptr %30, align 2, !tbaa !9
  %482 = zext i16 %481 to i32
  br label %486

483:                                              ; preds = %462
  %484 = load i16, ptr %31, align 2, !tbaa !9
  %485 = zext i16 %484 to i32
  br label %486

486:                                              ; preds = %483, %480
  %487 = phi i32 [ %482, %480 ], [ %485, %483 ]
  %488 = trunc i32 %487 to i16
  store i16 %488, ptr %32, align 2, !tbaa !9
  %489 = load i8, ptr %9, align 1, !tbaa !11
  %490 = zext i8 %489 to i32
  %491 = and i32 %490, 1
  %492 = icmp ne i32 %491, 0
  br i1 %492, label %493, label %541

493:                                              ; preds = %486
  %494 = load i16, ptr %32, align 2, !tbaa !9
  %495 = zext i16 %494 to i32
  %496 = load i8, ptr %17, align 1, !tbaa !11
  %497 = zext i8 %496 to i32
  %498 = add nsw i32 %495, %497
  %499 = trunc i32 %498 to i16
  %500 = load i16, ptr %23, align 2, !tbaa !9
  %501 = load ptr, ptr %6, align 8, !tbaa !5
  %502 = load i8, ptr %9, align 1, !tbaa !11
  %503 = load ptr, ptr %14, align 8, !tbaa !5
  %504 = icmp eq ptr %503, null
  %505 = zext i1 %504 to i32
  %506 = trunc i32 %505 to i8
  %507 = call ptr @tcp_pbuf_prealloc(i32 noundef 56, i16 noundef zeroext %499, i16 noundef zeroext %500, ptr noundef %19, ptr noundef %501, i8 noundef zeroext %502, i8 noundef zeroext %506)
  store ptr %507, ptr %29, align 8, !tbaa !5
  %508 = icmp eq ptr %507, null
  br i1 %508, label %509, label %510

509:                                              ; preds = %493
  store i32 25, ptr %24, align 4
  br label %634

510:                                              ; preds = %493
  br label %511

511:                                              ; preds = %510
  %512 = load ptr, ptr %29, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.pbuf, ptr %512, i32 0, i32 3
  %514 = load i16, ptr %513, align 2, !tbaa !32
  %515 = zext i16 %514 to i32
  %516 = load i16, ptr %32, align 2, !tbaa !9
  %517 = zext i16 %516 to i32
  %518 = icmp sge i32 %515, %517
  br i1 %518, label %524, label %519

519:                                              ; preds = %511
  br label %520

520:                                              ; preds = %519
  %521 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.9, i32 noundef 615, ptr noundef @.str.2)
  br label %522

522:                                              ; preds = %520
  br label %523

523:                                              ; preds = %522
  br label %524

524:                                              ; preds = %523, %511
  br label %525

525:                                              ; preds = %524
  br label %526

526:                                              ; preds = %525
  %527 = load ptr, ptr %29, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.pbuf, ptr %527, i32 0, i32 1
  %529 = load ptr, ptr %528, align 8, !tbaa !26
  %530 = load i8, ptr %17, align 1, !tbaa !11
  %531 = zext i8 %530 to i32
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds i8, ptr %529, i64 %532
  %534 = load ptr, ptr %7, align 8, !tbaa !5
  %535 = load i16, ptr %15, align 2, !tbaa !9
  %536 = zext i16 %535 to i32
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds i8, ptr %534, i64 %537
  %539 = load i16, ptr %32, align 2, !tbaa !9
  %540 = zext i16 %539 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %533, ptr align 1 %538, i64 %540, i1 false)
  br label %579

541:                                              ; preds = %486
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  br label %542

542:                                              ; preds = %541
  %543 = load i16, ptr %19, align 2, !tbaa !9
  %544 = zext i16 %543 to i32
  %545 = icmp eq i32 %544, 0
  br i1 %545, label %551, label %546

546:                                              ; preds = %542
  br label %547

547:                                              ; preds = %546
  %548 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.10, i32 noundef 625, ptr noundef @.str.2)
  br label %549

549:                                              ; preds = %547
  br label %550

550:                                              ; preds = %549
  br label %551

551:                                              ; preds = %550, %542
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552
  %554 = load i16, ptr %32, align 2, !tbaa !9
  %555 = call ptr @pbuf_alloc(i32 noundef 56, i16 noundef zeroext %554, i32 noundef 1)
  store ptr %555, ptr %33, align 8, !tbaa !5
  %556 = icmp eq ptr %555, null
  br i1 %556, label %557, label %558

557:                                              ; preds = %553
  store i32 25, ptr %24, align 4
  br label %576

558:                                              ; preds = %553
  %559 = load ptr, ptr %7, align 8, !tbaa !5
  %560 = load i16, ptr %15, align 2, !tbaa !9
  %561 = zext i16 %560 to i32
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds i8, ptr %559, i64 %562
  %564 = load ptr, ptr %33, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.pbuf_rom, ptr %564, i32 0, i32 1
  store ptr %563, ptr %565, align 8, !tbaa !33
  %566 = load i8, ptr %17, align 1, !tbaa !11
  %567 = zext i8 %566 to i16
  %568 = call ptr @pbuf_alloc(i32 noundef 56, i16 noundef zeroext %567, i32 noundef 640)
  store ptr %568, ptr %29, align 8, !tbaa !5
  %569 = icmp eq ptr %568, null
  br i1 %569, label %570, label %573

570:                                              ; preds = %558
  %571 = load ptr, ptr %33, align 8, !tbaa !5
  %572 = call zeroext i8 @pbuf_free(ptr noundef %571)
  store i32 25, ptr %24, align 4
  br label %576

573:                                              ; preds = %558
  %574 = load ptr, ptr %29, align 8, !tbaa !5
  %575 = load ptr, ptr %33, align 8, !tbaa !5
  call void @pbuf_cat(ptr noundef %574, ptr noundef %575)
  store i32 0, ptr %24, align 4
  br label %576

576:                                              ; preds = %573, %570, %557
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  %577 = load i32, ptr %24, align 4
  switch i32 %577, label %634 [
    i32 0, label %578
  ]

578:                                              ; preds = %576
  br label %579

579:                                              ; preds = %578, %526
  %580 = load ptr, ptr %29, align 8, !tbaa !5
  %581 = call zeroext i16 @pbuf_clen(ptr noundef %580)
  %582 = zext i16 %581 to i32
  %583 = load i16, ptr %16, align 2, !tbaa !9
  %584 = zext i16 %583 to i32
  %585 = add nsw i32 %584, %582
  %586 = trunc i32 %585 to i16
  store i16 %586, ptr %16, align 2, !tbaa !9
  %587 = load i16, ptr %16, align 2, !tbaa !9
  %588 = zext i16 %587 to i32
  %589 = icmp ugt i32 %588, 8
  br i1 %589, label %590, label %593

590:                                              ; preds = %579
  %591 = load ptr, ptr %29, align 8, !tbaa !5
  %592 = call zeroext i8 @pbuf_free(ptr noundef %591)
  store i32 25, ptr %24, align 4
  br label %634

593:                                              ; preds = %579
  %594 = load ptr, ptr %6, align 8, !tbaa !5
  %595 = load ptr, ptr %29, align 8, !tbaa !5
  %596 = load ptr, ptr %6, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.tcp_pcb, ptr %596, i32 0, i32 37
  %598 = load i32, ptr %597, align 4, !tbaa !35
  %599 = load i16, ptr %15, align 2, !tbaa !9
  %600 = zext i16 %599 to i32
  %601 = add i32 %598, %600
  %602 = load i8, ptr %18, align 1, !tbaa !11
  %603 = call ptr @tcp_create_segment(ptr noundef %594, ptr noundef %595, i8 noundef zeroext 0, i32 noundef %601, i8 noundef zeroext %602)
  store ptr %603, ptr %12, align 8, !tbaa !5
  %604 = icmp eq ptr %603, null
  br i1 %604, label %605, label %606

605:                                              ; preds = %593
  store i32 25, ptr %24, align 4
  br label %634

606:                                              ; preds = %593
  %607 = load ptr, ptr %14, align 8, !tbaa !5
  %608 = icmp eq ptr %607, null
  br i1 %608, label %609, label %611

609:                                              ; preds = %606
  %610 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %610, ptr %14, align 8, !tbaa !5
  br label %626

611:                                              ; preds = %606
  br label %612

612:                                              ; preds = %611
  %613 = load ptr, ptr %13, align 8, !tbaa !5
  %614 = icmp ne ptr %613, null
  br i1 %614, label %620, label %615

615:                                              ; preds = %612
  br label %616

616:                                              ; preds = %615
  %617 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.11, i32 noundef 683, ptr noundef @.str.2)
  br label %618

618:                                              ; preds = %616
  br label %619

619:                                              ; preds = %618
  br label %620

620:                                              ; preds = %619, %612
  br label %621

621:                                              ; preds = %620
  br label %622

622:                                              ; preds = %621
  %623 = load ptr, ptr %12, align 8, !tbaa !5
  %624 = load ptr, ptr %13, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.tcp_seg, ptr %624, i32 0, i32 0
  store ptr %623, ptr %625, align 8, !tbaa !19
  br label %626

626:                                              ; preds = %622, %609
  %627 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %627, ptr %13, align 8, !tbaa !5
  %628 = load i16, ptr %32, align 2, !tbaa !9
  %629 = zext i16 %628 to i32
  %630 = load i16, ptr %15, align 2, !tbaa !9
  %631 = zext i16 %630 to i32
  %632 = add nsw i32 %631, %629
  %633 = trunc i32 %632 to i16
  store i16 %633, ptr %15, align 2, !tbaa !9
  store i32 0, ptr %24, align 4
  br label %634

634:                                              ; preds = %626, %605, %590, %576, %509
  call void @llvm.lifetime.end.p0(i64 2, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  %635 = load i32, ptr %24, align 4
  switch i32 %635, label %926 [
    i32 0, label %636
    i32 25, label %878
  ]

636:                                              ; preds = %634
  br label %456, !llvm.loop !36

637:                                              ; preds = %456
  %638 = load i16, ptr %20, align 2, !tbaa !9
  %639 = zext i16 %638 to i32
  %640 = icmp sgt i32 %639, 0
  br i1 %640, label %641, label %696

641:                                              ; preds = %637
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  %642 = load ptr, ptr %11, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.tcp_seg, ptr %642, i32 0, i32 1
  %644 = load ptr, ptr %643, align 8, !tbaa !28
  store ptr %644, ptr %34, align 8, !tbaa !5
  br label %645

645:                                              ; preds = %683, %641
  %646 = load ptr, ptr %34, align 8, !tbaa !5
  %647 = icmp ne ptr %646, null
  br i1 %647, label %648, label %687

648:                                              ; preds = %645
  %649 = load i16, ptr %20, align 2, !tbaa !9
  %650 = zext i16 %649 to i32
  %651 = load ptr, ptr %34, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.pbuf, ptr %651, i32 0, i32 2
  %653 = load i16, ptr %652, align 8, !tbaa !37
  %654 = zext i16 %653 to i32
  %655 = add nsw i32 %654, %650
  %656 = trunc i32 %655 to i16
  store i16 %656, ptr %652, align 8, !tbaa !37
  %657 = load ptr, ptr %34, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.pbuf, ptr %657, i32 0, i32 0
  %659 = load ptr, ptr %658, align 8, !tbaa !29
  %660 = icmp eq ptr %659, null
  br i1 %660, label %661, label %682

661:                                              ; preds = %648
  %662 = load ptr, ptr %34, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.pbuf, ptr %662, i32 0, i32 1
  %664 = load ptr, ptr %663, align 8, !tbaa !26
  %665 = load ptr, ptr %34, align 8, !tbaa !5
  %666 = getelementptr inbounds %struct.pbuf, ptr %665, i32 0, i32 3
  %667 = load i16, ptr %666, align 2, !tbaa !32
  %668 = zext i16 %667 to i32
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds i8, ptr %664, i64 %669
  %671 = load ptr, ptr %7, align 8, !tbaa !5
  %672 = load i16, ptr %20, align 2, !tbaa !9
  %673 = zext i16 %672 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %670, ptr align 1 %671, i64 %673, i1 false)
  %674 = load i16, ptr %20, align 2, !tbaa !9
  %675 = zext i16 %674 to i32
  %676 = load ptr, ptr %34, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.pbuf, ptr %676, i32 0, i32 3
  %678 = load i16, ptr %677, align 2, !tbaa !32
  %679 = zext i16 %678 to i32
  %680 = add nsw i32 %679, %675
  %681 = trunc i32 %680 to i16
  store i16 %681, ptr %677, align 2, !tbaa !32
  br label %682

682:                                              ; preds = %661, %648
  br label %683

683:                                              ; preds = %682
  %684 = load ptr, ptr %34, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.pbuf, ptr %684, i32 0, i32 0
  %686 = load ptr, ptr %685, align 8, !tbaa !29
  store ptr %686, ptr %34, align 8, !tbaa !5
  br label %645, !llvm.loop !38

687:                                              ; preds = %645
  %688 = load i16, ptr %20, align 2, !tbaa !9
  %689 = zext i16 %688 to i32
  %690 = load ptr, ptr %11, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.tcp_seg, ptr %690, i32 0, i32 2
  %692 = load i16, ptr %691, align 8, !tbaa !24
  %693 = zext i16 %692 to i32
  %694 = add nsw i32 %693, %689
  %695 = trunc i32 %694 to i16
  store i16 %695, ptr %691, align 8, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  br label %696

696:                                              ; preds = %687, %637
  %697 = load i16, ptr %19, align 2, !tbaa !9
  %698 = load ptr, ptr %6, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.tcp_pcb, ptr %698, i32 0, i32 42
  store i16 %697, ptr %699, align 8, !tbaa !25
  %700 = load ptr, ptr %10, align 8, !tbaa !5
  %701 = icmp ne ptr %700, null
  br i1 %701, label %702, label %728

702:                                              ; preds = %696
  br label %703

703:                                              ; preds = %702
  %704 = load ptr, ptr %11, align 8, !tbaa !5
  %705 = icmp ne ptr %704, null
  br i1 %705, label %711, label %706

706:                                              ; preds = %703
  br label %707

707:                                              ; preds = %706
  %708 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.12, i32 noundef 737, ptr noundef @.str.2)
  br label %709

709:                                              ; preds = %707
  br label %710

710:                                              ; preds = %709
  br label %711

711:                                              ; preds = %710, %703
  br label %712

712:                                              ; preds = %711
  br label %713

713:                                              ; preds = %712
  %714 = load ptr, ptr %11, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.tcp_seg, ptr %714, i32 0, i32 1
  %716 = load ptr, ptr %715, align 8, !tbaa !28
  %717 = load ptr, ptr %10, align 8, !tbaa !5
  call void @pbuf_cat(ptr noundef %716, ptr noundef %717)
  %718 = load ptr, ptr %10, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.pbuf, ptr %718, i32 0, i32 2
  %720 = load i16, ptr %719, align 8, !tbaa !37
  %721 = zext i16 %720 to i32
  %722 = load ptr, ptr %11, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.tcp_seg, ptr %722, i32 0, i32 2
  %724 = load i16, ptr %723, align 8, !tbaa !24
  %725 = zext i16 %724 to i32
  %726 = add nsw i32 %725, %721
  %727 = trunc i32 %726 to i16
  store i16 %727, ptr %723, align 8, !tbaa !24
  br label %796

728:                                              ; preds = %696
  %729 = load i16, ptr %21, align 2, !tbaa !9
  %730 = zext i16 %729 to i32
  %731 = icmp sgt i32 %730, 0
  br i1 %731, label %732, label %795

732:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  br label %733

733:                                              ; preds = %732
  %734 = load ptr, ptr %11, align 8, !tbaa !5
  %735 = icmp ne ptr %734, null
  br i1 %735, label %736, label %741

736:                                              ; preds = %733
  %737 = load ptr, ptr %11, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.tcp_seg, ptr %737, i32 0, i32 1
  %739 = load ptr, ptr %738, align 8, !tbaa !28
  %740 = icmp ne ptr %739, null
  br i1 %740, label %746, label %741

741:                                              ; preds = %736, %733
  br label %742

742:                                              ; preds = %741
  %743 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.13, i32 noundef 743, ptr noundef @.str.2)
  br label %744

744:                                              ; preds = %742
  br label %745

745:                                              ; preds = %744
  br label %746

746:                                              ; preds = %745, %736
  br label %747

747:                                              ; preds = %746
  br label %748

748:                                              ; preds = %747
  %749 = load ptr, ptr %11, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.tcp_seg, ptr %749, i32 0, i32 1
  %751 = load ptr, ptr %750, align 8, !tbaa !28
  store ptr %751, ptr %35, align 8, !tbaa !5
  br label %752

752:                                              ; preds = %766, %748
  %753 = load ptr, ptr %35, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.pbuf, ptr %753, i32 0, i32 0
  %755 = load ptr, ptr %754, align 8, !tbaa !29
  %756 = icmp ne ptr %755, null
  br i1 %756, label %757, label %770

757:                                              ; preds = %752
  %758 = load i16, ptr %21, align 2, !tbaa !9
  %759 = zext i16 %758 to i32
  %760 = load ptr, ptr %35, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.pbuf, ptr %760, i32 0, i32 2
  %762 = load i16, ptr %761, align 8, !tbaa !37
  %763 = zext i16 %762 to i32
  %764 = add nsw i32 %763, %759
  %765 = trunc i32 %764 to i16
  store i16 %765, ptr %761, align 8, !tbaa !37
  br label %766

766:                                              ; preds = %757
  %767 = load ptr, ptr %35, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.pbuf, ptr %767, i32 0, i32 0
  %769 = load ptr, ptr %768, align 8, !tbaa !29
  store ptr %769, ptr %35, align 8, !tbaa !5
  br label %752, !llvm.loop !39

770:                                              ; preds = %752
  %771 = load i16, ptr %21, align 2, !tbaa !9
  %772 = zext i16 %771 to i32
  %773 = load ptr, ptr %35, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.pbuf, ptr %773, i32 0, i32 2
  %775 = load i16, ptr %774, align 8, !tbaa !37
  %776 = zext i16 %775 to i32
  %777 = add nsw i32 %776, %772
  %778 = trunc i32 %777 to i16
  store i16 %778, ptr %774, align 8, !tbaa !37
  %779 = load i16, ptr %21, align 2, !tbaa !9
  %780 = zext i16 %779 to i32
  %781 = load ptr, ptr %35, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.pbuf, ptr %781, i32 0, i32 3
  %783 = load i16, ptr %782, align 2, !tbaa !32
  %784 = zext i16 %783 to i32
  %785 = add nsw i32 %784, %780
  %786 = trunc i32 %785 to i16
  store i16 %786, ptr %782, align 2, !tbaa !32
  %787 = load i16, ptr %21, align 2, !tbaa !9
  %788 = zext i16 %787 to i32
  %789 = load ptr, ptr %11, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.tcp_seg, ptr %789, i32 0, i32 2
  %791 = load i16, ptr %790, align 8, !tbaa !24
  %792 = zext i16 %791 to i32
  %793 = add nsw i32 %792, %788
  %794 = trunc i32 %793 to i16
  store i16 %794, ptr %790, align 8, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  br label %795

795:                                              ; preds = %770, %728
  br label %796

796:                                              ; preds = %795, %713
  %797 = load ptr, ptr %11, align 8, !tbaa !5
  %798 = icmp eq ptr %797, null
  br i1 %798, label %799, label %803

799:                                              ; preds = %796
  %800 = load ptr, ptr %14, align 8, !tbaa !5
  %801 = load ptr, ptr %6, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.tcp_pcb, ptr %801, i32 0, i32 44
  store ptr %800, ptr %802, align 8, !tbaa !18
  br label %807

803:                                              ; preds = %796
  %804 = load ptr, ptr %14, align 8, !tbaa !5
  %805 = load ptr, ptr %11, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.tcp_seg, ptr %805, i32 0, i32 0
  store ptr %804, ptr %806, align 8, !tbaa !19
  br label %807

807:                                              ; preds = %803, %799
  %808 = load i16, ptr %8, align 2, !tbaa !9
  %809 = zext i16 %808 to i32
  %810 = load ptr, ptr %6, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.tcp_pcb, ptr %810, i32 0, i32 37
  %812 = load i32, ptr %811, align 4, !tbaa !35
  %813 = add i32 %812, %809
  store i32 %813, ptr %811, align 4, !tbaa !35
  %814 = load i16, ptr %8, align 2, !tbaa !9
  %815 = zext i16 %814 to i32
  %816 = load ptr, ptr %6, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.tcp_pcb, ptr %816, i32 0, i32 40
  %818 = load i16, ptr %817, align 4, !tbaa !40
  %819 = zext i16 %818 to i32
  %820 = sub nsw i32 %819, %815
  %821 = trunc i32 %820 to i16
  store i16 %821, ptr %817, align 4, !tbaa !40
  %822 = load i16, ptr %16, align 2, !tbaa !9
  %823 = load ptr, ptr %6, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.tcp_pcb, ptr %823, i32 0, i32 41
  store i16 %822, ptr %824, align 2, !tbaa !17
  %825 = load ptr, ptr %6, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.tcp_pcb, ptr %825, i32 0, i32 41
  %827 = load i16, ptr %826, align 2, !tbaa !17
  %828 = zext i16 %827 to i32
  %829 = icmp ne i32 %828, 0
  br i1 %829, label %830, label %849

830:                                              ; preds = %807
  br label %831

831:                                              ; preds = %830
  %832 = load ptr, ptr %6, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.tcp_pcb, ptr %832, i32 0, i32 45
  %834 = load ptr, ptr %833, align 8, !tbaa !41
  %835 = icmp ne ptr %834, null
  br i1 %835, label %846, label %836

836:                                              ; preds = %831
  %837 = load ptr, ptr %6, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.tcp_pcb, ptr %837, i32 0, i32 44
  %839 = load ptr, ptr %838, align 8, !tbaa !18
  %840 = icmp ne ptr %839, null
  br i1 %840, label %846, label %841

841:                                              ; preds = %836
  br label %842

842:                                              ; preds = %841
  %843 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.14, i32 noundef 787, ptr noundef @.str.2)
  br label %844

844:                                              ; preds = %842
  br label %845

845:                                              ; preds = %844
  br label %846

846:                                              ; preds = %845, %836, %831
  br label %847

847:                                              ; preds = %846
  br label %848

848:                                              ; preds = %847
  br label %849

849:                                              ; preds = %848, %807
  %850 = load ptr, ptr %12, align 8, !tbaa !5
  %851 = icmp ne ptr %850, null
  br i1 %851, label %852, label %877

852:                                              ; preds = %849
  %853 = load ptr, ptr %12, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.tcp_seg, ptr %853, i32 0, i32 4
  %855 = load ptr, ptr %854, align 8, !tbaa !42
  %856 = icmp ne ptr %855, null
  br i1 %856, label %857, label %877

857:                                              ; preds = %852
  %858 = load i8, ptr %9, align 1, !tbaa !11
  %859 = zext i8 %858 to i32
  %860 = and i32 %859, 2
  %861 = icmp eq i32 %860, 0
  br i1 %861, label %862, label %877

862:                                              ; preds = %857
  %863 = load ptr, ptr %12, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.tcp_seg, ptr %863, i32 0, i32 4
  %865 = load ptr, ptr %864, align 8, !tbaa !42
  %866 = getelementptr inbounds %struct.tcp_hdr, ptr %865, i32 0, i32 4
  %867 = load i16, ptr %866, align 1, !tbaa !43
  %868 = zext i16 %867 to i32
  %869 = call zeroext i16 @lwip_htons(i16 noundef zeroext 8)
  %870 = zext i16 %869 to i32
  %871 = or i32 %868, %870
  %872 = trunc i32 %871 to i16
  %873 = load ptr, ptr %12, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.tcp_seg, ptr %873, i32 0, i32 4
  %875 = load ptr, ptr %874, align 8, !tbaa !42
  %876 = getelementptr inbounds %struct.tcp_hdr, ptr %875, i32 0, i32 4
  store i16 %872, ptr %876, align 1, !tbaa !43
  br label %877

877:                                              ; preds = %862, %857, %852, %849
  store i8 0, ptr %5, align 1
  store i32 1, ptr %24, align 4
  br label %926

878:                                              ; preds = %634, %437
  br label %879

879:                                              ; preds = %878
  %880 = load ptr, ptr %6, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.tcp_pcb, ptr %880, i32 0, i32 12
  %882 = load i16, ptr %881, align 2, !tbaa !45
  %883 = zext i16 %882 to i32
  %884 = or i32 %883, 128
  %885 = trunc i32 %884 to i16
  %886 = load ptr, ptr %6, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.tcp_pcb, ptr %886, i32 0, i32 12
  store i16 %885, ptr %887, align 2, !tbaa !45
  br label %888

888:                                              ; preds = %879
  br label %889

889:                                              ; preds = %888
  %890 = load ptr, ptr %10, align 8, !tbaa !5
  %891 = icmp ne ptr %890, null
  br i1 %891, label %892, label %895

892:                                              ; preds = %889
  %893 = load ptr, ptr %10, align 8, !tbaa !5
  %894 = call zeroext i8 @pbuf_free(ptr noundef %893)
  br label %895

895:                                              ; preds = %892, %889
  %896 = load ptr, ptr %14, align 8, !tbaa !5
  %897 = icmp ne ptr %896, null
  br i1 %897, label %898, label %900

898:                                              ; preds = %895
  %899 = load ptr, ptr %14, align 8, !tbaa !5
  call void @tcp_segs_free(ptr noundef %899)
  br label %900

900:                                              ; preds = %898, %895
  %901 = load ptr, ptr %6, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.tcp_pcb, ptr %901, i32 0, i32 41
  %903 = load i16, ptr %902, align 2, !tbaa !17
  %904 = zext i16 %903 to i32
  %905 = icmp ne i32 %904, 0
  br i1 %905, label %906, label %925

906:                                              ; preds = %900
  br label %907

907:                                              ; preds = %906
  %908 = load ptr, ptr %6, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.tcp_pcb, ptr %908, i32 0, i32 45
  %910 = load ptr, ptr %909, align 8, !tbaa !41
  %911 = icmp ne ptr %910, null
  br i1 %911, label %922, label %912

912:                                              ; preds = %907
  %913 = load ptr, ptr %6, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.tcp_pcb, ptr %913, i32 0, i32 44
  %915 = load ptr, ptr %914, align 8, !tbaa !18
  %916 = icmp ne ptr %915, null
  br i1 %916, label %922, label %917

917:                                              ; preds = %912
  br label %918

918:                                              ; preds = %917
  %919 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef @.str.14, i32 noundef 808, ptr noundef @.str.2)
  br label %920

920:                                              ; preds = %918
  br label %921

921:                                              ; preds = %920
  br label %922

922:                                              ; preds = %921, %912, %907
  br label %923

923:                                              ; preds = %922
  br label %924

924:                                              ; preds = %923
  br label %925

925:                                              ; preds = %924, %900
  store i8 -1, ptr %5, align 1
  store i32 1, ptr %24, align 4
  br label %926

926:                                              ; preds = %925, %877, %634, %437, %102, %92, %43
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  %927 = load i8, ptr %5, align 1
  ret i8 %927
}

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

declare i32 @printf(ptr noundef, ...) #2

; Function Attrs: nounwind uwtable
declare hidden signext i8 @tcp_write_checks(ptr noundef, i16 noundef zeroext) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @tcp_pbuf_prealloc(i32 noundef, i16 noundef zeroext, i16 noundef zeroext, ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext) #0

; 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) #3

declare zeroext i16 @pbuf_clen(ptr noundef) #2

declare ptr @pbuf_alloc(i32 noundef, i16 noundef zeroext, i32 noundef) #2

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

declare zeroext i8 @pbuf_free(ptr noundef) #2

declare void @pbuf_cat(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden ptr @tcp_create_segment(ptr noundef, ptr noundef, i8 noundef zeroext, i32 noundef, i8 noundef zeroext) #0

declare zeroext i16 @lwip_htons(i16 noundef zeroext) #2

declare void @tcp_segs_free(ptr noundef) #2

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !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 = !{!7, !7, i64 0}
!12 = !{!13, !10, i64 66}
!13 = !{!"tcp_pcb", !14, i64 0, !14, i64 4, !7, i64 8, !7, i64 9, !7, i64 10, !7, i64 11, !6, i64 16, !6, i64 24, !15, i64 32, !7, i64 36, !10, i64 38, !10, i64 40, !10, i64 42, !7, i64 44, !7, i64 45, !7, i64 46, !15, i64 48, !15, i64 52, !10, i64 56, !10, i64 58, !15, i64 60, !10, i64 64, !10, i64 66, !15, i64 68, !15, i64 72, !10, i64 76, !10, i64 78, !10, i64 80, !7, i64 82, !7, i64 83, !15, i64 84, !10, i64 88, !10, i64 90, !15, i64 92, !15, i64 96, !15, i64 100, !15, i64 104, !15, i64 108, !10, i64 112, !10, i64 114, !10, i64 116, !10, i64 118, !10, i64 120, !10, i64 122, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !15, i64 200, !7, i64 204, !7, i64 205, !7, i64 206, !7, i64 207}
!14 = !{!"ip4_addr", !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!13, !10, i64 114}
!17 = !{!13, !10, i64 118}
!18 = !{!13, !6, i64 128}
!19 = !{!20, !6, i64 0}
!20 = !{!"tcp_seg", !6, i64 0, !6, i64 8, !10, i64 16, !7, i64 18, !6, i64 24}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!20, !7, i64 18}
!24 = !{!20, !10, i64 16}
!25 = !{!13, !10, i64 120}
!26 = !{!27, !6, i64 8}
!27 = !{!"pbuf", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 18, !7, i64 20, !7, i64 21, !7, i64 22, !7, i64 23}
!28 = !{!20, !6, i64 8}
!29 = !{!27, !6, i64 0}
!30 = distinct !{!30, !22}
!31 = !{!27, !7, i64 20}
!32 = !{!27, !10, i64 18}
!33 = !{!34, !6, i64 8}
!34 = !{!"pbuf_rom", !6, i64 0, !6, i64 8}
!35 = !{!13, !15, i64 108}
!36 = distinct !{!36, !22}
!37 = !{!27, !10, i64 16}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22}
!40 = !{!13, !10, i64 116}
!41 = !{!13, !6, i64 136}
!42 = !{!20, !6, i64 24}
!43 = !{!44, !10, i64 12}
!44 = !{!"tcp_hdr", !10, i64 0, !10, i64 2, !15, i64 4, !15, i64 8, !10, i64 12, !10, i64 14, !10, i64 16, !10, i64 18}
!45 = !{!13, !10, i64 42}


; 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 [40 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [182 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local signext i8 @tcp_write(ptr noundef %0, ptr noundef %1, i16 noundef zeroext %2, i8 noundef zeroext %3) local_unnamed_addr #0 {
  %5 = alloca i16, align 2
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %5) #6
  store i16 0, ptr %5, align 2, !tbaa !5
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %6, label %8

6:                                                ; preds = %4
  %7 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.1, i32 noundef 414, ptr noundef nonnull @.str.2)
  br label %275

8:                                                ; preds = %4
  %9 = getelementptr inbounds i8, ptr %0, i64 66
  %10 = load i16, ptr %9, align 2, !tbaa !9
  %11 = getelementptr inbounds i8, ptr %0, i64 114
  %12 = load i16, ptr %11, align 2, !tbaa !14
  %13 = lshr i16 %12, 1
  %. = tail call i16 @llvm.umin.i16(i16 %10, i16 %13)
  %.not289 = icmp eq i16 %., 0
  %spec.select = select i1 %.not289, i16 %10, i16 %.
  %.not291 = icmp eq ptr %1, null
  br i1 %.not291, label %14, label %16

14:                                               ; preds = %8
  %15 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.3, i32 noundef 430, ptr noundef nonnull @.str.2)
  br label %275

16:                                               ; preds = %8
  %17 = tail call signext i8 @tcp_write_checks(ptr noundef nonnull %0, i16 noundef zeroext %2)
  %.not292 = icmp eq i8 %17, 0
  br i1 %.not292, label %18, label %275

18:                                               ; preds = %16
  %19 = getelementptr inbounds i8, ptr %0, i64 118
  %20 = load i16, ptr %19, align 2, !tbaa !15
  %21 = getelementptr inbounds i8, ptr %0, i64 128
  %22 = load ptr, ptr %21, align 8, !tbaa !16
  %.not293 = icmp eq ptr %22, null
  br i1 %.not293, label %112, label %.preheader

.preheader:                                       ; preds = %18, %.preheader
  %.0209 = phi ptr [ %23, %.preheader ], [ %22, %18 ]
  %23 = load ptr, ptr %.0209, align 8, !tbaa !17
  %.not294 = icmp eq ptr %23, null
  br i1 %.not294, label %24, label %.preheader, !llvm.loop !19

24:                                               ; preds = %.preheader
  %25 = getelementptr inbounds i8, ptr %.0209, i64 18
  %26 = load i8, ptr %25, align 2, !tbaa !21
  %27 = shl i8 %26, 2
  %28 = and i8 %27, 4
  %29 = zext i16 %spec.select to i32
  %30 = getelementptr inbounds i8, ptr %.0209, i64 16
  %31 = load i16, ptr %30, align 8, !tbaa !22
  %32 = zext i16 %31 to i32
  %33 = zext nneg i8 %28 to i32
  %34 = add nuw nsw i32 %33, %32
  %.not296 = icmp ugt i32 %34, %29
  br i1 %.not296, label %35, label %37

35:                                               ; preds = %24
  %36 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.4, i32 noundef 486, ptr noundef nonnull @.str.2)
  %.pre = load i16, ptr %30, align 8, !tbaa !22
  br label %37

37:                                               ; preds = %35, %24
  %38 = phi i16 [ %.pre, %35 ], [ %31, %24 ]
  %39 = zext nneg i8 %28 to i16
  %40 = add i16 %38, %39
  %41 = sub i16 %spec.select, %40
  %42 = getelementptr inbounds i8, ptr %0, i64 120
  %43 = load i16, ptr %42, align 8, !tbaa !23
  store i16 %43, ptr %5, align 2, !tbaa !5
  %.not297 = icmp eq i16 %43, 0
  br i1 %.not297, label %.thread419, label %44

44:                                               ; preds = %37
  %.not298 = icmp ugt i16 %43, %41
  br i1 %.not298, label %45, label %47

45:                                               ; preds = %44
  %46 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.5, i32 noundef 504, ptr noundef nonnull @.str.2)
  br label %47

47:                                               ; preds = %44, %45
  %48 = tail call i16 @llvm.umin.i16(i16 %43, i16 %2)
  %.323 = tail call i16 @llvm.umin.i16(i16 %41, i16 %48)
  %49 = sub i16 %43, %.323
  store i16 %49, ptr %5, align 2, !tbaa !5
  %50 = sub i16 %41, %.323
  %51 = icmp eq i16 %43, %.323
  %52 = icmp eq i16 %.323, %2
  %or.cond324 = or i1 %51, %52
  br i1 %or.cond324, label %.thread419, label %53

53:                                               ; preds = %47
  %54 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.6, i32 noundef 512, ptr noundef nonnull @.str.2)
  br label %.thread419

.thread419:                                       ; preds = %37, %53, %47
  %.0211426 = phi ptr [ %.0209, %53 ], [ %.0209, %47 ], [ null, %37 ]
  %.0228425 = phi i16 [ %50, %53 ], [ %50, %47 ], [ %41, %37 ]
  %.0234424 = phi i16 [ %.323, %53 ], [ %.323, %47 ], [ 0, %37 ]
  %55 = zext i16 %.0234424 to i32
  %56 = zext i16 %2 to i32
  %57 = icmp ult i16 %.0234424, %2
  %58 = zext i16 %.0228425 to i32
  %59 = icmp ne i16 %.0228425, 0
  %or.cond = select i1 %57, i1 %59, i1 false
  br i1 %or.cond, label %60, label %.thread333

60:                                               ; preds = %.thread419
  %61 = load i16, ptr %30, align 8, !tbaa !22
  %.not299 = icmp eq i16 %61, 0
  br i1 %.not299, label %.thread333, label %62

62:                                               ; preds = %60
  %63 = sub nsw i32 %56, %55
  %64 = tail call i32 @llvm.smin.i32(i32 %63, i32 %58)
  %65 = trunc i32 %64 to i16
  %66 = and i8 %3, 1
  %.not300 = icmp eq i8 %66, 0
  br i1 %.not300, label %78, label %67

67:                                               ; preds = %62
  %68 = call ptr @tcp_pbuf_prealloc(i32 noundef 0, i16 noundef zeroext %65, i16 noundef zeroext %.0228425, ptr noundef nonnull %5, ptr noundef nonnull %0, i8 noundef zeroext %3, i8 noundef zeroext 1)
  %69 = icmp eq ptr %68, null
  br i1 %69, label %.thread369, label %70

70:                                               ; preds = %67
  %71 = getelementptr inbounds i8, ptr %68, i64 8
  %72 = load ptr, ptr %71, align 8, !tbaa !24
  %73 = zext i16 %.0234424 to i64
  %74 = getelementptr inbounds i8, ptr %1, i64 %73
  %.mask = and i32 %64, 65535
  %75 = zext nneg i32 %.mask to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %72, ptr nonnull align 1 %74, i64 %75, i1 false)
  %76 = call zeroext i16 @pbuf_clen(ptr noundef nonnull %68) #6
  %77 = add i16 %76, %20
  br label %.thread

78:                                               ; preds = %62
  %79 = getelementptr inbounds i8, ptr %.0209, i64 8
  %80 = load ptr, ptr %79, align 8, !tbaa !26
  br label %81

81:                                               ; preds = %81, %78
  %.0221 = phi ptr [ %80, %78 ], [ %82, %81 ]
  %82 = load ptr, ptr %.0221, align 8, !tbaa !27
  %.not301 = icmp eq ptr %82, null
  br i1 %.not301, label %83, label %81, !llvm.loop !28

83:                                               ; preds = %81
  %84 = getelementptr inbounds i8, ptr %.0221, i64 20
  %85 = load i8, ptr %84, align 4, !tbaa !29
  %86 = icmp ult i8 %85, 64
  br i1 %86, label %87, label %99

87:                                               ; preds = %83
  %88 = getelementptr inbounds i8, ptr %.0221, i64 8
  %89 = load ptr, ptr %88, align 8, !tbaa !24
  %90 = getelementptr inbounds i8, ptr %.0221, i64 18
  %91 = load i16, ptr %90, align 2, !tbaa !30
  %92 = zext i16 %91 to i64
  %93 = getelementptr inbounds i8, ptr %89, i64 %92
  %94 = icmp eq ptr %93, %1
  br i1 %94, label %95, label %99

95:                                               ; preds = %87
  %96 = icmp eq i16 %.0234424, 0
  br i1 %96, label %.thread, label %97

97:                                               ; preds = %95
  %98 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.7, i32 noundef 561, ptr noundef nonnull @.str.2)
  br label %.thread

99:                                               ; preds = %87, %83
  %100 = tail call ptr @pbuf_alloc(i32 noundef 0, i16 noundef zeroext %65, i32 noundef 1) #6
  %101 = icmp eq ptr %100, null
  br i1 %101, label %.thread369, label %102

102:                                              ; preds = %99
  %103 = zext i16 %.0234424 to i64
  %104 = getelementptr inbounds i8, ptr %1, i64 %103
  %105 = getelementptr inbounds i8, ptr %100, i64 8
  store ptr %104, ptr %105, align 8, !tbaa !31
  %106 = tail call zeroext i16 @pbuf_clen(ptr noundef nonnull %100) #6
  %107 = add i16 %106, %20
  br label %.thread

.thread369:                                       ; preds = %67, %99
  %108 = getelementptr inbounds i8, ptr %0, i64 42
  %109 = load i16, ptr %108, align 2, !tbaa !33
  %110 = or i16 %109, 128
  store i16 %110, ptr %108, align 2, !tbaa !33
  br label %266

.thread:                                          ; preds = %102, %97, %95, %70
  %.2252 = phi i16 [ %77, %70 ], [ %20, %95 ], [ %20, %97 ], [ %107, %102 ]
  %.2243 = phi i16 [ 0, %70 ], [ %65, %95 ], [ %65, %97 ], [ 0, %102 ]
  %.2 = phi ptr [ %68, %70 ], [ null, %95 ], [ null, %97 ], [ %100, %102 ]
  %111 = add i16 %.0234424, %65
  br label %.thread333

112:                                              ; preds = %18
  %113 = getelementptr inbounds i8, ptr %0, i64 120
  %114 = load i16, ptr %113, align 8, !tbaa !23
  %115 = icmp eq i16 %114, 0
  br i1 %115, label %.thread333, label %116

116:                                              ; preds = %112
  %117 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.8, i32 noundef 587, ptr noundef nonnull @.str.2)
  br label %.thread333

.thread333:                                       ; preds = %.thread419, %60, %.thread, %112, %116
  %.6256 = phi i16 [ %.2252, %.thread ], [ %20, %112 ], [ %20, %116 ], [ %20, %60 ], [ %20, %.thread419 ]
  %.1249 = phi i16 [ %.0234424, %.thread ], [ 0, %112 ], [ 0, %116 ], [ %.0234424, %60 ], [ %.0234424, %.thread419 ]
  %.6247 = phi i16 [ %.2243, %.thread ], [ 0, %112 ], [ 0, %116 ], [ 0, %60 ], [ 0, %.thread419 ]
  %.4238 = phi i16 [ %111, %.thread ], [ 0, %112 ], [ 0, %116 ], [ %.0234424, %60 ], [ %.0234424, %.thread419 ]
  %.3214 = phi ptr [ %.0209, %.thread ], [ null, %112 ], [ null, %116 ], [ %.0211426, %60 ], [ %.0211426, %.thread419 ]
  %.1210 = phi ptr [ %.0209, %.thread ], [ null, %112 ], [ null, %116 ], [ %.0209, %60 ], [ %.0209, %.thread419 ]
  %.6 = phi ptr [ %.2, %.thread ], [ null, %112 ], [ null, %116 ], [ null, %60 ], [ null, %.thread419 ]
  %118 = icmp ult i16 %.4238, %2
  br i1 %118, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.thread333
  %119 = and i8 %3, 1
  %.not315 = icmp eq i8 %119, 0
  %120 = getelementptr inbounds i8, ptr %0, i64 108
  br label %121

121:                                              ; preds = %.lr.ph, %171
  %.0222391 = phi ptr [ null, %.lr.ph ], [ %163, %171 ]
  %.0224390 = phi ptr [ null, %.lr.ph ], [ %.1225, %171 ]
  %.5239389 = phi i16 [ %.4238, %.lr.ph ], [ %172, %171 ]
  %.7257388 = phi i16 [ %.6256, %.lr.ph ], [ %158, %171 ]
  %122 = zext i16 %.5239389 to i32
  %123 = sub i16 %2, %.5239389
  %124 = call i16 @llvm.umin.i16(i16 %123, i16 %spec.select)
  br i1 %.not315, label %141, label %125

125:                                              ; preds = %121
  %126 = icmp eq ptr %.0224390, null
  %127 = zext i1 %126 to i8
  %128 = call ptr @tcp_pbuf_prealloc(i32 noundef 56, i16 noundef zeroext %124, i16 noundef zeroext %spec.select, ptr noundef nonnull %5, ptr noundef nonnull %0, i8 noundef zeroext %3, i8 noundef zeroext %127)
  %129 = icmp eq ptr %128, null
  br i1 %129, label %.thread349, label %130

130:                                              ; preds = %125
  %131 = getelementptr inbounds i8, ptr %128, i64 18
  %132 = load i16, ptr %131, align 2, !tbaa !30
  %.not316 = icmp ult i16 %132, %124
  br i1 %.not316, label %133, label %135

133:                                              ; preds = %130
  %134 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.9, i32 noundef 615, ptr noundef nonnull @.str.2)
  br label %135

135:                                              ; preds = %133, %130
  %136 = getelementptr inbounds i8, ptr %128, i64 8
  %137 = load ptr, ptr %136, align 8, !tbaa !24
  %138 = zext i16 %.5239389 to i64
  %139 = getelementptr inbounds i8, ptr %1, i64 %138
  %140 = zext i16 %124 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %137, ptr nonnull align 1 %139, i64 %140, i1 false)
  br label %156

141:                                              ; preds = %121
  %142 = load i16, ptr %5, align 2, !tbaa !5
  %143 = icmp eq i16 %142, 0
  br i1 %143, label %146, label %144

144:                                              ; preds = %141
  %145 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.10, i32 noundef 625, ptr noundef nonnull @.str.2)
  br label %146

146:                                              ; preds = %144, %141
  %147 = call ptr @pbuf_alloc(i32 noundef 56, i16 noundef zeroext %124, i32 noundef 1) #6
  %148 = icmp eq ptr %147, null
  br i1 %148, label %.thread349, label %149

149:                                              ; preds = %146
  %150 = zext i16 %.5239389 to i64
  %151 = getelementptr inbounds i8, ptr %1, i64 %150
  %152 = getelementptr inbounds i8, ptr %147, i64 8
  store ptr %151, ptr %152, align 8, !tbaa !31
  %153 = call ptr @pbuf_alloc(i32 noundef 56, i16 noundef zeroext 0, i32 noundef 640) #6
  %154 = icmp eq ptr %153, null
  br i1 %154, label %.thread349.sink.split, label %155

155:                                              ; preds = %149
  call void @pbuf_cat(ptr noundef nonnull %153, ptr noundef nonnull %147) #6
  br label %156

156:                                              ; preds = %155, %135
  %.2219 = phi ptr [ %128, %135 ], [ %153, %155 ]
  %157 = call zeroext i16 @pbuf_clen(ptr noundef nonnull %.2219) #6
  %158 = add i16 %157, %.7257388
  %159 = icmp ugt i16 %158, 8
  br i1 %159, label %.thread349.sink.split, label %160

160:                                              ; preds = %156
  %161 = load i32, ptr %120, align 4, !tbaa !34
  %162 = add i32 %161, %122
  %163 = call ptr @tcp_create_segment(ptr noundef nonnull %0, ptr noundef nonnull %.2219, i8 noundef zeroext 0, i32 noundef %162, i8 noundef zeroext 0)
  %164 = icmp eq ptr %163, null
  br i1 %164, label %.thread349, label %165

165:                                              ; preds = %160
  %166 = icmp eq ptr %.0224390, null
  br i1 %166, label %171, label %167

167:                                              ; preds = %165
  %.not317 = icmp eq ptr %.0222391, null
  br i1 %.not317, label %168, label %170

168:                                              ; preds = %167
  %169 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.11, i32 noundef 683, ptr noundef nonnull @.str.2)
  br label %170

170:                                              ; preds = %168, %167
  store ptr %163, ptr %.0222391, align 8, !tbaa !17
  br label %171

171:                                              ; preds = %170, %165
  %.1225 = phi ptr [ %.0224390, %170 ], [ %163, %165 ]
  %172 = add i16 %124, %.5239389
  %173 = icmp ult i16 %172, %2
  br i1 %173, label %121, label %._crit_edge

._crit_edge:                                      ; preds = %171, %.thread333
  %.7257.lcssa = phi i16 [ %.6256, %.thread333 ], [ %158, %171 ]
  %.0224.lcssa = phi ptr [ null, %.thread333 ], [ %.1225, %171 ]
  %.4215.lcssa = phi ptr [ %.3214, %.thread333 ], [ %163, %171 ]
  %174 = zext i16 %2 to i32
  %.not302 = icmp eq i16 %.1249, 0
  br i1 %.not302, label %197, label %175

175:                                              ; preds = %._crit_edge
  %176 = getelementptr inbounds i8, ptr %.1210, i64 8
  %.0206394 = load ptr, ptr %176, align 8, !tbaa !35
  %.not303395 = icmp eq ptr %.0206394, null
  br i1 %.not303395, label %._crit_edge399, label %.lr.ph398

.lr.ph398:                                        ; preds = %175
  %177 = zext i16 %.1249 to i64
  br label %178

178:                                              ; preds = %.lr.ph398, %193
  %.0206396 = phi ptr [ %.0206394, %.lr.ph398 ], [ %.0206, %193 ]
  %179 = getelementptr inbounds i8, ptr %.0206396, i64 16
  %180 = load i16, ptr %179, align 8, !tbaa !36
  %181 = add i16 %180, %.1249
  store i16 %181, ptr %179, align 8, !tbaa !36
  %182 = load ptr, ptr %.0206396, align 8, !tbaa !35
  %183 = icmp eq ptr %182, null
  br i1 %183, label %184, label %193

184:                                              ; preds = %178
  %185 = getelementptr inbounds i8, ptr %.0206396, i64 8
  %186 = load ptr, ptr %185, align 8, !tbaa !24
  %187 = getelementptr inbounds i8, ptr %.0206396, i64 18
  %188 = load i16, ptr %187, align 2, !tbaa !30
  %189 = zext i16 %188 to i64
  %190 = getelementptr inbounds i8, ptr %186, i64 %189
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %190, ptr nonnull align 1 %1, i64 %177, i1 false)
  %191 = load i16, ptr %187, align 2, !tbaa !30
  %192 = add i16 %191, %.1249
  store i16 %192, ptr %187, align 2, !tbaa !30
  %.0206.pre = load ptr, ptr %.0206396, align 8, !tbaa !35
  br label %193

193:                                              ; preds = %178, %184
  %.0206 = phi ptr [ %182, %178 ], [ %.0206.pre, %184 ]
  %.not303 = icmp eq ptr %.0206, null
  br i1 %.not303, label %._crit_edge399, label %178, !llvm.loop !37

._crit_edge399:                                   ; preds = %193, %175
  %194 = getelementptr inbounds i8, ptr %.1210, i64 16
  %195 = load i16, ptr %194, align 8, !tbaa !22
  %196 = add i16 %195, %.1249
  store i16 %196, ptr %194, align 8, !tbaa !22
  br label %197

197:                                              ; preds = %._crit_edge399, %._crit_edge
  %198 = load i16, ptr %5, align 2, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %0, i64 120
  store i16 %198, ptr %199, align 8, !tbaa !23
  %.not304 = icmp eq ptr %.6, null
  br i1 %.not304, label %208, label %200

200:                                              ; preds = %197
  %.not309 = icmp eq ptr %.1210, null
  br i1 %.not309, label %201, label %203

201:                                              ; preds = %200
  %202 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.12, i32 noundef 737, ptr noundef nonnull @.str.2)
  br label %203

203:                                              ; preds = %201, %200
  %204 = getelementptr inbounds i8, ptr %.1210, i64 8
  %205 = load ptr, ptr %204, align 8, !tbaa !26
  call void @pbuf_cat(ptr noundef %205, ptr noundef nonnull %.6) #6
  %206 = getelementptr inbounds i8, ptr %.6, i64 16
  %207 = load i16, ptr %206, align 8, !tbaa !36
  br label %.thread363.sink.split

208:                                              ; preds = %197
  %.not305 = icmp eq i16 %.6247, 0
  %209 = icmp eq ptr %.1210, null
  br i1 %.not305, label %227, label %210

210:                                              ; preds = %208
  br i1 %209, label %214, label %211

211:                                              ; preds = %210
  %212 = getelementptr inbounds i8, ptr %.1210, i64 8
  %213 = load ptr, ptr %212, align 8, !tbaa !35
  %.not307 = icmp eq ptr %213, null
  br i1 %.not307, label %214, label %216

214:                                              ; preds = %210, %211
  %215 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.13, i32 noundef 743, ptr noundef nonnull @.str.2)
  %.phi.trans.insert = getelementptr inbounds i8, ptr %.1210, i64 8
  %.0400.pre = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !35
  br label %216

216:                                              ; preds = %214, %211
  %.0400 = phi ptr [ %.0400.pre, %214 ], [ %213, %211 ]
  %217 = load ptr, ptr %.0400, align 8, !tbaa !35
  %.not308401 = icmp eq ptr %217, null
  br i1 %.not308401, label %._crit_edge405, label %.lr.ph404

.lr.ph404:                                        ; preds = %216, %.lr.ph404
  %.0 = phi ptr [ %221, %.lr.ph404 ], [ %217, %216 ]
  %.0402 = phi ptr [ %.0, %.lr.ph404 ], [ %.0400, %216 ]
  %218 = getelementptr inbounds i8, ptr %.0402, i64 16
  %219 = load i16, ptr %218, align 8, !tbaa !36
  %220 = add i16 %219, %.6247
  store i16 %220, ptr %218, align 8, !tbaa !36
  %221 = load ptr, ptr %.0, align 8, !tbaa !35
  %.not308 = icmp eq ptr %221, null
  br i1 %.not308, label %._crit_edge405, label %.lr.ph404, !llvm.loop !38

._crit_edge405:                                   ; preds = %.lr.ph404, %216
  %.0.lcssa = phi ptr [ %.0400, %216 ], [ %.0, %.lr.ph404 ]
  %222 = getelementptr inbounds i8, ptr %.0.lcssa, i64 16
  %223 = load <2 x i16>, ptr %222, align 8, !tbaa !5
  %224 = insertelement <2 x i16> poison, i16 %.6247, i64 0
  %225 = shufflevector <2 x i16> %224, <2 x i16> poison, <2 x i32> zeroinitializer
  %226 = add <2 x i16> %223, %225
  store <2 x i16> %226, ptr %222, align 8, !tbaa !5
  br label %.thread363.sink.split

227:                                              ; preds = %208
  br i1 %209, label %231, label %.thread363

.thread363.sink.split:                            ; preds = %._crit_edge405, %203
  %.sink438 = phi i16 [ %207, %203 ], [ %.6247, %._crit_edge405 ]
  %228 = getelementptr inbounds i8, ptr %.1210, i64 16
  %229 = load i16, ptr %228, align 8, !tbaa !22
  %230 = add i16 %229, %.sink438
  store i16 %230, ptr %228, align 8, !tbaa !22
  br label %.thread363

.thread363:                                       ; preds = %.thread363.sink.split, %227
  br label %231

231:                                              ; preds = %227, %.thread363
  %.1210.sink = phi ptr [ %.1210, %.thread363 ], [ %21, %227 ]
  store ptr %.0224.lcssa, ptr %.1210.sink, align 8, !tbaa !35
  %232 = getelementptr inbounds i8, ptr %0, i64 108
  %233 = load i32, ptr %232, align 4, !tbaa !34
  %234 = add i32 %233, %174
  store i32 %234, ptr %232, align 4, !tbaa !34
  %235 = getelementptr inbounds i8, ptr %0, i64 116
  %236 = load i16, ptr %235, align 4, !tbaa !39
  %237 = sub i16 %236, %2
  store i16 %237, ptr %235, align 4, !tbaa !39
  store i16 %.7257.lcssa, ptr %19, align 2, !tbaa !15
  %.not310 = icmp eq i16 %.7257.lcssa, 0
  br i1 %.not310, label %245, label %238

238:                                              ; preds = %231
  %239 = getelementptr inbounds i8, ptr %0, i64 136
  %240 = load ptr, ptr %239, align 8, !tbaa !40
  %.not311 = icmp eq ptr %240, null
  br i1 %.not311, label %241, label %245

241:                                              ; preds = %238
  %242 = load ptr, ptr %21, align 8, !tbaa !16
  %.not312 = icmp eq ptr %242, null
  br i1 %.not312, label %243, label %245

243:                                              ; preds = %241
  %244 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.14, i32 noundef 787, ptr noundef nonnull @.str.2)
  br label %245

245:                                              ; preds = %238, %241, %243, %231
  %.not313 = icmp eq ptr %.4215.lcssa, null
  br i1 %.not313, label %275, label %246

246:                                              ; preds = %245
  %247 = getelementptr inbounds i8, ptr %.4215.lcssa, i64 24
  %248 = load ptr, ptr %247, align 8, !tbaa !41
  %.not314 = icmp ne ptr %248, null
  %249 = and i8 %3, 2
  %250 = icmp eq i8 %249, 0
  %or.cond326 = and i1 %250, %.not314
  br i1 %or.cond326, label %251, label %275

251:                                              ; preds = %246
  %252 = getelementptr inbounds i8, ptr %248, i64 12
  %253 = load i16, ptr %252, align 1, !tbaa !42
  %254 = call zeroext i16 @lwip_htons(i16 noundef zeroext 8) #6
  %255 = or i16 %254, %253
  %256 = load ptr, ptr %247, align 8, !tbaa !41
  %257 = getelementptr inbounds i8, ptr %256, i64 12
  store i16 %255, ptr %257, align 1, !tbaa !42
  br label %275

.thread349.sink.split:                            ; preds = %156, %149
  %.lcssa.sink = phi ptr [ %147, %149 ], [ %.2219, %156 ]
  %258 = call zeroext i8 @pbuf_free(ptr noundef nonnull %.lcssa.sink) #6
  br label %.thread349

.thread349:                                       ; preds = %146, %125, %160, %.thread349.sink.split
  %259 = getelementptr inbounds i8, ptr %0, i64 42
  %260 = load i16, ptr %259, align 2, !tbaa !33
  %261 = or i16 %260, 128
  store i16 %261, ptr %259, align 2, !tbaa !33
  %.not318 = icmp eq ptr %.6, null
  br i1 %.not318, label %264, label %262

262:                                              ; preds = %.thread349
  %263 = call zeroext i8 @pbuf_free(ptr noundef nonnull %.6) #6
  br label %264

264:                                              ; preds = %262, %.thread349
  %.not319 = icmp eq ptr %.0224390, null
  br i1 %.not319, label %266, label %265

265:                                              ; preds = %264
  call void @tcp_segs_free(ptr noundef nonnull %.0224390) #6
  br label %266

266:                                              ; preds = %.thread369, %265, %264
  %267 = load i16, ptr %19, align 2, !tbaa !15
  %.not320 = icmp eq i16 %267, 0
  br i1 %.not320, label %275, label %268

268:                                              ; preds = %266
  %269 = getelementptr inbounds i8, ptr %0, i64 136
  %270 = load ptr, ptr %269, align 8, !tbaa !40
  %.not321 = icmp eq ptr %270, null
  br i1 %.not321, label %271, label %275

271:                                              ; preds = %268
  %272 = load ptr, ptr %21, align 8, !tbaa !16
  %.not322 = icmp eq ptr %272, null
  br i1 %.not322, label %273, label %275

273:                                              ; preds = %271
  %274 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef nonnull @.str.14, i32 noundef 808, ptr noundef nonnull @.str.2)
  br label %275

275:                                              ; preds = %266, %273, %271, %268, %245, %246, %251, %16, %14, %6
  %.0207 = phi i8 [ -16, %14 ], [ -16, %6 ], [ %17, %16 ], [ 0, %251 ], [ 0, %246 ], [ 0, %245 ], [ -1, %268 ], [ -1, %271 ], [ -1, %273 ], [ -1, %266 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %5) #6
  ret i8 %.0207
}

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden signext i8 @tcp_write_checks(ptr noundef, i16 noundef zeroext) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @tcp_pbuf_prealloc(i32 noundef, i16 noundef zeroext, i16 noundef zeroext, ptr noundef, ptr noundef, i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #0

; Function Attrs: mustprogress 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) #3

declare zeroext i16 @pbuf_clen(ptr noundef) local_unnamed_addr #4

declare ptr @pbuf_alloc(i32 noundef, i16 noundef zeroext, i32 noundef) local_unnamed_addr #4

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

declare zeroext i8 @pbuf_free(ptr noundef) local_unnamed_addr #4

declare void @pbuf_cat(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden ptr @tcp_create_segment(ptr noundef, ptr noundef, i8 noundef zeroext, i32 noundef, i8 noundef zeroext) local_unnamed_addr #0

declare zeroext i16 @lwip_htons(i16 noundef zeroext) local_unnamed_addr #4

declare void @tcp_segs_free(ptr noundef) local_unnamed_addr #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i16 @llvm.umin.i16(i16, i16) #5

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

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 nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nofree 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 #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { "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 nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 = !{!"short", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 66}
!10 = !{!"tcp_pcb", !11, i64 0, !11, i64 4, !7, i64 8, !7, i64 9, !7, i64 10, !7, i64 11, !13, i64 16, !13, i64 24, !12, i64 32, !7, i64 36, !6, i64 38, !6, i64 40, !6, i64 42, !7, i64 44, !7, i64 45, !7, i64 46, !12, i64 48, !12, i64 52, !6, i64 56, !6, i64 58, !12, i64 60, !6, i64 64, !6, i64 66, !12, i64 68, !12, i64 72, !6, i64 76, !6, i64 78, !6, i64 80, !7, i64 82, !7, i64 83, !12, i64 84, !6, i64 88, !6, i64 90, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !6, i64 112, !6, i64 114, !6, i64 116, !6, i64 118, !6, i64 120, !6, i64 122, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !12, i64 200, !7, i64 204, !7, i64 205, !7, i64 206, !7, i64 207}
!11 = !{!"ip4_addr", !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!10, !6, i64 114}
!15 = !{!10, !6, i64 118}
!16 = !{!10, !13, i64 128}
!17 = !{!18, !13, i64 0}
!18 = !{!"tcp_seg", !13, i64 0, !13, i64 8, !6, i64 16, !7, i64 18, !13, i64 24}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!18, !7, i64 18}
!22 = !{!18, !6, i64 16}
!23 = !{!10, !6, i64 120}
!24 = !{!25, !13, i64 8}
!25 = !{!"pbuf", !13, i64 0, !13, i64 8, !6, i64 16, !6, i64 18, !7, i64 20, !7, i64 21, !7, i64 22, !7, i64 23}
!26 = !{!18, !13, i64 8}
!27 = !{!25, !13, i64 0}
!28 = distinct !{!28, !20}
!29 = !{!25, !7, i64 20}
!30 = !{!25, !6, i64 18}
!31 = !{!32, !13, i64 8}
!32 = !{!"pbuf_rom", !13, i64 0, !13, i64 8}
!33 = !{!10, !6, i64 42}
!34 = !{!10, !12, i64 108}
!35 = !{!13, !13, i64 0}
!36 = !{!25, !6, i64 16}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = !{!10, !6, i64 116}
!40 = !{!10, !13, i64 136}
!41 = !{!18, !13, i64 24}
!42 = !{!43, !6, i64 12}
!43 = !{!"tcp_hdr", !6, i64 0, !6, i64 2, !12, i64 4, !12, i64 8, !6, i64 12, !6, i64 14, !6, i64 16, !6, i64 18}


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