; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal (TcpInput)

; 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_OPTION = type { i8, i8, i16, i32, i32 }
%struct.NET_BUF = type { i32, i64, %struct._LIST_ENTRY, %union.NET_IP_HEAD, ptr, ptr, [64 x i8], ptr, i32, i32, [1 x %struct.NET_BLOCK_OP] }
%struct._LIST_ENTRY = type { ptr, ptr }
%union.NET_IP_HEAD = type { ptr }
%struct.NET_BLOCK_OP = type { ptr, ptr, ptr, ptr, i32 }
%struct.TCP_HEAD = type { i16, i16, i32, i32, i8, i8, i16, i16, i16 }
%struct._TCP_CB = type { %struct._LIST_ENTRY, ptr, ptr, %struct._TCP_PEER, %struct._TCP_PEER, %struct._LIST_ENTRY, %struct._LIST_ENTRY, i32, i32, i8, i8, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i32, i32, i32, i32, i32, i16, i16, [6 x i32], i32, i32, i32, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i8, i8, i32, i32, i32, i8, i8, i16, i32, i32, i32, i8, i8, i8, %struct.EFI_IPv4_ADDRESS, ptr }
%struct._TCP_PEER = type { i32, i16 }
%struct.EFI_IPv4_ADDRESS = type { [4 x i8] }
%struct._TCP_SEG = type { i32, i32, i32, i8, i16, i32 }
%struct._SOCKET = type { i32, ptr, ptr, ptr, ptr, %struct._LIST_ENTRY, i8, i32, i8, i16, %struct.EFI_LOCK, %struct._SOCK_BUFFER, %struct._SOCK_BUFFER, i64, i8, i32, i32, ptr, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, %struct._LIST_ENTRY, ptr, ptr, ptr, [20 x i8], %union._NET_PROTOCOL, ptr, ptr, ptr }
%struct.EFI_LOCK = type { i64, i64, i32 }
%struct._SOCK_BUFFER = type { i32, i32, ptr }
%union._NET_PROTOCOL = type { %struct._EFI_TCP4_PROTOCOL }
%struct._EFI_TCP4_PROTOCOL = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str.7 = external hidden unnamed_addr constant [152 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [107 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [63 x i8], align 1
@mTcpTick = external global i32, align 4
@.str.38 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [24 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @TcpSeqAcceptable(ptr noundef, ptr noundef) #0

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

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

declare zeroext i8 @DebugPrintEnabled() #2

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) #2

declare void @DebugPrint(i64 noundef, ptr noundef, ...) #2

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

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

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

declare i32 @NetbufTrim(ptr noundef, i32 noundef, i8 noundef zeroext) #2

declare zeroext i8 @DebugAssertEnabled() #2

declare void @DebugAssert(ptr noundef, i64 noundef, ptr noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @TcpDeliverData(ptr noundef) #0

declare zeroext i8 @IsListEmpty(ptr noundef) #2

declare void @NetbufFree(ptr noundef) #2

declare void @TcpSetState(ptr noundef, i8 noundef zeroext) #2

declare void @TcpClearAllTimer(ptr noundef) #2

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

declare void @TcpSendAck(ptr noundef) #2

declare void @TcpClose(ptr noundef) #2

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

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

; Function Attrs: nounwind uwtable
define dso_local i64 @TcpInput(ptr noundef %0, i32 noundef %1, i32 noundef %2) #0 {
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca %struct._TCP_OPTION, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 12, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  br label %17

17:                                               ; preds = %3
  %18 = call zeroext i8 @DebugAssertEnabled()
  %19 = icmp ne i8 %18, 0
  br i1 %19, label %20, label %30

20:                                               ; preds = %17
  %21 = load ptr, ptr %5, align 8, !tbaa !5
  %22 = icmp ne ptr %21, null
  br i1 %22, label %23, label %28

23:                                               ; preds = %20
  %24 = load ptr, ptr %5, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.NET_BUF, ptr %24, i32 0, i32 0
  %26 = load i32, ptr %25, align 8, !tbaa !11
  %27 = icmp eq i32 %26, 1718968942
  br i1 %27, label %29, label %28

28:                                               ; preds = %23, %20
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 707, ptr noundef @.str.15)
  br label %29

29:                                               ; preds = %28, %23
  br label %30

30:                                               ; preds = %29, %17
  br label %31

31:                                               ; preds = %30
  br label %32

32:                                               ; preds = %31
  store ptr null, ptr %9, align 8, !tbaa !5
  store ptr null, ptr %8, align 8, !tbaa !5
  %33 = load ptr, ptr %5, align 8, !tbaa !5
  %34 = call ptr @NetbufGetByte(ptr noundef %33, i32 noundef 0, ptr noundef null)
  store ptr %34, ptr %11, align 8, !tbaa !5
  br label %35

35:                                               ; preds = %32
  %36 = call zeroext i8 @DebugAssertEnabled()
  %37 = icmp ne i8 %36, 0
  br i1 %37, label %38, label %43

38:                                               ; preds = %35
  %39 = load ptr, ptr %11, align 8, !tbaa !5
  %40 = icmp ne ptr %39, null
  br i1 %40, label %42, label %41

41:                                               ; preds = %38
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 713, ptr noundef @.str.16)
  br label %42

42:                                               ; preds = %41, %38
  br label %43

43:                                               ; preds = %42, %35
  br label %44

44:                                               ; preds = %43
  br label %45

45:                                               ; preds = %44
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.NET_BUF, ptr %46, i32 0, i32 9
  %48 = load i32, ptr %47, align 4, !tbaa !15
  %49 = load ptr, ptr %11, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.TCP_HEAD, ptr %49, i32 0, i32 4
  %51 = load i8, ptr %50, align 1
  %52 = lshr i8 %51, 4
  %53 = zext i8 %52 to i32
  %54 = shl i32 %53, 2
  %55 = sub i32 %48, %54
  store i32 %55, ptr %12, align 4, !tbaa !9
  %56 = load ptr, ptr %11, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.TCP_HEAD, ptr %56, i32 0, i32 4
  %58 = load i8, ptr %57, align 1
  %59 = lshr i8 %58, 4
  %60 = zext i8 %59 to i32
  %61 = icmp slt i32 %60, 5
  br i1 %61, label %73, label %62

62:                                               ; preds = %45
  %63 = load i32, ptr %12, align 4, !tbaa !9
  %64 = icmp slt i32 %63, 0
  br i1 %64, label %73, label %65

65:                                               ; preds = %62
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = load i32, ptr %6, align 4, !tbaa !9
  %68 = load i32, ptr %7, align 4, !tbaa !9
  %69 = call zeroext i16 @NetPseudoHeadChecksum(i32 noundef %67, i32 noundef %68, i8 noundef zeroext 6, i16 noundef zeroext 0)
  %70 = call zeroext i16 @TcpChecksum(ptr noundef %66, i16 noundef zeroext %69)
  %71 = zext i16 %70 to i32
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %73, label %88

73:                                               ; preds = %65, %62, %45
  br label %74

74:                                               ; preds = %73
  %75 = call zeroext i8 @DebugPrintEnabled()
  %76 = icmp ne i8 %75, 0
  br i1 %76, label %77, label %85

77:                                               ; preds = %74
  br label %78

78:                                               ; preds = %77
  %79 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %80 = icmp ne i8 %79, 0
  br i1 %80, label %81, label %82

81:                                               ; preds = %78
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.17)
  br label %82

82:                                               ; preds = %81, %78
  br label %83

83:                                               ; preds = %82
  br label %84

84:                                               ; preds = %83
  br label %85

85:                                               ; preds = %84, %74
  br label %86

86:                                               ; preds = %85
  br label %87

87:                                               ; preds = %86
  br label %1785

88:                                               ; preds = %65
  %89 = load ptr, ptr %11, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.TCP_HEAD, ptr %89, i32 0, i32 5
  %91 = load i8, ptr %90, align 1, !tbaa !16
  %92 = zext i8 %91 to i32
  %93 = and i32 %92, 2
  %94 = icmp ne i32 %93, 0
  %95 = zext i1 %94 to i32
  %96 = trunc i32 %95 to i8
  %97 = icmp ne i8 %96, 0
  br i1 %97, label %98, label %101

98:                                               ; preds = %88
  %99 = load i32, ptr %12, align 4, !tbaa !9
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %12, align 4, !tbaa !9
  br label %101

101:                                              ; preds = %98, %88
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.TCP_HEAD, ptr %102, i32 0, i32 5
  %104 = load i8, ptr %103, align 1, !tbaa !16
  %105 = zext i8 %104 to i32
  %106 = and i32 %105, 1
  %107 = icmp ne i32 %106, 0
  %108 = zext i1 %107 to i32
  %109 = trunc i32 %108 to i8
  %110 = icmp ne i8 %109, 0
  br i1 %110, label %111, label %114

111:                                              ; preds = %101
  %112 = load i32, ptr %12, align 4, !tbaa !9
  %113 = add nsw i32 %112, 1
  store i32 %113, ptr %12, align 4, !tbaa !9
  br label %114

114:                                              ; preds = %111, %101
  %115 = load ptr, ptr %11, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.TCP_HEAD, ptr %115, i32 0, i32 1
  %117 = load i16, ptr %116, align 1, !tbaa !19
  %118 = load i32, ptr %7, align 4, !tbaa !9
  %119 = load ptr, ptr %11, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.TCP_HEAD, ptr %119, i32 0, i32 0
  %121 = load i16, ptr %120, align 1, !tbaa !20
  %122 = load i32, ptr %6, align 4, !tbaa !9
  %123 = load ptr, ptr %11, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.TCP_HEAD, ptr %123, i32 0, i32 5
  %125 = load i8, ptr %124, align 1, !tbaa !16
  %126 = zext i8 %125 to i32
  %127 = and i32 %126, 2
  %128 = icmp ne i32 %127, 0
  %129 = zext i1 %128 to i32
  %130 = trunc i32 %129 to i8
  %131 = call ptr @TcpLocateTcb(i16 noundef zeroext %117, i32 noundef %118, i16 noundef zeroext %121, i32 noundef %122, i8 noundef zeroext %130)
  store ptr %131, ptr %8, align 8, !tbaa !5
  %132 = load ptr, ptr %8, align 8, !tbaa !5
  %133 = icmp eq ptr %132, null
  br i1 %133, label %140, label %134

134:                                              ; preds = %114
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct._TCP_CB, ptr %135, i32 0, i32 9
  %137 = load i8, ptr %136, align 8, !tbaa !21
  %138 = zext i8 %137 to i32
  %139 = icmp eq i32 %138, 0
  br i1 %139, label %140, label %155

140:                                              ; preds = %134, %114
  br label %141

141:                                              ; preds = %140
  %142 = call zeroext i8 @DebugPrintEnabled()
  %143 = icmp ne i8 %142, 0
  br i1 %143, label %144, label %152

144:                                              ; preds = %141
  br label %145

145:                                              ; preds = %144
  %146 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %147 = icmp ne i8 %146, 0
  br i1 %147, label %148, label %149

148:                                              ; preds = %145
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.18)
  br label %149

149:                                              ; preds = %148, %145
  br label %150

150:                                              ; preds = %149
  br label %151

151:                                              ; preds = %150
  br label %152

152:                                              ; preds = %151, %141
  br label %153

153:                                              ; preds = %152
  br label %154

154:                                              ; preds = %153
  store ptr null, ptr %8, align 8, !tbaa !5
  br label %1778

155:                                              ; preds = %134
  %156 = load ptr, ptr %8, align 8, !tbaa !5
  %157 = load ptr, ptr %5, align 8, !tbaa !5
  %158 = call ptr @TcpFormatNetbuf(ptr noundef %156, ptr noundef %157)
  store ptr %158, ptr %13, align 8, !tbaa !5
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.NET_BUF, ptr %159, i32 0, i32 4
  %161 = load ptr, ptr %160, align 8, !tbaa !25
  %162 = call i64 @TcpParseOption(ptr noundef %161, ptr noundef %10)
  %163 = icmp eq i64 %162, -1
  br i1 %163, label %164, label %180

164:                                              ; preds = %155
  br label %165

165:                                              ; preds = %164
  %166 = call zeroext i8 @DebugPrintEnabled()
  %167 = icmp ne i8 %166, 0
  br i1 %167, label %168, label %177

168:                                              ; preds = %165
  br label %169

169:                                              ; preds = %168
  %170 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %171 = icmp ne i8 %170, 0
  br i1 %171, label %172, label %174

172:                                              ; preds = %169
  %173 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str.19, ptr noundef %173)
  br label %174

174:                                              ; preds = %172, %169
  br label %175

175:                                              ; preds = %174
  br label %176

176:                                              ; preds = %175
  br label %177

177:                                              ; preds = %176, %165
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178
  br label %1778

180:                                              ; preds = %155
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.TCP_HEAD, ptr %182, i32 0, i32 4
  %184 = load i8, ptr %183, align 1
  %185 = lshr i8 %184, 4
  %186 = zext i8 %185 to i32
  %187 = shl i32 %186, 2
  %188 = call i32 @NetbufTrim(ptr noundef %181, i32 noundef %187, i8 noundef zeroext 1)
  %189 = load ptr, ptr %5, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.NET_BUF, ptr %189, i32 0, i32 4
  store ptr null, ptr %190, align 8, !tbaa !25
  %191 = load ptr, ptr %8, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct._TCP_CB, ptr %191, i32 0, i32 9
  %193 = load i8, ptr %192, align 8, !tbaa !21
  %194 = zext i8 %193 to i32
  %195 = icmp eq i32 %194, 1
  br i1 %195, label %196, label %327

196:                                              ; preds = %180
  %197 = load ptr, ptr %13, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct._TCP_SEG, ptr %197, i32 0, i32 3
  %199 = load i8, ptr %198, align 4, !tbaa !26
  %200 = zext i8 %199 to i32
  %201 = and i32 %200, 4
  %202 = icmp ne i32 %201, 0
  %203 = zext i1 %202 to i32
  %204 = trunc i32 %203 to i8
  %205 = icmp ne i8 %204, 0
  br i1 %205, label %206, label %222

206:                                              ; preds = %196
  br label %207

207:                                              ; preds = %206
  %208 = call zeroext i8 @DebugPrintEnabled()
  %209 = icmp ne i8 %208, 0
  br i1 %209, label %210, label %219

210:                                              ; preds = %207
  br label %211

211:                                              ; preds = %210
  %212 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %213 = icmp ne i8 %212, 0
  br i1 %213, label %214, label %216

214:                                              ; preds = %211
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.20, ptr noundef %215)
  br label %216

216:                                              ; preds = %214, %211
  br label %217

217:                                              ; preds = %216
  br label %218

218:                                              ; preds = %217
  br label %219

219:                                              ; preds = %218, %207
  br label %220

220:                                              ; preds = %219
  br label %221

221:                                              ; preds = %220
  br label %1785

222:                                              ; preds = %196
  %223 = load ptr, ptr %13, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct._TCP_SEG, ptr %223, i32 0, i32 3
  %225 = load i8, ptr %224, align 4, !tbaa !26
  %226 = zext i8 %225 to i32
  %227 = and i32 %226, 16
  %228 = icmp ne i32 %227, 0
  %229 = zext i1 %228 to i32
  %230 = trunc i32 %229 to i8
  %231 = icmp ne i8 %230, 0
  br i1 %231, label %232, label %248

232:                                              ; preds = %222
  br label %233

233:                                              ; preds = %232
  %234 = call zeroext i8 @DebugPrintEnabled()
  %235 = icmp ne i8 %234, 0
  br i1 %235, label %236, label %245

236:                                              ; preds = %233
  br label %237

237:                                              ; preds = %236
  %238 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %239 = icmp ne i8 %238, 0
  br i1 %239, label %240, label %242

240:                                              ; preds = %237
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.21, ptr noundef %241)
  br label %242

242:                                              ; preds = %240, %237
  br label %243

243:                                              ; preds = %242
  br label %244

244:                                              ; preds = %243
  br label %245

245:                                              ; preds = %244, %233
  br label %246

246:                                              ; preds = %245
  br label %247

247:                                              ; preds = %246
  br label %1778

248:                                              ; preds = %222
  %249 = load ptr, ptr %13, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct._TCP_SEG, ptr %249, i32 0, i32 3
  %251 = load i8, ptr %250, align 4, !tbaa !26
  %252 = zext i8 %251 to i32
  %253 = and i32 %252, 2
  %254 = icmp ne i32 %253, 0
  %255 = zext i1 %254 to i32
  %256 = trunc i32 %255 to i8
  %257 = icmp ne i8 %256, 0
  br i1 %257, label %258, label %326

258:                                              ; preds = %248
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %259, ptr %9, align 8, !tbaa !5
  %260 = load ptr, ptr %9, align 8, !tbaa !5
  %261 = call ptr @TcpCloneTcb(ptr noundef %260)
  store ptr %261, ptr %8, align 8, !tbaa !5
  %262 = load ptr, ptr %8, align 8, !tbaa !5
  %263 = icmp eq ptr %262, null
  br i1 %263, label %264, label %280

264:                                              ; preds = %258
  br label %265

265:                                              ; preds = %264
  %266 = call zeroext i8 @DebugPrintEnabled()
  %267 = icmp ne i8 %266, 0
  br i1 %267, label %268, label %277

268:                                              ; preds = %265
  br label %269

269:                                              ; preds = %268
  %270 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %271 = icmp ne i8 %270, 0
  br i1 %271, label %272, label %274

272:                                              ; preds = %269
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str.22, ptr noundef %273)
  br label %274

274:                                              ; preds = %272, %269
  br label %275

275:                                              ; preds = %274
  br label %276

276:                                              ; preds = %275
  br label %277

277:                                              ; preds = %276, %265
  br label %278

278:                                              ; preds = %277
  br label %279

279:                                              ; preds = %278
  br label %1785

280:                                              ; preds = %258
  br label %281

281:                                              ; preds = %280
  %282 = call zeroext i8 @DebugPrintEnabled()
  %283 = icmp ne i8 %282, 0
  br i1 %283, label %284, label %293

284:                                              ; preds = %281
  br label %285

285:                                              ; preds = %284
  %286 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %287 = icmp ne i8 %286, 0
  br i1 %287, label %288, label %290

288:                                              ; preds = %285
  %289 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.23, ptr noundef %289)
  br label %290

290:                                              ; preds = %288, %285
  br label %291

291:                                              ; preds = %290
  br label %292

292:                                              ; preds = %291
  br label %293

293:                                              ; preds = %292, %281
  br label %294

294:                                              ; preds = %293
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %7, align 4, !tbaa !9
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct._TCP_CB, ptr %297, i32 0, i32 3
  %299 = getelementptr inbounds %struct._TCP_PEER, ptr %298, i32 0, i32 0
  store i32 %296, ptr %299, align 8, !tbaa !28
  %300 = load ptr, ptr %11, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.TCP_HEAD, ptr %300, i32 0, i32 1
  %302 = load i16, ptr %301, align 1, !tbaa !19
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct._TCP_CB, ptr %303, i32 0, i32 3
  %305 = getelementptr inbounds %struct._TCP_PEER, ptr %304, i32 0, i32 1
  store i16 %302, ptr %305, align 4, !tbaa !29
  %306 = load i32, ptr %6, align 4, !tbaa !9
  %307 = load ptr, ptr %8, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct._TCP_CB, ptr %307, i32 0, i32 4
  %309 = getelementptr inbounds %struct._TCP_PEER, ptr %308, i32 0, i32 0
  store i32 %306, ptr %309, align 8, !tbaa !30
  %310 = load ptr, ptr %11, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.TCP_HEAD, ptr %310, i32 0, i32 0
  %312 = load i16, ptr %311, align 1, !tbaa !20
  %313 = load ptr, ptr %8, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct._TCP_CB, ptr %313, i32 0, i32 4
  %315 = getelementptr inbounds %struct._TCP_PEER, ptr %314, i32 0, i32 1
  store i16 %312, ptr %315, align 4, !tbaa !31
  %316 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpInitTcbLocal(ptr noundef %316)
  %317 = load ptr, ptr %8, align 8, !tbaa !5
  %318 = load ptr, ptr %13, align 8, !tbaa !5
  call void @TcpInitTcbPeer(ptr noundef %317, ptr noundef %318, ptr noundef %10)
  %319 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %319, i8 noundef zeroext 3)
  %320 = load ptr, ptr %8, align 8, !tbaa !5
  %321 = load ptr, ptr %8, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct._TCP_CB, ptr %321, i32 0, i32 57
  %323 = load i32, ptr %322, align 8, !tbaa !32
  call void @TcpSetTimer(ptr noundef %320, i16 noundef zeroext 0, i32 noundef %323)
  %324 = load ptr, ptr %8, align 8, !tbaa !5
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  call void @TcpTrimInWnd(ptr noundef %324, ptr noundef %325)
  br label %1506

326:                                              ; preds = %248
  br label %1785

327:                                              ; preds = %180
  %328 = load ptr, ptr %8, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct._TCP_CB, ptr %328, i32 0, i32 9
  %330 = load i8, ptr %329, align 8, !tbaa !21
  %331 = zext i8 %330 to i32
  %332 = icmp eq i32 %331, 2
  br i1 %332, label %333, label %555

333:                                              ; preds = %327
  %334 = load ptr, ptr %13, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct._TCP_SEG, ptr %334, i32 0, i32 3
  %336 = load i8, ptr %335, align 4, !tbaa !26
  %337 = zext i8 %336 to i32
  %338 = and i32 %337, 16
  %339 = icmp ne i32 %338, 0
  %340 = zext i1 %339 to i32
  %341 = trunc i32 %340 to i8
  %342 = zext i8 %341 to i32
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %344, label %369

344:                                              ; preds = %333
  %345 = load ptr, ptr %13, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct._TCP_SEG, ptr %345, i32 0, i32 2
  %347 = load i32, ptr %346, align 4, !tbaa !33
  %348 = load ptr, ptr %8, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct._TCP_CB, ptr %348, i32 0, i32 12
  %350 = load i32, ptr %349, align 4, !tbaa !34
  %351 = add i32 %350, 1
  %352 = icmp ne i32 %347, %351
  br i1 %352, label %353, label %369

353:                                              ; preds = %344
  br label %354

354:                                              ; preds = %353
  %355 = call zeroext i8 @DebugPrintEnabled()
  %356 = icmp ne i8 %355, 0
  br i1 %356, label %357, label %366

357:                                              ; preds = %354
  br label %358

358:                                              ; preds = %357
  %359 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %360 = icmp ne i8 %359, 0
  br i1 %360, label %361, label %363

361:                                              ; preds = %358
  %362 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.24, ptr noundef %362)
  br label %363

363:                                              ; preds = %361, %358
  br label %364

364:                                              ; preds = %363
  br label %365

365:                                              ; preds = %364
  br label %366

366:                                              ; preds = %365, %354
  br label %367

367:                                              ; preds = %366
  br label %368

368:                                              ; preds = %367
  br label %1778

369:                                              ; preds = %344, %333
  %370 = load ptr, ptr %13, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct._TCP_SEG, ptr %370, i32 0, i32 3
  %372 = load i8, ptr %371, align 4, !tbaa !26
  %373 = zext i8 %372 to i32
  %374 = and i32 %373, 4
  %375 = icmp ne i32 %374, 0
  %376 = zext i1 %375 to i32
  %377 = trunc i32 %376 to i8
  %378 = icmp ne i8 %377, 0
  br i1 %378, label %379, label %425

379:                                              ; preds = %369
  %380 = load ptr, ptr %13, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct._TCP_SEG, ptr %380, i32 0, i32 3
  %382 = load i8, ptr %381, align 4, !tbaa !26
  %383 = zext i8 %382 to i32
  %384 = and i32 %383, 16
  %385 = icmp ne i32 %384, 0
  %386 = zext i1 %385 to i32
  %387 = trunc i32 %386 to i8
  %388 = icmp ne i8 %387, 0
  br i1 %388, label %389, label %409

