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

; 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_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._LIST_ENTRY = type { ptr, ptr }
%struct.EFI_IPv4_ADDRESS = type { [4 x i8] }
%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] }
%union.NET_IP_HEAD = type { ptr }
%struct.NET_BLOCK_OP = type { ptr, ptr, ptr, ptr, i32 }
%struct._TCP_SEG = type { i32, i32, i32, i8, i16, i32 }

@.str.7 = external hidden unnamed_addr constant [152 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1

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

declare zeroext i8 @DebugPrintEnabled() #1

declare zeroext i8 @DebugPrintLevelEnabled(i64 noundef) #1

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

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

declare zeroext i8 @DebugAssertEnabled() #1

declare i64 @TcpVerifySegment(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local i64 @TcpDeliverData(ptr noundef %0) #2 {
  %2 = alloca i64, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  br label %10

10:                                               ; preds = %1
  %11 = call zeroext i8 @DebugAssertEnabled()
  %12 = icmp ne i8 %11, 0
  br i1 %12, label %13, label %23

13:                                               ; preds = %10
  %14 = load ptr, ptr %3, align 8, !tbaa !5
  %15 = icmp ne ptr %14, null
  br i1 %15, label %16, label %21

16:                                               ; preds = %13
  %17 = load ptr, ptr %3, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct._TCP_CB, ptr %17, i32 0, i32 2
  %19 = load ptr, ptr %18, align 8, !tbaa !9
  %20 = icmp ne ptr %19, null
  br i1 %20, label %22, label %21

21:                                               ; preds = %16, %13
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 381, ptr noundef @.str.9)
  br label %22

22:                                               ; preds = %21, %16
  br label %23

23:                                               ; preds = %22, %10
  br label %24

24:                                               ; preds = %23
  br label %25

25:                                               ; preds = %24
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct._TCP_CB, ptr %26, i32 0, i32 6
  %28 = call zeroext i8 @IsListEmpty(ptr noundef %27)
  %29 = zext i8 %28 to i32
  %30 = icmp ne i32 %29, 0
  br i1 %30, label %37, label %31

31:                                               ; preds = %25
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct._TCP_CB, ptr %32, i32 0, i32 9
  %34 = load i8, ptr %33, align 8, !tbaa !16
  %35 = zext i8 %34 to i32
  %36 = icmp sgt i32 %35, 3
  br i1 %36, label %38, label %37

37:                                               ; preds = %31, %25
  store i64 0, ptr %2, align 8
  store i32 1, ptr %9, align 4
  br label %311

38:                                               ; preds = %31
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct._TCP_CB, ptr %39, i32 0, i32 6
  %41 = getelementptr inbounds %struct._LIST_ENTRY, ptr %40, i32 0, i32 0
  %42 = load ptr, ptr %41, align 8, !tbaa !17
  store ptr %42, ptr %4, align 8, !tbaa !5
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct._TCP_CB, ptr %43, i32 0, i32 22
  %45 = load i32, ptr %44, align 4, !tbaa !18
  store i32 %45, ptr %6, align 4, !tbaa !19
  br label %46

46:                                               ; preds = %308, %38
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = load ptr, ptr %3, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct._TCP_CB, ptr %48, i32 0, i32 6
  %50 = icmp ne ptr %47, %49
  br i1 %50, label %51, label %310

51:                                               ; preds = %46
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = ptrtoint ptr %52 to i64
  %54 = sub i64 %53, ptrtoint (ptr getelementptr inbounds (%struct.NET_BUF, ptr null, i32 0, i32 2) to i64)
  %55 = inttoptr i64 %54 to ptr
  store ptr %55, ptr %5, align 8, !tbaa !5
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.NET_BUF, ptr %56, i32 0, i32 6
  %58 = getelementptr inbounds [64 x i8], ptr %57, i64 0, i64 0
  store ptr %58, ptr %7, align 8, !tbaa !5
  br label %59

59:                                               ; preds = %51
  %60 = call zeroext i8 @DebugAssertEnabled()
  %61 = icmp ne i8 %60, 0
  br i1 %61, label %62, label %68

62:                                               ; preds = %59
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = call i64 @TcpVerifySegment(ptr noundef %63)
  %65 = icmp ne i64 %64, 0
  br i1 %65, label %67, label %66

66:                                               ; preds = %62
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 402, ptr noundef @.str.8)
  br label %67

67:                                               ; preds = %66, %62
  br label %68

68:                                               ; preds = %67, %59
  br label %69

69:                                               ; preds = %68
  br label %70

70:                                               ; preds = %69
  br label %71

