; LLVM IR from nem0/lumixengine_net :: external/enet (host)

; 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"

%union._ENetProtocol = type { %struct._ENetProtocolConnect }
%struct._ENetProtocolConnect = type { %struct._ENetProtocolCommandHeader, i16, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct._ENetProtocolCommandHeader = type { i8, i8, i16 }
%struct._ENetHost = type <{ i32, %struct._ENetAddress, i32, i32, i32, i32, i32, i32, [4 x i8], ptr, i64, i64, i32, [4 x i8], %struct._ENetList, i32, [4 x i8], i64, i16, [32 x %union._ENetProtocol], [6 x i8], i64, [65 x %struct.ENetBuffer], i64, ptr, %struct._ENetCompressor, [2 x [4096 x i8]], %struct._ENetAddress, ptr, i64, i32, i32, i32, i32, ptr, i64, i64, i64, i64, i64 }>
%struct._ENetList = type { %struct._ENetListNode }
%struct._ENetListNode = type { ptr, ptr }
%struct.ENetBuffer = type { ptr, i64 }
%struct._ENetCompressor = type { ptr, ptr, ptr, ptr }
%struct._ENetAddress = type { i32, i16 }
%struct._ENetPeer = type { %struct._ENetListNode, ptr, i16, i16, i32, i8, i8, %struct._ENetAddress, ptr, i32, ptr, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, %struct._ENetList, %struct._ENetList, %struct._ENetList, %struct._ENetList, %struct._ENetList, %struct._ENetList, i32, i16, i16, [32 x i32], i32, i64 }
%struct._ENetProtocolBandwidthLimit = type { %struct._ENetProtocolCommandHeader, i32, i32 }

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @__bswap_32(i32 noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @enet_host_bandwidth_throttle(ptr noundef %0) #3 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca %union._ENetProtocol, align 1
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  %15 = call i32 @enet_time_get()
  store i32 %15, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  %16 = load i32, ptr %3, align 4, !tbaa !9
  %17 = load ptr, ptr %2, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct._ENetHost, ptr %17, i32 0, i32 4
  %19 = load i32, ptr %18, align 4, !tbaa !11
  %20 = sub i32 %16, %19
  store i32 %20, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct._ENetHost, ptr %21, i32 0, i32 35
  %23 = load i64, ptr %22, align 8, !tbaa !19
  %24 = trunc i64 %23 to i32
  store i32 %24, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  store i32 -1, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 -1, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  store i32 0, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %25 = load ptr, ptr %2, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct._ENetHost, ptr %25, i32 0, i32 36
  %27 = load i64, ptr %26, align 8, !tbaa !20
  %28 = icmp ugt i64 %27, 0
  %29 = zext i1 %28 to i64
  %30 = select i1 %28, i32 1, i32 0
  store i32 %30, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 48, ptr %12) #4
  %31 = load i32, ptr %4, align 4, !tbaa !9
  %32 = icmp ult i32 %31, 1000
  br i1 %32, label %33, label %34

33:                                               ; preds = %1
  store i32 1, ptr %13, align 4
  br label %426

34:                                               ; preds = %1
  %35 = load i32, ptr %3, align 4, !tbaa !9
  %36 = load ptr, ptr %2, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct._ENetHost, ptr %36, i32 0, i32 4
  store i32 %35, ptr %37, align 4, !tbaa !11
  %38 = load i32, ptr %5, align 4, !tbaa !9
  %39 = icmp eq i32 %38, 0
  br i1 %39, label %40, label %41

40:                                               ; preds = %34
  store i32 1, ptr %13, align 4
  br label %426

41:                                               ; preds = %34
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct._ENetHost, ptr %42, i32 0, i32 3
  %44 = load i32, ptr %43, align 8, !tbaa !21
  %45 = icmp ne i32 %44, 0
  br i1 %45, label %46, label %87

46:                                               ; preds = %41
  store i32 0, ptr %6, align 4, !tbaa !9
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct._ENetHost, ptr %47, i32 0, i32 3
  %49 = load i32, ptr %48, align 8, !tbaa !21
  %50 = load i32, ptr %4, align 4, !tbaa !9
  %51 = mul i32 %49, %50
  %52 = udiv i32 %51, 1000
  store i32 %52, ptr %7, align 4, !tbaa !9
  %53 = load ptr, ptr %2, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct._ENetHost, ptr %53, i32 0, i32 9
  %55 = load ptr, ptr %54, align 8, !tbaa !22
  store ptr %55, ptr %11, align 8, !tbaa !5
  br label %56

56:                                               ; preds = %83, %46
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = load ptr, ptr %2, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct._ENetHost, ptr %58, i32 0, i32 9
  %60 = load ptr, ptr %59, align 8, !tbaa !22
  %61 = load ptr, ptr %2, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct._ENetHost, ptr %61, i32 0, i32 10
  %63 = load i64, ptr %62, align 8, !tbaa !23
  %64 = getelementptr inbounds %struct._ENetPeer, ptr %60, i64 %63
  %65 = icmp ult ptr %57, %64
  br i1 %65, label %66, label %86

66:                                               ; preds = %56
  %67 = load ptr, ptr %11, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct._ENetPeer, ptr %67, i32 0, i32 9
  %69 = load i32, ptr %68, align 8, !tbaa !24
  %70 = icmp ne i32 %69, 5
  br i1 %70, label %71, label %77

71:                                               ; preds = %66
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct._ENetPeer, ptr %72, i32 0, i32 9
  %74 = load i32, ptr %73, align 8, !tbaa !24
  %75 = icmp ne i32 %74, 6
  br i1 %75, label %76, label %77

76:                                               ; preds = %71
  br label %83

77:                                               ; preds = %71, %66
  %78 = load ptr, ptr %11, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct._ENetPeer, ptr %78, i32 0, i32 17
  %80 = load i32, ptr %79, align 4, !tbaa !26
  %81 = load i32, ptr %6, align 4, !tbaa !9
  %82 = add i32 %81, %80
  store i32 %82, ptr %6, align 4, !tbaa !9
  br label %83

83:                                               ; preds = %77, %76
  %84 = load ptr, ptr %11, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct._ENetPeer, ptr %84, i32 1
  store ptr %85, ptr %11, align 8, !tbaa !5
  br label %56, !llvm.loop !27

86:                                               ; preds = %56
  br label %87

87:                                               ; preds = %86, %41
  br label %88

88:                                               ; preds = %210, %87
  %89 = load i32, ptr %5, align 4, !tbaa !9
  %90 = icmp ugt i32 %89, 0
  br i1 %90, label %91, label %94

91:                                               ; preds = %88
  %92 = load i32, ptr %10, align 4, !tbaa !9
  %93 = icmp ne i32 %92, 0
  br label %94

94:                                               ; preds = %91, %88
  %95 = phi i1 [ false, %88 ], [ %93, %91 ]
  br i1 %95, label %96, label %211

96:                                               ; preds = %94
  store i32 0, ptr %10, align 4, !tbaa !9
  %97 = load i32, ptr %6, align 4, !tbaa !9
  %98 = load i32, ptr %7, align 4, !tbaa !9
  %99 = icmp ule i32 %97, %98
  br i1 %99, label %100, label %101

100:                                              ; preds = %96
  store i32 32, ptr %8, align 4, !tbaa !9
  br label %106

101:                                              ; preds = %96
  %102 = load i32, ptr %7, align 4, !tbaa !9
  %103 = mul i32 %102, 32
  %104 = load i32, ptr %6, align 4, !tbaa !9
  %105 = udiv i32 %103, %104
  store i32 %105, ptr %8, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %101, %100
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct._ENetHost, ptr %107, i32 0, i32 9
  %109 = load ptr, ptr %108, align 8, !tbaa !22
  store ptr %109, ptr %11, align 8, !tbaa !5
  br label %110

110:                                              ; preds = %207, %106
  %111 = load ptr, ptr %11, align 8, !tbaa !5
  %112 = load ptr, ptr %2, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct._ENetHost, ptr %112, i32 0, i32 9
  %114 = load ptr, ptr %113, align 8, !tbaa !22
  %115 = load ptr, ptr %2, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct._ENetHost, ptr %115, i32 0, i32 10
  %117 = load i64, ptr %116, align 8, !tbaa !23
  %118 = getelementptr inbounds %struct._ENetPeer, ptr %114, i64 %117
  %119 = icmp ult ptr %111, %118
  br i1 %119, label %120, label %210

120:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct._ENetPeer, ptr %121, i32 0, i32 9
  %123 = load i32, ptr %122, align 8, !tbaa !24
  %124 = icmp ne i32 %123, 5
  br i1 %124, label %125, label %130

125:                                              ; preds = %120
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct._ENetPeer, ptr %126, i32 0, i32 9
  %128 = load i32, ptr %127, align 8, !tbaa !24
  %129 = icmp ne i32 %128, 6
  br i1 %129, label %141, label %130

130:                                              ; preds = %125, %120
  %131 = load ptr, ptr %11, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct._ENetPeer, ptr %131, i32 0, i32 12
  %133 = load i32, ptr %132, align 8, !tbaa !29
  %134 = icmp eq i32 %133, 0
  br i1 %134, label %141, label %135

135:                                              ; preds = %130
  %136 = load ptr, ptr %11, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct._ENetPeer, ptr %136, i32 0, i32 15
  %138 = load i32, ptr %137, align 4, !tbaa !30
  %139 = load i32, ptr %3, align 4, !tbaa !9
  %140 = icmp eq i32 %138, %139
  br i1 %140, label %141, label %142

141:                                              ; preds = %135, %130, %125
  store i32 9, ptr %13, align 4
  br label %204

142:                                              ; preds = %135
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct._ENetPeer, ptr %143, i32 0, i32 12
  %145 = load i32, ptr %144, align 8, !tbaa !29
  %146 = load i32, ptr %4, align 4, !tbaa !9
  %147 = mul i32 %145, %146
  %148 = udiv i32 %147, 1000
  store i32 %148, ptr %14, align 4, !tbaa !9
  %149 = load i32, ptr %8, align 4, !tbaa !9
  %150 = load ptr, ptr %11, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct._ENetPeer, ptr %150, i32 0, i32 17
  %152 = load i32, ptr %151, align 4, !tbaa !26
  %153 = mul i32 %149, %152
  %154 = udiv i32 %153, 32
  %155 = load i32, ptr %14, align 4, !tbaa !9
  %156 = icmp ule i32 %154, %155
  br i1 %156, label %157, label %158

157:                                              ; preds = %142
  store i32 9, ptr %13, align 4
  br label %204

158:                                              ; preds = %142
  %159 = load i32, ptr %14, align 4, !tbaa !9
  %160 = mul i32 %159, 32
  %161 = load ptr, ptr %11, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct._ENetPeer, ptr %161, i32 0, i32 17
  %163 = load i32, ptr %162, align 4, !tbaa !26
  %164 = udiv i32 %160, %163
  %165 = load ptr, ptr %11, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct._ENetPeer, ptr %165, i32 0, i32 28
  store i32 %164, ptr %166, align 8, !tbaa !31
  %167 = load ptr, ptr %11, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct._ENetPeer, ptr %167, i32 0, i32 28
  %169 = load i32, ptr %168, align 8, !tbaa !31
  %170 = icmp eq i32 %169, 0
  br i1 %170, label %171, label %174

171:                                              ; preds = %158
  %172 = load ptr, ptr %11, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct._ENetPeer, ptr %172, i32 0, i32 28
  store i32 1, ptr %173, align 8, !tbaa !31
  br label %174

174:                                              ; preds = %171, %158
  %175 = load ptr, ptr %11, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct._ENetPeer, ptr %175, i32 0, i32 27
  %177 = load i32, ptr %176, align 4, !tbaa !32
  %178 = load ptr, ptr %11, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct._ENetPeer, ptr %178, i32 0, i32 28
  %180 = load i32, ptr %179, align 8, !tbaa !31
  %181 = icmp ugt i32 %177, %180
  br i1 %181, label %182, label %188

182:                                              ; preds = %174
  %183 = load ptr, ptr %11, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct._ENetPeer, ptr %183, i32 0, i32 28
  %185 = load i32, ptr %184, align 8, !tbaa !31
  %186 = load ptr, ptr %11, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct._ENetPeer, ptr %186, i32 0, i32 27
  store i32 %185, ptr %187, align 4, !tbaa !32
  br label %188

188:                                              ; preds = %182, %174
  %189 = load i32, ptr %3, align 4, !tbaa !9
  %190 = load ptr, ptr %11, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct._ENetPeer, ptr %190, i32 0, i32 15
  store i32 %189, ptr %191, align 4, !tbaa !30
  %192 = load ptr, ptr %11, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct._ENetPeer, ptr %192, i32 0, i32 16
  store i32 0, ptr %193, align 8, !tbaa !33
  %194 = load ptr, ptr %11, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct._ENetPeer, ptr %194, i32 0, i32 17
  store i32 0, ptr %195, align 4, !tbaa !26
  store i32 1, ptr %10, align 4, !tbaa !9
  %196 = load i32, ptr %5, align 4, !tbaa !9
  %197 = add i32 %196, -1
  store i32 %197, ptr %5, align 4, !tbaa !9
  %198 = load i32, ptr %14, align 4, !tbaa !9
  %199 = load i32, ptr %7, align 4, !tbaa !9
  %200 = sub i32 %199, %198
  store i32 %200, ptr %7, align 4, !tbaa !9
  %201 = load i32, ptr %14, align 4, !tbaa !9
  %202 = load i32, ptr %6, align 4, !tbaa !9
  %203 = sub i32 %202, %201
  store i32 %203, ptr %6, align 4, !tbaa !9
  store i32 0, ptr %13, align 4
  br label %204

204:                                              ; preds = %188, %157, %141
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  %205 = load i32, ptr %13, align 4
  switch i32 %205, label %429 [
    i32 0, label %206
    i32 9, label %207
  ]

206:                                              ; preds = %204
  br label %207

207:                                              ; preds = %206, %204
  %208 = load ptr, ptr %11, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct._ENetPeer, ptr %208, i32 1
  store ptr %209, ptr %11, align 8, !tbaa !5
  br label %110, !llvm.loop !34

210:                                              ; preds = %110
  br label %88, !llvm.loop !35

211:                                              ; preds = %94
  %212 = load i32, ptr %5, align 4, !tbaa !9
  %213 = icmp ugt i32 %212, 0
  br i1 %213, label %214, label %281

214:                                              ; preds = %211
  %215 = load i32, ptr %6, align 4, !tbaa !9
  %216 = load i32, ptr %7, align 4, !tbaa !9
  %217 = icmp ule i32 %215, %216
  br i1 %217, label %218, label %219

218:                                              ; preds = %214
  store i32 32, ptr %8, align 4, !tbaa !9
  br label %224

219:                                              ; preds = %214
  %220 = load i32, ptr %7, align 4, !tbaa !9
  %221 = mul i32 %220, 32
  %222 = load i32, ptr %6, align 4, !tbaa !9
  %223 = udiv i32 %221, %222
  store i32 %223, ptr %8, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %219, %218
  %225 = load ptr, ptr %2, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct._ENetHost, ptr %225, i32 0, i32 9
  %227 = load ptr, ptr %226, align 8, !tbaa !22
  store ptr %227, ptr %11, align 8, !tbaa !5
  br label %228

228:                                              ; preds = %277, %224
  %229 = load ptr, ptr %11, align 8, !tbaa !5
  %230 = load ptr, ptr %2, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct._ENetHost, ptr %230, i32 0, i32 9
  %232 = load ptr, ptr %231, align 8, !tbaa !22
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct._ENetHost, ptr %233, i32 0, i32 10
  %235 = load i64, ptr %234, align 8, !tbaa !23
  %236 = getelementptr inbounds %struct._ENetPeer, ptr %232, i64 %235
  %237 = icmp ult ptr %229, %236
  br i1 %237, label %238, label %280

238:                                              ; preds = %228
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct._ENetPeer, ptr %239, i32 0, i32 9
  %241 = load i32, ptr %240, align 8, !tbaa !24
  %242 = icmp ne i32 %241, 5
  br i1 %242, label %243, label %248

243:                                              ; preds = %238
  %244 = load ptr, ptr %11, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct._ENetPeer, ptr %244, i32 0, i32 9
  %246 = load i32, ptr %245, align 8, !tbaa !24
  %247 = icmp ne i32 %246, 6
  br i1 %247, label %254, label %248

248:                                              ; preds = %243, %238
  %249 = load ptr, ptr %11, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct._ENetPeer, ptr %249, i32 0, i32 15
  %251 = load i32, ptr %250, align 4, !tbaa !30
  %252 = load i32, ptr %3, align 4, !tbaa !9
  %253 = icmp eq i32 %251, %252
  br i1 %253, label %254, label %255

254:                                              ; preds = %248, %243
  br label %277

255:                                              ; preds = %248
  %256 = load i32, ptr %8, align 4, !tbaa !9
  %257 = load ptr, ptr %11, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct._ENetPeer, ptr %257, i32 0, i32 28
  store i32 %256, ptr %258, align 8, !tbaa !31
  %259 = load ptr, ptr %11, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct._ENetPeer, ptr %259, i32 0, i32 27
  %261 = load i32, ptr %260, align 4, !tbaa !32
  %262 = load ptr, ptr %11, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct._ENetPeer, ptr %262, i32 0, i32 28
  %264 = load i32, ptr %263, align 8, !tbaa !31
  %265 = icmp ugt i32 %261, %264
  br i1 %265, label %266, label %272

266:                                              ; preds = %255
  %267 = load ptr, ptr %11, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct._ENetPeer, ptr %267, i32 0, i32 28
  %269 = load i32, ptr %268, align 8, !tbaa !31
  %270 = load ptr, ptr %11, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct._ENetPeer, ptr %270, i32 0, i32 27
  store i32 %269, ptr %271, align 4, !tbaa !32
  br label %272

272:                                              ; preds = %266, %255
  %273 = load ptr, ptr %11, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct._ENetPeer, ptr %273, i32 0, i32 16
  store i32 0, ptr %274, align 8, !tbaa !33
  %275 = load ptr, ptr %11, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct._ENetPeer, ptr %275, i32 0, i32 17
  store i32 0, ptr %276, align 4, !tbaa !26
  br label %277

277:                                              ; preds = %272, %254
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct._ENetPeer, ptr %278, i32 1
  store ptr %279, ptr %11, align 8, !tbaa !5
  br label %228, !llvm.loop !36

280:                                              ; preds = %228
  br label %281

281:                                              ; preds = %280, %211
  %282 = load ptr, ptr %2, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct._ENetHost, ptr %282, i32 0, i32 7
  %284 = load i32, ptr %283, align 8, !tbaa !37
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %286, label %425

286:                                              ; preds = %281
  %287 = load ptr, ptr %2, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct._ENetHost, ptr %287, i32 0, i32 7
  store i32 0, ptr %288, align 8, !tbaa !37
  %289 = load ptr, ptr %2, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct._ENetHost, ptr %289, i32 0, i32 35
  %291 = load i64, ptr %290, align 8, !tbaa !19
  %292 = trunc i64 %291 to i32
  store i32 %292, ptr %5, align 4, !tbaa !9
  %293 = load ptr, ptr %2, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct._ENetHost, ptr %293, i32 0, i32 2
  %295 = load i32, ptr %294, align 4, !tbaa !38
  store i32 %295, ptr %7, align 4, !tbaa !9
  store i32 1, ptr %10, align 4, !tbaa !9
  %296 = load i32, ptr %7, align 4, !tbaa !9
  %297 = icmp eq i32 %296, 0
  br i1 %297, label %298, label %299

298:                                              ; preds = %286
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %370

299:                                              ; preds = %286
  br label %300

300:                                              ; preds = %368, %299
  %301 = load i32, ptr %5, align 4, !tbaa !9
  %302 = icmp ugt i32 %301, 0
  br i1 %302, label %303, label %306

303:                                              ; preds = %300
  %304 = load i32, ptr %10, align 4, !tbaa !9
  %305 = icmp ne i32 %304, 0
  br label %306

306:                                              ; preds = %303, %300
  %307 = phi i1 [ false, %300 ], [ %305, %303 ]
  br i1 %307, label %308, label %369

308:                                              ; preds = %306
  store i32 0, ptr %10, align 4, !tbaa !9
  %309 = load i32, ptr %7, align 4, !tbaa !9
  %310 = load i32, ptr %5, align 4, !tbaa !9
  %311 = udiv i32 %309, %310
  store i32 %311, ptr %9, align 4, !tbaa !9
  %312 = load ptr, ptr %2, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct._ENetHost, ptr %312, i32 0, i32 9
  %314 = load ptr, ptr %313, align 8, !tbaa !22
  store ptr %314, ptr %11, align 8, !tbaa !5
  br label %315

315:                                              ; preds = %365, %308
  %316 = load ptr, ptr %11, align 8, !tbaa !5
  %317 = load ptr, ptr %2, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct._ENetHost, ptr %317, i32 0, i32 9
  %319 = load ptr, ptr %318, align 8, !tbaa !22
  %320 = load ptr, ptr %2, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct._ENetHost, ptr %320, i32 0, i32 10
  %322 = load i64, ptr %321, align 8, !tbaa !23
  %323 = getelementptr inbounds %struct._ENetPeer, ptr %319, i64 %322
  %324 = icmp ult ptr %316, %323
  br i1 %324, label %325, label %368

325:                                              ; preds = %315
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct._ENetPeer, ptr %326, i32 0, i32 9
  %328 = load i32, ptr %327, align 8, !tbaa !24
  %329 = icmp ne i32 %328, 5
  br i1 %329, label %330, label %335

330:                                              ; preds = %325
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct._ENetPeer, ptr %331, i32 0, i32 9
  %333 = load i32, ptr %332, align 8, !tbaa !24
  %334 = icmp ne i32 %333, 6
  br i1 %334, label %341, label %335

335:                                              ; preds = %330, %325
  %336 = load ptr, ptr %11, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct._ENetPeer, ptr %336, i32 0, i32 14
  %338 = load i32, ptr %337, align 8, !tbaa !39
  %339 = load i32, ptr %3, align 4, !tbaa !9
  %340 = icmp eq i32 %338, %339
  br i1 %340, label %341, label %342

341:                                              ; preds = %335, %330
  br label %365

342:                                              ; preds = %335
  %343 = load ptr, ptr %11, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct._ENetPeer, ptr %343, i32 0, i32 13
  %345 = load i32, ptr %344, align 4, !tbaa !40
  %346 = icmp ugt i32 %345, 0
  br i1 %346, label %347, label %354

347:                                              ; preds = %342
  %348 = load ptr, ptr %11, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct._ENetPeer, ptr %348, i32 0, i32 13
  %350 = load i32, ptr %349, align 4, !tbaa !40
  %351 = load i32, ptr %9, align 4, !tbaa !9
  %352 = icmp uge i32 %350, %351
  br i1 %352, label %353, label %354

353:                                              ; preds = %347
  br label %365

354:                                              ; preds = %347, %342
  %355 = load i32, ptr %3, align 4, !tbaa !9
  %356 = load ptr, ptr %11, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct._ENetPeer, ptr %356, i32 0, i32 14
  store i32 %355, ptr %357, align 8, !tbaa !39
  store i32 1, ptr %10, align 4, !tbaa !9
  %358 = load i32, ptr %5, align 4, !tbaa !9
  %359 = add i32 %358, -1
  store i32 %359, ptr %5, align 4, !tbaa !9
  %360 = load ptr, ptr %11, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct._ENetPeer, ptr %360, i32 0, i32 13
  %362 = load i32, ptr %361, align 4, !tbaa !40
  %363 = load i32, ptr %7, align 4, !tbaa !9
  %364 = sub i32 %363, %362
  store i32 %364, ptr %7, align 4, !tbaa !9
  br label %365

365:                                              ; preds = %354, %353, %341
  %366 = load ptr, ptr %11, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct._ENetPeer, ptr %366, i32 1
  store ptr %367, ptr %11, align 8, !tbaa !5
  br label %315, !llvm.loop !41

368:                                              ; preds = %315
  br label %300, !llvm.loop !42

369:                                              ; preds = %306
  br label %370

370:                                              ; preds = %369, %298
  %371 = load ptr, ptr %2, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct._ENetHost, ptr %371, i32 0, i32 9
  %373 = load ptr, ptr %372, align 8, !tbaa !22
  store ptr %373, ptr %11, align 8, !tbaa !5
  br label %374

374:                                              ; preds = %421, %370
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = load ptr, ptr %2, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct._ENetHost, ptr %376, i32 0, i32 9
  %378 = load ptr, ptr %377, align 8, !tbaa !22
  %379 = load ptr, ptr %2, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct._ENetHost, ptr %379, i32 0, i32 10
  %381 = load i64, ptr %380, align 8, !tbaa !23
  %382 = getelementptr inbounds %struct._ENetPeer, ptr %378, i64 %381
  %383 = icmp ult ptr %375, %382
  br i1 %383, label %384, label %424

384:                                              ; preds = %374
  %385 = load ptr, ptr %11, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct._ENetPeer, ptr %385, i32 0, i32 9
  %387 = load i32, ptr %386, align 8, !tbaa !24
  %388 = icmp ne i32 %387, 5
  br i1 %388, label %389, label %395

389:                                              ; preds = %384
  %390 = load ptr, ptr %11, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct._ENetPeer, ptr %390, i32 0, i32 9
  %392 = load i32, ptr %391, align 8, !tbaa !24
  %393 = icmp ne i32 %392, 6
  br i1 %393, label %394, label %395

394:                                              ; preds = %389
  br label %421

395:                                              ; preds = %389, %384
  %396 = getelementptr inbounds %struct._ENetProtocolCommandHeader, ptr %12, i32 0, i32 0
  store i8 -118, ptr %396, align 1, !tbaa !43
  %397 = getelementptr inbounds %struct._ENetProtocolCommandHeader, ptr %12, i32 0, i32 1
  store i8 -1, ptr %397, align 1, !tbaa !43
  %398 = load ptr, ptr %2, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct._ENetHost, ptr %398, i32 0, i32 3
  %400 = load i32, ptr %399, align 8, !tbaa !21
  %401 = call i32 @__bswap_32(i32 noundef %400)
  %402 = getelementptr inbounds %struct._ENetProtocolBandwidthLimit, ptr %12, i32 0, i32 2
  store i32 %401, ptr %402, align 1, !tbaa !43
  %403 = load ptr, ptr %11, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct._ENetPeer, ptr %403, i32 0, i32 14
  %405 = load i32, ptr %404, align 8, !tbaa !39
  %406 = load i32, ptr %3, align 4, !tbaa !9
  %407 = icmp eq i32 %405, %406
  br i1 %407, label %408, label %414

408:                                              ; preds = %395
  %409 = load ptr, ptr %11, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct._ENetPeer, ptr %409, i32 0, i32 13
  %411 = load i32, ptr %410, align 4, !tbaa !40
  %412 = call i32 @__bswap_32(i32 noundef %411)
  %413 = getelementptr inbounds %struct._ENetProtocolBandwidthLimit, ptr %12, i32 0, i32 1
  store i32 %412, ptr %413, align 1, !tbaa !43
  br label %418

414:                                              ; preds = %395
  %415 = load i32, ptr %9, align 4, !tbaa !9
  %416 = call i32 @__bswap_32(i32 noundef %415)
  %417 = getelementptr inbounds %struct._ENetProtocolBandwidthLimit, ptr %12, i32 0, i32 1
  store i32 %416, ptr %417, align 1, !tbaa !43
  br label %418

418:                                              ; preds = %414, %408
  %419 = load ptr, ptr %11, align 8, !tbaa !5
  %420 = call ptr @enet_peer_queue_outgoing_command(ptr noundef %419, ptr noundef %12, ptr noundef null, i32 noundef 0, i16 noundef zeroext 0)
  br label %421

421:                                              ; preds = %418, %394
  %422 = load ptr, ptr %11, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct._ENetPeer, ptr %422, i32 1
  store ptr %423, ptr %11, align 8, !tbaa !5
  br label %374, !llvm.loop !44

424:                                              ; preds = %374
  br label %425

425:                                              ; preds = %424, %281
  store i32 0, ptr %13, align 4
  br label %426

426:                                              ; preds = %425, %40, %33
  call void @llvm.lifetime.end.p0(i64 48, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  %427 = load i32, ptr %13, align 4
  switch i32 %427, label %429 [
    i32 0, label %428
    i32 1, label %428
  ]

428:                                              ; preds = %426, %426
  ret void

429:                                              ; preds = %426, %204
  unreachable
}

declare i32 @enet_time_get() #2

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

!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 20}
!12 = !{!"_ENetHost", !10, i64 0, !13, i64 4, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !6, i64 40, !15, i64 48, !15, i64 56, !10, i64 64, !16, i64 72, !10, i64 88, !15, i64 96, !14, i64 104, !7, i64 106, !15, i64 1648, !7, i64 1656, !15, i64 2696, !6, i64 2704, !18, i64 2712, !7, i64 2744, !13, i64 10936, !6, i64 10944, !15, i64 10952, !10, i64 10960, !10, i64 10964, !10, i64 10968, !10, i64 10972, !6, i64 10976, !15, i64 10984, !15, i64 10992, !15, i64 11000, !15, i64 11008, !15, i64 11016}
!13 = !{!"_ENetAddress", !10, i64 0, !14, i64 4}
!14 = !{!"short", !7, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ENetList", !17, i64 0}
!17 = !{!"_ENetListNode", !6, i64 0, !6, i64 8}
!18 = !{!"_ENetCompressor", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!19 = !{!12, !15, i64 10984}
!20 = !{!12, !15, i64 10992}
!21 = !{!12, !10, i64 16}
!22 = !{!12, !6, i64 40}
!23 = !{!12, !15, i64 48}
!24 = !{!25, !10, i64 56}
!25 = !{!"_ENetPeer", !17, i64 0, !6, i64 16, !14, i64 24, !14, i64 26, !10, i64 28, !7, i64 32, !7, i64 33, !13, i64 36, !6, i64 48, !10, i64 56, !6, i64 64, !15, i64 72, !10, i64 80, !10, i64 84, !10, i64 88, !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, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !14, i64 220, !16, i64 224, !16, i64 240, !16, i64 256, !16, i64 272, !16, i64 288, !16, i64 304, !10, i64 320, !14, i64 324, !14, i64 326, !7, i64 328, !10, i64 456, !15, i64 464}
!26 = !{!25, !10, i64 100}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!25, !10, i64 80}
!30 = !{!25, !10, i64 92}
!31 = !{!25, !10, i64 144}
!32 = !{!25, !10, i64 140}
!33 = !{!25, !10, i64 96}
!34 = distinct !{!34, !28}
!35 = distinct !{!35, !28}
!36 = distinct !{!36, !28}
!37 = !{!12, !10, i64 32}
!38 = !{!12, !10, i64 12}
!39 = !{!25, !10, i64 88}
!40 = !{!25, !10, i64 84}
!41 = distinct !{!41, !28}
!42 = distinct !{!42, !28}
!43 = !{!7, !7, i64 0}
!44 = distinct !{!44, !28}


; 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"

%union._ENetProtocol = type { %struct._ENetProtocolConnect }
%struct._ENetProtocolConnect = type { %struct._ENetProtocolCommandHeader, i16, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct._ENetProtocolCommandHeader = type { i8, i8, i16 }
%struct._ENetPeer = type { %struct._ENetListNode, ptr, i16, i16, i32, i8, i8, %struct._ENetAddress, ptr, i32, ptr, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, %struct._ENetList, %struct._ENetList, %struct._ENetList, %struct._ENetList, %struct._ENetList, %struct._ENetList, i32, i16, i16, [32 x i32], i32, i64 }
%struct._ENetListNode = type { ptr, ptr }
%struct._ENetAddress = type { i32, i16 }
%struct._ENetList = type { %struct._ENetListNode }

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @__bswap_32(i32 noundef) local_unnamed_addr #1

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

; Function Attrs: nounwind uwtable
define dso_local void @enet_host_bandwidth_throttle(ptr nocapture noundef %0) local_unnamed_addr #3 {
  %2 = alloca %union._ENetProtocol, align 1
  %3 = tail call i32 @enet_time_get() #4
  %4 = getelementptr inbounds i8, ptr %0, i64 20
  %5 = load i32, ptr %4, align 4, !tbaa !5
  %6 = sub i32 %3, %5
  %7 = getelementptr inbounds i8, ptr %0, i64 10984
  %8 = load i64, ptr %7, align 8, !tbaa !17
  %9 = trunc i64 %8 to i32
  %10 = getelementptr inbounds i8, ptr %0, i64 10992
  %11 = load i64, ptr %10, align 8, !tbaa !18
  %.not.not = icmp eq i64 %11, 0
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %2) #4
  %12 = icmp ult i32 %6, 1000
  br i1 %12, label %.loopexit, label %13

13:                                               ; preds = %1
  store i32 %3, ptr %4, align 4, !tbaa !5
  %14 = icmp eq i32 %9, 0
  br i1 %14, label %.loopexit, label %15

15:                                               ; preds = %13
  %16 = getelementptr inbounds i8, ptr %0, i64 16
  %17 = load i32, ptr %16, align 8, !tbaa !19
  %.not161 = icmp eq i32 %17, 0
  br i1 %.not161, label %.loopexit190, label %18

18:                                               ; preds = %15
  %19 = mul i32 %17, %6
  %20 = udiv i32 %19, 1000
  %21 = getelementptr inbounds i8, ptr %0, i64 40
  %22 = load ptr, ptr %21, align 8, !tbaa !20
  %23 = getelementptr inbounds i8, ptr %0, i64 48
  %24 = load i64, ptr %23, align 8, !tbaa !21
  %25 = getelementptr inbounds %struct._ENetPeer, ptr %22, i64 %24
  %26 = icmp sgt i64 %24, 0
  br i1 %26, label %.lr.ph, label %.loopexit190

.lr.ph:                                           ; preds = %18, %33
  %.0119192 = phi ptr [ %34, %33 ], [ %22, %18 ]
  %.0140191 = phi i32 [ %.1141, %33 ], [ 0, %18 ]
  %27 = getelementptr inbounds i8, ptr %.0119192, i64 56
  %28 = load i32, ptr %27, align 8, !tbaa !22
  %.off = add i32 %28, -5
  %switch = icmp ult i32 %.off, 2
  br i1 %switch, label %29, label %33

29:                                               ; preds = %.lr.ph
  %30 = getelementptr inbounds i8, ptr %.0119192, i64 100
  %31 = load i32, ptr %30, align 4, !tbaa !24
  %32 = add i32 %31, %.0140191
  br label %33

33:                                               ; preds = %.lr.ph, %29
  %.1141 = phi i32 [ %32, %29 ], [ %.0140191, %.lr.ph ]
  %34 = getelementptr inbounds i8, ptr %.0119192, i64 472
  %35 = icmp ult ptr %34, %25
  br i1 %35, label %.lr.ph, label %.loopexit190, !llvm.loop !25

.loopexit190:                                     ; preds = %33, %18, %15
  %.2142 = phi i32 [ -1, %15 ], [ 0, %18 ], [ %.1141, %33 ]
  %.0134 = phi i32 [ -1, %15 ], [ %20, %18 ], [ %20, %33 ]
  br i1 %.not.not, label %._crit_edge.thread, label %.lr.ph206

.lr.ph206:                                        ; preds = %.loopexit190
  %36 = getelementptr inbounds i8, ptr %0, i64 40
  %37 = load ptr, ptr %36, align 8, !tbaa !20
  %38 = getelementptr inbounds i8, ptr %0, i64 48
  %39 = load i64, ptr %38, align 8, !tbaa !21
  %40 = getelementptr inbounds %struct._ENetPeer, ptr %37, i64 %39
  %41 = icmp sgt i64 %39, 0
  br i1 %41, label %.lr.ph206.split.us, label %._crit_edge.thread

.lr.ph206.split.us:                               ; preds = %.lr.ph206, %..loopexit189_crit_edge.us
  %.0205.us = phi i32 [ %.2.us, %..loopexit189_crit_edge.us ], [ %9, %.lr.ph206 ]
  %.1135204.us = phi i32 [ %.3137.us, %..loopexit189_crit_edge.us ], [ %.0134, %.lr.ph206 ]
  %.3143203.us = phi i32 [ %.5145.us, %..loopexit189_crit_edge.us ], [ %.2142, %.lr.ph206 ]
  %.not172.us = icmp ugt i32 %.3143203.us, %.1135204.us
  br i1 %.not172.us, label %42, label %.lr.ph198.us

42:                                               ; preds = %.lr.ph206.split.us
  %43 = shl i32 %.1135204.us, 5
  %44 = udiv i32 %43, %.3143203.us
  br label %.lr.ph198.us

.lr.ph198.us:                                     ; preds = %42, %.lr.ph206.split.us
  %.0132.us = phi i32 [ %44, %42 ], [ 32, %.lr.ph206.split.us ]
  br label %45

45:                                               ; preds = %.lr.ph198.us, %77
  %.1197.us = phi i32 [ %.0205.us, %.lr.ph198.us ], [ %.2.us, %77 ]
  %.1120196.us = phi ptr [ %37, %.lr.ph198.us ], [ %78, %77 ]
  %.1125195.us = phi i32 [ 0, %.lr.ph198.us ], [ %.2126.us, %77 ]
  %.2136194.us = phi i32 [ %.1135204.us, %.lr.ph198.us ], [ %.3137.us, %77 ]
  %.4144193.us = phi i32 [ %.3143203.us, %.lr.ph198.us ], [ %.5145.us, %77 ]
  %46 = getelementptr inbounds i8, ptr %.1120196.us, i64 56
  %47 = load i32, ptr %46, align 8, !tbaa !22
  %.off178.us = add i32 %47, -5
  %switch179.us = icmp ult i32 %.off178.us, 2
  br i1 %switch179.us, label %48, label %77

48:                                               ; preds = %45
  %49 = getelementptr inbounds i8, ptr %.1120196.us, i64 80
  %50 = load i32, ptr %49, align 8, !tbaa !27
  %51 = icmp eq i32 %50, 0
  br i1 %51, label %77, label %52

52:                                               ; preds = %48
  %53 = getelementptr inbounds i8, ptr %.1120196.us, i64 92
  %54 = load i32, ptr %53, align 4, !tbaa !28
  %55 = icmp eq i32 %54, %3
  br i1 %55, label %77, label %56

56:                                               ; preds = %52
  %57 = mul i32 %50, %6
  %58 = udiv i32 %57, 1000
  %59 = getelementptr inbounds i8, ptr %.1120196.us, i64 100
  %60 = load i32, ptr %59, align 4, !tbaa !24
  %61 = mul i32 %60, %.0132.us
  %62 = lshr i32 %61, 5
  %.not175.us = icmp ugt i32 %62, %58
  br i1 %.not175.us, label %63, label %77

63:                                               ; preds = %56
  %64 = shl nuw nsw i32 %58, 5
  %65 = udiv i32 %64, %60
  %66 = getelementptr inbounds i8, ptr %.1120196.us, i64 144
  %67 = icmp ugt i32 %60, %64
  %spec.select.us = select i1 %67, i32 1, i32 %65
  store i32 %spec.select.us, ptr %66, align 8, !tbaa !29
  %68 = getelementptr inbounds i8, ptr %.1120196.us, i64 140
  %69 = load i32, ptr %68, align 4, !tbaa !30
  %70 = icmp ugt i32 %69, %spec.select.us
  br i1 %70, label %71, label %72

71:                                               ; preds = %63
  store i32 %spec.select.us, ptr %68, align 4, !tbaa !30
  br label %72

72:                                               ; preds = %71, %63
  store i32 %3, ptr %53, align 4, !tbaa !28
  %73 = getelementptr inbounds i8, ptr %.1120196.us, i64 96
  store i32 0, ptr %73, align 8, !tbaa !31
  store i32 0, ptr %59, align 4, !tbaa !24
  %74 = add i32 %.1197.us, -1
  %75 = sub i32 %.2136194.us, %58
  %76 = sub i32 %.4144193.us, %58
  br label %77

77:                                               ; preds = %72, %56, %52, %48, %45
  %.5145.us = phi i32 [ %76, %72 ], [ %.4144193.us, %45 ], [ %.4144193.us, %52 ], [ %.4144193.us, %48 ], [ %.4144193.us, %56 ]
  %.3137.us = phi i32 [ %75, %72 ], [ %.2136194.us, %45 ], [ %.2136194.us, %52 ], [ %.2136194.us, %48 ], [ %.2136194.us, %56 ]
  %.2126.us = phi i32 [ 1, %72 ], [ %.1125195.us, %45 ], [ %.1125195.us, %52 ], [ %.1125195.us, %48 ], [ %.1125195.us, %56 ]
  %.2.us = phi i32 [ %74, %72 ], [ %.1197.us, %45 ], [ %.1197.us, %52 ], [ %.1197.us, %48 ], [ %.1197.us, %56 ]
  %78 = getelementptr inbounds i8, ptr %.1120196.us, i64 472
  %79 = icmp ult ptr %78, %40
  br i1 %79, label %45, label %..loopexit189_crit_edge.us, !llvm.loop !32

..loopexit189_crit_edge.us:                       ; preds = %77
  %80 = icmp ne i32 %.2.us, 0
  %81 = icmp ne i32 %.2126.us, 0
  %82 = select i1 %80, i1 %81, i1 false
  br i1 %82, label %.lr.ph206.split.us, label %._crit_edge, !llvm.loop !33

._crit_edge:                                      ; preds = %..loopexit189_crit_edge.us
  br i1 %80, label %._crit_edge.thread, label %.loopexit188

._crit_edge.thread:                               ; preds = %.lr.ph206, %.loopexit190, %._crit_edge
  %.1135.lcssa245 = phi i32 [ %.3137.us, %._crit_edge ], [ %.0134, %.loopexit190 ], [ %.0134, %.lr.ph206 ]
  %.3143.lcssa244 = phi i32 [ %.5145.us, %._crit_edge ], [ %.2142, %.loopexit190 ], [ %.2142, %.lr.ph206 ]
  %.not162 = icmp ugt i32 %.3143.lcssa244, %.1135.lcssa245
  br i1 %.not162, label %83, label %86

83:                                               ; preds = %._crit_edge.thread
  %84 = shl i32 %.1135.lcssa245, 5
  %85 = udiv i32 %84, %.3143.lcssa244
  br label %86

86:                                               ; preds = %._crit_edge.thread, %83
  %.1133 = phi i32 [ %85, %83 ], [ 32, %._crit_edge.thread ]
  %87 = getelementptr inbounds i8, ptr %0, i64 40
  %88 = load ptr, ptr %87, align 8, !tbaa !20
  %89 = getelementptr inbounds i8, ptr %0, i64 48
  %90 = load i64, ptr %89, align 8, !tbaa !21
  %91 = getelementptr inbounds %struct._ENetPeer, ptr %88, i64 %90
  %92 = icmp sgt i64 %90, 0
  br i1 %92, label %.lr.ph221, label %.loopexit188

.lr.ph221:                                        ; preds = %86, %108
  %.2121219 = phi ptr [ %109, %108 ], [ %88, %86 ]
  %93 = getelementptr inbounds i8, ptr %.2121219, i64 56
  %94 = load i32, ptr %93, align 8, !tbaa !22
  %.off180 = add i32 %94, -5
  %switch181 = icmp ult i32 %.off180, 2
  br i1 %switch181, label %95, label %108

95:                                               ; preds = %.lr.ph221
  %96 = getelementptr inbounds i8, ptr %.2121219, i64 92
  %97 = load i32, ptr %96, align 4, !tbaa !28
  %98 = icmp eq i32 %97, %3
  br i1 %98, label %108, label %99

99:                                               ; preds = %95
  %100 = getelementptr inbounds i8, ptr %.2121219, i64 144
  store i32 %.1133, ptr %100, align 8, !tbaa !29
  %101 = getelementptr inbounds i8, ptr %.2121219, i64 140
  %102 = load i32, ptr %101, align 4, !tbaa !30
  %103 = icmp ugt i32 %102, %.1133
  br i1 %103, label %104, label %105

104:                                              ; preds = %99
  store i32 %.1133, ptr %101, align 4, !tbaa !30
  br label %105

105:                                              ; preds = %104, %99
  %106 = getelementptr inbounds i8, ptr %.2121219, i64 96
  store i32 0, ptr %106, align 8, !tbaa !31
  %107 = getelementptr inbounds i8, ptr %.2121219, i64 100
  store i32 0, ptr %107, align 4, !tbaa !24
  br label %108

108:                                              ; preds = %.lr.ph221, %95, %105
  %109 = getelementptr inbounds i8, ptr %.2121219, i64 472
  %110 = icmp ult ptr %109, %91
  br i1 %110, label %.lr.ph221, label %.loopexit188, !llvm.loop !34

.loopexit188:                                     ; preds = %108, %86, %._crit_edge
  %111 = getelementptr inbounds i8, ptr %0, i64 32
  %112 = load i32, ptr %111, align 8, !tbaa !35
  %.not163 = icmp eq i32 %112, 0
  br i1 %.not163, label %.loopexit, label %113

113:                                              ; preds = %.loopexit188
  store i32 0, ptr %111, align 8, !tbaa !35
  %114 = getelementptr inbounds i8, ptr %0, i64 12
  %115 = load i32, ptr %114, align 4, !tbaa !36
  %116 = icmp eq i32 %115, 0
  br i1 %116, label %..loopexit187_crit_edge, label %.preheader

..loopexit187_crit_edge:                          ; preds = %113
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 48
  %.pre = load i64, ptr %.phi.trans.insert, align 8, !tbaa !21
  br label %.loopexit187

.preheader:                                       ; preds = %113
  %117 = getelementptr inbounds i8, ptr %0, i64 40
  %118 = load ptr, ptr %117, align 8, !tbaa !20
  %119 = getelementptr inbounds i8, ptr %0, i64 48
  %120 = load i64, ptr %119, align 8, !tbaa !21
  %121 = getelementptr inbounds %struct._ENetPeer, ptr %118, i64 %120
  %122 = icmp sgt i64 %120, 0
  br i1 %122, label %.lr.ph227.us, label %.loopexit

.lr.ph227.us:                                     ; preds = %.preheader, %..loopexit186_crit_edge.us
  %.3232.us = phi i32 [ %.5.us, %..loopexit186_crit_edge.us ], [ %9, %.preheader ]
  %.4138231.us = phi i32 [ %.6.us, %..loopexit186_crit_edge.us ], [ %115, %.preheader ]
  %123 = udiv i32 %.4138231.us, %.3232.us
  br label %124

124:                                              ; preds = %.lr.ph227.us, %137
  %.4225.us = phi i32 [ %.3232.us, %.lr.ph227.us ], [ %.5.us, %137 ]
  %.3122224.us = phi ptr [ %118, %.lr.ph227.us ], [ %138, %137 ]
  %.4128223.us = phi i32 [ 0, %.lr.ph227.us ], [ %.5129.us, %137 ]
  %.5139222.us = phi i32 [ %.4138231.us, %.lr.ph227.us ], [ %.6.us, %137 ]
  %125 = getelementptr inbounds i8, ptr %.3122224.us, i64 56
  %126 = load i32, ptr %125, align 8, !tbaa !22
  %.off182.us = add i32 %126, -5
  %switch183.us = icmp ult i32 %.off182.us, 2
  br i1 %switch183.us, label %127, label %137

127:                                              ; preds = %124
  %128 = getelementptr inbounds i8, ptr %.3122224.us, i64 88
  %129 = load i32, ptr %128, align 8, !tbaa !37
  %130 = icmp eq i32 %129, %3
  br i1 %130, label %137, label %131

131:                                              ; preds = %127
  %132 = getelementptr inbounds i8, ptr %.3122224.us, i64 84
  %133 = load i32, ptr %132, align 4, !tbaa !38
  %.not166.us = icmp eq i32 %133, 0
  %.not167.us = icmp ult i32 %133, %123
  %or.cond.us = select i1 %.not166.us, i1 true, i1 %.not167.us
  br i1 %or.cond.us, label %134, label %137

134:                                              ; preds = %131
  store i32 %3, ptr %128, align 8, !tbaa !37
  %135 = add i32 %.4225.us, -1
  %136 = sub i32 %.5139222.us, %133
  br label %137

137:                                              ; preds = %134, %131, %127, %124
  %.6.us = phi i32 [ %.5139222.us, %127 ], [ %136, %134 ], [ %.5139222.us, %124 ], [ %.5139222.us, %131 ]
  %.5129.us = phi i32 [ %.4128223.us, %127 ], [ 1, %134 ], [ %.4128223.us, %124 ], [ %.4128223.us, %131 ]
  %.5.us = phi i32 [ %.4225.us, %127 ], [ %135, %134 ], [ %.4225.us, %124 ], [ %.4225.us, %131 ]
  %138 = getelementptr inbounds i8, ptr %.3122224.us, i64 472
  %139 = icmp ult ptr %138, %121
  br i1 %139, label %124, label %..loopexit186_crit_edge.us, !llvm.loop !39

..loopexit186_crit_edge.us:                       ; preds = %137
  %140 = icmp ne i32 %.5.us, 0
  %141 = icmp ne i32 %.5129.us, 0
  %142 = select i1 %140, i1 %141, i1 false
  br i1 %142, label %.lr.ph227.us, label %.loopexit187, !llvm.loop !40

.loopexit187:                                     ; preds = %..loopexit186_crit_edge.us, %..loopexit187_crit_edge
  %143 = phi i64 [ %.pre, %..loopexit187_crit_edge ], [ %120, %..loopexit186_crit_edge.us ]
  %.1131 = phi i32 [ 0, %..loopexit187_crit_edge ], [ %123, %..loopexit186_crit_edge.us ]
  %144 = getelementptr inbounds i8, ptr %0, i64 40
  %145 = getelementptr inbounds i8, ptr %0, i64 48
  %146 = icmp sgt i64 %143, 0
  br i1 %146, label %.lr.ph236, label %.loopexit

.lr.ph236:                                        ; preds = %.loopexit187
  %147 = load ptr, ptr %144, align 8, !tbaa !20
  %148 = getelementptr inbounds i8, ptr %2, i64 1
  %149 = getelementptr inbounds i8, ptr %2, i64 8
  %150 = getelementptr inbounds i8, ptr %2, i64 4
  br label %151

151:                                              ; preds = %.lr.ph236, %168
  %152 = phi i64 [ %143, %.lr.ph236 ], [ %169, %168 ]
  %153 = phi ptr [ %147, %.lr.ph236 ], [ %170, %168 ]
  %.4123234 = phi ptr [ %147, %.lr.ph236 ], [ %171, %168 ]
  %154 = getelementptr inbounds i8, ptr %.4123234, i64 56
  %155 = load i32, ptr %154, align 8, !tbaa !22
  %.off184 = add i32 %155, -5
  %switch185 = icmp ult i32 %.off184, 2
  br i1 %switch185, label %156, label %168

156:                                              ; preds = %151
  store i8 -118, ptr %2, align 1, !tbaa !41
  store i8 -1, ptr %148, align 1, !tbaa !41
  %157 = load i32, ptr %16, align 8, !tbaa !19
  %158 = call i32 @__bswap_32(i32 noundef %157)
  store i32 %158, ptr %149, align 1, !tbaa !41
  %159 = getelementptr inbounds i8, ptr %.4123234, i64 88
  %160 = load i32, ptr %159, align 8, !tbaa !37
  %161 = icmp eq i32 %160, %3
  br i1 %161, label %162, label %165

162:                                              ; preds = %156
  %163 = getelementptr inbounds i8, ptr %.4123234, i64 84
  %164 = load i32, ptr %163, align 4, !tbaa !38
  br label %165

165:                                              ; preds = %156, %162
  %.1131.sink = phi i32 [ %164, %162 ], [ %.1131, %156 ]
  %166 = call i32 @__bswap_32(i32 noundef %.1131.sink)
  store i32 %166, ptr %150, align 1, !tbaa !41
  %167 = call ptr @enet_peer_queue_outgoing_command(ptr noundef nonnull %.4123234, ptr noundef nonnull %2, ptr noundef null, i32 noundef 0, i16 noundef zeroext 0) #4
  %.pre239 = load ptr, ptr %144, align 8, !tbaa !20
  %.pre240 = load i64, ptr %145, align 8, !tbaa !21
  br label %168

168:                                              ; preds = %151, %165
  %169 = phi i64 [ %152, %151 ], [ %.pre240, %165 ]
  %170 = phi ptr [ %153, %151 ], [ %.pre239, %165 ]
  %171 = getelementptr inbounds i8, ptr %.4123234, i64 472
  %172 = getelementptr inbounds %struct._ENetPeer, ptr %170, i64 %169
  %173 = icmp ult ptr %171, %172
  br i1 %173, label %151, label %.loopexit, !llvm.loop !42

.loopexit:                                        ; preds = %168, %.preheader, %.loopexit187, %.loopexit188, %13, %1
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %2) #4
  ret void
}