389:                                              ; preds = %379
  br label %390

390:                                              ; preds = %389
  %391 = call zeroext i8 @DebugPrintEnabled()
  %392 = icmp ne i8 %391, 0
  br i1 %392, label %393, label %402

393:                                              ; preds = %390
  br label %394

394:                                              ; preds = %393
  %395 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %396 = icmp ne i8 %395, 0
  br i1 %396, label %397, label %399

397:                                              ; preds = %394
  %398 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.25, ptr noundef %398)
  br label %399

399:                                              ; preds = %397, %394
  br label %400

400:                                              ; preds = %399
  br label %401

401:                                              ; preds = %400
  br label %402

402:                                              ; preds = %401, %390
  br label %403

403:                                              ; preds = %402
  br label %404

404:                                              ; preds = %403
  %405 = load ptr, ptr %8, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct._TCP_CB, ptr %405, i32 0, i32 2
  %407 = load ptr, ptr %406, align 8, !tbaa !35
  %408 = getelementptr inbounds %struct._SOCKET, ptr %407, i32 0, i32 13
  store i64 -9223372036854775703, ptr %408, align 8, !tbaa !36
  br label %1759

409:                                              ; preds = %379
  br label %410

410:                                              ; preds = %409
  %411 = call zeroext i8 @DebugPrintEnabled()
  %412 = icmp ne i8 %411, 0
  br i1 %412, label %413, label %422

413:                                              ; preds = %410
  br label %414

414:                                              ; preds = %413
  %415 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %416 = icmp ne i8 %415, 0
  br i1 %416, label %417, label %419

417:                                              ; preds = %414
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.26, ptr noundef %418)
  br label %419

419:                                              ; preds = %417, %414
  br label %420

420:                                              ; preds = %419
  br label %421

421:                                              ; preds = %420
  br label %422

422:                                              ; preds = %421, %410
  br label %423

423:                                              ; preds = %422
  br label %424

424:                                              ; preds = %423
  br label %1785

425:                                              ; preds = %369
  %426 = load ptr, ptr %13, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct._TCP_SEG, ptr %426, i32 0, i32 3
  %428 = load i8, ptr %427, align 4, !tbaa !26
  %429 = zext i8 %428 to i32
  %430 = and i32 %429, 2
  %431 = icmp ne i32 %430, 0
  %432 = zext i1 %431 to i32
  %433 = trunc i32 %432 to i8
  %434 = icmp ne i8 %433, 0
  br i1 %434, label %435, label %554

435:                                              ; preds = %425
  %436 = load ptr, ptr %8, align 8, !tbaa !5
  %437 = load ptr, ptr %13, align 8, !tbaa !5
  call void @TcpInitTcbPeer(ptr noundef %436, ptr noundef %437, ptr noundef %10)
  %438 = load ptr, ptr %13, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct._TCP_SEG, ptr %438, i32 0, i32 3
  %440 = load i8, ptr %439, align 4, !tbaa !26
  %441 = zext i8 %440 to i32
  %442 = and i32 %441, 16
  %443 = icmp ne i32 %442, 0
  %444 = zext i1 %443 to i32
  %445 = trunc i32 %444 to i8
  %446 = icmp ne i8 %445, 0
  br i1 %446, label %447, label %453

447:                                              ; preds = %435
  %448 = load ptr, ptr %13, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct._TCP_SEG, ptr %448, i32 0, i32 2
  %450 = load i32, ptr %449, align 4, !tbaa !33
  %451 = load ptr, ptr %8, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct._TCP_CB, ptr %451, i32 0, i32 13
  store i32 %450, ptr %452, align 8, !tbaa !40
  br label %453

453:                                              ; preds = %447, %435
  %454 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearTimer(ptr noundef %454, i16 noundef zeroext 1)
  %455 = load ptr, ptr %8, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct._TCP_CB, ptr %455, i32 0, i32 12
  %457 = load i32, ptr %456, align 4, !tbaa !34
  %458 = load ptr, ptr %8, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct._TCP_CB, ptr %458, i32 0, i32 13
  %460 = load i32, ptr %459, align 8, !tbaa !40
  %461 = sub i32 %457, %460
  %462 = icmp slt i32 %461, 0
  br i1 %462, label %463, label %514

463:                                              ; preds = %453
  %464 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %464, i8 noundef zeroext 4)
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearTimer(ptr noundef %465, i16 noundef zeroext 0)
  %466 = load ptr, ptr %8, align 8, !tbaa !5
  %467 = call i64 @TcpDeliverData(ptr noundef %466)
  %468 = load ptr, ptr %8, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct._TCP_CB, ptr %468, i32 0, i32 47
  %470 = load i8, ptr %469, align 2, !tbaa !41
  %471 = zext i8 %470 to i32
  %472 = icmp eq i32 %471, 3
  br i1 %472, label %473, label %492

473:                                              ; preds = %463
  %474 = load ptr, ptr %8, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct._TCP_CB, ptr %474, i32 0, i32 7
  %476 = load i32, ptr %475, align 8, !tbaa !42
  %477 = and i32 %476, 8192
  %478 = icmp ne i32 %477, 0
  %479 = zext i1 %478 to i32
  %480 = trunc i32 %479 to i8
  %481 = zext i8 %480 to i32
  %482 = icmp ne i32 %481, 0
  br i1 %482, label %483, label %492

483:                                              ; preds = %473
  %484 = load ptr, ptr %8, align 8, !tbaa !5
  %485 = load ptr, ptr %8, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct._TCP_CB, ptr %485, i32 0, i32 39
  %487 = load i32, ptr %486, align 8, !tbaa !43
  call void @TcpComputeRtt(ptr noundef %484, i32 noundef %487)
  %488 = load ptr, ptr %8, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct._TCP_CB, ptr %488, i32 0, i32 7
  %490 = load i32, ptr %489, align 8, !tbaa !42
  %491 = and i32 %490, -8193
  store i32 %491, ptr %489, align 8, !tbaa !42
  br label %492

492:                                              ; preds = %483, %473, %463
  %493 = load ptr, ptr %8, align 8, !tbaa !5
  %494 = load ptr, ptr %5, align 8, !tbaa !5
  call void @TcpTrimInWnd(ptr noundef %493, ptr noundef %494)
  %495 = load ptr, ptr %8, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct._TCP_CB, ptr %495, i32 0, i32 7
  %497 = load i32, ptr %496, align 8, !tbaa !42
  %498 = or i32 %497, 16384
  store i32 %498, ptr %496, align 8, !tbaa !42
  br label %499

499:                                              ; preds = %492
  %500 = call zeroext i8 @DebugPrintEnabled()
  %501 = icmp ne i8 %500, 0
  br i1 %501, label %502, label %511

502:                                              ; preds = %499
  br label %503

503:                                              ; preds = %502
  %504 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %505 = icmp ne i8 %504, 0
  br i1 %505, label %506, label %508

506:                                              ; preds = %503
  %507 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.27, ptr noundef %507)
  br label %508

508:                                              ; preds = %506, %503
  br label %509

509:                                              ; preds = %508
  br label %510

510:                                              ; preds = %509
  br label %511

511:                                              ; preds = %510, %499
  br label %512

512:                                              ; preds = %511
  br label %513

513:                                              ; preds = %512
  br label %1506

514:                                              ; preds = %453
  %515 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %515, i8 noundef zeroext 3)
  br label %516

516:                                              ; preds = %514
  %517 = call zeroext i8 @DebugAssertEnabled()
  %518 = icmp ne i8 %517, 0
  br i1 %518, label %519, label %530

519:                                              ; preds = %516
  %520 = load ptr, ptr %8, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct._TCP_CB, ptr %520, i32 0, i32 14
  %522 = load i32, ptr %521, align 4, !tbaa !44
  %523 = load ptr, ptr %8, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct._TCP_CB, ptr %523, i32 0, i32 12
  %525 = load i32, ptr %524, align 4, !tbaa !34
  %526 = add i32 %525, 1
  %527 = icmp eq i32 %522, %526
  br i1 %527, label %529, label %528

528:                                              ; preds = %519
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 909, ptr noundef @.str.28)
  br label %529

529:                                              ; preds = %528, %519
  br label %530

530:                                              ; preds = %529, %516
  br label %531

531:                                              ; preds = %530
  br label %532

532:                                              ; preds = %531
  %533 = load ptr, ptr %8, align 8, !tbaa !5
  %534 = load ptr, ptr %8, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct._TCP_CB, ptr %534, i32 0, i32 14
  %536 = load i32, ptr %535, align 4, !tbaa !44
  call void @TcpAdjustSndQue(ptr noundef %533, i32 noundef %536)
  %537 = load ptr, ptr %8, align 8, !tbaa !5
  %538 = load ptr, ptr %5, align 8, !tbaa !5
  call void @TcpTrimInWnd(ptr noundef %537, ptr noundef %538)
  br label %539

539:                                              ; preds = %532
  %540 = call zeroext i8 @DebugPrintEnabled()
  %541 = icmp ne i8 %540, 0
  br i1 %541, label %542, label %551

542:                                              ; preds = %539
  br label %543

543:                                              ; preds = %542
  %544 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %545 = icmp ne i8 %544, 0
  br i1 %545, label %546, label %548

546:                                              ; preds = %543
  %547 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.29, ptr noundef %547)
  br label %548

548:                                              ; preds = %546, %543
  br label %549

549:                                              ; preds = %548
  br label %550

550:                                              ; preds = %549
  br label %551

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

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552
  br label %1506

554:                                              ; preds = %425
  br label %1785

555:                                              ; preds = %327
  br label %556

556:                                              ; preds = %555
  %557 = load ptr, ptr %8, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct._TCP_CB, ptr %557, i32 0, i32 33
  %559 = load i8, ptr %558, align 8, !tbaa !45
  %560 = zext i8 %559 to i32
  %561 = icmp ne i32 %560, 0
  br i1 %561, label %562, label %571

562:                                              ; preds = %556
  %563 = load ptr, ptr %13, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct._TCP_SEG, ptr %563, i32 0, i32 5
  %565 = load i32, ptr %564, align 4, !tbaa !46
  %566 = icmp ne i32 %565, 0
  br i1 %566, label %567, label %571

567:                                              ; preds = %562
  %568 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearTimer(ptr noundef %568, i16 noundef zeroext 2)
  %569 = load ptr, ptr %8, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct._TCP_CB, ptr %569, i32 0, i32 33
  store i8 0, ptr %570, align 8, !tbaa !45
  br label %571

571:                                              ; preds = %567, %562, %556
  %572 = load ptr, ptr %8, align 8, !tbaa !5
  %573 = load ptr, ptr %13, align 8, !tbaa !5
  %574 = call i64 @TcpSeqAcceptable(ptr noundef %572, ptr noundef %573)
  %575 = icmp eq i64 %574, 0
  br i1 %575, label %576, label %604

576:                                              ; preds = %571
  br label %577

577:                                              ; preds = %576
  %578 = call zeroext i8 @DebugPrintEnabled()
  %579 = icmp ne i8 %578, 0
  br i1 %579, label %580, label %589

580:                                              ; preds = %577
  br label %581

581:                                              ; preds = %580
  %582 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %583 = icmp ne i8 %582, 0
  br i1 %583, label %584, label %586

584:                                              ; preds = %581
  %585 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.30, ptr noundef %585)
  br label %586

586:                                              ; preds = %584, %581
  br label %587

587:                                              ; preds = %586
  br label %588

588:                                              ; preds = %587
  br label %589

589:                                              ; preds = %588, %577
  br label %590

590:                                              ; preds = %589
  br label %591

591:                                              ; preds = %590
  %592 = load ptr, ptr %13, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct._TCP_SEG, ptr %592, i32 0, i32 3
  %594 = load i8, ptr %593, align 4, !tbaa !26
  %595 = zext i8 %594 to i32
  %596 = and i32 %595, 4
  %597 = icmp ne i32 %596, 0
  %598 = zext i1 %597 to i32
  %599 = trunc i32 %598 to i8
  %600 = icmp ne i8 %599, 0
  br i1 %600, label %603, label %601

601:                                              ; preds = %591
  %602 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSendAck(ptr noundef %602)
  br label %603

603:                                              ; preds = %601, %591
  br label %1785

604:                                              ; preds = %571
  %605 = load ptr, ptr %13, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct._TCP_SEG, ptr %605, i32 0, i32 0
  %607 = load i32, ptr %606, align 4, !tbaa !47
  %608 = load ptr, ptr %8, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct._TCP_CB, ptr %608, i32 0, i32 24
  %610 = load i32, ptr %609, align 4, !tbaa !48
  %611 = sub i32 %607, %610
  %612 = icmp slt i32 %611, 0
  br i1 %612, label %613, label %636

613:                                              ; preds = %604
  %614 = load ptr, ptr %8, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct._TCP_CB, ptr %614, i32 0, i32 24
  %616 = load i32, ptr %615, align 4, !tbaa !48
  %617 = load ptr, ptr %13, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct._TCP_SEG, ptr %617, i32 0, i32 1
  %619 = load i32, ptr %618, align 4, !tbaa !49
  %620 = icmp eq i32 %616, %619
  br i1 %620, label %621, label %636

621:                                              ; preds = %613
  %622 = load ptr, ptr %13, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct._TCP_SEG, ptr %622, i32 0, i32 3
  %624 = load i8, ptr %623, align 4, !tbaa !26
  %625 = zext i8 %624 to i32
  %626 = and i32 %625, 3
  %627 = icmp ne i32 %626, 0
  %628 = zext i1 %627 to i32
  %629 = trunc i32 %628 to i8
  %630 = icmp ne i8 %629, 0
  br i1 %630, label %636, label %631

631:                                              ; preds = %621
  %632 = load ptr, ptr %8, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct._TCP_CB, ptr %632, i32 0, i32 7
  %634 = load i32, ptr %633, align 8, !tbaa !42
  %635 = or i32 %634, 16384
  store i32 %635, ptr %633, align 8, !tbaa !42
  br label %636

636:                                              ; preds = %631, %621, %613, %604
  %637 = load ptr, ptr %13, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct._TCP_SEG, ptr %637, i32 0, i32 3
  %639 = load i8, ptr %638, align 4, !tbaa !26
  %640 = zext i8 %639 to i32
  %641 = and i32 %640, 4
  %642 = icmp ne i32 %641, 0
  %643 = zext i1 %642 to i32
  %644 = trunc i32 %643 to i8
  %645 = icmp ne i8 %644, 0
  br i1 %645, label %646, label %704

646:                                              ; preds = %636
  br label %647

647:                                              ; preds = %646
  %648 = call zeroext i8 @DebugPrintEnabled()
  %649 = icmp ne i8 %648, 0
  br i1 %649, label %650, label %659

650:                                              ; preds = %647
  br label %651

651:                                              ; preds = %650
  %652 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %653 = icmp ne i8 %652, 0
  br i1 %653, label %654, label %656

654:                                              ; preds = %651
  %655 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.31, ptr noundef %655)
  br label %656

656:                                              ; preds = %654, %651
  br label %657

657:                                              ; preds = %656
  br label %658

658:                                              ; preds = %657
  br label %659

659:                                              ; preds = %658, %647
  br label %660

660:                                              ; preds = %659
  br label %661

661:                                              ; preds = %660
  %662 = load ptr, ptr %8, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct._TCP_CB, ptr %662, i32 0, i32 9
  %664 = load i8, ptr %663, align 8, !tbaa !21
  %665 = zext i8 %664 to i32
  %666 = icmp eq i32 %665, 3
  br i1 %666, label %667, label %672

667:                                              ; preds = %661
  %668 = load ptr, ptr %8, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct._TCP_CB, ptr %668, i32 0, i32 2
  %670 = load ptr, ptr %669, align 8, !tbaa !35
  %671 = getelementptr inbounds %struct._SOCKET, ptr %670, i32 0, i32 13
  store i64 -9223372036854775702, ptr %671, align 8, !tbaa !36
  br label %703

672:                                              ; preds = %661
  %673 = load ptr, ptr %8, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct._TCP_CB, ptr %673, i32 0, i32 9
  %675 = load i8, ptr %674, align 8, !tbaa !21
  %676 = zext i8 %675 to i32
  %677 = icmp eq i32 %676, 4
  br i1 %677, label %696, label %678

678:                                              ; preds = %672
  %679 = load ptr, ptr %8, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct._TCP_CB, ptr %679, i32 0, i32 9
  %681 = load i8, ptr %680, align 8, !tbaa !21
  %682 = zext i8 %681 to i32
  %683 = icmp eq i32 %682, 5
  br i1 %683, label %696, label %684

684:                                              ; preds = %678
  %685 = load ptr, ptr %8, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct._TCP_CB, ptr %685, i32 0, i32 9
  %687 = load i8, ptr %686, align 8, !tbaa !21
  %688 = zext i8 %687 to i32
  %689 = icmp eq i32 %688, 6
  br i1 %689, label %696, label %690

690:                                              ; preds = %684
  %691 = load ptr, ptr %8, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct._TCP_CB, ptr %691, i32 0, i32 9
  %693 = load i8, ptr %692, align 8, !tbaa !21
  %694 = zext i8 %693 to i32
  %695 = icmp eq i32 %694, 9
  br i1 %695, label %696, label %701

696:                                              ; preds = %690, %684, %678, %672
  %697 = load ptr, ptr %8, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct._TCP_CB, ptr %697, i32 0, i32 2
  %699 = load ptr, ptr %698, align 8, !tbaa !35
  %700 = getelementptr inbounds %struct._SOCKET, ptr %699, i32 0, i32 13
  store i64 -9223372036854775703, ptr %700, align 8, !tbaa !36
  br label %702

701:                                              ; preds = %690
  br label %702

702:                                              ; preds = %701, %696
  br label %703

703:                                              ; preds = %702, %667
  br label %1759

704:                                              ; preds = %636
  %705 = load ptr, ptr %8, align 8, !tbaa !5
  %706 = load ptr, ptr %5, align 8, !tbaa !5
  call void @TcpTrimInWnd(ptr noundef %705, ptr noundef %706)
  %707 = load ptr, ptr %13, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct._TCP_SEG, ptr %707, i32 0, i32 3
  %709 = load i8, ptr %708, align 4, !tbaa !26
  %710 = zext i8 %709 to i32
  %711 = and i32 %710, 2
  %712 = icmp ne i32 %711, 0
  %713 = zext i1 %712 to i32
  %714 = trunc i32 %713 to i8
  %715 = icmp ne i8 %714, 0
  br i1 %715, label %716, label %736

716:                                              ; preds = %704
  br label %717

717:                                              ; preds = %716
  %718 = call zeroext i8 @DebugPrintEnabled()
  %719 = icmp ne i8 %718, 0
  br i1 %719, label %720, label %729

720:                                              ; preds = %717
  br label %721

721:                                              ; preds = %720
  %722 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %723 = icmp ne i8 %722, 0
  br i1 %723, label %724, label %726

724:                                              ; preds = %721
  %725 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.32, ptr noundef %725)
  br label %726

726:                                              ; preds = %724, %721
  br label %727

727:                                              ; preds = %726
  br label %728

728:                                              ; preds = %727
  br label %729

729:                                              ; preds = %728, %717
  br label %730

730:                                              ; preds = %729
  br label %731

731:                                              ; preds = %730
  %732 = load ptr, ptr %8, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct._TCP_CB, ptr %732, i32 0, i32 2
  %734 = load ptr, ptr %733, align 8, !tbaa !35
  %735 = getelementptr inbounds %struct._SOCKET, ptr %734, i32 0, i32 13
  store i64 -9223372036854775703, ptr %735, align 8, !tbaa !36
  br label %1752

736:                                              ; preds = %704
  %737 = load ptr, ptr %13, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct._TCP_SEG, ptr %737, i32 0, i32 3
  %739 = load i8, ptr %738, align 4, !tbaa !26
  %740 = zext i8 %739 to i32
  %741 = and i32 %740, 16
  %742 = icmp ne i32 %741, 0
  %743 = zext i1 %742 to i32
  %744 = trunc i32 %743 to i8
  %745 = icmp ne i8 %744, 0
  br i1 %745, label %762, label %746

746:                                              ; preds = %736
  br label %747

747:                                              ; preds = %746
  %748 = call zeroext i8 @DebugPrintEnabled()
  %749 = icmp ne i8 %748, 0
  br i1 %749, label %750, label %759

750:                                              ; preds = %747
  br label %751

751:                                              ; preds = %750
  %752 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %753 = icmp ne i8 %752, 0
  br i1 %753, label %754, label %756

754:                                              ; preds = %751
  %755 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.33, ptr noundef %755)
  br label %756

756:                                              ; preds = %754, %751
  br label %757

757:                                              ; preds = %756
  br label %758

758:                                              ; preds = %757
  br label %759

759:                                              ; preds = %758, %747
  br label %760

760:                                              ; preds = %759
  br label %761

761:                                              ; preds = %760
  br label %1785

762:                                              ; preds = %736
  %763 = load ptr, ptr %8, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct._TCP_CB, ptr %763, i32 0, i32 9
  %765 = load i8, ptr %764, align 8, !tbaa !21
  %766 = zext i8 %765 to i32
  %767 = icmp eq i32 %766, 3
  br i1 %767, label %768, label %857

768:                                              ; preds = %762
  %769 = load ptr, ptr %8, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct._TCP_CB, ptr %769, i32 0, i32 13
  %771 = load i32, ptr %770, align 8, !tbaa !40
  %772 = load ptr, ptr %13, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct._TCP_SEG, ptr %772, i32 0, i32 2
  %774 = load i32, ptr %773, align 4, !tbaa !33
  %775 = sub i32 %771, %774
  %776 = icmp slt i32 %775, 0
  br i1 %776, label %777, label %840

777:                                              ; preds = %768
  %778 = load ptr, ptr %13, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct._TCP_SEG, ptr %778, i32 0, i32 2
  %780 = load i32, ptr %779, align 4, !tbaa !33
  %781 = load ptr, ptr %8, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct._TCP_CB, ptr %781, i32 0, i32 14
  %783 = load i32, ptr %782, align 4, !tbaa !44
  %784 = sub i32 %780, %783
  %785 = icmp sle i32 %784, 0
  br i1 %785, label %786, label %840

786:                                              ; preds = %777
  %787 = load ptr, ptr %13, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct._TCP_SEG, ptr %787, i32 0, i32 5
  %789 = load i32, ptr %788, align 4, !tbaa !46
  %790 = load ptr, ptr %8, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct._TCP_CB, ptr %790, i32 0, i32 17
  store i32 %789, ptr %791, align 8, !tbaa !50
  %792 = load ptr, ptr %8, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct._TCP_CB, ptr %792, i32 0, i32 17
  %794 = load i32, ptr %793, align 8, !tbaa !50
  %795 = load ptr, ptr %8, align 8, !tbaa !5
  %796 = getelementptr inbounds %struct._TCP_CB, ptr %795, i32 0, i32 18
  %797 = load i32, ptr %796, align 4, !tbaa !51
  %798 = icmp ugt i32 %794, %797
  br i1 %798, label %799, label %803

799:                                              ; preds = %786
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct._TCP_CB, ptr %800, i32 0, i32 17
  %802 = load i32, ptr %801, align 8, !tbaa !50
  br label %807

803:                                              ; preds = %786
  %804 = load ptr, ptr %8, align 8, !tbaa !5
  %805 = getelementptr inbounds %struct._TCP_CB, ptr %804, i32 0, i32 18
  %806 = load i32, ptr %805, align 4, !tbaa !51
  br label %807