71:                                               ; preds = %70
  %72 = call zeroext i8 @DebugAssertEnabled()
  %73 = icmp ne i8 %72, 0
  br i1 %73, label %74, label %81

74:                                               ; preds = %71
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.NET_BUF, ptr %75, i32 0, i32 4
  %77 = load ptr, ptr %76, align 8, !tbaa !20
  %78 = icmp eq ptr %77, null
  br i1 %78, label %80, label %79

79:                                               ; preds = %74
  call void @DebugAssert(ptr noundef @.str.7, i64 noundef 403, ptr noundef @.str.10)
  br label %80

80:                                               ; preds = %79, %74
  br label %81

81:                                               ; preds = %80, %71
  br label %82

82:                                               ; preds = %81
  br label %83

83:                                               ; preds = %82
  %84 = load i32, ptr %6, align 4, !tbaa !19
  %85 = load ptr, ptr %7, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct._TCP_SEG, ptr %85, i32 0, i32 0
  %87 = load i32, ptr %86, align 4, !tbaa !23
  %88 = sub i32 %84, %87
  %89 = icmp slt i32 %88, 0
  br i1 %89, label %90, label %91

90:                                               ; preds = %83
  br label %310

91:                                               ; preds = %83
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct._LIST_ENTRY, ptr %92, i32 0, i32 0
  %94 = load ptr, ptr %93, align 8, !tbaa !25
  store ptr %94, ptr %4, align 8, !tbaa !5
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct._TCP_SEG, ptr %95, i32 0, i32 1
  %97 = load i32, ptr %96, align 4, !tbaa !26
  store i32 %97, ptr %6, align 4, !tbaa !19
  %98 = load i32, ptr %6, align 4, !tbaa !19
  %99 = load ptr, ptr %3, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct._TCP_CB, ptr %99, i32 0, i32 22
  store i32 %98, ptr %100, align 4, !tbaa !18
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.NET_BUF, ptr %101, i32 0, i32 2
  %103 = call ptr @RemoveEntryList(ptr noundef %102)
  %104 = load ptr, ptr %7, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct._TCP_SEG, ptr %104, i32 0, i32 3
  %106 = load i8, ptr %105, align 4, !tbaa !27
  %107 = zext i8 %106 to i32
  %108 = and i32 %107, 1
  %109 = icmp ne i32 %108, 0
  %110 = zext i1 %109 to i32
  %111 = trunc i32 %110 to i8
  %112 = icmp ne i8 %111, 0
  br i1 %112, label %113, label %212

113:                                              ; preds = %91
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct._TCP_CB, ptr %114, i32 0, i32 6
  %116 = call zeroext i8 @IsListEmpty(ptr noundef %115)
  %117 = icmp ne i8 %116, 0
  br i1 %117, label %135, label %118

118:                                              ; preds = %113
  br label %119

119:                                              ; preds = %118
  %120 = call zeroext i8 @DebugPrintEnabled()
  %121 = icmp ne i8 %120, 0
  br i1 %121, label %122, label %131

122:                                              ; preds = %119
  br label %123

123:                                              ; preds = %122
  %124 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648)
  %125 = icmp ne i8 %124, 0
  br i1 %125, label %126, label %128

126:                                              ; preds = %123
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef @.str.11, ptr noundef %127)
  br label %128

128:                                              ; preds = %126, %123
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129
  br label %131

131:                                              ; preds = %130, %119
  br label %132

132:                                              ; preds = %131
  br label %133

133:                                              ; preds = %132
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %134)
  store i64 -1, ptr %2, align 8
  store i32 1, ptr %9, align 4
  br label %311

135:                                              ; preds = %113
  br label %136

136:                                              ; preds = %135
  %137 = call zeroext i8 @DebugPrintEnabled()
  %138 = icmp ne i8 %137, 0
  br i1 %138, label %139, label %148

139:                                              ; preds = %136
  br label %140

140:                                              ; preds = %139
  %141 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64)
  %142 = icmp ne i8 %141, 0
  br i1 %142, label %143, label %145

143:                                              ; preds = %140
  %144 = load ptr, ptr %3, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef @.str.12, ptr noundef %144)
  br label %145

145:                                              ; preds = %143, %140
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146
  br label %148

148:                                              ; preds = %147, %136
  br label %149

149:                                              ; preds = %148
  br label %150

150:                                              ; preds = %149
  %151 = load ptr, ptr %3, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct._TCP_CB, ptr %151, i32 0, i32 9
  %153 = load i8, ptr %152, align 8, !tbaa !16
  %154 = zext i8 %153 to i32
  switch i32 %154, label %202 [
    i32 3, label %155
    i32 4, label %155
    i32 5, label %157
    i32 6, label %169
    i32 9, label %200
    i32 7, label %200
    i32 10, label %200
    i32 8, label %200
  ]