declare i32 @enet_time_get() local_unnamed_addr #2

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

!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 20}
!6 = !{!"_ENetHost", !7, i64 0, !10, i64 4, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !12, i64 40, !13, i64 48, !13, i64 56, !7, i64 64, !14, i64 72, !7, i64 88, !13, i64 96, !11, i64 104, !8, i64 106, !13, i64 1648, !8, i64 1656, !13, i64 2696, !12, i64 2704, !16, i64 2712, !8, i64 2744, !10, i64 10936, !12, i64 10944, !13, i64 10952, !7, i64 10960, !7, i64 10964, !7, i64 10968, !7, i64 10972, !12, i64 10976, !13, i64 10984, !13, i64 10992, !13, i64 11000, !13, i64 11008, !13, i64 11016}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"_ENetAddress", !7, i64 0, !11, i64 4}
!11 = !{!"short", !8, i64 0}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!"long", !8, i64 0}
!14 = !{!"_ENetList", !15, i64 0}
!15 = !{!"_ENetListNode", !12, i64 0, !12, i64 8}
!16 = !{!"_ENetCompressor", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!17 = !{!6, !13, i64 10984}
!18 = !{!6, !13, i64 10992}
!19 = !{!6, !7, i64 16}
!20 = !{!6, !12, i64 40}
!21 = !{!6, !13, i64 48}
!22 = !{!23, !7, i64 56}
!23 = !{!"_ENetPeer", !15, i64 0, !12, i64 16, !11, i64 24, !11, i64 26, !7, i64 28, !8, i64 32, !8, i64 33, !10, i64 36, !12, i64 48, !7, i64 56, !12, i64 64, !13, i64 72, !7, i64 80, !7, i64 84, !7, i64 88, !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, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !7, i64 180, !7, i64 184, !7, i64 188, !7, i64 192, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !11, i64 220, !14, i64 224, !14, i64 240, !14, i64 256, !14, i64 272, !14, i64 288, !14, i64 304, !7, i64 320, !11, i64 324, !11, i64 326, !8, i64 328, !7, i64 456, !13, i64 464}
!24 = !{!23, !7, i64 100}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!23, !7, i64 80}
!28 = !{!23, !7, i64 92}
!29 = !{!23, !7, i64 144}
!30 = !{!23, !7, i64 140}
!31 = !{!23, !7, i64 96}
!32 = distinct !{!32, !26}
!33 = distinct !{!33, !26}
!34 = distinct !{!34, !26}
!35 = !{!6, !7, i64 32}
!36 = !{!6, !7, i64 12}
!37 = !{!23, !7, i64 88}
!38 = !{!23, !7, i64 84}
!39 = distinct !{!39, !26}
!40 = distinct !{!40, !26}
!41 = !{!8, !8, i64 0}
!42 = distinct !{!42, !26}


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