807:                                              ; preds = %803, %799
  %808 = phi i32 [ %802, %799 ], [ %806, %803 ]
  %809 = load ptr, ptr %8, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct._TCP_CB, ptr %809, i32 0, i32 18
  store i32 %808, ptr %810, align 4, !tbaa !51
  %811 = load ptr, ptr %13, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct._TCP_SEG, ptr %811, i32 0, i32 0
  %813 = load i32, ptr %812, align 4, !tbaa !47
  %814 = load ptr, ptr %8, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct._TCP_CB, ptr %814, i32 0, i32 19
  store i32 %813, ptr %815, align 8, !tbaa !52
  %816 = load ptr, ptr %13, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct._TCP_SEG, ptr %816, i32 0, i32 2
  %818 = load i32, ptr %817, align 4, !tbaa !33
  %819 = load ptr, ptr %8, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct._TCP_CB, ptr %819, i32 0, i32 20
  store i32 %818, ptr %820, align 4, !tbaa !53
  %821 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %821, i8 noundef zeroext 4)
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearTimer(ptr noundef %822, i16 noundef zeroext 0)
  %823 = load ptr, ptr %8, align 8, !tbaa !5
  %824 = call i64 @TcpDeliverData(ptr noundef %823)
  br label %825

825:                                              ; preds = %807
  %826 = call zeroext i8 @DebugPrintEnabled()
  %827 = icmp ne i8 %826, 0
  br i1 %827, label %828, label %837

828:                                              ; preds = %825
  br label %829

829:                                              ; preds = %828
  %830 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %831 = icmp ne i8 %830, 0
  br i1 %831, label %832, label %834

832:                                              ; preds = %829
  %833 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.34, ptr noundef %833)
  br label %834

834:                                              ; preds = %832, %829
  br label %835

835:                                              ; preds = %834
  br label %836

836:                                              ; preds = %835
  br label %837

837:                                              ; preds = %836, %825
  br label %838

838:                                              ; preds = %837
  br label %839

839:                                              ; preds = %838
  br label %856

840:                                              ; preds = %777, %768
  br label %841

841:                                              ; preds = %840
  %842 = call zeroext i8 @DebugPrintEnabled()
  %843 = icmp ne i8 %842, 0
  br i1 %843, label %844, label %853

844:                                              ; preds = %841
  br label %845

845:                                              ; preds = %844
  %846 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %847 = icmp ne i8 %846, 0
  br i1 %847, label %848, label %850

848:                                              ; preds = %845
  %849 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.35, ptr noundef %849)
  br label %850

850:                                              ; preds = %848, %845
  br label %851

851:                                              ; preds = %850
  br label %852

852:                                              ; preds = %851
  br label %853

853:                                              ; preds = %852, %841
  br label %854

854:                                              ; preds = %853
  br label %855

855:                                              ; preds = %854
  br label %1778

856:                                              ; preds = %839
  br label %857

857:                                              ; preds = %856, %762
  %858 = load ptr, ptr %13, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct._TCP_SEG, ptr %858, i32 0, i32 2
  %860 = load i32, ptr %859, align 4, !tbaa !33
  %861 = load ptr, ptr %8, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct._TCP_CB, ptr %861, i32 0, i32 13
  %863 = load i32, ptr %862, align 8, !tbaa !40
  %864 = sub i32 %860, %863
  %865 = icmp slt i32 %864, 0
  br i1 %865, label %866, label %882

866:                                              ; preds = %857
  br label %867

867:                                              ; preds = %866
  %868 = call zeroext i8 @DebugPrintEnabled()
  %869 = icmp ne i8 %868, 0
  br i1 %869, label %870, label %879

870:                                              ; preds = %867
  br label %871

871:                                              ; preds = %870
  %872 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %873 = icmp ne i8 %872, 0
  br i1 %873, label %874, label %876

874:                                              ; preds = %871
  %875 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.36, ptr noundef %875)
  br label %876

876:                                              ; preds = %874, %871
  br label %877

877:                                              ; preds = %876
  br label %878

878:                                              ; preds = %877
  br label %879

879:                                              ; preds = %878, %867
  br label %880

880:                                              ; preds = %879
  br label %881

881:                                              ; preds = %880
  br label %1506

882:                                              ; preds = %857
  %883 = load ptr, ptr %8, align 8, !tbaa !5
  %884 = getelementptr inbounds %struct._TCP_CB, ptr %883, i32 0, i32 14
  %885 = load i32, ptr %884, align 4, !tbaa !44
  %886 = load ptr, ptr %13, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct._TCP_SEG, ptr %886, i32 0, i32 2
  %888 = load i32, ptr %887, align 4, !tbaa !33
  %889 = sub i32 %885, %888
  %890 = icmp slt i32 %889, 0
  br i1 %890, label %891, label %908

891:                                              ; preds = %882
  br label %892

892:                                              ; preds = %891
  %893 = call zeroext i8 @DebugPrintEnabled()
  %894 = icmp ne i8 %893, 0
  br i1 %894, label %895, label %904

895:                                              ; preds = %892
  br label %896

896:                                              ; preds = %895
  %897 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %898 = icmp ne i8 %897, 0
  br i1 %898, label %899, label %901

899:                                              ; preds = %896
  %900 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.37, ptr noundef %900)
  br label %901

901:                                              ; preds = %899, %896
  br label %902

902:                                              ; preds = %901
  br label %903

903:                                              ; preds = %902
  br label %904

904:                                              ; preds = %903, %892
  br label %905

905:                                              ; preds = %904
  br label %906

906:                                              ; preds = %905
  %907 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSendAck(ptr noundef %907)
  br label %1785

908:                                              ; preds = %882
  br label %909

909:                                              ; preds = %908
  %910 = getelementptr inbounds %struct._TCP_OPTION, ptr %10, i32 0, i32 0
  %911 = load i8, ptr %910, align 4, !tbaa !54
  %912 = zext i8 %911 to i32
  %913 = and i32 %912, 4
  %914 = icmp ne i32 %913, 0
  %915 = zext i1 %914 to i32
  %916 = trunc i32 %915 to i8
  %917 = icmp ne i8 %916, 0
  br i1 %917, label %918, label %950

918:                                              ; preds = %909
  %919 = load ptr, ptr %13, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct._TCP_SEG, ptr %919, i32 0, i32 0
  %921 = load i32, ptr %920, align 4, !tbaa !47
  %922 = load ptr, ptr %8, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct._TCP_CB, ptr %922, i32 0, i32 24
  %924 = load i32, ptr %923, align 4, !tbaa !48
  %925 = sub i32 %921, %924
  %926 = icmp sle i32 %925, 0
  br i1 %926, label %927, label %944

927:                                              ; preds = %918
  %928 = load ptr, ptr %8, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct._TCP_CB, ptr %928, i32 0, i32 24
  %930 = load i32, ptr %929, align 4, !tbaa !48
  %931 = load ptr, ptr %13, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct._TCP_SEG, ptr %931, i32 0, i32 1
  %933 = load i32, ptr %932, align 4, !tbaa !49
  %934 = sub i32 %930, %933
  %935 = icmp slt i32 %934, 0
  br i1 %935, label %936, label %944

936:                                              ; preds = %927
  %937 = getelementptr inbounds %struct._TCP_OPTION, ptr %10, i32 0, i32 3
  %938 = load i32, ptr %937, align 4, !tbaa !56
  %939 = load ptr, ptr %8, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct._TCP_CB, ptr %939, i32 0, i32 36
  store i32 %938, ptr %940, align 4, !tbaa !57
  %941 = load i32, ptr @mTcpTick, align 4, !tbaa !9
  %942 = load ptr, ptr %8, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct._TCP_CB, ptr %942, i32 0, i32 37
  store i32 %941, ptr %943, align 8, !tbaa !58
  br label %944

944:                                              ; preds = %936, %927, %918
  %945 = load ptr, ptr %8, align 8, !tbaa !5
  %946 = load i32, ptr @mTcpTick, align 4, !tbaa !9
  %947 = getelementptr inbounds %struct._TCP_OPTION, ptr %10, i32 0, i32 4
  %948 = load i32, ptr %947, align 4, !tbaa !59
  %949 = sub i32 %946, %948
  call void @TcpComputeRtt(ptr noundef %945, i32 noundef %949)
  br label %983

950:                                              ; preds = %909
  %951 = load ptr, ptr %8, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct._TCP_CB, ptr %951, i32 0, i32 7
  %953 = load i32, ptr %952, align 8, !tbaa !42
  %954 = and i32 %953, 8192
  %955 = icmp ne i32 %954, 0
  %956 = zext i1 %955 to i32
  %957 = trunc i32 %956 to i8
  %958 = icmp ne i8 %957, 0
  br i1 %958, label %959, label %982

959:                                              ; preds = %950
  br label %960

960:                                              ; preds = %959
  %961 = call zeroext i8 @DebugAssertEnabled()
  %962 = icmp ne i8 %961, 0
  br i1 %962, label %963, label %971

963:                                              ; preds = %960
  %964 = load ptr, ptr %8, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct._TCP_CB, ptr %964, i32 0, i32 47
  %966 = load i8, ptr %965, align 2, !tbaa !41
  %967 = zext i8 %966 to i32
  %968 = icmp eq i32 %967, 3
  br i1 %968, label %970, label %969

969:                                              ; preds = %963
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 1084, ptr noundef @.str.38)
  br label %970

970:                                              ; preds = %969, %963
  br label %971

971:                                              ; preds = %970, %960
  br label %972

972:                                              ; preds = %971
  br label %973

973:                                              ; preds = %972
  %974 = load ptr, ptr %8, align 8, !tbaa !5
  %975 = load ptr, ptr %8, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct._TCP_CB, ptr %975, i32 0, i32 39
  %977 = load i32, ptr %976, align 8, !tbaa !43
  call void @TcpComputeRtt(ptr noundef %974, i32 noundef %977)
  %978 = load ptr, ptr %8, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct._TCP_CB, ptr %978, i32 0, i32 7
  %980 = load i32, ptr %979, align 8, !tbaa !42
  %981 = and i32 %980, -8193
  store i32 %981, ptr %979, align 8, !tbaa !42
  br label %982

982:                                              ; preds = %973, %950
  br label %983

983:                                              ; preds = %982, %944
  %984 = load ptr, ptr %13, align 8, !tbaa !5
  %985 = getelementptr inbounds %struct._TCP_SEG, ptr %984, i32 0, i32 2
  %986 = load i32, ptr %985, align 4, !tbaa !33
  %987 = load ptr, ptr %8, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct._TCP_CB, ptr %987, i32 0, i32 14
  %989 = load i32, ptr %988, align 4, !tbaa !44
  %990 = icmp eq i32 %986, %989
  br i1 %990, label %991, label %993

991:                                              ; preds = %983
  %992 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearTimer(ptr noundef %992, i16 noundef zeroext 1)
  br label %998

993:                                              ; preds = %983
  %994 = load ptr, ptr %8, align 8, !tbaa !5
  %995 = load ptr, ptr %8, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct._TCP_CB, ptr %995, i32 0, i32 42
  %997 = load i32, ptr %996, align 4, !tbaa !60
  call void @TcpSetTimer(ptr noundef %994, i16 noundef zeroext 1, i32 noundef %997)
  br label %998

998:                                              ; preds = %993, %991
  %999 = load ptr, ptr %13, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct._TCP_SEG, ptr %999, i32 0, i32 2
  %1001 = load i32, ptr %1000, align 4, !tbaa !33
  %1002 = load ptr, ptr %8, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct._TCP_CB, ptr %1002, i32 0, i32 13
  %1004 = load i32, ptr %1003, align 8, !tbaa !40
  %1005 = icmp eq i32 %1001, %1004
  br i1 %1005, label %1006, label %1030

1006:                                             ; preds = %998
  %1007 = load ptr, ptr %8, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct._TCP_CB, ptr %1007, i32 0, i32 13
  %1009 = load i32, ptr %1008, align 8, !tbaa !40
  %1010 = load ptr, ptr %8, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct._TCP_CB, ptr %1010, i32 0, i32 14
  %1012 = load i32, ptr %1011, align 4, !tbaa !44
  %1013 = icmp ne i32 %1009, %1012
  br i1 %1013, label %1014, label %1030

1014:                                             ; preds = %1006
  %1015 = load ptr, ptr %13, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct._TCP_SEG, ptr %1015, i32 0, i32 5
  %1017 = load i32, ptr %1016, align 4, !tbaa !46
  %1018 = load ptr, ptr %8, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct._TCP_CB, ptr %1018, i32 0, i32 17
  %1020 = load i32, ptr %1019, align 8, !tbaa !50
  %1021 = icmp eq i32 %1017, %1020
  br i1 %1021, label %1022, label %1030

1022:                                             ; preds = %1014
  %1023 = load i32, ptr %12, align 4, !tbaa !9
  %1024 = icmp eq i32 0, %1023
  br i1 %1024, label %1025, label %1030

1025:                                             ; preds = %1022
  %1026 = load ptr, ptr %8, align 8, !tbaa !5
  %1027 = getelementptr inbounds %struct._TCP_CB, ptr %1026, i32 0, i32 46
  %1028 = load i16, ptr %1027, align 4, !tbaa !61
  %1029 = add i16 %1028, 1
  store i16 %1029, ptr %1027, align 4, !tbaa !61
  br label %1033

1030:                                             ; preds = %1022, %1014, %1006, %998
  %1031 = load ptr, ptr %8, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct._TCP_CB, ptr %1031, i32 0, i32 46
  store i16 0, ptr %1032, align 4, !tbaa !61
  br label %1033

1033:                                             ; preds = %1030, %1025
  %1034 = load ptr, ptr %8, align 8, !tbaa !5
  %1035 = getelementptr inbounds %struct._TCP_CB, ptr %1034, i32 0, i32 47
  %1036 = load i8, ptr %1035, align 2, !tbaa !41
  %1037 = zext i8 %1036 to i32
  %1038 = icmp eq i32 %1037, 3
  br i1 %1038, label %1039, label %1045

1039:                                             ; preds = %1033
  %1040 = load ptr, ptr %8, align 8, !tbaa !5
  %1041 = getelementptr inbounds %struct._TCP_CB, ptr %1040, i32 0, i32 46
  %1042 = load i16, ptr %1041, align 4, !tbaa !61
  %1043 = zext i16 %1042 to i32
  %1044 = icmp slt i32 %1043, 3
  br i1 %1044, label %1051, label %1045

1045:                                             ; preds = %1039, %1033
  %1046 = load ptr, ptr %8, align 8, !tbaa !5
  %1047 = getelementptr inbounds %struct._TCP_CB, ptr %1046, i32 0, i32 47
  %1048 = load i8, ptr %1047, align 2, !tbaa !41
  %1049 = zext i8 %1048 to i32
  %1050 = icmp eq i32 %1049, 2
  br i1 %1050, label %1051, label %1147

1051:                                             ; preds = %1045, %1039
  %1052 = load ptr, ptr %8, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct._TCP_CB, ptr %1052, i32 0, i32 13
  %1054 = load i32, ptr %1053, align 8, !tbaa !40
  %1055 = load ptr, ptr %13, align 8, !tbaa !5
  %1056 = getelementptr inbounds %struct._TCP_SEG, ptr %1055, i32 0, i32 2
  %1057 = load i32, ptr %1056, align 4, !tbaa !33
  %1058 = sub i32 %1054, %1057
  %1059 = icmp slt i32 %1058, 0
  br i1 %1059, label %1060, label %1137

1060:                                             ; preds = %1051
  %1061 = load ptr, ptr %8, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct._TCP_CB, ptr %1061, i32 0, i32 43
  %1063 = load i32, ptr %1062, align 8, !tbaa !62
  %1064 = load ptr, ptr %8, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct._TCP_CB, ptr %1064, i32 0, i32 44
  %1066 = load i32, ptr %1065, align 4, !tbaa !63
  %1067 = icmp ult i32 %1063, %1066
  br i1 %1067, label %1068, label %1077

1068:                                             ; preds = %1060
  %1069 = load ptr, ptr %8, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct._TCP_CB, ptr %1069, i32 0, i32 21
  %1071 = load i16, ptr %1070, align 8, !tbaa !64
  %1072 = zext i16 %1071 to i32
  %1073 = load ptr, ptr %8, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct._TCP_CB, ptr %1073, i32 0, i32 43
  %1075 = load i32, ptr %1074, align 8, !tbaa !62
  %1076 = add i32 %1075, %1072
  store i32 %1076, ptr %1074, align 8, !tbaa !62
  br label %1113

1077:                                             ; preds = %1060
  %1078 = load ptr, ptr %8, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct._TCP_CB, ptr %1078, i32 0, i32 21
  %1080 = load i16, ptr %1079, align 8, !tbaa !64
  %1081 = zext i16 %1080 to i32
  %1082 = load ptr, ptr %8, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct._TCP_CB, ptr %1082, i32 0, i32 21
  %1084 = load i16, ptr %1083, align 8, !tbaa !64
  %1085 = zext i16 %1084 to i32
  %1086 = mul nsw i32 %1081, %1085
  %1087 = load ptr, ptr %8, align 8, !tbaa !5
  %1088 = getelementptr inbounds %struct._TCP_CB, ptr %1087, i32 0, i32 43
  %1089 = load i32, ptr %1088, align 8, !tbaa !62
  %1090 = udiv i32 %1086, %1089
  %1091 = icmp ugt i32 %1090, 1
  br i1 %1091, label %1092, label %1106

1092:                                             ; preds = %1077
  %1093 = load ptr, ptr %8, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct._TCP_CB, ptr %1093, i32 0, i32 21
  %1095 = load i16, ptr %1094, align 8, !tbaa !64
  %1096 = zext i16 %1095 to i32
  %1097 = load ptr, ptr %8, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct._TCP_CB, ptr %1097, i32 0, i32 21
  %1099 = load i16, ptr %1098, align 8, !tbaa !64
  %1100 = zext i16 %1099 to i32
  %1101 = mul nsw i32 %1096, %1100
  %1102 = load ptr, ptr %8, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct._TCP_CB, ptr %1102, i32 0, i32 43
  %1104 = load i32, ptr %1103, align 8, !tbaa !62
  %1105 = udiv i32 %1101, %1104
  br label %1107

1106:                                             ; preds = %1077
  br label %1107

1107:                                             ; preds = %1106, %1092
  %1108 = phi i32 [ %1105, %1092 ], [ 1, %1106 ]
  %1109 = load ptr, ptr %8, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct._TCP_CB, ptr %1109, i32 0, i32 43
  %1111 = load i32, ptr %1110, align 8, !tbaa !62
  %1112 = add i32 %1111, %1108
  store i32 %1112, ptr %1110, align 8, !tbaa !62
  br label %1113

1113:                                             ; preds = %1107, %1068
  %1114 = load ptr, ptr %8, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct._TCP_CB, ptr %1114, i32 0, i32 43
  %1116 = load i32, ptr %1115, align 8, !tbaa !62
  %1117 = load ptr, ptr %8, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct._TCP_CB, ptr %1117, i32 0, i32 34
  %1119 = load i8, ptr %1118, align 1, !tbaa !65
  %1120 = zext i8 %1119 to i32
  %1121 = shl i32 65535, %1120
  %1122 = icmp ult i32 %1116, %1121
  br i1 %1122, label %1123, label %1127

1123:                                             ; preds = %1113
  %1124 = load ptr, ptr %8, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct._TCP_CB, ptr %1124, i32 0, i32 43
  %1126 = load i32, ptr %1125, align 8, !tbaa !62
  br label %1133

1127:                                             ; preds = %1113
  %1128 = load ptr, ptr %8, align 8, !tbaa !5
  %1129 = getelementptr inbounds %struct._TCP_CB, ptr %1128, i32 0, i32 34
  %1130 = load i8, ptr %1129, align 1, !tbaa !65
  %1131 = zext i8 %1130 to i32
  %1132 = shl i32 65535, %1131
  br label %1133

1133:                                             ; preds = %1127, %1123
  %1134 = phi i32 [ %1126, %1123 ], [ %1132, %1127 ]
  %1135 = load ptr, ptr %8, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct._TCP_CB, ptr %1135, i32 0, i32 43
  store i32 %1134, ptr %1136, align 8, !tbaa !62
  br label %1137

1137:                                             ; preds = %1133, %1051
  %1138 = load ptr, ptr %8, align 8, !tbaa !5
  %1139 = getelementptr inbounds %struct._TCP_CB, ptr %1138, i32 0, i32 47
  %1140 = load i8, ptr %1139, align 2, !tbaa !41
  %1141 = zext i8 %1140 to i32
  %1142 = icmp eq i32 %1141, 2
  br i1 %1142, label %1143, label %1146

1143:                                             ; preds = %1137
  %1144 = load ptr, ptr %8, align 8, !tbaa !5
  %1145 = load ptr, ptr %13, align 8, !tbaa !5
  call void @TcpFastLossRecover(ptr noundef %1144, ptr noundef %1145)
  br label %1146

1146:                                             ; preds = %1143, %1137
  br label %1150

1147:                                             ; preds = %1045
  %1148 = load ptr, ptr %8, align 8, !tbaa !5
  %1149 = load ptr, ptr %13, align 8, !tbaa !5
  call void @TcpFastRecover(ptr noundef %1148, ptr noundef %1149)
  br label %1150

1150:                                             ; preds = %1147, %1146
  %1151 = load ptr, ptr %8, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct._TCP_CB, ptr %1151, i32 0, i32 13
  %1153 = load i32, ptr %1152, align 8, !tbaa !40
  %1154 = load ptr, ptr %13, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct._TCP_SEG, ptr %1154, i32 0, i32 2
  %1156 = load i32, ptr %1155, align 4, !tbaa !33
  %1157 = sub i32 %1153, %1156
  %1158 = icmp slt i32 %1157, 0
  br i1 %1158, label %1159, label %1193

1159:                                             ; preds = %1150
  %1160 = load ptr, ptr %8, align 8, !tbaa !5
  %1161 = load ptr, ptr %13, align 8, !tbaa !5
  %1162 = getelementptr inbounds %struct._TCP_SEG, ptr %1161, i32 0, i32 2
  %1163 = load i32, ptr %1162, align 4, !tbaa !33
  call void @TcpAdjustSndQue(ptr noundef %1160, i32 noundef %1163)
  %1164 = load ptr, ptr %13, align 8, !tbaa !5
  %1165 = getelementptr inbounds %struct._TCP_SEG, ptr %1164, i32 0, i32 2
  %1166 = load i32, ptr %1165, align 4, !tbaa !33
  %1167 = load ptr, ptr %8, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct._TCP_CB, ptr %1167, i32 0, i32 13
  store i32 %1166, ptr %1168, align 8, !tbaa !40
  %1169 = load ptr, ptr %8, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct._TCP_CB, ptr %1169, i32 0, i32 7
  %1171 = load i32, ptr %1170, align 8, !tbaa !42
  %1172 = and i32 %1171, 128
  %1173 = icmp ne i32 %1172, 0
  %1174 = zext i1 %1173 to i32
  %1175 = trunc i32 %1174 to i8
  %1176 = zext i8 %1175 to i32
  %1177 = icmp ne i32 %1176, 0
  br i1 %1177, label %1178, label %1192

1178:                                             ; preds = %1159
  %1179 = load ptr, ptr %8, align 8, !tbaa !5
  %1180 = getelementptr inbounds %struct._TCP_CB, ptr %1179, i32 0, i32 16
  %1181 = load i32, ptr %1180, align 4, !tbaa !66
  %1182 = load ptr, ptr %13, align 8, !tbaa !5
  %1183 = getelementptr inbounds %struct._TCP_SEG, ptr %1182, i32 0, i32 2
  %1184 = load i32, ptr %1183, align 4, !tbaa !33
  %1185 = sub i32 %1181, %1184
  %1186 = icmp slt i32 %1185, 0
  br i1 %1186, label %1187, label %1192