155:                                              ; preds = %150, %150
  %156 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %156, i8 noundef zeroext 9)
  br label %203

157:                                              ; preds = %150
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct._TCP_CB, ptr %158, i32 0, i32 7
  %160 = load i32, ptr %159, align 8, !tbaa !28
  %161 = and i32 %160, 2048
  %162 = icmp ne i32 %161, 0
  %163 = zext i1 %162 to i32
  %164 = trunc i32 %163 to i8
  %165 = icmp ne i8 %164, 0
  br i1 %165, label %168, label %166

166:                                              ; preds = %157
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %167, i8 noundef zeroext 7)
  br label %203

168:                                              ; preds = %157
  br label %169

169:                                              ; preds = %168, %150
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TcpSetState(ptr noundef %170, i8 noundef zeroext 8)
  %171 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TcpClearAllTimer(ptr noundef %171)
  %172 = load ptr, ptr %3, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct._TCP_CB, ptr %172, i32 0, i32 56
  %174 = load i32, ptr %173, align 4, !tbaa !29
  %175 = icmp ne i32 %174, 0
  br i1 %175, label %176, label %181

176:                                              ; preds = %169
  %177 = load ptr, ptr %3, align 8, !tbaa !5
  %178 = load ptr, ptr %3, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct._TCP_CB, ptr %178, i32 0, i32 56
  %180 = load i32, ptr %179, align 4, !tbaa !29
  call void @TcpSetTimer(ptr noundef %177, i16 noundef zeroext 5, i32 noundef %180)
  br label %199

181:                                              ; preds = %169
  br label %182

182:                                              ; preds = %181
  %183 = call zeroext i8 @DebugPrintEnabled()
  %184 = icmp ne i8 %183, 0
  br i1 %184, label %185, label %194

185:                                              ; preds = %182
  br label %186

186:                                              ; preds = %185
  %187 = call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2)
  %188 = icmp ne i8 %187, 0
  br i1 %188, label %189, label %191

189:                                              ; preds = %186
  %190 = load ptr, ptr %3, align 8, !tbaa !5
  call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef @.str.13, ptr noundef %190)
  br label %191

191:                                              ; preds = %189, %186
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193, %182
  br label %195

195:                                              ; preds = %194
  br label %196

196:                                              ; preds = %195
  %197 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TcpSendAck(ptr noundef %197)
  %198 = load ptr, ptr %3, align 8, !tbaa !5
  call void @TcpClose(ptr noundef %198)
  br label %199

199:                                              ; preds = %196, %176
  br label %203

200:                                              ; preds = %150, %150, %150, %150
  %201 = load ptr, ptr %5, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %201)
  store i64 -1, ptr %2, align 8
  store i32 1, ptr %9, align 4
  br label %311

202:                                              ; preds = %150
  br label %203

203:                                              ; preds = %202, %199, %166, %155
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct._TCP_CB, ptr %204, i32 0, i32 7
  %206 = load i32, ptr %205, align 8, !tbaa !28
  %207 = or i32 %206, 16384
  store i32 %207, ptr %205, align 8, !tbaa !28
  %208 = load ptr, ptr %7, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct._TCP_SEG, ptr %208, i32 0, i32 1
  %210 = load i32, ptr %209, align 4, !tbaa !26
  %211 = add i32 %210, -1
  store i32 %211, ptr %209, align 4, !tbaa !26
  br label %212

212:                                              ; preds = %203, %91
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct._TCP_SEG, ptr %213, i32 0, i32 3
  %215 = load i8, ptr %214, align 4, !tbaa !27
  %216 = zext i8 %215 to i32
  %217 = and i32 %216, 8
  %218 = icmp ne i32 %217, 0
  %219 = zext i1 %218 to i32
  %220 = trunc i32 %219 to i8
  %221 = icmp ne i8 %220, 0
  br i1 %221, label %222, label %227

222:                                              ; preds = %212
  %223 = load ptr, ptr %3, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct._TCP_CB, ptr %223, i32 0, i32 7
  %225 = load i32, ptr %224, align 8, !tbaa !28
  %226 = or i32 %225, 16384
  store i32 %226, ptr %224, align 8, !tbaa !28
  br label %227

227:                                              ; preds = %222, %212
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.NET_BUF, ptr %228, i32 0, i32 9
  %230 = load i32, ptr %229, align 4, !tbaa !30
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %232, label %280

232:                                              ; preds = %227
  store i32 0, ptr %8, align 4, !tbaa !19
  %233 = load ptr, ptr %3, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct._TCP_CB, ptr %233, i32 0, i32 7
  %235 = load i32, ptr %234, align 8, !tbaa !28
  %236 = and i32 %235, 256
  %237 = icmp ne i32 %236, 0
  %238 = zext i1 %237 to i32
  %239 = trunc i32 %238 to i8
  %240 = zext i8 %239 to i32
  %241 = icmp ne i32 %240, 0
  br i1 %241, label %242, label %274

242:                                              ; preds = %232
  %243 = load ptr, ptr %7, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct._TCP_SEG, ptr %243, i32 0, i32 0
  %245 = load i32, ptr %244, align 4, !tbaa !23
  %246 = load ptr, ptr %3, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct._TCP_CB, ptr %246, i32 0, i32 25
  %248 = load i32, ptr %247, align 8, !tbaa !31
  %249 = sub i32 %245, %248
  %250 = icmp sle i32 %249, 0
  br i1 %250, label %251, label %274

251:                                              ; preds = %242
  %252 = load ptr, ptr %7, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct._TCP_SEG, ptr %252, i32 0, i32 1
  %254 = load i32, ptr %253, align 4, !tbaa !26
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct._TCP_CB, ptr %255, i32 0, i32 25
  %257 = load i32, ptr %256, align 8, !tbaa !31
  %258 = sub i32 %254, %257
  %259 = icmp sle i32 %258, 0
  br i1 %259, label %260, label %264

260:                                              ; preds = %251
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.NET_BUF, ptr %261, i32 0, i32 9
  %263 = load i32, ptr %262, align 4, !tbaa !30
  store i32 %263, ptr %8, align 4, !tbaa !19
  br label %273

264:                                              ; preds = %251
  %265 = load ptr, ptr %3, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct._TCP_CB, ptr %265, i32 0, i32 25
  %267 = load i32, ptr %266, align 8, !tbaa !31
  %268 = load ptr, ptr %7, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct._TCP_SEG, ptr %268, i32 0, i32 0
  %270 = load i32, ptr %269, align 4, !tbaa !23
  %271 = sub i32 %267, %270
  %272 = add i32 %271, 1
  store i32 %272, ptr %8, align 4, !tbaa !19
  br label %273

273:                                              ; preds = %264, %260
  br label %274

274:                                              ; preds = %273, %242, %232
  %275 = load ptr, ptr %3, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct._TCP_CB, ptr %275, i32 0, i32 2
  %277 = load ptr, ptr %276, align 8, !tbaa !9
  %278 = load ptr, ptr %5, align 8, !tbaa !5
  %279 = load i32, ptr %8, align 4, !tbaa !19
  call void @SockDataRcvd(ptr noundef %277, ptr noundef %278, i32 noundef %279)
  br label %280

280:                                              ; preds = %274, %227
  %281 = load ptr, ptr %3, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct._TCP_CB, ptr %281, i32 0, i32 9
  %283 = load i8, ptr %282, align 8, !tbaa !16
  %284 = zext i8 %283 to i32
  %285 = icmp eq i32 %284, 9
  br i1 %285, label %304, label %286

286:                                              ; preds = %280
  %287 = load ptr, ptr %3, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct._TCP_CB, ptr %287, i32 0, i32 9
  %289 = load i8, ptr %288, align 8, !tbaa !16
  %290 = zext i8 %289 to i32
  %291 = icmp eq i32 %290, 10
  br i1 %291, label %304, label %292

292:                                              ; preds = %286
  %293 = load ptr, ptr %3, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct._TCP_CB, ptr %293, i32 0, i32 9
  %295 = load i8, ptr %294, align 8, !tbaa !16
  %296 = zext i8 %295 to i32
  %297 = icmp eq i32 %296, 7
  br i1 %297, label %304, label %298

298:                                              ; preds = %292
  %299 = load ptr, ptr %3, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct._TCP_CB, ptr %299, i32 0, i32 9
  %301 = load i8, ptr %300, align 8, !tbaa !16
  %302 = zext i8 %301 to i32
  %303 = icmp eq i32 %302, 8
  br i1 %303, label %304, label %308

304:                                              ; preds = %298, %292, %286, %280
  %305 = load ptr, ptr %3, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct._TCP_CB, ptr %305, i32 0, i32 2
  %307 = load ptr, ptr %306, align 8, !tbaa !9
  call void @SockNoMoreData(ptr noundef %307)
  br label %308

308:                                              ; preds = %304, %298
  %309 = load ptr, ptr %5, align 8, !tbaa !5
  call void @NetbufFree(ptr noundef %309)
  br label %46, !llvm.loop !32