1187:                                             ; preds = %1178
  %1188 = load ptr, ptr %8, align 8, !tbaa !5
  %1189 = getelementptr inbounds %struct._TCP_CB, ptr %1188, i32 0, i32 7
  %1190 = load i32, ptr %1189, align 8, !tbaa !42
  %1191 = and i32 %1190, -129
  store i32 %1191, ptr %1189, align 8, !tbaa !42
  br label %1192

1192:                                             ; preds = %1187, %1178, %1159
  br label %1193

1193:                                             ; preds = %1192, %1150
  %1194 = load ptr, ptr %8, align 8, !tbaa !5
  %1195 = getelementptr inbounds %struct._TCP_CB, ptr %1194, i32 0, i32 19
  %1196 = load i32, ptr %1195, align 8, !tbaa !52
  %1197 = load ptr, ptr %13, align 8, !tbaa !5
  %1198 = getelementptr inbounds %struct._TCP_SEG, ptr %1197, i32 0, i32 0
  %1199 = load i32, ptr %1198, align 4, !tbaa !47
  %1200 = sub i32 %1196, %1199
  %1201 = icmp slt i32 %1200, 0
  br i1 %1201, label %1219, label %1202

1202:                                             ; preds = %1193
  %1203 = load ptr, ptr %8, align 8, !tbaa !5
  %1204 = getelementptr inbounds %struct._TCP_CB, ptr %1203, i32 0, i32 19
  %1205 = load i32, ptr %1204, align 8, !tbaa !52
  %1206 = load ptr, ptr %13, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct._TCP_SEG, ptr %1206, i32 0, i32 0
  %1208 = load i32, ptr %1207, align 4, !tbaa !47
  %1209 = icmp eq i32 %1205, %1208
  br i1 %1209, label %1210, label %1362

1210:                                             ; preds = %1202
  %1211 = load ptr, ptr %8, align 8, !tbaa !5
  %1212 = getelementptr inbounds %struct._TCP_CB, ptr %1211, i32 0, i32 20
  %1213 = load i32, ptr %1212, align 4, !tbaa !53
  %1214 = load ptr, ptr %13, align 8, !tbaa !5
  %1215 = getelementptr inbounds %struct._TCP_SEG, ptr %1214, i32 0, i32 2
  %1216 = load i32, ptr %1215, align 4, !tbaa !33
  %1217 = sub i32 %1213, %1216
  %1218 = icmp sle i32 %1217, 0
  br i1 %1218, label %1219, label %1362

1219:                                             ; preds = %1210, %1193
  %1220 = load ptr, ptr %13, align 8, !tbaa !5
  %1221 = getelementptr inbounds %struct._TCP_SEG, ptr %1220, i32 0, i32 2
  %1222 = load i32, ptr %1221, align 4, !tbaa !33
  %1223 = load ptr, ptr %13, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct._TCP_SEG, ptr %1223, i32 0, i32 5
  %1225 = load i32, ptr %1224, align 4, !tbaa !46
  %1226 = add i32 %1222, %1225
  store i32 %1226, ptr %14, align 4, !tbaa !9
  %1227 = load i32, ptr %14, align 4, !tbaa !9
  %1228 = load ptr, ptr %8, align 8, !tbaa !5
  %1229 = getelementptr inbounds %struct._TCP_CB, ptr %1228, i32 0, i32 20
  %1230 = load i32, ptr %1229, align 4, !tbaa !53
  %1231 = load ptr, ptr %8, align 8, !tbaa !5
  %1232 = getelementptr inbounds %struct._TCP_CB, ptr %1231, i32 0, i32 17
  %1233 = load i32, ptr %1232, align 8, !tbaa !50
  %1234 = add i32 %1230, %1233
  %1235 = sub i32 %1227, %1234
  %1236 = icmp slt i32 %1235, 0
  br i1 %1236, label %1237, label %1327

1237:                                             ; preds = %1219
  %1238 = load ptr, ptr %8, align 8, !tbaa !5
  %1239 = getelementptr inbounds %struct._TCP_CB, ptr %1238, i32 0, i32 19
  %1240 = load i32, ptr %1239, align 8, !tbaa !52
  %1241 = load ptr, ptr %13, align 8, !tbaa !5
  %1242 = getelementptr inbounds %struct._TCP_SEG, ptr %1241, i32 0, i32 0
  %1243 = load i32, ptr %1242, align 4, !tbaa !47
  %1244 = icmp eq i32 %1240, %1243
  br i1 %1244, label %1245, label %1257

1245:                                             ; preds = %1237
  %1246 = load ptr, ptr %8, align 8, !tbaa !5
  %1247 = getelementptr inbounds %struct._TCP_CB, ptr %1246, i32 0, i32 20
  %1248 = load i32, ptr %1247, align 4, !tbaa !53
  %1249 = load ptr, ptr %13, align 8, !tbaa !5
  %1250 = getelementptr inbounds %struct._TCP_SEG, ptr %1249, i32 0, i32 2
  %1251 = load i32, ptr %1250, align 4, !tbaa !33
  %1252 = icmp eq i32 %1248, %1251
  br i1 %1252, label %1253, label %1257

1253:                                             ; preds = %1245
  %1254 = load i32, ptr %12, align 4, !tbaa !9
  %1255 = icmp eq i32 %1254, 0
  br i1 %1255, label %1256, label %1257

1256:                                             ; preds = %1253
  br label %1363

1257:                                             ; preds = %1253, %1245, %1237
  br label %1258

1258:                                             ; preds = %1257
  %1259 = call zeroext i8 @DebugPrintEnabled()
  %1260 = icmp ne i8 %1259, 0
  br i1 %1260, label %1261, label %1270

1261:                                             ; preds = %1258
  br label %1262

1262:                                             ; preds = %1261
  %1263 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %1264 = icmp ne i8 %1263, 0
  br i1 %1264, label %1265, label %1267

1265:                                             ; preds = %1262
  %1266 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.39, ptr noundef %1266)
  br label %1267

1267:                                             ; preds = %1265, %1262
  br label %1268

1268:                                             ; preds = %1267
  br label %1269

1269:                                             ; preds = %1268
  br label %1270

1270:                                             ; preds = %1269, %1258
  br label %1271

1271:                                             ; preds = %1270
  br label %1272

1272:                                             ; preds = %1271
  %1273 = load ptr, ptr %8, align 8, !tbaa !5
  %1274 = getelementptr inbounds %struct._TCP_CB, ptr %1273, i32 0, i32 47
  %1275 = load i8, ptr %1274, align 2, !tbaa !41
  %1276 = zext i8 %1275 to i32
  %1277 = icmp eq i32 %1276, 1
  br i1 %1277, label %1278, label %1289

1278:                                             ; preds = %1272
  %1279 = load i32, ptr %14, align 4, !tbaa !9
  %1280 = load ptr, ptr %8, align 8, !tbaa !5
  %1281 = getelementptr inbounds %struct._TCP_CB, ptr %1280, i32 0, i32 45
  %1282 = load i32, ptr %1281, align 8, !tbaa !67
  %1283 = sub i32 %1279, %1282
  %1284 = icmp slt i32 %1283, 0
  br i1 %1284, label %1285, label %1289

1285:                                             ; preds = %1278
  %1286 = load i32, ptr %14, align 4, !tbaa !9
  %1287 = load ptr, ptr %8, align 8, !tbaa !5
  %1288 = getelementptr inbounds %struct._TCP_CB, ptr %1287, i32 0, i32 45
  store i32 %1286, ptr %1288, align 8, !tbaa !67
  br label %1289

1289:                                             ; preds = %1285, %1278, %1272
  %1290 = load ptr, ptr %8, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct._TCP_CB, ptr %1290, i32 0, i32 47
  %1292 = load i8, ptr %1291, align 2, !tbaa !41
  %1293 = zext i8 %1292 to i32
  %1294 = icmp eq i32 %1293, 2
  br i1 %1294, label %1295, label %1306

1295:                                             ; preds = %1289
  %1296 = load i32, ptr %14, align 4, !tbaa !9
  %1297 = load ptr, ptr %8, align 8, !tbaa !5
  %1298 = getelementptr inbounds %struct._TCP_CB, ptr %1297, i32 0, i32 49
  %1299 = load i32, ptr %1298, align 8, !tbaa !68
  %1300 = sub i32 %1296, %1299
  %1301 = icmp slt i32 %1300, 0
  br i1 %1301, label %1302, label %1306

1302:                                             ; preds = %1295
  %1303 = load i32, ptr %14, align 4, !tbaa !9
  %1304 = load ptr, ptr %8, align 8, !tbaa !5
  %1305 = getelementptr inbounds %struct._TCP_CB, ptr %1304, i32 0, i32 49
  store i32 %1303, ptr %1305, align 8, !tbaa !68
  br label %1306

1306:                                             ; preds = %1302, %1295, %1289
  %1307 = load i32, ptr %14, align 4, !tbaa !9
  %1308 = load ptr, ptr %8, align 8, !tbaa !5
  %1309 = getelementptr inbounds %struct._TCP_CB, ptr %1308, i32 0, i32 14
  %1310 = load i32, ptr %1309, align 4, !tbaa !44
  %1311 = sub i32 %1307, %1310
  %1312 = icmp slt i32 %1311, 0
  br i1 %1312, label %1313, label %1326

1313:                                             ; preds = %1306
  %1314 = load i32, ptr %14, align 4, !tbaa !9
  %1315 = load ptr, ptr %8, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct._TCP_CB, ptr %1315, i32 0, i32 14
  store i32 %1314, ptr %1316, align 4, !tbaa !44
  %1317 = load i32, ptr %14, align 4, !tbaa !9
  %1318 = load ptr, ptr %8, align 8, !tbaa !5
  %1319 = getelementptr inbounds %struct._TCP_CB, ptr %1318, i32 0, i32 13
  %1320 = load i32, ptr %1319, align 8, !tbaa !40
  %1321 = icmp eq i32 %1317, %1320
  br i1 %1321, label %1322, label %1325

1322:                                             ; preds = %1313
  %1323 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearTimer(ptr noundef %1323, i16 noundef zeroext 1)
  %1324 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetProbeTimer(ptr noundef %1324)
  br label %1325

1325:                                             ; preds = %1322, %1313
  br label %1326

1326:                                             ; preds = %1325, %1306
  br label %1327

1327:                                             ; preds = %1326, %1219
  %1328 = load ptr, ptr %13, align 8, !tbaa !5
  %1329 = getelementptr inbounds %struct._TCP_SEG, ptr %1328, i32 0, i32 5
  %1330 = load i32, ptr %1329, align 4, !tbaa !46
  %1331 = load ptr, ptr %8, align 8, !tbaa !5
  %1332 = getelementptr inbounds %struct._TCP_CB, ptr %1331, i32 0, i32 17
  store i32 %1330, ptr %1332, align 8, !tbaa !50
  %1333 = load ptr, ptr %8, align 8, !tbaa !5
  %1334 = getelementptr inbounds %struct._TCP_CB, ptr %1333, i32 0, i32 17
  %1335 = load i32, ptr %1334, align 8, !tbaa !50
  %1336 = load ptr, ptr %8, align 8, !tbaa !5
  %1337 = getelementptr inbounds %struct._TCP_CB, ptr %1336, i32 0, i32 18
  %1338 = load i32, ptr %1337, align 4, !tbaa !51
  %1339 = icmp ugt i32 %1335, %1338
  br i1 %1339, label %1340, label %1344

1340:                                             ; preds = %1327
  %1341 = load ptr, ptr %8, align 8, !tbaa !5
  %1342 = getelementptr inbounds %struct._TCP_CB, ptr %1341, i32 0, i32 17
  %1343 = load i32, ptr %1342, align 8, !tbaa !50
  br label %1348

1344:                                             ; preds = %1327
  %1345 = load ptr, ptr %8, align 8, !tbaa !5
  %1346 = getelementptr inbounds %struct._TCP_CB, ptr %1345, i32 0, i32 18
  %1347 = load i32, ptr %1346, align 4, !tbaa !51
  br label %1348

1348:                                             ; preds = %1344, %1340
  %1349 = phi i32 [ %1343, %1340 ], [ %1347, %1344 ]
  %1350 = load ptr, ptr %8, align 8, !tbaa !5
  %1351 = getelementptr inbounds %struct._TCP_CB, ptr %1350, i32 0, i32 18
  store i32 %1349, ptr %1351, align 4, !tbaa !51
  %1352 = load ptr, ptr %13, align 8, !tbaa !5
  %1353 = getelementptr inbounds %struct._TCP_SEG, ptr %1352, i32 0, i32 0
  %1354 = load i32, ptr %1353, align 4, !tbaa !47
  %1355 = load ptr, ptr %8, align 8, !tbaa !5
  %1356 = getelementptr inbounds %struct._TCP_CB, ptr %1355, i32 0, i32 19
  store i32 %1354, ptr %1356, align 8, !tbaa !52
  %1357 = load ptr, ptr %13, align 8, !tbaa !5
  %1358 = getelementptr inbounds %struct._TCP_SEG, ptr %1357, i32 0, i32 2
  %1359 = load i32, ptr %1358, align 4, !tbaa !33
  %1360 = load ptr, ptr %8, align 8, !tbaa !5
  %1361 = getelementptr inbounds %struct._TCP_CB, ptr %1360, i32 0, i32 20
  store i32 %1359, ptr %1361, align 4, !tbaa !53
  br label %1362

1362:                                             ; preds = %1348, %1210, %1202
  br label %1363

1363:                                             ; preds = %1362, %1256
  %1364 = load ptr, ptr %8, align 8, !tbaa !5
  %1365 = getelementptr inbounds %struct._TCP_CB, ptr %1364, i32 0, i32 7
  %1366 = load i32, ptr %1365, align 8, !tbaa !42
  %1367 = and i32 %1366, 1024
  %1368 = icmp ne i32 %1367, 0
  %1369 = zext i1 %1368 to i32
  %1370 = trunc i32 %1369 to i8
  %1371 = zext i8 %1370 to i32
  %1372 = icmp ne i32 %1371, 0
  br i1 %1372, label %1373, label %1401

1373:                                             ; preds = %1363
  %1374 = load ptr, ptr %8, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct._TCP_CB, ptr %1374, i32 0, i32 13
  %1376 = load i32, ptr %1375, align 8, !tbaa !40
  %1377 = load ptr, ptr %8, align 8, !tbaa !5
  %1378 = getelementptr inbounds %struct._TCP_CB, ptr %1377, i32 0, i32 14
  %1379 = load i32, ptr %1378, align 4, !tbaa !44
  %1380 = icmp eq i32 %1376, %1379
  br i1 %1380, label %1381, label %1401

1381:                                             ; preds = %1373
  br label %1382

1382:                                             ; preds = %1381
  %1383 = call zeroext i8 @DebugPrintEnabled()
  %1384 = icmp ne i8 %1383, 0
  br i1 %1384, label %1385, label %1394

1385:                                             ; preds = %1382
  br label %1386

1386:                                             ; preds = %1385
  %1387 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %1388 = icmp ne i8 %1387, 0
  br i1 %1388, label %1389, label %1391

1389:                                             ; preds = %1386
  %1390 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.40, ptr noundef %1390)
  br label %1391

1391:                                             ; preds = %1389, %1386
  br label %1392

1392:                                             ; preds = %1391
  br label %1393

1393:                                             ; preds = %1392
  br label %1394

1394:                                             ; preds = %1393, %1382
  br label %1395

1395:                                             ; preds = %1394
  br label %1396

1396:                                             ; preds = %1395
  %1397 = load ptr, ptr %8, align 8, !tbaa !5
  %1398 = getelementptr inbounds %struct._TCP_CB, ptr %1397, i32 0, i32 7
  %1399 = load i32, ptr %1398, align 8, !tbaa !42
  %1400 = or i32 %1399, 2048
  store i32 %1400, ptr %1398, align 8, !tbaa !42
  br label %1401

1401:                                             ; preds = %1396, %1373, %1363
  %1402 = load ptr, ptr %8, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct._TCP_CB, ptr %1402, i32 0, i32 9
  %1404 = load i8, ptr %1403, align 8, !tbaa !21
  %1405 = zext i8 %1404 to i32
  switch i32 %1405, label %1504 [
    i32 5, label %1406
    i32 6, label %1505
    i32 9, label %1505
    i32 7, label %1423
    i32 10, label %1463
    i32 8, label %1475
  ]

1406:                                             ; preds = %1401
  %1407 = load ptr, ptr %8, align 8, !tbaa !5
  %1408 = getelementptr inbounds %struct._TCP_CB, ptr %1407, i32 0, i32 7
  %1409 = load i32, ptr %1408, align 8, !tbaa !42
  %1410 = and i32 %1409, 2048
  %1411 = icmp ne i32 %1410, 0
  %1412 = zext i1 %1411 to i32
  %1413 = trunc i32 %1412 to i8
  %1414 = icmp ne i8 %1413, 0
  br i1 %1414, label %1415, label %1422

1415:                                             ; preds = %1406
  %1416 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %1416, i8 noundef zeroext 6)
  %1417 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearAllTimer(ptr noundef %1417)
  %1418 = load ptr, ptr %8, align 8, !tbaa !5
  %1419 = load ptr, ptr %8, align 8, !tbaa !5
  %1420 = getelementptr inbounds %struct._TCP_CB, ptr %1419, i32 0, i32 55
  %1421 = load i32, ptr %1420, align 8, !tbaa !69
  call void @TcpSetTimer(ptr noundef %1418, i16 noundef zeroext 4, i32 noundef %1421)
  br label %1422

1422:                                             ; preds = %1415, %1406
  br label %1505

1423:                                             ; preds = %1401
  %1424 = load ptr, ptr %8, align 8, !tbaa !5
  %1425 = getelementptr inbounds %struct._TCP_CB, ptr %1424, i32 0, i32 7
  %1426 = load i32, ptr %1425, align 8, !tbaa !42
  %1427 = and i32 %1426, 2048
  %1428 = icmp ne i32 %1427, 0
  %1429 = zext i1 %1428 to i32
  %1430 = trunc i32 %1429 to i8
  %1431 = icmp ne i8 %1430, 0
  br i1 %1431, label %1432, label %1462

1432:                                             ; preds = %1423
  %1433 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %1433, i8 noundef zeroext 8)
  %1434 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClearAllTimer(ptr noundef %1434)
  %1435 = load ptr, ptr %8, align 8, !tbaa !5
  %1436 = getelementptr inbounds %struct._TCP_CB, ptr %1435, i32 0, i32 56
  %1437 = load i32, ptr %1436, align 4, !tbaa !70
  %1438 = icmp ne i32 %1437, 0
  br i1 %1438, label %1439, label %1444

1439:                                             ; preds = %1432
  %1440 = load ptr, ptr %8, align 8, !tbaa !5
  %1441 = load ptr, ptr %8, align 8, !tbaa !5
  %1442 = getelementptr inbounds %struct._TCP_CB, ptr %1441, i32 0, i32 56
  %1443 = load i32, ptr %1442, align 4, !tbaa !70
  call void @TcpSetTimer(ptr noundef %1440, i16 noundef zeroext 5, i32 noundef %1443)
  br label %1461

1444:                                             ; preds = %1432
  br label %1445

1445:                                             ; preds = %1444
  %1446 = call zeroext i8 @DebugPrintEnabled()
  %1447 = icmp ne i8 %1446, 0
  br i1 %1447, label %1448, label %1457

1448:                                             ; preds = %1445
  br label %1449

1449:                                             ; preds = %1448
  %1450 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %1451 = icmp ne i8 %1450, 0
  br i1 %1451, label %1452, label %1454

1452:                                             ; preds = %1449
  %1453 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.13, ptr noundef %1453)
  br label %1454

1454:                                             ; preds = %1452, %1449
  br label %1455

1455:                                             ; preds = %1454
  br label %1456

1456:                                             ; preds = %1455
  br label %1457

1457:                                             ; preds = %1456, %1445
  br label %1458

1458:                                             ; preds = %1457
  br label %1459

1459:                                             ; preds = %1458
  %1460 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClose(ptr noundef %1460)
  br label %1461

1461:                                             ; preds = %1459, %1439
  br label %1462

1462:                                             ; preds = %1461, %1423
  br label %1505

1463:                                             ; preds = %1401
  %1464 = load ptr, ptr %8, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct._TCP_CB, ptr %1464, i32 0, i32 7
  %1466 = load i32, ptr %1465, align 8, !tbaa !42
  %1467 = and i32 %1466, 2048
  %1468 = icmp ne i32 %1467, 0
  %1469 = zext i1 %1468 to i32
  %1470 = trunc i32 %1469 to i8
  %1471 = icmp ne i8 %1470, 0
  br i1 %1471, label %1472, label %1474

1472:                                             ; preds = %1463
  %1473 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %1473, i8 noundef zeroext 0)
  br label %1474

1474:                                             ; preds = %1472, %1463
  br label %1505

1475:                                             ; preds = %1401
  %1476 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSendAck(ptr noundef %1476)
  %1477 = load ptr, ptr %8, align 8, !tbaa !5
  %1478 = getelementptr inbounds %struct._TCP_CB, ptr %1477, i32 0, i32 56
  %1479 = load i32, ptr %1478, align 4, !tbaa !70
  %1480 = icmp ne i32 %1479, 0
  br i1 %1480, label %1481, label %1486

1481:                                             ; preds = %1475
  %1482 = load ptr, ptr %8, align 8, !tbaa !5
  %1483 = load ptr, ptr %8, align 8, !tbaa !5
  %1484 = getelementptr inbounds %struct._TCP_CB, ptr %1483, i32 0, i32 56
  %1485 = load i32, ptr %1484, align 4, !tbaa !70
  call void @TcpSetTimer(ptr noundef %1482, i16 noundef zeroext 5, i32 noundef %1485)
  br label %1503

1486:                                             ; preds = %1475
  br label %1487

1487:                                             ; preds = %1486
  %1488 = call zeroext i8 @DebugPrintEnabled()
  %1489 = icmp ne i8 %1488, 0
  br i1 %1489, label %1490, label %1499

1490:                                             ; preds = %1487
  br label %1491

1491:                                             ; preds = %1490
  %1492 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %1493 = icmp ne i8 %1492, 0
  br i1 %1493, label %1494, label %1496

1494:                                             ; preds = %1491
  %1495 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.13, ptr noundef %1495)
  br label %1496

1496:                                             ; preds = %1494, %1491
  br label %1497

1497:                                             ; preds = %1496
  br label %1498

1498:                                             ; preds = %1497
  br label %1499

1499:                                             ; preds = %1498, %1487
  br label %1500

1500:                                             ; preds = %1499
  br label %1501

1501:                                             ; preds = %1500
  %1502 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClose(ptr noundef %1502)
  br label %1503

1503:                                             ; preds = %1501, %1481
  br label %1505

1504:                                             ; preds = %1401
  br label %1505

1505:                                             ; preds = %1504, %1503, %1474, %1462, %1422, %1401, %1401
  br label %1506

1506:                                             ; preds = %1505, %881, %553, %513, %295
  %1507 = load ptr, ptr %8, align 8, !tbaa !5
  %1508 = getelementptr inbounds %struct._TCP_CB, ptr %1507, i32 0, i32 31
  store i32 0, ptr %1508, align 8, !tbaa !71
  %1509 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpSetKeepaliveTimer(ptr noundef %1509)
  %1510 = load ptr, ptr %13, align 8, !tbaa !5
  %1511 = getelementptr inbounds %struct._TCP_SEG, ptr %1510, i32 0, i32 3
  %1512 = load i8, ptr %1511, align 4, !tbaa !26
  %1513 = zext i8 %1512 to i32
  %1514 = and i32 %1513, 32
  %1515 = icmp ne i32 %1514, 0
  %1516 = zext i1 %1515 to i32
  %1517 = trunc i32 %1516 to i8
  %1518 = zext i8 %1517 to i32
  %1519 = icmp ne i32 %1518, 0
  br i1 %1519, label %1520, label %1597