310:                                              ; preds = %90, %46
  store i64 0, ptr %2, align 8
  store i32 1, ptr %9, align 4
  br label %311

311:                                              ; preds = %310, %200, %133, %37
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #3
  %312 = load i64, ptr %2, align 8
  ret i64 %312
}

declare zeroext i8 @IsListEmpty(ptr noundef) #1

declare ptr @RemoveEntryList(ptr noundef) #1

declare void @NetbufFree(ptr noundef) #1

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

declare void @TcpClearAllTimer(ptr noundef) #1

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

declare void @TcpSendAck(ptr noundef) #1

declare void @TcpClose(ptr noundef) #1

declare void @SockDataRcvd(ptr noundef, ptr noundef, i32 noundef) #1

declare void @SockNoMoreData(ptr noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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, !6, i64 24}
!10 = !{!"_TCP_CB", !11, i64 0, !6, i64 16, !6, i64 24, !12, i64 32, !12, i64 40, !11, i64 48, !11, i64 64, !13, i64 80, !13, i64 84, !7, i64 88, !7, i64 89, !14, i64 90, !13, i64 92, !13, i64 96, !13, i64 100, !13, i64 104, !13, i64 108, !13, i64 112, !13, i64 116, !13, i64 120, !13, i64 124, !14, i64 128, !13, i64 132, !13, i64 136, !13, i64 140, !13, i64 144, !13, i64 148, !14, i64 152, !14, i64 154, !7, i64 156, !13, i64 180, !13, i64 184, !13, i64 188, !7, i64 192, !7, i64 193, !7, i64 194, !13, i64 196, !13, i64 200, !13, i64 204, !13, i64 208, !13, i64 212, !13, i64 216, !13, i64 220, !13, i64 224, !13, i64 228, !13, i64 232, !14, i64 236, !7, i64 238, !7, i64 239, !13, i64 240, !13, i64 244, !13, i64 248, !7, i64 252, !7, i64 253, !14, i64 254, !13, i64 256, !13, i64 260, !13, i64 264, !7, i64 268, !7, i64 269, !7, i64 270, !15, i64 271, !6, i64 280}
!11 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!12 = !{!"_TCP_PEER", !13, i64 0, !14, i64 4}
!13 = !{!"int", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!"", !7, i64 0}
!16 = !{!10, !7, i64 88}
!17 = !{!10, !6, i64 64}
!18 = !{!10, !13, i64 132}
!19 = !{!13, !13, i64 0}
!20 = !{!21, !6, i64 40}
!21 = !{!"", !13, i64 0, !22, i64 8, !11, i64 16, !7, i64 32, !6, i64 40, !6, i64 48, !7, i64 56, !6, i64 120, !13, i64 128, !13, i64 132, !7, i64 136}
!22 = !{!"long long", !7, i64 0}
!23 = !{!24, !13, i64 0}
!24 = !{!"_TCP_SEG", !13, i64 0, !13, i64 4, !13, i64 8, !7, i64 12, !14, i64 14, !13, i64 16}
!25 = !{!11, !6, i64 0}
!26 = !{!24, !13, i64 4}
!27 = !{!24, !7, i64 12}
!28 = !{!10, !13, i64 80}
!29 = !{!10, !13, i64 260}
!30 = !{!21, !13, i64 132}
!31 = !{!10, !13, i64 144}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}


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