1520:                                             ; preds = %1506
  %1521 = load ptr, ptr %8, align 8, !tbaa !5
  %1522 = getelementptr inbounds %struct._TCP_CB, ptr %1521, i32 0, i32 9
  %1523 = load i8, ptr %1522, align 8, !tbaa !21
  %1524 = zext i8 %1523 to i32
  %1525 = icmp eq i32 %1524, 9
  br i1 %1525, label %1597, label %1526

1526:                                             ; preds = %1520
  %1527 = load ptr, ptr %8, align 8, !tbaa !5
  %1528 = getelementptr inbounds %struct._TCP_CB, ptr %1527, i32 0, i32 9
  %1529 = load i8, ptr %1528, align 8, !tbaa !21
  %1530 = zext i8 %1529 to i32
  %1531 = icmp eq i32 %1530, 10
  br i1 %1531, label %1597, label %1532

1532:                                             ; preds = %1526
  %1533 = load ptr, ptr %8, align 8, !tbaa !5
  %1534 = getelementptr inbounds %struct._TCP_CB, ptr %1533, i32 0, i32 9
  %1535 = load i8, ptr %1534, align 8, !tbaa !21
  %1536 = zext i8 %1535 to i32
  %1537 = icmp eq i32 %1536, 7
  br i1 %1537, label %1597, label %1538

1538:                                             ; preds = %1532
  %1539 = load ptr, ptr %8, align 8, !tbaa !5
  %1540 = getelementptr inbounds %struct._TCP_CB, ptr %1539, i32 0, i32 9
  %1541 = load i8, ptr %1540, align 8, !tbaa !21
  %1542 = zext i8 %1541 to i32
  %1543 = icmp eq i32 %1542, 8
  br i1 %1543, label %1597, label %1544

1544:                                             ; preds = %1538
  br label %1545

1545:                                             ; preds = %1544
  %1546 = call zeroext i8 @DebugPrintEnabled()
  %1547 = icmp ne i8 %1546, 0
  br i1 %1547, label %1548, label %1557

1548:                                             ; preds = %1545
  br label %1549

1549:                                             ; preds = %1548
  %1550 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %1551 = icmp ne i8 %1550, 0
  br i1 %1551, label %1552, label %1554

1552:                                             ; preds = %1549
  %1553 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.41, ptr noundef %1553)
  br label %1554

1554:                                             ; preds = %1552, %1549
  br label %1555

1555:                                             ; preds = %1554
  br label %1556

1556:                                             ; preds = %1555
  br label %1557

1557:                                             ; preds = %1556, %1545
  br label %1558

1558:                                             ; preds = %1557
  br label %1559

1559:                                             ; preds = %1558
  %1560 = load ptr, ptr %13, align 8, !tbaa !5
  %1561 = getelementptr inbounds %struct._TCP_SEG, ptr %1560, i32 0, i32 0
  %1562 = load i32, ptr %1561, align 4, !tbaa !47
  %1563 = load ptr, ptr %13, align 8, !tbaa !5
  %1564 = getelementptr inbounds %struct._TCP_SEG, ptr %1563, i32 0, i32 4
  %1565 = load i16, ptr %1564, align 2, !tbaa !72
  %1566 = zext i16 %1565 to i32
  %1567 = add i32 %1562, %1566
  store i32 %1567, ptr %15, align 4, !tbaa !9
  %1568 = load ptr, ptr %8, align 8, !tbaa !5
  %1569 = getelementptr inbounds %struct._TCP_CB, ptr %1568, i32 0, i32 7
  %1570 = load i32, ptr %1569, align 8, !tbaa !42
  %1571 = and i32 %1570, 256
  %1572 = icmp ne i32 %1571, 0
  %1573 = zext i1 %1572 to i32
  %1574 = trunc i32 %1573 to i8
  %1575 = zext i8 %1574 to i32
  %1576 = icmp ne i32 %1575, 0
  br i1 %1576, label %1577, label %1588

1577:                                             ; preds = %1559
  %1578 = load ptr, ptr %8, align 8, !tbaa !5
  %1579 = getelementptr inbounds %struct._TCP_CB, ptr %1578, i32 0, i32 25
  %1580 = load i32, ptr %1579, align 8, !tbaa !73
  %1581 = load i32, ptr %15, align 4, !tbaa !9
  %1582 = sub i32 %1580, %1581
  %1583 = icmp slt i32 %1582, 0
  br i1 %1583, label %1584, label %1588

1584:                                             ; preds = %1577
  %1585 = load i32, ptr %15, align 4, !tbaa !9
  %1586 = load ptr, ptr %8, align 8, !tbaa !5
  %1587 = getelementptr inbounds %struct._TCP_CB, ptr %1586, i32 0, i32 25
  store i32 %1585, ptr %1587, align 8, !tbaa !73
  br label %1596

1588:                                             ; preds = %1577, %1559
  %1589 = load i32, ptr %15, align 4, !tbaa !9
  %1590 = load ptr, ptr %8, align 8, !tbaa !5
  %1591 = getelementptr inbounds %struct._TCP_CB, ptr %1590, i32 0, i32 25
  store i32 %1589, ptr %1591, align 8, !tbaa !73
  %1592 = load ptr, ptr %8, align 8, !tbaa !5
  %1593 = getelementptr inbounds %struct._TCP_CB, ptr %1592, i32 0, i32 7
  %1594 = load i32, ptr %1593, align 8, !tbaa !42
  %1595 = or i32 %1594, 256
  store i32 %1595, ptr %1593, align 8, !tbaa !42
  br label %1596

1596:                                             ; preds = %1588, %1584
  br label %1597

1597:                                             ; preds = %1596, %1538, %1532, %1526, %1520, %1506
  %1598 = load ptr, ptr %13, align 8, !tbaa !5
  %1599 = getelementptr inbounds %struct._TCP_SEG, ptr %1598, i32 0, i32 1
  %1600 = load i32, ptr %1599, align 4, !tbaa !49
  %1601 = load ptr, ptr %13, align 8, !tbaa !5
  %1602 = getelementptr inbounds %struct._TCP_SEG, ptr %1601, i32 0, i32 0
  %1603 = load i32, ptr %1602, align 4, !tbaa !47
  %1604 = icmp ne i32 %1600, %1603
  br i1 %1604, label %1605, label %1714

1605:                                             ; preds = %1597
  %1606 = load ptr, ptr %8, align 8, !tbaa !5
  %1607 = getelementptr inbounds %struct._TCP_CB, ptr %1606, i32 0, i32 9
  %1608 = load i8, ptr %1607, align 8, !tbaa !21
  %1609 = zext i8 %1608 to i32
  %1610 = icmp eq i32 %1609, 9
  br i1 %1610, label %1629, label %1611

1611:                                             ; preds = %1605
  %1612 = load ptr, ptr %8, align 8, !tbaa !5
  %1613 = getelementptr inbounds %struct._TCP_CB, ptr %1612, i32 0, i32 9
  %1614 = load i8, ptr %1613, align 8, !tbaa !21
  %1615 = zext i8 %1614 to i32
  %1616 = icmp eq i32 %1615, 10
  br i1 %1616, label %1629, label %1617

1617:                                             ; preds = %1611
  %1618 = load ptr, ptr %8, align 8, !tbaa !5
  %1619 = getelementptr inbounds %struct._TCP_CB, ptr %1618, i32 0, i32 9
  %1620 = load i8, ptr %1619, align 8, !tbaa !21
  %1621 = zext i8 %1620 to i32
  %1622 = icmp eq i32 %1621, 7
  br i1 %1622, label %1629, label %1623

1623:                                             ; preds = %1617
  %1624 = load ptr, ptr %8, align 8, !tbaa !5
  %1625 = getelementptr inbounds %struct._TCP_CB, ptr %1624, i32 0, i32 9
  %1626 = load i8, ptr %1625, align 8, !tbaa !21
  %1627 = zext i8 %1626 to i32
  %1628 = icmp eq i32 %1627, 8
  br i1 %1628, label %1629, label %1645

1629:                                             ; preds = %1623, %1617, %1611, %1605
  br label %1630

1630:                                             ; preds = %1629
  %1631 = call zeroext i8 @DebugPrintEnabled()
  %1632 = icmp ne i8 %1631, 0
  br i1 %1632, label %1633, label %1642

1633:                                             ; preds = %1630
  br label %1634

1634:                                             ; preds = %1633
  %1635 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %1636 = icmp ne i8 %1635, 0
  br i1 %1636, label %1637, label %1639

1637:                                             ; preds = %1634
  %1638 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.42, ptr noundef %1638)
  br label %1639

1639:                                             ; preds = %1637, %1634
  br label %1640

1640:                                             ; preds = %1639
  br label %1641

1641:                                             ; preds = %1640
  br label %1642

1642:                                             ; preds = %1641, %1630
  br label %1643

1643:                                             ; preds = %1642
  br label %1644

1644:                                             ; preds = %1643
  br label %1752

1645:                                             ; preds = %1623
  %1646 = load ptr, ptr %8, align 8, !tbaa !5
  %1647 = getelementptr inbounds %struct._TCP_CB, ptr %1646, i32 0, i32 9
  %1648 = load i8, ptr %1647, align 8, !tbaa !21
  %1649 = zext i8 %1648 to i32
  %1650 = icmp eq i32 %1649, 5
  br i1 %1650, label %1675, label %1651

1651:                                             ; preds = %1645
  %1652 = load ptr, ptr %8, align 8, !tbaa !5
  %1653 = getelementptr inbounds %struct._TCP_CB, ptr %1652, i32 0, i32 9
  %1654 = load i8, ptr %1653, align 8, !tbaa !21
  %1655 = zext i8 %1654 to i32
  %1656 = icmp eq i32 %1655, 6
  br i1 %1656, label %1675, label %1657

1657:                                             ; preds = %1651
  %1658 = load ptr, ptr %8, align 8, !tbaa !5
  %1659 = getelementptr inbounds %struct._TCP_CB, ptr %1658, i32 0, i32 9
  %1660 = load i8, ptr %1659, align 8, !tbaa !21
  %1661 = zext i8 %1660 to i32
  %1662 = icmp eq i32 %1661, 7
  br i1 %1662, label %1675, label %1663

1663:                                             ; preds = %1657
  %1664 = load ptr, ptr %8, align 8, !tbaa !5
  %1665 = getelementptr inbounds %struct._TCP_CB, ptr %1664, i32 0, i32 9
  %1666 = load i8, ptr %1665, align 8, !tbaa !21
  %1667 = zext i8 %1666 to i32
  %1668 = icmp eq i32 %1667, 8
  br i1 %1668, label %1675, label %1669

1669:                                             ; preds = %1663
  %1670 = load ptr, ptr %8, align 8, !tbaa !5
  %1671 = getelementptr inbounds %struct._TCP_CB, ptr %1670, i32 0, i32 9
  %1672 = load i8, ptr %1671, align 8, !tbaa !21
  %1673 = zext i8 %1672 to i32
  %1674 = icmp eq i32 %1673, 10
  br i1 %1674, label %1675, label %1696

1675:                                             ; preds = %1669, %1663, %1657, %1651, %1645
  %1676 = load ptr, ptr %5, align 8, !tbaa !5
  %1677 = getelementptr inbounds %struct.NET_BUF, ptr %1676, i32 0, i32 9
  %1678 = load i32, ptr %1677, align 4, !tbaa !15
  %1679 = icmp ne i32 %1678, 0
  br i1 %1679, label %1680, label %1696

1680:                                             ; preds = %1675
  br label %1681

1681:                                             ; preds = %1680
  %1682 = call zeroext i8 @DebugPrintEnabled()
  %1683 = icmp ne i8 %1682, 0
  br i1 %1683, label %1684, label %1693

1684:                                             ; preds = %1681
  br label %1685

1685:                                             ; preds = %1684
  %1686 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %1687 = icmp ne i8 %1686, 0
  br i1 %1687, label %1688, label %1690

1688:                                             ; preds = %1685
  %1689 = load ptr, ptr %8, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.42, ptr noundef %1689)
  br label %1690

1690:                                             ; preds = %1688, %1685
  br label %1691

1691:                                             ; preds = %1690
  br label %1692

1692:                                             ; preds = %1691
  br label %1693

1693:                                             ; preds = %1692, %1681
  br label %1694

1694:                                             ; preds = %1693
  br label %1695

1695:                                             ; preds = %1694
  br label %1752

1696:                                             ; preds = %1675, %1669
  %1697 = load ptr, ptr %8, align 8, !tbaa !5
  %1698 = load ptr, ptr %5, align 8, !tbaa !5
  call void @TcpQueueData(ptr noundef %1697, ptr noundef %1698)
  %1699 = load ptr, ptr %8, align 8, !tbaa !5
  %1700 = call i64 @TcpDeliverData(ptr noundef %1699)
  %1701 = icmp eq i64 %1700, -1
  br i1 %1701, label %1702, label %1703

1702:                                             ; preds = %1696
  br label %1752

1703:                                             ; preds = %1696
  %1704 = load ptr, ptr %8, align 8, !tbaa !5
  %1705 = getelementptr inbounds %struct._TCP_CB, ptr %1704, i32 0, i32 6
  %1706 = call zeroext i8 @IsListEmpty(ptr noundef %1705)
  %1707 = icmp ne i8 %1706, 0
  br i1 %1707, label %1713, label %1708

1708:                                             ; preds = %1703
  %1709 = load ptr, ptr %8, align 8, !tbaa !5
  %1710 = getelementptr inbounds %struct._TCP_CB, ptr %1709, i32 0, i32 7
  %1711 = load i32, ptr %1710, align 8, !tbaa !42
  %1712 = or i32 %1711, 16384
  store i32 %1712, ptr %1710, align 8, !tbaa !42
  br label %1713

1713:                                             ; preds = %1708, %1703
  br label %1714

1714:                                             ; preds = %1713, %1597
  %1715 = load ptr, ptr %9, align 8, !tbaa !5
  %1716 = icmp ne ptr %1715, null
  br i1 %1716, label %1717, label %1723

1717:                                             ; preds = %1714
  %1718 = load ptr, ptr %9, align 8, !tbaa !5
  %1719 = load ptr, ptr %8, align 8, !tbaa !5
  %1720 = getelementptr inbounds %struct._TCP_CB, ptr %1719, i32 0, i32 1
  store ptr %1718, ptr %1720, align 8, !tbaa !74
  %1721 = load ptr, ptr %8, align 8, !tbaa !5
  %1722 = call i64 @TcpInsertTcb(ptr noundef %1721)
  br label %1723

1723:                                             ; preds = %1717, %1714
  %1724 = load ptr, ptr %8, align 8, !tbaa !5
  %1725 = getelementptr inbounds %struct._TCP_CB, ptr %1724, i32 0, i32 9
  %1726 = load i8, ptr %1725, align 8, !tbaa !21
  %1727 = zext i8 %1726 to i32
  %1728 = icmp ne i32 %1727, 0
  br i1 %1728, label %1729, label %1750

1729:                                             ; preds = %1723
  %1730 = load ptr, ptr %8, align 8, !tbaa !5
  %1731 = call i64 @TcpToSendData(ptr noundef %1730, i64 noundef 0)
  %1732 = icmp eq i64 %1731, 0
  br i1 %1732, label %1733, label %1750

1733:                                             ; preds = %1729
  %1734 = load ptr, ptr %8, align 8, !tbaa !5
  %1735 = getelementptr inbounds %struct._TCP_CB, ptr %1734, i32 0, i32 7
  %1736 = load i32, ptr %1735, align 8, !tbaa !42
  %1737 = and i32 %1736, 16384
  %1738 = icmp ne i32 %1737, 0
  %1739 = zext i1 %1738 to i32
  %1740 = trunc i32 %1739 to i8
  %1741 = zext i8 %1740 to i32
  %1742 = icmp ne i32 %1741, 0
  br i1 %1742, label %1748, label %1743

1743:                                             ; preds = %1733
  %1744 = load ptr, ptr %5, align 8, !tbaa !5
  %1745 = getelementptr inbounds %struct.NET_BUF, ptr %1744, i32 0, i32 9
  %1746 = load i32, ptr %1745, align 4, !tbaa !15
  %1747 = icmp ne i32 %1746, 0
  br i1 %1747, label %1748, label %1750

1748:                                             ; preds = %1743, %1733
  %1749 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpToSendAck(ptr noundef %1749)
  br label %1750

1750:                                             ; preds = %1748, %1743, %1729, %1723
  %1751 = load ptr, ptr %5, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %1751)
  store i64 0, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %1822

1752:                                             ; preds = %1702, %1695, %1644, %731
  %1753 = load ptr, ptr %8, align 8, !tbaa !5
  %1754 = load ptr, ptr %11, align 8, !tbaa !5
  %1755 = load i32, ptr %12, align 4, !tbaa !9
  %1756 = load i32, ptr %7, align 4, !tbaa !9
  %1757 = load i32, ptr %6, align 4, !tbaa !9
  %1758 = call i64 @TcpSendReset(ptr noundef %1753, ptr noundef %1754, i32 noundef %1755, i32 noundef %1756, i32 noundef %1757)
  br label %1759

1759:                                             ; preds = %1752, %703, %404
  br label %1760

1760:                                             ; preds = %1759
  %1761 = call zeroext i8 @DebugAssertEnabled()
  %1762 = icmp ne i8 %1761, 0
  br i1 %1762, label %1763, label %1773

1763:                                             ; preds = %1760
  %1764 = load ptr, ptr %8, align 8, !tbaa !5
  %1765 = icmp ne ptr %1764, null
  br i1 %1765, label %1766, label %1771

1766:                                             ; preds = %1763
  %1767 = load ptr, ptr %8, align 8, !tbaa !5
  %1768 = getelementptr inbounds %struct._TCP_CB, ptr %1767, i32 0, i32 2
  %1769 = load ptr, ptr %1768, align 8, !tbaa !35
  %1770 = icmp ne ptr %1769, null
  br i1 %1770, label %1772, label %1771

1771:                                             ; preds = %1766, %1763
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 1371, ptr noundef @.str.9)
  br label %1772

1772:                                             ; preds = %1771, %1766
  br label %1773

1773:                                             ; preds = %1772, %1760
  br label %1774

1774:                                             ; preds = %1773
  br label %1775

1775:                                             ; preds = %1774
  %1776 = load ptr, ptr %5, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %1776)
  %1777 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClose(ptr noundef %1777)
  store i64 -1, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %1822

1778:                                             ; preds = %855, %368, %247, %179, %154
  %1779 = load ptr, ptr %8, align 8, !tbaa !5
  %1780 = load ptr, ptr %11, align 8, !tbaa !5
  %1781 = load i32, ptr %12, align 4, !tbaa !9
  %1782 = load i32, ptr %7, align 4, !tbaa !9
  %1783 = load i32, ptr %6, align 4, !tbaa !9
  %1784 = call i64 @TcpSendReset(ptr noundef %1779, ptr noundef %1780, i32 noundef %1781, i32 noundef %1782, i32 noundef %1783)
  br label %1785

1785:                                             ; preds = %1778, %906, %761, %603, %554, %424, %326, %279, %221, %87
  br label %1786

1786:                                             ; preds = %1785
  %1787 = call zeroext i8 @DebugPrintEnabled()
  %1788 = icmp ne i8 %1787, 0
  br i1 %1788, label %1789, label %1797

1789:                                             ; preds = %1786
  br label %1790

1790:                                             ; preds = %1789
  %1791 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %1792 = icmp ne i8 %1791, 0
  br i1 %1792, label %1793, label %1794

1793:                                             ; preds = %1790
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.43)
  br label %1794

1794:                                             ; preds = %1793, %1790
  br label %1795

1795:                                             ; preds = %1794
  br label %1796

1796:                                             ; preds = %1795
  br label %1797

1797:                                             ; preds = %1796, %1786
  br label %1798

1798:                                             ; preds = %1797
  br label %1799

1799:                                             ; preds = %1798
  %1800 = load ptr, ptr %5, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %1800)
  %1801 = load ptr, ptr %9, align 8, !tbaa !5
  %1802 = icmp ne ptr %1801, null
  br i1 %1802, label %1803, label %1821

1803:                                             ; preds = %1799
  %1804 = load ptr, ptr %8, align 8, !tbaa !5
  %1805 = icmp ne ptr %1804, null
  br i1 %1805, label %1806, label %1821

1806:                                             ; preds = %1803
  br label %1807

1807:                                             ; preds = %1806
  %1808 = call zeroext i8 @DebugAssertEnabled()
  %1809 = icmp ne i8 %1808, 0
  br i1 %1809, label %1810, label %1817

1810:                                             ; preds = %1807
  %1811 = load ptr, ptr %8, align 8, !tbaa !5
  %1812 = getelementptr inbounds %struct._TCP_CB, ptr %1811, i32 0, i32 2
  %1813 = load ptr, ptr %1812, align 8, !tbaa !35
  %1814 = icmp ne ptr %1813, null
  br i1 %1814, label %1816, label %1815

1815:                                             ; preds = %1810
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 1392, ptr noundef @.str.44)
  br label %1816

1816:                                             ; preds = %1815, %1810
  br label %1817

1817:                                             ; preds = %1816, %1807
  br label %1818

1818:                                             ; preds = %1817
  br label %1819

1819:                                             ; preds = %1818
  %1820 = load ptr, ptr %8, align 8, !tbaa !5
  call void @TcpClose(ptr noundef %1820)
  br label %1821

1821:                                             ; preds = %1819, %1803, %1799
  store i64 0, ptr %4, align 8
  store i32 1, ptr %16, align 4
  br label %1822

1822:                                             ; preds = %1821, %1775, %1750
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 12, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  %1823 = load i64, ptr %4, align 8
  ret i64 %1823
}

declare ptr @NetbufGetByte(ptr noundef, i32 noundef, ptr noundef) #2

declare zeroext i16 @TcpChecksum(ptr noundef, i16 noundef zeroext) #2

declare zeroext i16 @NetPseudoHeadChecksum(i32 noundef, i32 noundef, i8 noundef zeroext, i16 noundef zeroext) #2

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

declare ptr @TcpFormatNetbuf(ptr noundef, ptr noundef) #2

declare i64 @TcpParseOption(ptr noundef, ptr noundef) #2

declare ptr @TcpCloneTcb(ptr noundef) #2

declare void @TcpInitTcbLocal(ptr noundef) #2

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

declare void @TcpClearTimer(ptr noundef, i16 noundef zeroext) #2

declare void @TcpSetProbeTimer(ptr noundef) #2

declare void @TcpSetKeepaliveTimer(ptr noundef) #2

declare i64 @TcpInsertTcb(ptr noundef) #2

declare i64 @TcpToSendData(ptr noundef, i64 noundef) #2

declare void @TcpToSendAck(ptr noundef) #2