@.str.7 = external hidden unnamed_addr constant [152 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [75 x i8], align 1

declare zeroext i8 @DebugPrintEnabled() local_unnamed_addr #0

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

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

declare zeroext i8 @DebugAssertEnabled() local_unnamed_addr #0

declare i64 @TcpVerifySegment(ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local range(i64 -1, 1) i64 @TcpDeliverData(ptr noundef %0) local_unnamed_addr #1 {
  %2 = tail call zeroext i8 @DebugAssertEnabled() #2
  %.not = icmp eq i8 %2, 0
  br i1 %.not, label %8, label %3

3:                                                ; preds = %1
  %.not67 = icmp eq ptr %0, null
  br i1 %.not67, label %7, label %4

4:                                                ; preds = %3
  %5 = getelementptr inbounds i8, ptr %0, i64 24
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %.not68 = icmp eq ptr %6, null
  br i1 %.not68, label %7, label %8

7:                                                ; preds = %4, %3
  tail call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 381, ptr noundef nonnull @.str.9) #2
  br label %8

8:                                                ; preds = %4, %7, %1
  %9 = getelementptr inbounds i8, ptr %0, i64 64
  %10 = tail call zeroext i8 @IsListEmpty(ptr noundef nonnull %9) #2
  %.not69 = icmp eq i8 %10, 0
  br i1 %.not69, label %11, label %.loopexit

11:                                               ; preds = %8
  %12 = getelementptr inbounds i8, ptr %0, i64 88
  %13 = load i8, ptr %12, align 8, !tbaa !15
  %14 = icmp ugt i8 %13, 3
  br i1 %14, label %15, label %.loopexit

15:                                               ; preds = %11
  %16 = load ptr, ptr %9, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %0, i64 132
  %.not7088 = icmp eq ptr %16, %9
  br i1 %.not7088, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %15
  %18 = load i32, ptr %17, align 4, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %0, i64 80
  %20 = getelementptr inbounds i8, ptr %0, i64 260
  %21 = getelementptr inbounds i8, ptr %0, i64 144
  %22 = getelementptr inbounds i8, ptr %0, i64 24
  br label %23

23:                                               ; preds = %.lr.ph, %113
  %.06090 = phi i32 [ %18, %.lr.ph ], [ %46, %113 ]
  %.06189 = phi ptr [ %16, %.lr.ph ], [ %44, %113 ]
  %24 = ptrtoint ptr %.06189 to i64
  %25 = add i64 %24, -16
  %26 = inttoptr i64 %25 to ptr
  %27 = getelementptr inbounds i8, ptr %26, i64 56
  %28 = tail call zeroext i8 @DebugAssertEnabled() #2
  %.not71 = icmp eq i8 %28, 0
  br i1 %.not71, label %32, label %29

29:                                               ; preds = %23
  %30 = tail call i64 @TcpVerifySegment(ptr noundef %26) #2
  %.not72 = icmp eq i64 %30, 0
  br i1 %.not72, label %31, label %32

31:                                               ; preds = %29
  tail call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 402, ptr noundef nonnull @.str.8) #2
  br label %32

32:                                               ; preds = %23, %31, %29
  %33 = tail call zeroext i8 @DebugAssertEnabled() #2
  %.not73 = icmp eq i8 %33, 0
  br i1 %.not73, label %39, label %34

34:                                               ; preds = %32
  %35 = getelementptr inbounds i8, ptr %26, i64 40
  %36 = load ptr, ptr %35, align 8, !tbaa !18
  %37 = icmp eq ptr %36, null
  br i1 %37, label %39, label %38

38:                                               ; preds = %34
  tail call void @DebugAssert(ptr noundef nonnull @.str.7, i64 noundef 403, ptr noundef nonnull @.str.10) #2
  br label %39

39:                                               ; preds = %34, %38, %32
  %40 = load i32, ptr %27, align 4, !tbaa !21
  %41 = sub i32 %.06090, %40
  %42 = icmp slt i32 %41, 0
  br i1 %42, label %.loopexit, label %43

43:                                               ; preds = %39
  %44 = load ptr, ptr %.06189, align 8, !tbaa !23
  %45 = getelementptr inbounds i8, ptr %26, i64 60
  %46 = load i32, ptr %45, align 4, !tbaa !24
  store i32 %46, ptr %17, align 4, !tbaa !17
  %47 = getelementptr inbounds i8, ptr %26, i64 16
  %48 = tail call ptr @RemoveEntryList(ptr noundef nonnull %47) #2
  %49 = getelementptr inbounds i8, ptr %26, i64 68
  %50 = load i8, ptr %49, align 4, !tbaa !25
  %51 = and i8 %50, 1
  %.not74 = icmp eq i8 %51, 0
  br i1 %.not74, label %84, label %52

52:                                               ; preds = %43
  %53 = tail call zeroext i8 @IsListEmpty(ptr noundef nonnull %9) #2
  %.not75 = icmp eq i8 %53, 0
  %54 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not76 = icmp eq i8 %54, 0
  br i1 %.not75, label %55, label %59

55:                                               ; preds = %52
  br i1 %.not76, label %.loopexit.sink.split, label %56

56:                                               ; preds = %55
  %57 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2147483648) #2
  %.not77 = icmp eq i8 %57, 0
  br i1 %.not77, label %.loopexit.sink.split, label %58

58:                                               ; preds = %56
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 2147483648, ptr noundef nonnull @.str.11, ptr noundef nonnull %0) #2
  br label %.loopexit.sink.split

59:                                               ; preds = %52
  br i1 %.not76, label %63, label %60

60:                                               ; preds = %59
  %61 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 64) #2
  %.not79 = icmp eq i8 %61, 0
  br i1 %.not79, label %63, label %62

62:                                               ; preds = %60
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 64, ptr noundef nonnull @.str.12, ptr noundef nonnull %0) #2
  br label %63

63:                                               ; preds = %60, %62, %59
  %64 = load i8, ptr %12, align 8, !tbaa !15
  switch i8 %64, label %79 [
    i8 3, label %65
    i8 4, label %65
    i8 5, label %66
    i8 6, label %70
    i8 9, label %.loopexit.sink.split
    i8 7, label %.loopexit.sink.split
    i8 10, label %.loopexit.sink.split
    i8 8, label %.loopexit.sink.split
  ]

65:                                               ; preds = %63, %63
  tail call void @TcpSetState(ptr noundef nonnull %0, i8 noundef zeroext 9) #2
  br label %79

66:                                               ; preds = %63
  %67 = load i32, ptr %19, align 8, !tbaa !26
  %68 = and i32 %67, 2048
  %.not80 = icmp eq i32 %68, 0
  br i1 %.not80, label %69, label %70

69:                                               ; preds = %66
  tail call void @TcpSetState(ptr noundef nonnull %0, i8 noundef zeroext 7) #2
  br label %79

70:                                               ; preds = %66, %63
  tail call void @TcpSetState(ptr noundef nonnull %0, i8 noundef zeroext 8) #2
  tail call void @TcpClearAllTimer(ptr noundef nonnull %0) #2
  %71 = load i32, ptr %20, align 4, !tbaa !27
  %.not81 = icmp eq i32 %71, 0
  br i1 %.not81, label %73, label %72

72:                                               ; preds = %70
  tail call void @TcpSetTimer(ptr noundef nonnull %0, i16 noundef zeroext 5, i32 noundef %71) #2
  br label %79

73:                                               ; preds = %70
  %74 = tail call zeroext i8 @DebugPrintEnabled() #2
  %.not82 = icmp eq i8 %74, 0
  br i1 %.not82, label %78, label %75

75:                                               ; preds = %73
  %76 = tail call zeroext i8 @DebugPrintLevelEnabled(i64 noundef 2) #2
  %.not83 = icmp eq i8 %76, 0
  br i1 %.not83, label %78, label %77

77:                                               ; preds = %75
  tail call void (i64, ptr, ...) @DebugPrint(i64 noundef 2, ptr noundef nonnull @.str.13, ptr noundef nonnull %0) #2
  br label %78

78:                                               ; preds = %75, %77, %73
  tail call void @TcpSendAck(ptr noundef nonnull %0) #2
  tail call void @TcpClose(ptr noundef nonnull %0) #2
  br label %79

79:                                               ; preds = %63, %72, %78, %69, %65
  %80 = load i32, ptr %19, align 8, !tbaa !26
  %81 = or i32 %80, 16384
  store i32 %81, ptr %19, align 8, !tbaa !26
  %82 = load i32, ptr %45, align 4, !tbaa !24
  %83 = add i32 %82, -1
  store i32 %83, ptr %45, align 4, !tbaa !24
  %.pre = load i8, ptr %49, align 4, !tbaa !25
  br label %84

84:                                               ; preds = %79, %43
  %85 = phi i8 [ %.pre, %79 ], [ %50, %43 ]
  %86 = and i8 %85, 8
  %.not84 = icmp eq i8 %86, 0
  br i1 %.not84, label %90, label %87

87:                                               ; preds = %84
  %88 = load i32, ptr %19, align 8, !tbaa !26
  %89 = or i32 %88, 16384
  store i32 %89, ptr %19, align 8, !tbaa !26
  br label %90

90:                                               ; preds = %87, %84
  %91 = getelementptr inbounds i8, ptr %26, i64 132
  %92 = load i32, ptr %91, align 4, !tbaa !28
  %.not85 = icmp eq i32 %92, 0
  br i1 %.not85, label %109, label %93

93:                                               ; preds = %90
  %94 = load i32, ptr %19, align 8, !tbaa !26
  %95 = and i32 %94, 256
  %.not86 = icmp eq i32 %95, 0
  br i1 %.not86, label %107, label %96

96:                                               ; preds = %93
  %97 = load i32, ptr %27, align 4, !tbaa !21
  %98 = load i32, ptr %21, align 8, !tbaa !29
  %99 = sub i32 %97, %98
  %100 = icmp slt i32 %99, 1
  br i1 %100, label %101, label %107

101:                                              ; preds = %96
  %102 = load i32, ptr %45, align 4, !tbaa !24
  %103 = sub i32 %102, %98
  %104 = icmp slt i32 %103, 1
  br i1 %104, label %107, label %105

105:                                              ; preds = %101
  %reass.sub = sub i32 %98, %97
  %106 = add i32 %reass.sub, 1
  br label %107