declare i64 @TcpSendReset(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !13, i64 8, !14, i64 16, !7, i64 32, !6, i64 40, !6, i64 48, !7, i64 56, !6, i64 120, !10, i64 128, !10, i64 132, !7, i64 136}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!15 = !{!12, !10, i64 132}
!16 = !{!17, !7, i64 13}
!17 = !{!"", !18, i64 0, !18, i64 2, !10, i64 4, !10, i64 8, !7, i64 12, !7, i64 12, !7, i64 13, !18, i64 14, !18, i64 16, !18, i64 18}
!18 = !{!"short", !7, i64 0}
!19 = !{!17, !18, i64 2}
!20 = !{!17, !18, i64 0}
!21 = !{!22, !7, i64 88}
!22 = !{!"_TCP_CB", !14, i64 0, !6, i64 16, !6, i64 24, !23, i64 32, !23, i64 40, !14, i64 48, !14, i64 64, !10, i64 80, !10, i64 84, !7, i64 88, !7, i64 89, !18, i64 90, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !18, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !18, i64 152, !18, i64 154, !7, i64 156, !10, i64 180, !10, i64 184, !10, i64 188, !7, i64 192, !7, i64 193, !7, i64 194, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !18, i64 236, !7, i64 238, !7, i64 239, !10, i64 240, !10, i64 244, !10, i64 248, !7, i64 252, !7, i64 253, !18, i64 254, !10, i64 256, !10, i64 260, !10, i64 264, !7, i64 268, !7, i64 269, !7, i64 270, !24, i64 271, !6, i64 280}
!23 = !{!"_TCP_PEER", !10, i64 0, !18, i64 4}
!24 = !{!"", !7, i64 0}
!25 = !{!12, !6, i64 40}
!26 = !{!27, !7, i64 12}
!27 = !{!"_TCP_SEG", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 12, !18, i64 14, !10, i64 16}
!28 = !{!22, !10, i64 32}
!29 = !{!22, !18, i64 36}
!30 = !{!22, !10, i64 40}
!31 = !{!22, !18, i64 44}
!32 = !{!22, !10, i64 264}
!33 = !{!27, !10, i64 8}
!34 = !{!22, !10, i64 92}
!35 = !{!22, !6, i64 24}
!36 = !{!37, !13, i64 128}
!37 = !{!"_SOCKET", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !14, i64 40, !7, i64 56, !10, i64 60, !7, i64 64, !18, i64 66, !38, i64 72, !39, i64 96, !39, i64 112, !13, i64 128, !7, i64 136, !10, i64 140, !10, i64 144, !6, i64 152, !14, i64 160, !14, i64 176, !14, i64 192, !14, i64 208, !14, i64 224, !6, i64 240, !6, i64 248, !6, i64 256, !7, i64 264, !7, i64 288, !6, i64 368, !6, i64 376, !6, i64 384}
!38 = !{!"", !13, i64 0, !13, i64 8, !10, i64 16}
!39 = !{!"_SOCK_BUFFER", !10, i64 0, !10, i64 4, !6, i64 8}
!40 = !{!22, !10, i64 96}
!41 = !{!22, !7, i64 238}
!42 = !{!22, !10, i64 80}
!43 = !{!22, !10, i64 208}
!44 = !{!22, !10, i64 100}
!45 = !{!22, !7, i64 192}
!46 = !{!27, !10, i64 16}
!47 = !{!27, !10, i64 0}
!48 = !{!22, !10, i64 140}
!49 = !{!27, !10, i64 4}
!50 = !{!22, !10, i64 112}
!51 = !{!22, !10, i64 116}
!52 = !{!22, !10, i64 120}
!53 = !{!22, !10, i64 124}
!54 = !{!55, !7, i64 0}
!55 = !{!"_TCP_OPTION", !7, i64 0, !7, i64 1, !18, i64 2, !10, i64 4, !10, i64 8}
!56 = !{!55, !10, i64 4}
!57 = !{!22, !10, i64 196}
!58 = !{!22, !10, i64 200}
!59 = !{!55, !10, i64 8}
!60 = !{!22, !10, i64 220}
!61 = !{!22, !18, i64 236}
!62 = !{!22, !10, i64 224}
!63 = !{!22, !10, i64 228}
!64 = !{!22, !18, i64 128}
!65 = !{!22, !7, i64 193}
!66 = !{!22, !10, i64 108}
!67 = !{!22, !10, i64 232}
!68 = !{!22, !10, i64 240}
!69 = !{!22, !10, i64 256}
!70 = !{!22, !10, i64 260}
!71 = !{!22, !10, i64 184}
!72 = !{!27, !18, i64 14}
!73 = !{!22, !10, i64 144}
!74 = !{!22, !6, i64 16}


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

%struct._TCP_OPTION = type { i8, i8, i16, i32, i32 }

@.str.7 = external hidden unnamed_addr constant [152 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [107 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [63 x i8], align 1
@mTcpTick = external local_unnamed_addr global i32, align 4
@.str.38 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [24 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i64 @TcpSeqAcceptable(ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

declare zeroext i8 @DebugPrintEnabled() local_unnamed_addr #2

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) local_unnamed_addr #2

declare void @DebugPrint(i64 noundef, ptr noundef, ...) local_unnamed_addr #2

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

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

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

declare i32 @NetbufTrim(ptr noundef, i32 noundef, i8 noundef zeroext) local_unnamed_addr #2

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #2

declare void @DebugAssert(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local i64 @TcpDeliverData(ptr noundef) local_unnamed_addr #0

declare zeroext i8 @IsListEmpty(ptr noundef) local_unnamed_addr #2

declare void @NetbufFree(ptr noundef) local_unnamed_addr #2

declare void @TcpSetState(ptr noundef, i8 noundef zeroext) local_unnamed_addr #2

declare void @TcpClearAllTimer(ptr noundef) local_unnamed_addr #2

declare void @TcpSetTimer(ptr noundef, i16 noundef zeroext, i32 noundef) local_unnamed_addr #2

declare void @TcpSendAck(ptr noundef) local_unnamed_addr #2

declare void @TcpClose(ptr noundef) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i64 -1, 1) i64 @TcpInput(ptr noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = alloca %struct._TCP_OPTION, align 4
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #4
  %5 = tail call zeroext i8 @DebugAssertEnabled() #4
  %.not = icmp eq i8 %5, 0
  br i1 %.not, label %11, label %6

6:                                                ; preds = %3
  %.not390 = icmp eq ptr %0, null
  br i1 %.not390, label %10, label %7

7:                                                ; preds = %6
  %8 = load i32, ptr %0, align 8, !tbaa !5
  %9 = icmp eq i32 %8, 1718968942
  br i1 %9, label %11, label %10

10:                                               ; preds = %7, %6
  tail call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 707, ptr noundef nonnull @.str.15) #4
  br label %11

11:                                               ; preds = %7, %10, %3
  %12 = tail call ptr @NetbufGetByte(ptr noundef %0, i32 noundef 0, ptr noundef null) #4
  %13 = tail call zeroext i8 @DebugAssertEnabled() #4
  %14 = icmp eq i8 %13, 0
  %15 = icmp ne ptr %12, null
  %or.cond9 = select i1 %14, i1 true, i1 %15
  br i1 %or.cond9, label %17, label %16

16:                                               ; preds = %11
  tail call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 713, ptr noundef nonnull @.str.16) #4
  br label %17

17:                                               ; preds = %16, %11
  %18 = getelementptr inbounds i8, ptr %0, i64 132
  %19 = load i32, ptr %18, align 4, !tbaa !13
  %20 = getelementptr inbounds i8, ptr %12, i64 12
  %21 = load i8, ptr %20, align 1
  %22 = lshr i8 %21, 2
  %23 = and i8 %22, 60
  %24 = zext nneg i8 %23 to i32
  %25 = sub i32 %19, %24
  %26 = icmp ult i8 %21, 80
  %27 = icmp slt i32 %25, 0
  %or.cond = select i1 %26, i1 true, i1 %27
  br i1 %or.cond, label %31, label %28

28:                                               ; preds = %17
  %29 = tail call zeroext i16 @NetPseudoHeadChecksum(i32 noundef %1, i32 noundef %2, i8 noundef zeroext 6, i16 noundef zeroext 0) #4
  %30 = tail call zeroext i16 @TcpChecksum(ptr noundef nonnull %0, i16 noundef zeroext %29) #4
  %.not391 = icmp eq i16 %30, 0
  br i1 %.not391, label %36, label %31

31:                                               ; preds = %17, %28
  %32 = tail call zeroext i8 @DebugPrintEnabled() #4
  %.not509 = icmp eq i8 %32, 0
  br i1 %.not509, label %644, label %33

33:                                               ; preds = %31
  %34 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #4
  %.not510 = icmp eq i8 %34, 0
  br i1 %.not510, label %644, label %35

35:                                               ; preds = %33
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.17) #4
  br label %644

36:                                               ; preds = %28
  %37 = getelementptr inbounds i8, ptr %12, i64 13
  %38 = load i8, ptr %37, align 1, !tbaa !14
  %39 = lshr i8 %38, 1
  %40 = and i8 %39, 1
  %41 = zext nneg i8 %40 to i32
  %42 = and i8 %38, 1
  %43 = zext nneg i8 %42 to i32
  %spec.select = add nuw i32 %25, %43
  %.1368 = add nuw i32 %spec.select, %41
  %44 = getelementptr inbounds i8, ptr %12, i64 2
  %45 = load i16, ptr %44, align 1, !tbaa !17
  %46 = load i16, ptr %12, align 1, !tbaa !18
  %47 = tail call ptr @TcpLocateTcb(i16 noundef zeroext %45, i32 noundef %2, i16 noundef zeroext %46, i32 noundef %1, i8 noundef zeroext %40) #4
  %48 = icmp eq ptr %47, null
  br i1 %48, label %53, label %49

49:                                               ; preds = %36
  %50 = getelementptr inbounds i8, ptr %47, i64 88
  %51 = load i8, ptr %50, align 8, !tbaa !19
  %52 = icmp eq i8 %51, 0
  br i1 %52, label %53, label %58

53:                                               ; preds = %36, %49
  %54 = tail call zeroext i8 @DebugPrintEnabled() #4
  %.not507 = icmp eq i8 %54, 0
  br i1 %.not507, label %642, label %55

55:                                               ; preds = %53
  %56 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #4
  %.not508 = icmp eq i8 %56, 0
  br i1 %.not508, label %642, label %57

57:                                               ; preds = %55
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.18) #4
  br label %642

58:                                               ; preds = %49
  %59 = tail call ptr @TcpFormatNetbuf(ptr noundef nonnull %47, ptr noundef nonnull %0) #4
  %60 = getelementptr inbounds i8, ptr %0, i64 40
  %61 = load ptr, ptr %60, align 8, !tbaa !23
  %62 = call i64 @TcpParseOption(ptr noundef %61, ptr noundef nonnull %4) #4
  %63 = icmp eq i64 %62, -1
  br i1 %63, label %64, label %69

64:                                               ; preds = %58
  %65 = call zeroext i8 @DebugPrintEnabled() #4
  %.not505 = icmp eq i8 %65, 0
  br i1 %.not505, label %642, label %66

66:                                               ; preds = %64
  %67 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #4
  %.not506 = icmp eq i8 %67, 0
  br i1 %.not506, label %642, label %68

68:                                               ; preds = %66
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str.19, ptr noundef nonnull %47) #4
  br label %642

69:                                               ; preds = %58
  %70 = load i8, ptr %20, align 1
  %71 = lshr i8 %70, 2
  %72 = and i8 %71, 60
  %73 = zext nneg i8 %72 to i32
  %74 = call i32 @NetbufTrim(ptr noundef nonnull %0, i32 noundef %73, i8 noundef zeroext 1) #4
  store ptr null, ptr %60, align 8, !tbaa !23
  %75 = load i8, ptr %50, align 8, !tbaa !19
  switch i8 %75, label %201 [
    i8 1, label %76
    i8 2, label %115
  ]

76:                                               ; preds = %69
  %77 = getelementptr inbounds i8, ptr %59, i64 12
  %78 = load i8, ptr %77, align 4, !tbaa !24
  %79 = and i8 %78, 4
  %.not472 = icmp eq i8 %79, 0
  br i1 %.not472, label %85, label %80

80:                                               ; preds = %76
  %81 = call zeroext i8 @DebugPrintEnabled() #4
  %.not503 = icmp eq i8 %81, 0
  br i1 %.not503, label %644, label %82

82:                                               ; preds = %80
  %83 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not504 = icmp eq i8 %83, 0
  br i1 %.not504, label %644, label %84

84:                                               ; preds = %82
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.20, ptr noundef nonnull %47) #4
  br label %644

85:                                               ; preds = %76
  %86 = and i8 %78, 16
  %.not474 = icmp eq i8 %86, 0
  br i1 %.not474, label %92, label %87

87:                                               ; preds = %85
  %88 = call zeroext i8 @DebugPrintEnabled() #4
  %.not501 = icmp eq i8 %88, 0
  br i1 %.not501, label %642, label %89

89:                                               ; preds = %87
  %90 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not502 = icmp eq i8 %90, 0
  br i1 %.not502, label %642, label %91

91:                                               ; preds = %89
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.21, ptr noundef nonnull %47) #4
  br label %642

92:                                               ; preds = %85
  %93 = and i8 %78, 2
  %.not476 = icmp eq i8 %93, 0
  br i1 %.not476, label %644, label %94

94:                                               ; preds = %92
  %95 = call ptr @TcpCloneTcb(ptr noundef nonnull %47) #4
  %96 = icmp eq ptr %95, null
  %97 = call zeroext i8 @DebugPrintEnabled() #4
  %.not499 = icmp eq i8 %97, 0
  br i1 %96, label %98, label %102

98:                                               ; preds = %94
  br i1 %.not499, label %644, label %99

99:                                               ; preds = %98
  %100 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #4
  %.not500 = icmp eq i8 %100, 0
  br i1 %.not500, label %644, label %101

101:                                              ; preds = %99
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str.22, ptr noundef null) #4
  br label %644

102:                                              ; preds = %94
  br i1 %.not499, label %106, label %103

103:                                              ; preds = %102
  %104 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #4
  %.not478 = icmp eq i8 %104, 0
  br i1 %.not478, label %106, label %105

105:                                              ; preds = %103
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.23, ptr noundef nonnull %95) #4
  br label %106

106:                                              ; preds = %103, %105, %102
  %107 = getelementptr inbounds i8, ptr %95, i64 32
  store i32 %2, ptr %107, align 8, !tbaa !26
  %108 = load i16, ptr %44, align 1, !tbaa !17
  %109 = getelementptr inbounds i8, ptr %95, i64 36
  store i16 %108, ptr %109, align 4, !tbaa !27
  %110 = getelementptr inbounds i8, ptr %95, i64 40
  store i32 %1, ptr %110, align 8, !tbaa !28
  %111 = load i16, ptr %12, align 1, !tbaa !18
  %112 = getelementptr inbounds i8, ptr %95, i64 44
  store i16 %111, ptr %112, align 4, !tbaa !29
  call void @TcpInitTcbLocal(ptr noundef nonnull %95) #4
  call void @TcpInitTcbPeer(ptr noundef nonnull %95, ptr noundef nonnull %59, ptr noundef nonnull %4) #4
  call void @TcpSetState(ptr noundef nonnull %95, i8 noundef zeroext 3) #4
  %113 = getelementptr inbounds i8, ptr %95, i64 264
  %114 = load i32, ptr %113, align 8, !tbaa !30
  call void @TcpSetTimer(ptr noundef nonnull %95, i16 noundef zeroext 0, i32 noundef %114) #4
  call void @TcpTrimInWnd(ptr noundef nonnull %95, ptr noundef nonnull %0)
  br label %555

115:                                              ; preds = %69
  %116 = getelementptr inbounds i8, ptr %59, i64 12
  %117 = load i8, ptr %116, align 4, !tbaa !24
  %118 = and i8 %117, 16
  %.not448 = icmp eq i8 %118, 0
  br i1 %.not448, label %130, label %119

119:                                              ; preds = %115
  %120 = getelementptr inbounds i8, ptr %59, i64 8
  %121 = load i32, ptr %120, align 4, !tbaa !31
  %122 = getelementptr inbounds i8, ptr %47, i64 92
  %123 = load i32, ptr %122, align 4, !tbaa !32
  %124 = add i32 %123, 1
  %.not449 = icmp eq i32 %121, %124
  br i1 %.not449, label %.thread, label %125

125:                                              ; preds = %119
  %126 = call zeroext i8 @DebugPrintEnabled() #4
  %.not469 = icmp eq i8 %126, 0
  br i1 %.not469, label %642, label %127

127:                                              ; preds = %125
  %128 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not470 = icmp eq i8 %128, 0
  br i1 %.not470, label %642, label %129

129:                                              ; preds = %127
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.24, ptr noundef nonnull %47) #4
  br label %642

130:                                              ; preds = %115
  %131 = and i8 %117, 4
  %.not451 = icmp eq i8 %131, 0
  br i1 %.not451, label %147, label %142

.thread:                                          ; preds = %119
  %132 = and i8 %117, 4
  %.not451517 = icmp eq i8 %132, 0
  br i1 %.not451517, label %147, label %133

133:                                              ; preds = %.thread
  %134 = call zeroext i8 @DebugPrintEnabled() #4
  %.not467 = icmp eq i8 %134, 0
  br i1 %.not467, label %138, label %135

135:                                              ; preds = %133
  %136 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not468 = icmp eq i8 %136, 0
  br i1 %.not468, label %138, label %137

137:                                              ; preds = %135
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.25, ptr noundef nonnull %47) #4
  br label %138

138:                                              ; preds = %135, %137, %133
  %139 = getelementptr inbounds i8, ptr %47, i64 24
  %140 = load ptr, ptr %139, align 8, !tbaa !33
  %141 = getelementptr inbounds i8, ptr %140, i64 128
  store i64 -9223372036854775703, ptr %141, align 8, !tbaa !34
  br label %635

142:                                              ; preds = %130
  %143 = call zeroext i8 @DebugPrintEnabled() #4
  %.not465 = icmp eq i8 %143, 0
  br i1 %.not465, label %644, label %144

144:                                              ; preds = %142
  %145 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not466 = icmp eq i8 %145, 0
  br i1 %.not466, label %644, label %146

146:                                              ; preds = %144
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.26, ptr noundef nonnull %47) #4
  br label %644

147:                                              ; preds = %.thread, %130
  %148 = and i8 %117, 2
  %.not453 = icmp eq i8 %148, 0
  br i1 %.not453, label %644, label %149

149:                                              ; preds = %147
  call void @TcpInitTcbPeer(ptr noundef nonnull %47, ptr noundef nonnull %59, ptr noundef nonnull %4) #4
  %150 = load i8, ptr %116, align 4, !tbaa !24
  %151 = and i8 %150, 16
  %.not455 = icmp eq i8 %151, 0
  br i1 %.not455, label %156, label %152

152:                                              ; preds = %149
  %153 = getelementptr inbounds i8, ptr %59, i64 8
  %154 = load i32, ptr %153, align 4, !tbaa !31
  %155 = getelementptr inbounds i8, ptr %47, i64 96
  store i32 %154, ptr %155, align 8, !tbaa !38
  br label %156

156:                                              ; preds = %152, %149
  call void @TcpClearTimer(ptr noundef nonnull %47, i16 noundef zeroext 1) #4
  %157 = getelementptr inbounds i8, ptr %47, i64 92
  %158 = load i32, ptr %157, align 4, !tbaa !32
  %159 = getelementptr inbounds i8, ptr %47, i64 96
  %160 = load i32, ptr %159, align 8, !tbaa !38
  %161 = sub i32 %158, %160
  %162 = icmp slt i32 %161, 0
  br i1 %162, label %163, label %185

163:                                              ; preds = %156
  call void @TcpSetState(ptr noundef nonnull %47, i8 noundef zeroext 4) #4
  call void @TcpClearTimer(ptr noundef nonnull %47, i16 noundef zeroext 0) #4
  %164 = call i64 @TcpDeliverData(ptr noundef nonnull %47)
  %165 = getelementptr inbounds i8, ptr %47, i64 238
  %166 = load i8, ptr %165, align 2, !tbaa !39
  %167 = icmp eq i8 %166, 3
  br i1 %167, label %168, label %177

168:                                              ; preds = %163
  %169 = getelementptr inbounds i8, ptr %47, i64 80
  %170 = load i32, ptr %169, align 8, !tbaa !40
  %171 = and i32 %170, 8192
  %.not460 = icmp eq i32 %171, 0
  br i1 %.not460, label %177, label %172

172:                                              ; preds = %168
  %173 = getelementptr inbounds i8, ptr %47, i64 208
  %174 = load i32, ptr %173, align 8, !tbaa !41
  call void @TcpComputeRtt(ptr noundef nonnull %47, i32 noundef %174)
  %175 = load i32, ptr %169, align 8, !tbaa !40
  %176 = and i32 %175, -8193
  store i32 %176, ptr %169, align 8, !tbaa !40
  br label %177

177:                                              ; preds = %172, %168, %163
  call void @TcpTrimInWnd(ptr noundef nonnull %47, ptr noundef nonnull %0)
  %178 = getelementptr inbounds i8, ptr %47, i64 80
  %179 = load i32, ptr %178, align 8, !tbaa !40
  %180 = or i32 %179, 16384
  store i32 %180, ptr %178, align 8, !tbaa !40
  %181 = call zeroext i8 @DebugPrintEnabled() #4
  %.not461 = icmp eq i8 %181, 0
  br i1 %.not461, label %555, label %182

182:                                              ; preds = %177
  %183 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #4
  %.not462 = icmp eq i8 %183, 0
  br i1 %.not462, label %555, label %184

184:                                              ; preds = %182
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.27, ptr noundef nonnull %47) #4
  br label %555

185:                                              ; preds = %156
  call void @TcpSetState(ptr noundef nonnull %47, i8 noundef zeroext 3) #4
  %186 = call zeroext i8 @DebugAssertEnabled() #4
  %.not456 = icmp eq i8 %186, 0
  br i1 %.not456, label %194, label %187

187:                                              ; preds = %185
  %188 = getelementptr inbounds i8, ptr %47, i64 100
  %189 = load i32, ptr %188, align 4, !tbaa !42
  %190 = load i32, ptr %157, align 4, !tbaa !32
  %191 = add i32 %190, 1
  %192 = icmp eq i32 %189, %191
  br i1 %192, label %194, label %193

193:                                              ; preds = %187
  call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 909, ptr noundef nonnull @.str.28) #4
  br label %194

194:                                              ; preds = %187, %193, %185
  %195 = getelementptr inbounds i8, ptr %47, i64 100
  %196 = load i32, ptr %195, align 4, !tbaa !42
  call void @TcpAdjustSndQue(ptr noundef nonnull %47, i32 noundef %196)
  call void @TcpTrimInWnd(ptr noundef nonnull %47, ptr noundef nonnull %0)
  %197 = call zeroext i8 @DebugPrintEnabled() #4
  %.not457 = icmp eq i8 %197, 0
  br i1 %.not457, label %555, label %198

198:                                              ; preds = %194
  %199 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not458 = icmp eq i8 %199, 0
  br i1 %.not458, label %555, label %200

200:                                              ; preds = %198
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.29, ptr noundef nonnull %47) #4
  br label %555

201:                                              ; preds = %69
  %202 = getelementptr inbounds i8, ptr %47, i64 192
  %203 = load i8, ptr %202, align 8, !tbaa !43
  %.not394 = icmp eq i8 %203, 0
  br i1 %.not394, label %208, label %204

204:                                              ; preds = %201
  %205 = getelementptr inbounds i8, ptr %59, i64 16
  %206 = load i32, ptr %205, align 4, !tbaa !44
  %.not395 = icmp eq i32 %206, 0
  br i1 %.not395, label %208, label %207

207:                                              ; preds = %204
  call void @TcpClearTimer(ptr noundef nonnull %47, i16 noundef zeroext 2) #4
  store i8 0, ptr %202, align 8, !tbaa !43
  br label %208

208:                                              ; preds = %207, %204, %201
  %209 = call i64 @TcpSeqAcceptable(ptr noundef nonnull %47, ptr noundef %59)
  %210 = icmp eq i64 %209, 0
  br i1 %210, label %211, label %221

211:                                              ; preds = %208
  %212 = call zeroext i8 @DebugPrintEnabled() #4
  %.not443 = icmp eq i8 %212, 0
  br i1 %.not443, label %216, label %213

213:                                              ; preds = %211
  %214 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not444 = icmp eq i8 %214, 0
  br i1 %.not444, label %216, label %215

215:                                              ; preds = %213
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.30, ptr noundef nonnull %47) #4
  br label %216

216:                                              ; preds = %213, %215, %211
  %217 = getelementptr inbounds i8, ptr %59, i64 12
  %218 = load i8, ptr %217, align 4, !tbaa !24
  %219 = and i8 %218, 4
  %.not446 = icmp eq i8 %219, 0
  br i1 %.not446, label %220, label %644

220:                                              ; preds = %216
  call void @TcpSendAck(ptr noundef nonnull %47) #4
  br label %644

221:                                              ; preds = %208
  %222 = load i32, ptr %59, align 4, !tbaa !45
  %223 = getelementptr inbounds i8, ptr %47, i64 140
  %224 = load i32, ptr %223, align 4, !tbaa !46
  %225 = sub i32 %222, %224
  %226 = icmp slt i32 %225, 0
  br i1 %226, label %227, label %239

227:                                              ; preds = %221
  %228 = getelementptr inbounds i8, ptr %59, i64 4
  %229 = load i32, ptr %228, align 4, !tbaa !47
  %230 = icmp eq i32 %224, %229
  br i1 %230, label %231, label %239

231:                                              ; preds = %227
  %232 = getelementptr inbounds i8, ptr %59, i64 12
  %233 = load i8, ptr %232, align 4, !tbaa !24
  %234 = and i8 %233, 3
  %.not396 = icmp eq i8 %234, 0
  br i1 %.not396, label %235, label %239

235:                                              ; preds = %231
  %236 = getelementptr inbounds i8, ptr %47, i64 80
  %237 = load i32, ptr %236, align 8, !tbaa !40
  %238 = or i32 %237, 16384
  store i32 %238, ptr %236, align 8, !tbaa !40
  br label %239

239:                                              ; preds = %235, %231, %227, %221
  %240 = getelementptr inbounds i8, ptr %59, i64 12
  %241 = load i8, ptr %240, align 4, !tbaa !24
  %242 = and i8 %241, 4
  %.not398 = icmp eq i8 %242, 0
  br i1 %.not398, label %258, label %243

243:                                              ; preds = %239
  %244 = call zeroext i8 @DebugPrintEnabled() #4
  %.not441 = icmp eq i8 %244, 0
  br i1 %.not441, label %248, label %245

245:                                              ; preds = %243
  %246 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not442 = icmp eq i8 %246, 0
  br i1 %.not442, label %248, label %247

247:                                              ; preds = %245
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.31, ptr noundef nonnull %47) #4
  br label %248

248:                                              ; preds = %245, %247, %243
  %249 = load i8, ptr %50, align 8, !tbaa !19
  switch i8 %249, label %635 [
    i8 3, label %250
    i8 4, label %254
    i8 5, label %254
    i8 6, label %254
    i8 9, label %254
  ]

250:                                              ; preds = %248
  %251 = getelementptr inbounds i8, ptr %47, i64 24
  %252 = load ptr, ptr %251, align 8, !tbaa !33
  %253 = getelementptr inbounds i8, ptr %252, i64 128
  store i64 -9223372036854775702, ptr %253, align 8, !tbaa !34
  br label %635

254:                                              ; preds = %248, %248, %248, %248
  %255 = getelementptr inbounds i8, ptr %47, i64 24
  %256 = load ptr, ptr %255, align 8, !tbaa !33
  %257 = getelementptr inbounds i8, ptr %256, i64 128
  store i64 -9223372036854775703, ptr %257, align 8, !tbaa !34
  br label %635

258:                                              ; preds = %239
  call void @TcpTrimInWnd(ptr noundef nonnull %47, ptr noundef nonnull %0)
  %259 = load i8, ptr %240, align 4, !tbaa !24
  %260 = and i8 %259, 2
  %.not400 = icmp eq i8 %260, 0
  br i1 %.not400, label %270, label %261

261:                                              ; preds = %258
  %262 = call zeroext i8 @DebugPrintEnabled() #4
  %.not439 = icmp eq i8 %262, 0
  br i1 %.not439, label %266, label %263

263:                                              ; preds = %261
  %264 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not440 = icmp eq i8 %264, 0
  br i1 %.not440, label %266, label %265

265:                                              ; preds = %263
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.32, ptr noundef nonnull %47) #4
  br label %266

266:                                              ; preds = %263, %265, %261
  %267 = getelementptr inbounds i8, ptr %47, i64 24
  %268 = load ptr, ptr %267, align 8, !tbaa !33
  %269 = getelementptr inbounds i8, ptr %268, i64 128
  store i64 -9223372036854775703, ptr %269, align 8, !tbaa !34
  br label %633

270:                                              ; preds = %258
  %271 = and i8 %259, 16
  %.not402 = icmp eq i8 %271, 0
  br i1 %.not402, label %272, label %277

272:                                              ; preds = %270
  %273 = call zeroext i8 @DebugPrintEnabled() #4
  %.not403 = icmp eq i8 %273, 0
  br i1 %.not403, label %644, label %274

274:                                              ; preds = %272
  %275 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not404 = icmp eq i8 %275, 0
  br i1 %.not404, label %644, label %276

276:                                              ; preds = %274
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.33, ptr noundef nonnull %47) #4
  br label %644

277:                                              ; preds = %270
  %278 = load i8, ptr %50, align 8, !tbaa !19
  %279 = icmp eq i8 %278, 3
  br i1 %279, label %280, label %311

280:                                              ; preds = %277
  %281 = getelementptr inbounds i8, ptr %47, i64 96
  %282 = load i32, ptr %281, align 8, !tbaa !38
  %283 = getelementptr inbounds i8, ptr %59, i64 8
  %284 = load i32, ptr %283, align 4, !tbaa !31
  %285 = sub i32 %282, %284
  %286 = icmp slt i32 %285, 0
  br i1 %286, label %287, label %306

287:                                              ; preds = %280
  %288 = getelementptr inbounds i8, ptr %47, i64 100
  %289 = load i32, ptr %288, align 4, !tbaa !42
  %290 = sub i32 %284, %289
  %291 = icmp slt i32 %290, 1
  br i1 %291, label %292, label %306

292:                                              ; preds = %287
  %293 = getelementptr inbounds i8, ptr %59, i64 16
  %294 = load i32, ptr %293, align 4, !tbaa !44
  %295 = getelementptr inbounds i8, ptr %47, i64 112
  store i32 %294, ptr %295, align 8, !tbaa !48
  %296 = getelementptr inbounds i8, ptr %47, i64 116
  %297 = load i32, ptr %296, align 4, !tbaa !49
  %. = call i32 @llvm.umax.i32(i32 %294, i32 %297)
  store i32 %., ptr %296, align 4, !tbaa !49
  %298 = load i32, ptr %59, align 4, !tbaa !45
  %299 = getelementptr inbounds i8, ptr %47, i64 120
  store i32 %298, ptr %299, align 8, !tbaa !50
  %300 = getelementptr inbounds i8, ptr %47, i64 124
  store i32 %284, ptr %300, align 4, !tbaa !51
  call void @TcpSetState(ptr noundef nonnull %47, i8 noundef zeroext 4) #4
  call void @TcpClearTimer(ptr noundef nonnull %47, i16 noundef zeroext 0) #4
  %301 = call i64 @TcpDeliverData(ptr noundef nonnull %47)
  %302 = call zeroext i8 @DebugPrintEnabled() #4
  %.not407 = icmp eq i8 %302, 0
  br i1 %.not407, label %311, label %303

303:                                              ; preds = %292
  %304 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #4
  %.not408 = icmp eq i8 %304, 0
  br i1 %.not408, label %311, label %305

305:                                              ; preds = %303
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.34, ptr noundef nonnull %47) #4
  br label %311

306:                                              ; preds = %280, %287
  %307 = call zeroext i8 @DebugPrintEnabled() #4
  %.not405 = icmp eq i8 %307, 0
  br i1 %.not405, label %642, label %308

308:                                              ; preds = %306
  %309 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not406 = icmp eq i8 %309, 0
  br i1 %.not406, label %642, label %310

310:                                              ; preds = %308
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.35, ptr noundef nonnull %47) #4
  br label %642

311:                                              ; preds = %303, %305, %292, %277
  %312 = getelementptr inbounds i8, ptr %59, i64 8
  %313 = load i32, ptr %312, align 4, !tbaa !31
  %314 = getelementptr inbounds i8, ptr %47, i64 96
  %315 = load i32, ptr %314, align 8, !tbaa !38
  %316 = sub i32 %313, %315
  %317 = icmp slt i32 %316, 0
  br i1 %317, label %318, label %323

318:                                              ; preds = %311
  %319 = call zeroext i8 @DebugPrintEnabled() #4
  %.not437 = icmp eq i8 %319, 0
  br i1 %.not437, label %555, label %320

320:                                              ; preds = %318
  %321 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not438 = icmp eq i8 %321, 0
  br i1 %.not438, label %555, label %322

322:                                              ; preds = %320
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.36, ptr noundef nonnull %47) #4
  br label %555

323:                                              ; preds = %311
  %324 = getelementptr inbounds i8, ptr %47, i64 100
  %325 = load i32, ptr %324, align 4, !tbaa !42
  %326 = sub i32 %325, %313
  %327 = icmp slt i32 %326, 0
  br i1 %327, label %328, label %334

328:                                              ; preds = %323
  %329 = call zeroext i8 @DebugPrintEnabled() #4
  %.not435 = icmp eq i8 %329, 0
  br i1 %.not435, label %333, label %330

330:                                              ; preds = %328
  %331 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not436 = icmp eq i8 %331, 0
  br i1 %.not436, label %333, label %332

332:                                              ; preds = %330
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.37, ptr noundef nonnull %47) #4
  br label %333

333:                                              ; preds = %330, %332, %328
  call void @TcpSendAck(ptr noundef nonnull %47) #4
  br label %644

334:                                              ; preds = %323
  %335 = load i8, ptr %4, align 4, !tbaa !52
  %336 = and i8 %335, 4
  %.not410 = icmp eq i8 %336, 0
  br i1 %.not410, label %357, label %337

337:                                              ; preds = %334
  %338 = load i32, ptr %59, align 4, !tbaa !45
  %339 = load i32, ptr %223, align 4, !tbaa !46
  %340 = sub i32 %338, %339
  %341 = icmp slt i32 %340, 1
  br i1 %341, label %342, label %._crit_edge

._crit_edge:                                      ; preds = %337
  %.pre = load i32, ptr @mTcpTick, align 4, !tbaa !54
  br label %352

342:                                              ; preds = %337
  %343 = getelementptr inbounds i8, ptr %59, i64 4
  %344 = load i32, ptr %343, align 4, !tbaa !47
  %345 = sub i32 %339, %344
  %346 = icmp slt i32 %345, 0
  %.pre523 = load i32, ptr @mTcpTick, align 4, !tbaa !54
  br i1 %346, label %347, label %352

347:                                              ; preds = %342
  %348 = getelementptr inbounds i8, ptr %4, i64 4
  %349 = load i32, ptr %348, align 4, !tbaa !55
  %350 = getelementptr inbounds i8, ptr %47, i64 196
  store i32 %349, ptr %350, align 4, !tbaa !56
  %351 = getelementptr inbounds i8, ptr %47, i64 200
  store i32 %.pre523, ptr %351, align 8, !tbaa !57
  br label %352

352:                                              ; preds = %._crit_edge, %347, %342
  %353 = phi i32 [ %.pre, %._crit_edge ], [ %.pre523, %347 ], [ %.pre523, %342 ]
  %354 = getelementptr inbounds i8, ptr %4, i64 8
  %355 = load i32, ptr %354, align 4, !tbaa !58
  %356 = sub i32 %353, %355
  call void @TcpComputeRtt(ptr noundef nonnull %47, i32 noundef %356)
  br label %373

357:                                              ; preds = %334
  %358 = getelementptr inbounds i8, ptr %47, i64 80
  %359 = load i32, ptr %358, align 8, !tbaa !40
  %360 = and i32 %359, 8192
  %.not412 = icmp eq i32 %360, 0
  br i1 %.not412, label %373, label %361

361:                                              ; preds = %357
  %362 = call zeroext i8 @DebugAssertEnabled() #4
  %.not413 = icmp eq i8 %362, 0
  br i1 %.not413, label %368, label %363

363:                                              ; preds = %361
  %364 = getelementptr inbounds i8, ptr %47, i64 238
  %365 = load i8, ptr %364, align 2, !tbaa !39
  %366 = icmp eq i8 %365, 3
  br i1 %366, label %368, label %367

367:                                              ; preds = %363
  call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 1084, ptr noundef nonnull @.str.38) #4
  br label %368

368:                                              ; preds = %363, %367, %361
  %369 = getelementptr inbounds i8, ptr %47, i64 208
  %370 = load i32, ptr %369, align 8, !tbaa !41
  call void @TcpComputeRtt(ptr noundef nonnull %47, i32 noundef %370)
  %371 = load i32, ptr %358, align 8, !tbaa !40
  %372 = and i32 %371, -8193
  store i32 %372, ptr %358, align 8, !tbaa !40
  br label %373

373:                                              ; preds = %357, %368, %352
  %374 = load i32, ptr %312, align 4, !tbaa !31
  %375 = load i32, ptr %324, align 4, !tbaa !42
  %376 = icmp eq i32 %374, %375
  br i1 %376, label %377, label %378

377:                                              ; preds = %373
  call void @TcpClearTimer(ptr noundef nonnull %47, i16 noundef zeroext 1) #4
  br label %381

378:                                              ; preds = %373
  %379 = getelementptr inbounds i8, ptr %47, i64 220
  %380 = load i32, ptr %379, align 4, !tbaa !59
  call void @TcpSetTimer(ptr noundef nonnull %47, i16 noundef zeroext 1, i32 noundef %380) #4
  br label %381

381:                                              ; preds = %378, %377
  %382 = load i32, ptr %312, align 4, !tbaa !31
  %383 = load i32, ptr %314, align 8, !tbaa !38
  %384 = icmp eq i32 %382, %383
  br i1 %384, label %385, label %398

385:                                              ; preds = %381
  %386 = load i32, ptr %324, align 4, !tbaa !42
  %.not414 = icmp eq i32 %382, %386
  br i1 %.not414, label %398, label %387

387:                                              ; preds = %385
  %388 = getelementptr inbounds i8, ptr %59, i64 16
  %389 = load i32, ptr %388, align 4, !tbaa !44
  %390 = getelementptr inbounds i8, ptr %47, i64 112
  %391 = load i32, ptr %390, align 8, !tbaa !48
  %392 = icmp eq i32 %389, %391
  %393 = icmp eq i32 %.1368, 0
  %or.cond3 = select i1 %392, i1 %393, i1 false
  br i1 %or.cond3, label %394, label %398

394:                                              ; preds = %387
  %395 = getelementptr inbounds i8, ptr %47, i64 236
  %396 = load i16, ptr %395, align 4, !tbaa !60
  %397 = add i16 %396, 1
  store i16 %397, ptr %395, align 4, !tbaa !60
  br label %400

398:                                              ; preds = %387, %385, %381
  %399 = getelementptr inbounds i8, ptr %47, i64 236
  store i16 0, ptr %399, align 4, !tbaa !60
  br label %400

400:                                              ; preds = %398, %394
  %401 = phi i16 [ 0, %398 ], [ %397, %394 ]
  %402 = getelementptr inbounds i8, ptr %47, i64 238
  %403 = load i8, ptr %402, align 2, !tbaa !39
  switch i8 %403, label %.thread519 [
    i8 3, label %404
    i8 2, label %406
  ]

404:                                              ; preds = %400
  %405 = icmp ult i16 %401, 3
  br i1 %405, label %406, label %.thread519

406:                                              ; preds = %400, %404
  %407 = sub i32 %383, %382
  %408 = icmp slt i32 %407, 0
  br i1 %408, label %409, label %426

409:                                              ; preds = %406
  %410 = getelementptr inbounds i8, ptr %47, i64 224
  %411 = load i32, ptr %410, align 8, !tbaa !61
  %412 = getelementptr inbounds i8, ptr %47, i64 228
  %413 = load i32, ptr %412, align 4, !tbaa !62
  %414 = icmp ult i32 %411, %413
  %415 = getelementptr inbounds i8, ptr %47, i64 128
  %416 = load i16, ptr %415, align 8, !tbaa !63
  %417 = zext i16 %416 to i32
  br i1 %414, label %421, label %418

418:                                              ; preds = %409
  %419 = mul nuw nsw i32 %417, %417
  %420 = udiv i32 %419, %411
  %spec.select515 = call i32 @llvm.umax.i32(i32 %420, i32 1)
  br label %421

421:                                              ; preds = %409, %418
  %spec.select515.pn = phi i32 [ %spec.select515, %418 ], [ %417, %409 ]
  %storemerge = add i32 %spec.select515.pn, %411
  %422 = getelementptr inbounds i8, ptr %47, i64 193
  %423 = load i8, ptr %422, align 1, !tbaa !64
  %424 = zext nneg i8 %423 to i32
  %425 = shl i32 65535, %424
  %storemerge. = call i32 @llvm.umin.i32(i32 %storemerge, i32 %425)
  store i32 %storemerge., ptr %410, align 8, !tbaa !61
  br label %426

426:                                              ; preds = %421, %406
  %427 = icmp eq i8 %403, 2
  br i1 %427, label %428, label %429

428:                                              ; preds = %426
  call void @TcpFastLossRecover(ptr noundef nonnull %47, ptr noundef nonnull %59)
  br label %429

.thread519:                                       ; preds = %400, %404
  call void @TcpFastRecover(ptr noundef nonnull %47, ptr noundef nonnull %59)
  br label %429

429:                                              ; preds = %426, %428, %.thread519
  %430 = load i32, ptr %314, align 8, !tbaa !38
  %431 = load i32, ptr %312, align 4, !tbaa !31
  %432 = sub i32 %430, %431
  %433 = icmp slt i32 %432, 0
  br i1 %433, label %434, label %446

434:                                              ; preds = %429
  call void @TcpAdjustSndQue(ptr noundef nonnull %47, i32 noundef %431)
  %435 = load i32, ptr %312, align 4, !tbaa !31
  store i32 %435, ptr %314, align 8, !tbaa !38
  %436 = getelementptr inbounds i8, ptr %47, i64 80
  %437 = load i32, ptr %436, align 8, !tbaa !40
  %438 = and i32 %437, 128
  %.not416 = icmp eq i32 %438, 0
  br i1 %.not416, label %446, label %439

439:                                              ; preds = %434
  %440 = getelementptr inbounds i8, ptr %47, i64 108
  %441 = load i32, ptr %440, align 4, !tbaa !65
  %442 = sub i32 %441, %435
  %443 = icmp slt i32 %442, 0
  br i1 %443, label %444, label %446

444:                                              ; preds = %439
  %445 = and i32 %437, -129
  store i32 %445, ptr %436, align 8, !tbaa !40
  br label %446

446:                                              ; preds = %434, %439, %444, %429
  %447 = phi i32 [ %435, %434 ], [ %435, %439 ], [ %435, %444 ], [ %431, %429 ]
  %448 = getelementptr inbounds i8, ptr %47, i64 120
  %449 = load i32, ptr %448, align 8, !tbaa !50
  %450 = load i32, ptr %59, align 4, !tbaa !45
  %451 = sub i32 %449, %450
  %452 = icmp slt i32 %451, 0
  br i1 %452, label %._crit_edge524, label %453

._crit_edge524:                                   ; preds = %446
  %.phi.trans.insert = getelementptr inbounds i8, ptr %47, i64 124
  %.pre525 = load i32, ptr %.phi.trans.insert, align 4, !tbaa !51
  br label %460

453:                                              ; preds = %446
  %454 = icmp eq i32 %449, %450
  br i1 %454, label %455, label %506

455:                                              ; preds = %453
  %456 = getelementptr inbounds i8, ptr %47, i64 124
  %457 = load i32, ptr %456, align 4, !tbaa !51
  %458 = sub i32 %457, %447
  %459 = icmp slt i32 %458, 1
  br i1 %459, label %460, label %506

460:                                              ; preds = %._crit_edge524, %455
  %461 = phi i32 [ %.pre525, %._crit_edge524 ], [ %457, %455 ]
  %462 = getelementptr inbounds i8, ptr %59, i64 16
  %463 = load i32, ptr %462, align 4, !tbaa !44
  %464 = add i32 %463, %447
  %465 = getelementptr inbounds i8, ptr %47, i64 124
  %466 = getelementptr inbounds i8, ptr %47, i64 112
  %467 = load i32, ptr %466, align 8, !tbaa !48
  %468 = add i32 %461, %467
  %469 = sub i32 %464, %468
  %470 = icmp slt i32 %469, 0
  br i1 %470, label %471, label %500

471:                                              ; preds = %460
  %472 = icmp eq i32 %449, %450
  br i1 %472, label %473, label %476

473:                                              ; preds = %471
  %474 = icmp eq i32 %461, %447
  %475 = icmp eq i32 %.1368, 0
  %or.cond5 = select i1 %474, i1 %475, i1 false
  br i1 %or.cond5, label %506, label %476

476:                                              ; preds = %471, %473
  %477 = call zeroext i8 @DebugPrintEnabled() #4
  %.not417 = icmp eq i8 %477, 0
  br i1 %.not417, label %481, label %478

478:                                              ; preds = %476
  %479 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not418 = icmp eq i8 %479, 0
  br i1 %.not418, label %481, label %480

480:                                              ; preds = %478
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.39, ptr noundef nonnull %47) #4
  br label %481

481:                                              ; preds = %478, %480, %476
  %482 = load i8, ptr %402, align 2, !tbaa !39
  switch i8 %482, label %.thread520 [
    i8 1, label %483
    i8 2, label %488
  ]

483:                                              ; preds = %481
  %484 = getelementptr inbounds i8, ptr %47, i64 232
  %485 = load i32, ptr %484, align 8, !tbaa !66
  %486 = sub i32 %464, %485
  %487 = icmp slt i32 %486, 0
  br i1 %487, label %.thread520.sink.split, label %.thread520

488:                                              ; preds = %481
  %489 = getelementptr inbounds i8, ptr %47, i64 240
  %490 = load i32, ptr %489, align 8, !tbaa !67
  %491 = sub i32 %464, %490
  %492 = icmp slt i32 %491, 0
  br i1 %492, label %.thread520.sink.split, label %.thread520

.thread520.sink.split:                            ; preds = %488, %483
  %.sink = phi ptr [ %484, %483 ], [ %489, %488 ]
  store i32 %464, ptr %.sink, align 8, !tbaa !54
  br label %.thread520

.thread520:                                       ; preds = %.thread520.sink.split, %481, %483, %488
  %493 = load i32, ptr %324, align 4, !tbaa !42
  %494 = sub i32 %464, %493
  %495 = icmp slt i32 %494, 0
  br i1 %495, label %496, label %500

496:                                              ; preds = %.thread520
  store i32 %464, ptr %324, align 4, !tbaa !42
  %497 = load i32, ptr %314, align 8, !tbaa !38
  %498 = icmp eq i32 %464, %497
  br i1 %498, label %499, label %500

499:                                              ; preds = %496
  call void @TcpClearTimer(ptr noundef nonnull %47, i16 noundef zeroext 1) #4
  call void @TcpSetProbeTimer(ptr noundef nonnull %47) #4
  br label %500

500:                                              ; preds = %.thread520, %499, %496, %460
  %501 = load i32, ptr %462, align 4, !tbaa !44
  store i32 %501, ptr %466, align 8, !tbaa !48
  %502 = getelementptr inbounds i8, ptr %47, i64 116
  %503 = load i32, ptr %502, align 4, !tbaa !49
  %.516 = call i32 @llvm.umax.i32(i32 %501, i32 %503)
  store i32 %.516, ptr %502, align 4, !tbaa !49
  %504 = load i32, ptr %59, align 4, !tbaa !45
  store i32 %504, ptr %448, align 8, !tbaa !50
  %505 = load i32, ptr %312, align 4, !tbaa !31
  store i32 %505, ptr %465, align 4, !tbaa !51
  br label %506