107:                                              ; preds = %101, %105, %96, %93
  %.0 = phi i32 [ %106, %105 ], [ 0, %96 ], [ 0, %93 ], [ %92, %101 ]
  %108 = load ptr, ptr %22, align 8, !tbaa !5
  tail call void @SockDataRcvd(ptr noundef %108, ptr noundef nonnull %26, i32 noundef %.0) #2
  br label %109

109:                                              ; preds = %107, %90
  %110 = load i8, ptr %12, align 8, !tbaa !15
  %.off = add i8 %110, -7
  %switch = icmp ult i8 %.off, 4
  br i1 %switch, label %111, label %113

111:                                              ; preds = %109
  %112 = load ptr, ptr %22, align 8, !tbaa !5
  tail call void @SockNoMoreData(ptr noundef %112) #2
  br label %113

113:                                              ; preds = %109, %111
  tail call void @NetbufFree(ptr noundef nonnull %26) #2
  %.not70 = icmp eq ptr %44, %9
  br i1 %.not70, label %.loopexit, label %23, !llvm.loop !30

.loopexit.sink.split:                             ; preds = %63, %63, %63, %63, %55, %58, %56
  tail call void @NetbufFree(ptr noundef nonnull %26) #2
  br label %.loopexit

.loopexit:                                        ; preds = %39, %113, %.loopexit.sink.split, %15, %8, %11
  %.059 = phi i64 [ 0, %11 ], [ 0, %8 ], [ 0, %15 ], [ -1, %.loopexit.sink.split ], [ 0, %113 ], [ 0, %39 ]
  ret i64 %.059
}

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

declare ptr @RemoveEntryList(ptr noundef) local_unnamed_addr #0

declare void @NetbufFree(ptr noundef) local_unnamed_addr #0

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

declare void @TcpClearAllTimer(ptr noundef) local_unnamed_addr #0

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

declare void @TcpSendAck(ptr noundef) local_unnamed_addr #0

declare void @TcpClose(ptr noundef) local_unnamed_addr #0

declare void @SockDataRcvd(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare void @SockNoMoreData(ptr noundef) local_unnamed_addr #0

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

!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, !8, i64 24}
!6 = !{!"_TCP_CB", !7, i64 0, !8, i64 16, !8, i64 24, !11, i64 32, !11, i64 40, !7, i64 48, !7, i64 64, !12, i64 80, !12, i64 84, !9, i64 88, !9, i64 89, !13, i64 90, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !12, i64 120, !12, i64 124, !13, i64 128, !12, i64 132, !12, i64 136, !12, i64 140, !12, i64 144, !12, i64 148, !13, i64 152, !13, i64 154, !9, i64 156, !12, i64 180, !12, i64 184, !12, i64 188, !9, i64 192, !9, i64 193, !9, i64 194, !12, i64 196, !12, i64 200, !12, i64 204, !12, i64 208, !12, i64 212, !12, i64 216, !12, i64 220, !12, i64 224, !12, i64 228, !12, i64 232, !13, i64 236, !9, i64 238, !9, i64 239, !12, i64 240, !12, i64 244, !12, i64 248, !9, i64 252, !9, i64 253, !13, i64 254, !12, i64 256, !12, i64 260, !12, i64 264, !9, i64 268, !9, i64 269, !9, i64 270, !14, i64 271, !8, i64 280}
!7 = !{!"_LIST_ENTRY", !8, i64 0, !8, i64 8}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"_TCP_PEER", !12, i64 0, !13, i64 4}
!12 = !{!"int", !9, i64 0}
!13 = !{!"short", !9, i64 0}
!14 = !{!"", !9, i64 0}
!15 = !{!6, !9, i64 88}
!16 = !{!6, !8, i64 64}
!17 = !{!6, !12, i64 132}
!18 = !{!19, !8, i64 40}
!19 = !{!"", !12, i64 0, !20, i64 8, !7, i64 16, !9, i64 32, !8, i64 40, !8, i64 48, !9, i64 56, !8, i64 120, !12, i64 128, !12, i64 132, !9, i64 136}
!20 = !{!"long long", !9, i64 0}
!21 = !{!22, !12, i64 0}
!22 = !{!"_TCP_SEG", !12, i64 0, !12, i64 4, !12, i64 8, !9, i64 12, !13, i64 14, !12, i64 16}
!23 = !{!7, !8, i64 0}
!24 = !{!22, !12, i64 4}
!25 = !{!22, !9, i64 12}
!26 = !{!6, !12, i64 80}
!27 = !{!6, !12, i64 260}
!28 = !{!19, !12, i64 132}
!29 = !{!6, !12, i64 144}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}


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