506:                                              ; preds = %453, %455, %500, %473
  %507 = getelementptr inbounds i8, ptr %47, i64 80
  %508 = load i32, ptr %507, align 8, !tbaa !40
  %509 = and i32 %508, 1024
  %.not420 = icmp eq i32 %509, 0
  br i1 %.not420, label %522, label %510

510:                                              ; preds = %506
  %511 = load i32, ptr %314, align 8, !tbaa !38
  %512 = load i32, ptr %324, align 4, !tbaa !42
  %513 = icmp eq i32 %511, %512
  br i1 %513, label %514, label %522

514:                                              ; preds = %510
  %515 = call zeroext i8 @DebugPrintEnabled() #4
  %.not421 = icmp eq i8 %515, 0
  br i1 %.not421, label %519, label %516

516:                                              ; preds = %514
  %517 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #4
  %.not422 = icmp eq i8 %517, 0
  br i1 %.not422, label %519, label %518

518:                                              ; preds = %516
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.40, ptr noundef nonnull %47) #4
  br label %519

519:                                              ; preds = %516, %518, %514
  %520 = load i32, ptr %507, align 8, !tbaa !40
  %521 = or i32 %520, 2048
  store i32 %521, ptr %507, align 8, !tbaa !40
  br label %522

522:                                              ; preds = %519, %510, %506
  %523 = phi i32 [ %521, %519 ], [ %508, %510 ], [ %508, %506 ]
  %524 = load i8, ptr %50, align 8, !tbaa !19
  switch i8 %524, label %555 [
    i8 5, label %525
    i8 8, label %545
    i8 10, label %542
    i8 7, label %530
  ]

525:                                              ; preds = %522
  %526 = and i32 %523, 2048
  %.not434 = icmp eq i32 %526, 0
  br i1 %.not434, label %555, label %527

527:                                              ; preds = %525
  call void @TcpSetState(ptr noundef nonnull %47, i8 noundef zeroext 6) #4
  call void @TcpClearAllTimer(ptr noundef nonnull %47) #4
  %528 = getelementptr inbounds i8, ptr %47, i64 256
  %529 = load i32, ptr %528, align 8, !tbaa !68
  call void @TcpSetTimer(ptr noundef nonnull %47, i16 noundef zeroext 4, i32 noundef %529) #4
  br label %555

530:                                              ; preds = %522
  %531 = and i32 %523, 2048
  %.not424 = icmp eq i32 %531, 0
  br i1 %.not424, label %555, label %532

532:                                              ; preds = %530
  call void @TcpSetState(ptr noundef nonnull %47, i8 noundef zeroext 8) #4
  call void @TcpClearAllTimer(ptr noundef nonnull %47) #4
  %533 = getelementptr inbounds i8, ptr %47, i64 260
  %534 = load i32, ptr %533, align 4, !tbaa !69
  %.not425 = icmp eq i32 %534, 0
  br i1 %.not425, label %536, label %535

535:                                              ; preds = %532
  call void @TcpSetTimer(ptr noundef nonnull %47, i16 noundef zeroext 5, i32 noundef %534) #4
  br label %555

536:                                              ; preds = %532
  %537 = call zeroext i8 @DebugPrintEnabled() #4
  %.not426 = icmp eq i8 %537, 0
  br i1 %.not426, label %541, label %538

538:                                              ; preds = %536
  %539 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not427 = icmp eq i8 %539, 0
  br i1 %.not427, label %541, label %540

540:                                              ; preds = %538
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.13, ptr noundef nonnull %47) #4
  br label %541

541:                                              ; preds = %538, %540, %536
  call void @TcpClose(ptr noundef nonnull %47) #4
  br label %555

542:                                              ; preds = %522
  %543 = and i32 %523, 2048
  %.not429 = icmp eq i32 %543, 0
  br i1 %.not429, label %555, label %544

544:                                              ; preds = %542
  call void @TcpSetState(ptr noundef nonnull %47, i8 noundef zeroext 0) #4
  br label %555

545:                                              ; preds = %522
  call void @TcpSendAck(ptr noundef nonnull %47) #4
  %546 = getelementptr inbounds i8, ptr %47, i64 260
  %547 = load i32, ptr %546, align 4, !tbaa !69
  %.not430 = icmp eq i32 %547, 0
  br i1 %.not430, label %549, label %548

548:                                              ; preds = %545
  call void @TcpSetTimer(ptr noundef nonnull %47, i16 noundef zeroext 5, i32 noundef %547) #4
  br label %555

549:                                              ; preds = %545
  %550 = call zeroext i8 @DebugPrintEnabled() #4
  %.not431 = icmp eq i8 %550, 0
  br i1 %.not431, label %554, label %551

551:                                              ; preds = %549
  %552 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not432 = icmp eq i8 %552, 0
  br i1 %.not432, label %554, label %553

553:                                              ; preds = %551
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.13, ptr noundef nonnull %47) #4
  br label %554

554:                                              ; preds = %551, %553, %549
  call void @TcpClose(ptr noundef nonnull %47) #4
  br label %555

555:                                              ; preds = %527, %525, %535, %541, %530, %544, %542, %554, %548, %522, %318, %322, %320, %194, %200, %198, %177, %184, %182, %106
  %.0365 = phi ptr [ %47, %106 ], [ null, %184 ], [ null, %182 ], [ null, %177 ], [ null, %200 ], [ null, %198 ], [ null, %194 ], [ null, %322 ], [ null, %320 ], [ null, %318 ], [ null, %522 ], [ null, %535 ], [ null, %541 ], [ null, %530 ], [ null, %544 ], [ null, %542 ], [ null, %548 ], [ null, %554 ], [ null, %527 ], [ null, %525 ]
  %.0364 = phi ptr [ %95, %106 ], [ %47, %184 ], [ %47, %182 ], [ %47, %177 ], [ %47, %200 ], [ %47, %198 ], [ %47, %194 ], [ %47, %322 ], [ %47, %320 ], [ %47, %318 ], [ %47, %522 ], [ %47, %535 ], [ %47, %541 ], [ %47, %530 ], [ %47, %544 ], [ %47, %542 ], [ %47, %548 ], [ %47, %554 ], [ %47, %527 ], [ %47, %525 ]
  %556 = getelementptr inbounds i8, ptr %.0364, i64 184
  store i32 0, ptr %556, align 8, !tbaa !70
  call void @TcpSetKeepaliveTimer(ptr noundef nonnull %.0364) #4
  %557 = getelementptr inbounds i8, ptr %59, i64 12
  %558 = load i8, ptr %557, align 4, !tbaa !24
  %559 = and i8 %558, 32
  %.not480 = icmp eq i8 %559, 0
  br i1 %.not480, label %586, label %560

560:                                              ; preds = %555
  %561 = getelementptr inbounds i8, ptr %.0364, i64 88
  %562 = load i8, ptr %561, align 8, !tbaa !19
  %.off = add i8 %562, -7
  %switch = icmp ult i8 %.off, 4
  br i1 %switch, label %586, label %563

563:                                              ; preds = %560
  %564 = call zeroext i8 @DebugPrintEnabled() #4
  %.not481 = icmp eq i8 %564, 0
  br i1 %.not481, label %568, label %565

565:                                              ; preds = %563
  %566 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #4
  %.not482 = icmp eq i8 %566, 0
  br i1 %.not482, label %568, label %567

567:                                              ; preds = %565
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.41, ptr noundef nonnull %.0364) #4
  br label %568

568:                                              ; preds = %565, %567, %563
  %569 = load i32, ptr %59, align 4, !tbaa !45
  %570 = getelementptr inbounds i8, ptr %59, i64 14
  %571 = load i16, ptr %570, align 2, !tbaa !71
  %572 = zext i16 %571 to i32
  %573 = add i32 %569, %572
  %574 = getelementptr inbounds i8, ptr %.0364, i64 80
  %575 = load i32, ptr %574, align 8, !tbaa !40
  %576 = and i32 %575, 256
  %.not484 = icmp eq i32 %576, 0
  br i1 %.not484, label %583, label %577

577:                                              ; preds = %568
  %578 = getelementptr inbounds i8, ptr %.0364, i64 144
  %579 = load i32, ptr %578, align 8, !tbaa !72
  %580 = sub i32 %579, %573
  %581 = icmp slt i32 %580, 0
  br i1 %581, label %582, label %583

582:                                              ; preds = %577
  store i32 %573, ptr %578, align 8, !tbaa !72
  br label %586

583:                                              ; preds = %577, %568
  %584 = getelementptr inbounds i8, ptr %.0364, i64 144
  store i32 %573, ptr %584, align 8, !tbaa !72
  %585 = or i32 %575, 256
  store i32 %585, ptr %574, align 8, !tbaa !40
  br label %586

586:                                              ; preds = %560, %582, %583, %555
  %587 = getelementptr inbounds i8, ptr %59, i64 4
  %588 = load i32, ptr %587, align 4, !tbaa !47
  %589 = load i32, ptr %59, align 4, !tbaa !45
  %.not485 = icmp eq i32 %588, %589
  br i1 %.not485, label %615, label %590

590:                                              ; preds = %586
  %591 = getelementptr inbounds i8, ptr %.0364, i64 88
  %592 = load i8, ptr %591, align 8, !tbaa !19
  switch i8 %592, label %605 [
    i8 9, label %593
    i8 10, label %593
    i8 7, label %593
    i8 8, label %593
    i8 5, label %598
    i8 6, label %598
  ]

593:                                              ; preds = %590, %590, %590, %590
  %594 = call zeroext i8 @DebugPrintEnabled() #4
  %.not495 = icmp eq i8 %594, 0
  br i1 %.not495, label %633, label %595

595:                                              ; preds = %593
  %596 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not496 = icmp eq i8 %596, 0
  br i1 %.not496, label %633, label %597

597:                                              ; preds = %595
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.42, ptr noundef nonnull %.0364) #4
  br label %633

598:                                              ; preds = %590, %590
  %599 = load i32, ptr %18, align 4, !tbaa !13
  %.not486 = icmp eq i32 %599, 0
  br i1 %.not486, label %605, label %600

600:                                              ; preds = %598
  %601 = call zeroext i8 @DebugPrintEnabled() #4
  %.not493 = icmp eq i8 %601, 0
  br i1 %.not493, label %633, label %602

602:                                              ; preds = %600
  %603 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not494 = icmp eq i8 %603, 0
  br i1 %.not494, label %633, label %604

604:                                              ; preds = %602
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.42, ptr noundef nonnull %.0364) #4
  br label %633

605:                                              ; preds = %590, %598
  call void @TcpQueueData(ptr noundef nonnull %.0364, ptr noundef nonnull %0)
  %606 = call i64 @TcpDeliverData(ptr noundef nonnull %.0364)
  %607 = icmp eq i64 %606, -1
  br i1 %607, label %633, label %608

608:                                              ; preds = %605
  %609 = getelementptr inbounds i8, ptr %.0364, i64 64
  %610 = call zeroext i8 @IsListEmpty(ptr noundef nonnull %609) #4
  %.not487 = icmp eq i8 %610, 0
  br i1 %.not487, label %611, label %615

611:                                              ; preds = %608
  %612 = getelementptr inbounds i8, ptr %.0364, i64 80
  %613 = load i32, ptr %612, align 8, !tbaa !40
  %614 = or i32 %613, 16384
  store i32 %614, ptr %612, align 8, !tbaa !40
  br label %615

615:                                              ; preds = %608, %611, %586
  %.not488 = icmp eq ptr %.0365, null
  br i1 %.not488, label %619, label %616

616:                                              ; preds = %615
  %617 = getelementptr inbounds i8, ptr %.0364, i64 16
  store ptr %.0365, ptr %617, align 8, !tbaa !73
  %618 = call i64 @TcpInsertTcb(ptr noundef nonnull %.0364) #4
  br label %619

619:                                              ; preds = %616, %615
  %620 = getelementptr inbounds i8, ptr %.0364, i64 88
  %621 = load i8, ptr %620, align 8, !tbaa !19
  %.not489 = icmp eq i8 %621, 0
  br i1 %.not489, label %632, label %622

622:                                              ; preds = %619
  %623 = call i64 @TcpToSendData(ptr noundef nonnull %.0364, i64 noundef 0) #4
  %624 = icmp eq i64 %623, 0
  br i1 %624, label %625, label %632

625:                                              ; preds = %622
  %626 = getelementptr inbounds i8, ptr %.0364, i64 80
  %627 = load i32, ptr %626, align 8, !tbaa !40
  %628 = and i32 %627, 16384
  %.not491 = icmp eq i32 %628, 0
  br i1 %.not491, label %629, label %631

629:                                              ; preds = %625
  %630 = load i32, ptr %18, align 4, !tbaa !13
  %.not492 = icmp eq i32 %630, 0
  br i1 %.not492, label %632, label %631

631:                                              ; preds = %629, %625
  call void @TcpToSendAck(ptr noundef nonnull %.0364) #4
  br label %632

632:                                              ; preds = %631, %629, %622, %619
  call void @NetbufFree(ptr noundef nonnull %0) #4
  br label %659

633:                                              ; preds = %605, %600, %604, %602, %593, %597, %595, %266
  %.1 = phi ptr [ %.0364, %597 ], [ %.0364, %595 ], [ %.0364, %593 ], [ %.0364, %604 ], [ %.0364, %602 ], [ %.0364, %600 ], [ %.0364, %605 ], [ %47, %266 ]
  %634 = call i64 @TcpSendReset(ptr noundef nonnull %.1, ptr noundef nonnull %12, i32 noundef %.1368, i32 noundef %2, i32 noundef %1) #4
  br label %635

635:                                              ; preds = %248, %138, %633, %254, %250
  %.2 = phi ptr [ %.1, %633 ], [ %47, %138 ], [ %47, %250 ], [ %47, %254 ], [ %47, %248 ]
  %636 = call zeroext i8 @DebugAssertEnabled() #4
  %.not497 = icmp eq i8 %636, 0
  br i1 %.not497, label %641, label %637

637:                                              ; preds = %635
  %638 = getelementptr inbounds i8, ptr %.2, i64 24
  %639 = load ptr, ptr %638, align 8, !tbaa !33
  %.not498 = icmp eq ptr %639, null
  br i1 %.not498, label %640, label %641

640:                                              ; preds = %637
  call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 1371, ptr noundef nonnull @.str.9) #4
  br label %641

641:                                              ; preds = %637, %640, %635
  call void @NetbufFree(ptr noundef nonnull %0) #4
  call void @TcpClose(ptr noundef nonnull %.2) #4
  br label %659

642:                                              ; preds = %53, %57, %55, %306, %310, %308, %125, %129, %127, %87, %91, %89, %64, %68, %66
  %.3 = phi ptr [ %47, %68 ], [ %47, %66 ], [ %47, %64 ], [ %47, %91 ], [ %47, %89 ], [ %47, %87 ], [ %47, %129 ], [ %47, %127 ], [ %47, %125 ], [ %47, %310 ], [ %47, %308 ], [ %47, %306 ], [ null, %55 ], [ null, %57 ], [ null, %53 ]
  %643 = call i64 @TcpSendReset(ptr noundef %.3, ptr noundef nonnull %12, i32 noundef %.1368, i32 noundef %2, i32 noundef %1) #4
  br label %644

644:                                              ; preds = %333, %642, %33, %35, %31, %82, %84, %80, %99, %101, %98, %92, %144, %146, %142, %147, %220, %216, %274, %276, %272
  %.1366 = phi ptr [ null, %35 ], [ null, %33 ], [ null, %31 ], [ null, %642 ], [ null, %84 ], [ null, %82 ], [ null, %80 ], [ %47, %101 ], [ %47, %99 ], [ %47, %98 ], [ null, %92 ], [ null, %146 ], [ null, %144 ], [ null, %142 ], [ null, %147 ], [ null, %216 ], [ null, %220 ], [ null, %333 ], [ null, %276 ], [ null, %274 ], [ null, %272 ]
  %.4 = phi ptr [ null, %35 ], [ null, %33 ], [ null, %31 ], [ %.3, %642 ], [ %47, %84 ], [ %47, %82 ], [ %47, %80 ], [ null, %101 ], [ null, %99 ], [ null, %98 ], [ %47, %92 ], [ %47, %146 ], [ %47, %144 ], [ %47, %142 ], [ %47, %147 ], [ %47, %216 ], [ %47, %220 ], [ %47, %333 ], [ %47, %276 ], [ %47, %274 ], [ %47, %272 ]
  %645 = call zeroext i8 @DebugPrintEnabled() #4
  %.not511 = icmp eq i8 %645, 0
  br i1 %.not511, label %649, label %646

646:                                              ; preds = %644
  %647 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #4
  %.not512 = icmp eq i8 %647, 0
  br i1 %.not512, label %649, label %648

648:                                              ; preds = %646
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.43) #4
  br label %649

649:                                              ; preds = %646, %648, %644
  call void @NetbufFree(ptr noundef nonnull %0) #4
  %650 = icmp ne ptr %.1366, null
  %651 = icmp ne ptr %.4, null
  %or.cond7 = and i1 %650, %651
  br i1 %or.cond7, label %652, label %659

652:                                              ; preds = %649
  %653 = call zeroext i8 @DebugAssertEnabled() #4
  %.not513 = icmp eq i8 %653, 0
  br i1 %.not513, label %658, label %654

654:                                              ; preds = %652
  %655 = getelementptr inbounds i8, ptr %.4, i64 24
  %656 = load ptr, ptr %655, align 8, !tbaa !33
  %.not514 = icmp eq ptr %656, null
  br i1 %.not514, label %657, label %658

657:                                              ; preds = %654
  call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 1392, ptr noundef nonnull @.str.44) #4
  br label %658

658:                                              ; preds = %654, %657, %652
  call void @TcpClose(ptr noundef nonnull %.4) #4
  br label %659

659:                                              ; preds = %649, %658, %641, %632
  %.0 = phi i64 [ -1, %641 ], [ 0, %632 ], [ 0, %658 ], [ 0, %649 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #4
  ret i64 %.0
}

declare ptr @NetbufGetByte(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

declare zeroext i16 @TcpChecksum(ptr noundef, i16 noundef zeroext) local_unnamed_addr #2

declare zeroext i16 @NetPseudoHeadChecksum(i32 noundef, i32 noundef, i8 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #2

declare ptr @TcpLocateTcb(i16 noundef zeroext, i32 noundef, i16 noundef zeroext, i32 noundef, i8 noundef zeroext) local_unnamed_addr #2

declare ptr @TcpFormatNetbuf(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i64 @TcpParseOption(ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @TcpCloneTcb(ptr noundef) local_unnamed_addr #2

declare void @TcpInitTcbLocal(ptr noundef) local_unnamed_addr #2

declare void @TcpInitTcbPeer(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @TcpClearTimer(ptr noundef, i16 noundef zeroext) local_unnamed_addr #2

declare void @TcpSetProbeTimer(ptr noundef) local_unnamed_addr #2

declare void @TcpSetKeepaliveTimer(ptr noundef) local_unnamed_addr #2

declare i64 @TcpInsertTcb(ptr noundef) local_unnamed_addr #2

declare i64 @TcpToSendData(ptr noundef, i64 noundef) local_unnamed_addr #2

declare void @TcpToSendAck(ptr noundef) local_unnamed_addr #2

declare i64 @TcpSendReset(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"", !7, i64 0, !10, i64 8, !11, i64 16, !8, i64 32, !12, i64 40, !12, i64 48, !8, i64 56, !12, i64 120, !7, i64 128, !7, i64 132, !8, i64 136}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"_LIST_ENTRY", !12, i64 0, !12, i64 8}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!6, !7, i64 132}
!14 = !{!15, !8, i64 13}
!15 = !{!"", !16, i64 0, !16, i64 2, !7, i64 4, !7, i64 8, !8, i64 12, !8, i64 12, !8, i64 13, !16, i64 14, !16, i64 16, !16, i64 18}
!16 = !{!"short", !8, i64 0}
!17 = !{!15, !16, i64 2}
!18 = !{!15, !16, i64 0}
!19 = !{!20, !8, i64 88}
!20 = !{!"_TCP_CB", !11, i64 0, !12, i64 16, !12, i64 24, !21, i64 32, !21, i64 40, !11, i64 48, !11, i64 64, !7, i64 80, !7, i64 84, !8, i64 88, !8, i64 89, !16, i64 90, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !16, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !16, i64 152, !16, i64 154, !8, i64 156, !7, i64 180, !7, i64 184, !7, i64 188, !8, i64 192, !8, i64 193, !8, i64 194, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !16, i64 236, !8, i64 238, !8, i64 239, !7, i64 240, !7, i64 244, !7, i64 248, !8, i64 252, !8, i64 253, !16, i64 254, !7, i64 256, !7, i64 260, !7, i64 264, !8, i64 268, !8, i64 269, !8, i64 270, !22, i64 271, !12, i64 280}
!21 = !{!"_TCP_PEER", !7, i64 0, !16, i64 4}
!22 = !{!"", !8, i64 0}
!23 = !{!6, !12, i64 40}
!24 = !{!25, !8, i64 12}
!25 = !{!"_TCP_SEG", !7, i64 0, !7, i64 4, !7, i64 8, !8, i64 12, !16, i64 14, !7, i64 16}
!26 = !{!20, !7, i64 32}
!27 = !{!20, !16, i64 36}
!28 = !{!20, !7, i64 40}
!29 = !{!20, !16, i64 44}
!30 = !{!20, !7, i64 264}
!31 = !{!25, !7, i64 8}
!32 = !{!20, !7, i64 92}
!33 = !{!20, !12, i64 24}
!34 = !{!35, !10, i64 128}
!35 = !{!"_SOCKET", !7, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !11, i64 40, !8, i64 56, !7, i64 60, !8, i64 64, !16, i64 66, !36, i64 72, !37, i64 96, !37, i64 112, !10, i64 128, !8, i64 136, !7, i64 140, !7, i64 144, !12, i64 152, !11, i64 160, !11, i64 176, !11, i64 192, !11, i64 208, !11, i64 224, !12, i64 240, !12, i64 248, !12, i64 256, !8, i64 264, !8, i64 288, !12, i64 368, !12, i64 376, !12, i64 384}
!36 = !{!"", !10, i64 0, !10, i64 8, !7, i64 16}
!37 = !{!"_SOCK_BUFFER", !7, i64 0, !7, i64 4, !12, i64 8}
!38 = !{!20, !7, i64 96}
!39 = !{!20, !8, i64 238}
!40 = !{!20, !7, i64 80}
!41 = !{!20, !7, i64 208}
!42 = !{!20, !7, i64 100}
!43 = !{!20, !8, i64 192}
!44 = !{!25, !7, i64 16}
!45 = !{!25, !7, i64 0}
!46 = !{!20, !7, i64 140}
!47 = !{!25, !7, i64 4}
!48 = !{!20, !7, i64 112}
!49 = !{!20, !7, i64 116}
!50 = !{!20, !7, i64 120}
!51 = !{!20, !7, i64 124}
!52 = !{!53, !8, i64 0}
!53 = !{!"_TCP_OPTION", !8, i64 0, !8, i64 1, !16, i64 2, !7, i64 4, !7, i64 8}
!54 = !{!7, !7, i64 0}
!55 = !{!53, !7, i64 4}
!56 = !{!20, !7, i64 196}
!57 = !{!20, !7, i64 200}
!58 = !{!53, !7, i64 8}
!59 = !{!20, !7, i64 220}
!60 = !{!20, !16, i64 236}
!61 = !{!20, !7, i64 224}
!62 = !{!20, !7, i64 228}
!63 = !{!20, !16, i64 128}
!64 = !{!20, !8, i64 193}
!65 = !{!20, !7, i64 108}
!66 = !{!20, !7, i64 232}
!67 = !{!20, !7, i64 240}
!68 = !{!20, !7, i64 256}
!69 = !{!20, !7, i64 260}
!70 = !{!20, !7, i64 184}
!71 = !{!25, !16, i64 14}
!72 = !{!20, !7, i64 144}
!73 = !{!20, !12, i64 16}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass