; LLVM IR from microsoft/ntttcp-for-linux :: src (udpstream)

; 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.sockaddr_in = type { i16, i16, %struct.in_addr, [8 x i8] }
%struct.in_addr = type { i32 }
%union.__CONST_SOCKADDR_ARG = type { ptr }
%struct.ntttcp_stream_client = type { ptr, i32, i32, ptr, i32, i32, i32, i64, i64, i64, i8, i8, i8, i8, i8, i32, i32, i64 }
%struct.hostent = type { ptr, ptr, i32, i32, ptr }

@__const.run_ntttcp_sender_udp4_stream.sockfds = external hidden unnamed_addr constant [1 x i32], align 4
@.str.2 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [39 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

; Function Attrs: nounwind uwtable
define dso_local ptr @run_ntttcp_sender_udp4_stream(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca [1 x i32], align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca %struct.sockaddr_in, align 4
  %14 = alloca %struct.sockaddr_in, align 4
  %15 = alloca i32, align 4
  %16 = alloca %union.__CONST_SOCKADDR_ARG, align 8
  %17 = alloca i32, align 4
  %18 = alloca %union.__CONST_SOCKADDR_ARG, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #9
  store ptr null, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #9
  store i32 0, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  store i32 0, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  store i32 0, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  store i32 0, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 @__const.run_ntttcp_sender_udp4_stream.sockfds, i64 4, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #9
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #9
  store i32 16, ptr %15, align 4, !tbaa !9
  %21 = load i32, ptr %15, align 4, !tbaa !9
  %22 = sext i32 %21 to i64
  call void @llvm.memset.p0.i64(ptr align 4 %14, i8 0, i64 %22, i1 false)
  %23 = load ptr, ptr %2, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %23, i32 0, i32 1
  %25 = load i32, ptr %24, align 8, !tbaa !11
  %26 = trunc i32 %25 to i16
  %27 = getelementptr inbounds %struct.sockaddr_in, ptr %14, i32 0, i32 0
  store i16 %26, ptr %27, align 4, !tbaa !15
  %28 = load ptr, ptr %2, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %28, i32 0, i32 4
  %30 = load i32, ptr %29, align 8, !tbaa !19
  %31 = trunc i32 %30 to i16
  %32 = call zeroext i16 @__bswap_16(i16 noundef zeroext %31)
  %33 = getelementptr inbounds %struct.sockaddr_in, ptr %14, i32 0, i32 1
  store i16 %32, ptr %33, align 2, !tbaa !20
  %34 = call ptr @__ctype_b_loc() #10
  %35 = load ptr, ptr %34, align 8, !tbaa !5
  %36 = load ptr, ptr %2, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %36, i32 0, i32 3
  %38 = load ptr, ptr %37, align 8, !tbaa !21
  %39 = getelementptr inbounds i8, ptr %38, i64 0
  %40 = load i8, ptr %39, align 1, !tbaa !22
  %41 = sext i8 %40 to i32
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds i16, ptr %35, i64 %42
  %44 = load i16, ptr %43, align 2, !tbaa !23
  %45 = zext i16 %44 to i32
  %46 = and i32 %45, 1024
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %63

48:                                               ; preds = %1
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %49, i32 0, i32 3
  %51 = load ptr, ptr %50, align 8, !tbaa !21
  %52 = call ptr @gethostbyname(ptr noundef %51)
  store ptr %52, ptr %12, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.sockaddr_in, ptr %14, i32 0, i32 2
  %54 = load ptr, ptr %12, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.hostent, ptr %54, i32 0, i32 4
  %56 = load ptr, ptr %55, align 8, !tbaa !24
  %57 = getelementptr inbounds ptr, ptr %56, i64 0
  %58 = load ptr, ptr %57, align 8, !tbaa !5
  %59 = load ptr, ptr %12, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.hostent, ptr %59, i32 0, i32 3
  %61 = load i32, ptr %60, align 4, !tbaa !26
  %62 = sext i32 %61 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %53, ptr align 1 %58, i64 %62, i1 false)
  br label %70

63:                                               ; preds = %1
  %64 = load ptr, ptr %2, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %64, i32 0, i32 3
  %66 = load ptr, ptr %65, align 8, !tbaa !21
  %67 = call i32 @inet_addr(ptr noundef %66) #9
  %68 = getelementptr inbounds %struct.sockaddr_in, ptr %14, i32 0, i32 2
  %69 = getelementptr inbounds %struct.in_addr, ptr %68, i32 0, i32 0
  store i32 %67, ptr %69, align 4, !tbaa !27
  br label %70

70:                                               ; preds = %63, %48
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %71

71:                                               ; preds = %197, %70
  %72 = load i32, ptr %8, align 4, !tbaa !9
  %73 = load ptr, ptr %2, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %73, i32 0, i32 6
  %75 = load i32, ptr %74, align 8, !tbaa !28
  %76 = icmp ult i32 %72, %75
  br i1 %76, label %77, label %200

77:                                               ; preds = %71
  %78 = load ptr, ptr %2, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %78, i32 0, i32 1
  %80 = load i32, ptr %79, align 8, !tbaa !11
  %81 = load ptr, ptr %2, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %81, i32 0, i32 1
  %83 = load i32, ptr %82, align 8, !tbaa !11
  %84 = call i32 @socket(i32 noundef %80, i32 noundef %83, i32 noundef 0) #9
  store i32 %84, ptr %4, align 4, !tbaa !9
  %85 = icmp slt i32 %84, 0
  br i1 %85, label %86, label %90

86:                                               ; preds = %77
  call void @PRINT_ERR(ptr noundef @.str.2)
  %87 = load i32, ptr %8, align 4, !tbaa !9
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds [1 x i32], ptr %10, i64 0, i64 %88
  store i32 -1, ptr %89, align 4, !tbaa !9
  br label %197

90:                                               ; preds = %77
  %91 = load ptr, ptr %2, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %91, i32 0, i32 6
  %93 = load i32, ptr %92, align 8, !tbaa !28
  %94 = icmp ugt i32 %93, 1
  br i1 %94, label %95, label %106

95:                                               ; preds = %90
  %96 = load ptr, ptr %2, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %96, i32 0, i32 5
  %98 = load i32, ptr %97, align 4, !tbaa !29
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %100, label %106

100:                                              ; preds = %95
  %101 = load ptr, ptr %2, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %101, i32 0, i32 5
  %103 = load i32, ptr %102, align 4, !tbaa !29
  %104 = load i32, ptr %8, align 4, !tbaa !9
  %105 = add i32 %103, %104
  br label %110

106:                                              ; preds = %95, %90
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %107, i32 0, i32 5
  %109 = load i32, ptr %108, align 4, !tbaa !29
  br label %110

110:                                              ; preds = %106, %100
  %111 = phi i32 [ %105, %100 ], [ %109, %106 ]
  store i32 %111, ptr %11, align 4, !tbaa !9
  %112 = load i32, ptr %11, align 4, !tbaa !9
  %113 = trunc i32 %112 to i16
  %114 = call zeroext i16 @__bswap_16(i16 noundef zeroext %113)
  %115 = getelementptr inbounds %struct.sockaddr_in, ptr %13, i32 0, i32 1
  store i16 %114, ptr %115, align 2, !tbaa !20
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %116, i32 0, i32 1
  %118 = load i32, ptr %117, align 8, !tbaa !11
  %119 = trunc i32 %118 to i16
  %120 = getelementptr inbounds %struct.sockaddr_in, ptr %13, i32 0, i32 0
  store i16 %119, ptr %120, align 4, !tbaa !15
  %121 = load i32, ptr %4, align 4, !tbaa !9
  store ptr %13, ptr %16, align 8, !tbaa !22
  %122 = load i32, ptr %15, align 4, !tbaa !9
  %123 = getelementptr inbounds %union.__CONST_SOCKADDR_ARG, ptr %16, i32 0, i32 0
  %124 = load ptr, ptr %123, align 8
  %125 = call i32 @bind(i32 noundef %121, ptr %124, i32 noundef %122) #9
  store i32 %125, ptr %7, align 4, !tbaa !9
  %126 = icmp slt i32 %125, 0
  br i1 %126, label %127, label %142

127:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  %128 = load i32, ptr %4, align 4, !tbaa !9
  %129 = getelementptr inbounds %struct.sockaddr_in, ptr %13, i32 0, i32 2
  %130 = getelementptr inbounds %struct.in_addr, ptr %129, i32 0, i32 0
  %131 = load i32, ptr %130, align 4
  %132 = call ptr @inet_ntoa(i32 %131) #9
  %133 = load i32, ptr %11, align 4, !tbaa !9
  %134 = call ptr @__errno_location() #10
  %135 = load i32, ptr %134, align 4, !tbaa !9
  %136 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %3, ptr noundef @.str.3, i32 noundef %128, ptr noundef %132, i32 noundef %133, i32 noundef %135) #9
  store i32 %136, ptr %17, align 4, !tbaa !9
  %137 = load i32, ptr %17, align 4, !tbaa !9
  %138 = icmp slt i32 %137, 0
  br i1 %138, label %139, label %140

139:                                              ; preds = %127
  call void @PRINT_ERR(ptr noundef @.str.4)
  br label %140

140:                                              ; preds = %139, %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  call void @PRINT_INFO_FREE(ptr noundef %141)
  br label %142

142:                                              ; preds = %140, %110
  %143 = load ptr, ptr %2, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %143, i32 0, i32 9
  %145 = load i64, ptr %144, align 8, !tbaa !30
  %146 = icmp ne i64 %145, 0
  br i1 %146, label %147, label %150

147:                                              ; preds = %142
  %148 = load ptr, ptr %2, align 8, !tbaa !5
  %149 = load i32, ptr %4, align 4, !tbaa !9
  call void @enable_fq_rate_limit(ptr noundef %148, i32 noundef %149)
  br label %150

150:                                              ; preds = %147, %142
  %151 = load i32, ptr %4, align 4, !tbaa !9
  store ptr %14, ptr %18, align 8, !tbaa !22
  %152 = load i32, ptr %15, align 4, !tbaa !9
  %153 = getelementptr inbounds %union.__CONST_SOCKADDR_ARG, ptr %18, i32 0, i32 0
  %154 = load ptr, ptr %153, align 8
  %155 = call i32 @connect(i32 noundef %151, ptr %154, i32 noundef %152)
  %156 = icmp eq i32 %155, -1
  br i1 %156, label %157, label %173

157:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %158 = load i32, ptr %4, align 4, !tbaa !9
  %159 = load ptr, ptr %2, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %159, i32 0, i32 3
  %161 = load ptr, ptr %160, align 8, !tbaa !21
  %162 = load ptr, ptr %2, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %162, i32 0, i32 4
  %164 = load i32, ptr %163, align 8, !tbaa !19
  %165 = call ptr @__errno_location() #10
  %166 = load i32, ptr %165, align 4, !tbaa !9
  %167 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %3, ptr noundef @.str.5, i32 noundef %158, ptr noundef %161, i32 noundef %164, i32 noundef %166) #9
  store i32 %167, ptr %19, align 4, !tbaa !9
  %168 = load i32, ptr %19, align 4, !tbaa !9
  %169 = icmp slt i32 %168, 0
  br i1 %169, label %170, label %171

170:                                              ; preds = %157
  call void @PRINT_ERR(ptr noundef @.str.4)
  br label %171

171:                                              ; preds = %170, %157
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  %172 = load ptr, ptr %3, align 8, !tbaa !5
  call void @PRINT_ERR(ptr noundef %172)
  br label %197

173:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #9
  %174 = getelementptr inbounds %struct.sockaddr_in, ptr %13, i32 0, i32 1
  %175 = load i16, ptr %174, align 2, !tbaa !20
  %176 = call zeroext i16 @__bswap_16(i16 noundef zeroext %175)
  %177 = zext i16 %176 to i32
  %178 = load i32, ptr %4, align 4, !tbaa !9
  %179 = load ptr, ptr %2, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %179, i32 0, i32 3
  %181 = load ptr, ptr %180, align 8, !tbaa !21
  %182 = load ptr, ptr %2, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %182, i32 0, i32 4
  %184 = load i32, ptr %183, align 8, !tbaa !19
  %185 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef %3, ptr noundef @.str.6, i32 noundef %177, i32 noundef %178, ptr noundef %181, i32 noundef %184) #9
  store i32 %185, ptr %20, align 4, !tbaa !9
  %186 = load i32, ptr %20, align 4, !tbaa !9
  %187 = icmp slt i32 %186, 0
  br i1 %187, label %188, label %189

188:                                              ; preds = %173
  call void @PRINT_ERR(ptr noundef @.str.4)
  br label %189

189:                                              ; preds = %188, %173
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #9
  %190 = load ptr, ptr %3, align 8, !tbaa !5
  call void @PRINT_DBG_FREE(ptr noundef %190)
  %191 = load i32, ptr %4, align 4, !tbaa !9
  %192 = load i32, ptr %8, align 4, !tbaa !9
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds [1 x i32], ptr %10, i64 0, i64 %193
  store i32 %191, ptr %194, align 4, !tbaa !9
  %195 = load i32, ptr %9, align 4, !tbaa !9
  %196 = add i32 %195, 1
  store i32 %196, ptr %9, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %189, %171, %86
  %198 = load i32, ptr %8, align 4, !tbaa !9
  %199 = add i32 %198, 1
  store i32 %199, ptr %8, align 4, !tbaa !9
  br label %71, !llvm.loop !31

200:                                              ; preds = %71
  %201 = load i32, ptr %9, align 4, !tbaa !9
  %202 = icmp eq i32 %201, 0
  br i1 %202, label %203, label %204

203:                                              ; preds = %200
  br label %269

204:                                              ; preds = %200
  %205 = load i32, ptr %9, align 4, !tbaa !9
  %206 = load ptr, ptr %2, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %206, i32 0, i32 16
  store i32 %205, ptr %207, align 4, !tbaa !33
  call void @wait_light_on()
  %208 = load ptr, ptr %2, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %208, i32 0, i32 7
  %210 = load i64, ptr %209, align 8, !tbaa !34
  %211 = mul i64 %210, 1
  %212 = call noalias ptr @malloc(i64 noundef %211) #11
  store ptr %212, ptr %5, align 8, !tbaa !5
  %213 = icmp eq ptr %212, null
  br i1 %213, label %214, label %215

214:                                              ; preds = %204
  call void @PRINT_ERR(ptr noundef @.str.7)
  br label %269

215:                                              ; preds = %204
  %216 = load ptr, ptr %5, align 8, !tbaa !5
  %217 = load ptr, ptr %2, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %217, i32 0, i32 7
  %219 = load i64, ptr %218, align 8, !tbaa !34
  %220 = mul i64 %219, 1
  call void @llvm.memset.p0.i64(ptr align 1 %216, i8 66, i64 %220, i1 false)
  br label %221

221:                                              ; preds = %266, %229, %215
  %222 = call i32 @is_light_turned_on()
  %223 = icmp ne i32 %222, 0
  br i1 %223, label %224, label %267

224:                                              ; preds = %221
  %225 = load ptr, ptr %2, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %225, i32 0, i32 10
  %227 = load i8, ptr %226, align 8, !tbaa !35, !range !36, !noundef !37
  %228 = trunc i8 %227 to i1
  br i1 %228, label %229, label %230

229:                                              ; preds = %224
  br label %221, !llvm.loop !38

230:                                              ; preds = %224
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %231

231:                                              ; preds = %263, %230
  %232 = load i32, ptr %8, align 4, !tbaa !9
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %233, i32 0, i32 6
  %235 = load i32, ptr %234, align 8, !tbaa !28
  %236 = icmp ult i32 %232, %235
  br i1 %236, label %237, label %266

237:                                              ; preds = %231
  %238 = load i32, ptr %8, align 4, !tbaa !9
  %239 = zext i32 %238 to i64
  %240 = getelementptr inbounds [1 x i32], ptr %10, i64 0, i64 %239
  %241 = load i32, ptr %240, align 4, !tbaa !9
  store i32 %241, ptr %4, align 4, !tbaa !9
  %242 = load i32, ptr %4, align 4, !tbaa !9
  %243 = icmp slt i32 %242, 0
  br i1 %243, label %244, label %245

244:                                              ; preds = %237
  br label %263

245:                                              ; preds = %237
  %246 = load i32, ptr %4, align 4, !tbaa !9
  %247 = load ptr, ptr %5, align 8, !tbaa !5
  %248 = load ptr, ptr %2, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %248, i32 0, i32 7
  %250 = load i64, ptr %249, align 8, !tbaa !34
  %251 = call i64 @send(i32 noundef %246, ptr noundef %247, i64 noundef %250, i32 noundef 0)
  %252 = trunc i64 %251 to i32
  store i32 %252, ptr %6, align 4, !tbaa !9
  %253 = load i32, ptr %6, align 4, !tbaa !9
  %254 = icmp slt i32 %253, 0
  br i1 %254, label %255, label %256

255:                                              ; preds = %245
  br label %263

256:                                              ; preds = %245
  %257 = load i32, ptr %6, align 4, !tbaa !9
  %258 = sext i32 %257 to i64
  %259 = load ptr, ptr %2, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %259, i32 0, i32 17
  %261 = load i64, ptr %260, align 8, !tbaa !39
  %262 = add i64 %261, %258
  store i64 %262, ptr %260, align 8, !tbaa !39
  br label %263

263:                                              ; preds = %256, %255, %244
  %264 = load i32, ptr %8, align 4, !tbaa !9
  %265 = add i32 %264, 1
  store i32 %265, ptr %8, align 4, !tbaa !9
  br label %231, !llvm.loop !40

266:                                              ; preds = %231
  br label %221, !llvm.loop !38

267:                                              ; preds = %221
  %268 = load ptr, ptr %5, align 8, !tbaa !5
  call void @free(ptr noundef %268) #9
  br label %269

269:                                              ; preds = %267, %214, %203
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %270

270:                                              ; preds = %289, %269
  %271 = load i32, ptr %8, align 4, !tbaa !9
  %272 = load ptr, ptr %2, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.ntttcp_stream_client, ptr %272, i32 0, i32 6
  %274 = load i32, ptr %273, align 8, !tbaa !28
  %275 = icmp ult i32 %271, %274
  br i1 %275, label %276, label %292

276:                                              ; preds = %270
  %277 = load i32, ptr %8, align 4, !tbaa !9
  %278 = zext i32 %277 to i64
  %279 = getelementptr inbounds [1 x i32], ptr %10, i64 0, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = icmp sge i32 %280, 0
  br i1 %281, label %282, label %288

282:                                              ; preds = %276
  %283 = load i32, ptr %8, align 4, !tbaa !9
  %284 = zext i32 %283 to i64
  %285 = getelementptr inbounds [1 x i32], ptr %10, i64 0, i64 %284
  %286 = load i32, ptr %285, align 4, !tbaa !9
  %287 = call i32 @close(i32 noundef %286)
  br label %288

288:                                              ; preds = %282, %276
  br label %289

289:                                              ; preds = %288
  %290 = load i32, ptr %8, align 4, !tbaa !9
  %291 = add i32 %290, 1
  store i32 %291, ptr %8, align 4, !tbaa !9
  br label %270, !llvm.loop !41

292:                                              ; preds = %270
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #9
  ret ptr null
}

declare void @PRINT_ERR(ptr noundef) #2

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @__bswap_16(i16 noundef zeroext) #5

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() #6

declare ptr @gethostbyname(ptr noundef) #2

; Function Attrs: nounwind
declare i32 @inet_addr(ptr noundef) #7

; Function Attrs: nounwind
declare i32 @socket(i32 noundef, i32 noundef, i32 noundef) #7

; Function Attrs: nounwind
declare i32 @bind(i32 noundef, ptr, i32 noundef) #7

; Function Attrs: nounwind
declare i32 @asprintf(ptr noundef, ptr noundef, ...) #7

; Function Attrs: nounwind
declare ptr @inet_ntoa(i32) #7

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #6

declare void @PRINT_INFO_FREE(ptr noundef) #2

declare void @enable_fq_rate_limit(ptr noundef, i32 noundef) #2

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

declare void @PRINT_DBG_FREE(ptr noundef) #2

declare void @wait_light_on() #2

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

declare i32 @is_light_turned_on() #2

declare i64 @send(i32 noundef, ptr noundef, i64 noundef, i32 noundef) #2

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

declare i32 @close(i32 noundef) #2

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

!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 8}
!12 = !{!"ntttcp_stream_client", !6, i64 0, !10, i64 8, !10, i64 12, !6, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !14, i64 64, !14, i64 65, !14, i64 66, !14, i64 67, !14, i64 68, !10, i64 72, !10, i64 76, !13, i64 80}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_Bool", !7, i64 0}
!15 = !{!16, !17, i64 0}
!16 = !{!"sockaddr_in", !17, i64 0, !17, i64 2, !18, i64 4, !7, i64 8}
!17 = !{!"short", !7, i64 0}
!18 = !{!"in_addr", !10, i64 0}
!19 = !{!12, !10, i64 24}
!20 = !{!16, !17, i64 2}
!21 = !{!12, !6, i64 16}
!22 = !{!7, !7, i64 0}
!23 = !{!17, !17, i64 0}
!24 = !{!25, !6, i64 24}
!25 = !{!"hostent", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !6, i64 24}
!26 = !{!25, !10, i64 20}
!27 = !{!16, !10, i64 4}
!28 = !{!12, !10, i64 32}
!29 = !{!12, !10, i64 28}
!30 = !{!12, !13, i64 56}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!12, !10, i64 76}
!34 = !{!12, !13, i64 40}
!35 = !{!12, !14, i64 64}
!36 = !{i8 0, i8 2}
!37 = !{}
!38 = distinct !{!38, !32}
!39 = !{!12, !13, i64 80}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !32}


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

%struct.sockaddr_in = type { i16, i16, %struct.in_addr, [8 x i8] }
%struct.in_addr = type { i32 }

@__const.run_ntttcp_sender_udp4_stream.sockfds = external hidden unnamed_addr constant [1 x i32], align 4
@.str.2 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [72 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [39 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local noalias noundef ptr @run_ntttcp_sender_udp4_stream(ptr noundef %0) local_unnamed_addr #1 {
  %2 = alloca ptr, align 8
  %3 = alloca %struct.sockaddr_in, align 4
  %4 = alloca %struct.sockaddr_in, align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #10
  store ptr null, ptr %2, align 8, !tbaa !5
  %5 = load i32, ptr @__const.run_ntttcp_sender_udp4_stream.sockfds, align 4
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #10
  %6 = getelementptr inbounds i8, ptr %4, i64 4
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) %6, i8 0, i64 12, i1 false)
  %7 = getelementptr inbounds i8, ptr %0, i64 8
  %8 = load i32, ptr %7, align 8, !tbaa !9
  %9 = trunc i32 %8 to i16
  store i16 %9, ptr %4, align 4, !tbaa !14
  %10 = getelementptr inbounds i8, ptr %0, i64 24
  %11 = load i32, ptr %10, align 8, !tbaa !18
  %12 = trunc i32 %11 to i16
  %13 = tail call zeroext i16 @__bswap_16(i16 noundef zeroext %12)
  %14 = getelementptr inbounds i8, ptr %4, i64 2
  store i16 %13, ptr %14, align 2, !tbaa !19
  %15 = tail call ptr @__ctype_b_loc() #11
  %16 = load ptr, ptr %15, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %0, i64 16
  %18 = load ptr, ptr %17, align 8, !tbaa !20
  %19 = load i8, ptr %18, align 1, !tbaa !21
  %20 = sext i8 %19 to i64
  %21 = getelementptr inbounds i16, ptr %16, i64 %20
  %22 = load i16, ptr %21, align 2, !tbaa !22
  %23 = and i16 %22, 1024
  %.not = icmp eq i16 %23, 0
  %24 = getelementptr inbounds i8, ptr %4, i64 4
  br i1 %.not, label %33, label %25

25:                                               ; preds = %1
  %26 = tail call ptr @gethostbyname(ptr noundef nonnull %18) #10
  %27 = getelementptr inbounds i8, ptr %26, i64 24
  %28 = load ptr, ptr %27, align 8, !tbaa !23
  %29 = load ptr, ptr %28, align 8, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %26, i64 20
  %31 = load i32, ptr %30, align 4, !tbaa !25
  %32 = sext i32 %31 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %24, ptr align 1 %29, i64 %32, i1 false)
  br label %35

33:                                               ; preds = %1
  %34 = tail call i32 @inet_addr(ptr noundef nonnull %18) #10
  store i32 %34, ptr %24, align 4, !tbaa !26
  br label %35

35:                                               ; preds = %33, %25
  %36 = getelementptr inbounds i8, ptr %0, i64 32
  %37 = load i32, ptr %36, align 8, !tbaa !27
  %.not94 = icmp eq i32 %37, 0
  br i1 %.not94, label %._crit_edge93, label %.lr.ph

.lr.ph:                                           ; preds = %35
  %38 = getelementptr inbounds i8, ptr %0, i64 28
  %39 = getelementptr inbounds i8, ptr %3, i64 2
  %40 = getelementptr inbounds i8, ptr %3, i64 4
  %41 = getelementptr inbounds i8, ptr %0, i64 56
  br label %42

42:                                               ; preds = %.lr.ph, %96
  %.081 = phi i32 [ 0, %.lr.ph ], [ %97, %96 ]
  %.06680 = phi i32 [ 0, %.lr.ph ], [ %.167, %96 ]
  %.sroa.0.079 = phi i32 [ %5, %.lr.ph ], [ %.sroa.0.0.lcssa.fr, %96 ]
  %43 = load i32, ptr %7, align 8, !tbaa !9
  %44 = call i32 @socket(i32 noundef %43, i32 noundef %43, i32 noundef 0) #10
  %45 = icmp slt i32 %44, 0
  br i1 %45, label %46, label %47

46:                                               ; preds = %42
  call void @PRINT_ERR(ptr noundef nonnull @.str.2) #10
  br label %96

47:                                               ; preds = %42
  %48 = load i32, ptr %36, align 8, !tbaa !27
  %49 = icmp ugt i32 %48, 1
  %.pre = load i32, ptr %38, align 4, !tbaa !28
  %.not76 = icmp eq i32 %.pre, 0
  %50 = add i32 %.pre, %.081
  %spec.select = select i1 %.not76, i32 0, i32 %50
  %51 = select i1 %49, i32 %spec.select, i32 %.pre
  %52 = trunc i32 %51 to i16
  %53 = call zeroext i16 @__bswap_16(i16 noundef zeroext %52)
  store i16 %53, ptr %39, align 2, !tbaa !19
  %54 = load i32, ptr %7, align 8, !tbaa !9
  %55 = trunc i32 %54 to i16
  store i16 %55, ptr %3, align 4, !tbaa !14
  %56 = call i32 @bind(i32 noundef %44, ptr nonnull %3, i32 noundef 16) #10
  %57 = icmp slt i32 %56, 0
  br i1 %57, label %58, label %68

58:                                               ; preds = %47
  %59 = load i32, ptr %40, align 4
  %60 = call ptr @inet_ntoa(i32 %59) #10
  %61 = tail call ptr @__errno_location() #11
  %62 = load i32, ptr %61, align 4, !tbaa !29
  %63 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %2, ptr noundef nonnull @.str.3, i32 noundef %44, ptr noundef %60, i32 noundef %51, i32 noundef %62) #10
  %64 = icmp slt i32 %63, 0
  br i1 %64, label %65, label %66

65:                                               ; preds = %58
  call void @PRINT_ERR(ptr noundef nonnull @.str.4) #10
  br label %66

66:                                               ; preds = %65, %58
  %67 = load ptr, ptr %2, align 8, !tbaa !5
  call void @PRINT_INFO_FREE(ptr noundef %67) #10
  br label %68

68:                                               ; preds = %66, %47
  %69 = load i64, ptr %41, align 8, !tbaa !30
  %.not77 = icmp eq i64 %69, 0
  br i1 %.not77, label %71, label %70

70:                                               ; preds = %68
  call void @enable_fq_rate_limit(ptr noundef nonnull %0, i32 noundef %44) #10
  br label %71

71:                                               ; preds = %70, %68
  %72 = call i32 @connect(i32 noundef %44, ptr nonnull %4, i32 noundef 16) #10
  %73 = icmp eq i32 %72, -1
  br i1 %73, label %74, label %84

74:                                               ; preds = %71
  %75 = load ptr, ptr %17, align 8, !tbaa !20
  %76 = load i32, ptr %10, align 8, !tbaa !18
  %77 = tail call ptr @__errno_location() #11
  %78 = load i32, ptr %77, align 4, !tbaa !29
  %79 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %2, ptr noundef nonnull @.str.5, i32 noundef %44, ptr noundef %75, i32 noundef %76, i32 noundef %78) #10
  %80 = icmp slt i32 %79, 0
  br i1 %80, label %81, label %82

81:                                               ; preds = %74
  call void @PRINT_ERR(ptr noundef nonnull @.str.4) #10
  br label %82

82:                                               ; preds = %81, %74
  %83 = load ptr, ptr %2, align 8, !tbaa !5
  call void @PRINT_ERR(ptr noundef %83) #10
  br label %96

84:                                               ; preds = %71
  %85 = load i16, ptr %39, align 2, !tbaa !19
  %86 = call zeroext i16 @__bswap_16(i16 noundef zeroext %85)
  %87 = zext i16 %86 to i32
  %88 = load ptr, ptr %17, align 8, !tbaa !20
  %89 = load i32, ptr %10, align 8, !tbaa !18
  %90 = call i32 (ptr, ptr, ...) @asprintf(ptr noundef nonnull %2, ptr noundef nonnull @.str.6, i32 noundef %87, i32 noundef %44, ptr noundef %88, i32 noundef %89) #10
  %91 = icmp slt i32 %90, 0
  br i1 %91, label %92, label %93

92:                                               ; preds = %84
  call void @PRINT_ERR(ptr noundef nonnull @.str.4) #10
  br label %93

93:                                               ; preds = %92, %84
  %94 = load ptr, ptr %2, align 8, !tbaa !5
  call void @PRINT_DBG_FREE(ptr noundef %94) #10
  %95 = add i32 %.06680, 1
  br label %96

96:                                               ; preds = %93, %82, %46
  %.sroa.0.1 = phi i32 [ -1, %46 ], [ %.sroa.0.079, %82 ], [ %44, %93 ]
  %.167 = phi i32 [ %.06680, %46 ], [ %.06680, %82 ], [ %95, %93 ]
  %.sroa.0.0.lcssa.fr = freeze i32 %.sroa.0.1
  %97 = add nuw i32 %.081, 1
  %98 = load i32, ptr %36, align 8, !tbaa !27
  %99 = icmp ult i32 %97, %98
  br i1 %99, label %42, label %._crit_edge, !llvm.loop !31

._crit_edge:                                      ; preds = %96
  %100 = icmp eq i32 %.167, 0
  br i1 %100, label %129, label %101

101:                                              ; preds = %._crit_edge
  %102 = getelementptr inbounds i8, ptr %0, i64 76
  store i32 %.167, ptr %102, align 4, !tbaa !33
  call void @wait_light_on() #10
  %103 = getelementptr inbounds i8, ptr %0, i64 40
  %104 = load i64, ptr %103, align 8, !tbaa !34
  %105 = call noalias ptr @malloc(i64 noundef %104) #12
  %106 = icmp eq ptr %105, null
  br i1 %106, label %107, label %108

107:                                              ; preds = %101
  call void @PRINT_ERR(ptr noundef nonnull @.str.7) #10
  br label %129

108:                                              ; preds = %101
  call void @llvm.memset.p0.i64(ptr nonnull align 1 %105, i8 66, i64 %104, i1 false)
  %109 = call i32 @is_light_turned_on() #10
  %.not7486 = icmp eq i32 %109, 0
  br i1 %.not7486, label %._crit_edge89, label %.lr.ph88

.lr.ph88:                                         ; preds = %108
  %110 = getelementptr inbounds i8, ptr %0, i64 64
  %111 = icmp slt i32 %.sroa.0.0.lcssa.fr, 0
  %112 = getelementptr inbounds i8, ptr %0, i64 80
  br i1 %111, label %.lr.ph88.split.us, label %.lr.ph88.split

.lr.ph88.split.us:                                ; preds = %.lr.ph88, %.lr.ph88.split.us
  %113 = call i32 @is_light_turned_on() #10
  %.not74.us = icmp eq i32 %113, 0
  br i1 %.not74.us, label %._crit_edge89, label %.lr.ph88.split.us, !llvm.loop !35

.lr.ph88.split:                                   ; preds = %.lr.ph88, %.backedge
  %114 = load i8, ptr %110, align 8, !tbaa !36, !range !37, !noundef !38
  %115 = trunc nuw i8 %114 to i1
  br i1 %115, label %.backedge, label %.preheader

.backedge:                                        ; preds = %125, %.preheader, %.lr.ph88.split
  %116 = call i32 @is_light_turned_on() #10
  %.not74 = icmp eq i32 %116, 0
  br i1 %.not74, label %._crit_edge89, label %.lr.ph88.split, !llvm.loop !35

.preheader:                                       ; preds = %.lr.ph88.split
  %117 = load i32, ptr %36, align 8, !tbaa !27
  %.not95 = icmp eq i32 %117, 0
  br i1 %.not95, label %.backedge, label %.lr.ph85, !llvm.loop !35

.lr.ph85:                                         ; preds = %.preheader, %125
  %.184 = phi i32 [ %126, %125 ], [ 0, %.preheader ]
  %118 = load i64, ptr %103, align 8, !tbaa !34
  %119 = call i64 @send(i32 noundef %.sroa.0.0.lcssa.fr, ptr noundef nonnull %105, i64 noundef %118, i32 noundef 0) #10
  %120 = and i64 %119, 2147483648
  %.not75 = icmp eq i64 %120, 0
  br i1 %.not75, label %121, label %125

121:                                              ; preds = %.lr.ph85
  %122 = and i64 %119, 2147483647
  %123 = load i64, ptr %112, align 8, !tbaa !39
  %124 = add i64 %123, %122
  store i64 %124, ptr %112, align 8, !tbaa !39
  br label %125

125:                                              ; preds = %.lr.ph85, %121
  %126 = add nuw i32 %.184, 1
  %127 = load i32, ptr %36, align 8, !tbaa !27
  %128 = icmp ult i32 %126, %127
  br i1 %128, label %.lr.ph85, label %.backedge, !llvm.loop !40

._crit_edge89:                                    ; preds = %.backedge, %.lr.ph88.split.us, %108
  call void @free(ptr noundef %105) #10
  br label %129

129:                                              ; preds = %._crit_edge, %._crit_edge89, %107
  %.pr = load i32, ptr %36, align 8, !tbaa !27
  %.not97 = icmp ne i32 %.pr, 0
  %130 = icmp sgt i32 %.sroa.0.0.lcssa.fr, -1
  %or.cond = and i1 %.not97, %130
  br i1 %or.cond, label %.lr.ph92.split.us, label %._crit_edge93

.lr.ph92.split.us:                                ; preds = %129, %.lr.ph92.split.us
  %.290.us = phi i32 [ %132, %.lr.ph92.split.us ], [ 0, %129 ]
  %131 = call i32 @close(i32 noundef %.sroa.0.0.lcssa.fr) #10
  %132 = add nuw i32 %.290.us, 1
  %133 = load i32, ptr %36, align 8, !tbaa !27
  %134 = icmp ult i32 %132, %133
  br i1 %134, label %.lr.ph92.split.us, label %._crit_edge93, !llvm.loop !41

._crit_edge93:                                    ; preds = %.lr.ph92.split.us, %35, %129
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #10
  ret ptr null
}

declare void @PRINT_ERR(ptr noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @__bswap_16(i16 noundef zeroext) local_unnamed_addr #5

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__ctype_b_loc() local_unnamed_addr #6

declare ptr @gethostbyname(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @inet_addr(ptr noundef) local_unnamed_addr #7

; Function Attrs: nounwind
declare i32 @socket(i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #7

; Function Attrs: nounwind
declare i32 @bind(i32 noundef, ptr, i32 noundef) local_unnamed_addr #7

; Function Attrs: nounwind
declare i32 @asprintf(ptr noundef, ptr noundef, ...) local_unnamed_addr #7

; Function Attrs: nounwind
declare ptr @inet_ntoa(i32) local_unnamed_addr #7

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #6

declare void @PRINT_INFO_FREE(ptr noundef) local_unnamed_addr #2

declare void @enable_fq_rate_limit(ptr noundef, i32 noundef) local_unnamed_addr #2

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

declare void @PRINT_DBG_FREE(ptr noundef) local_unnamed_addr #2

declare void @wait_light_on() local_unnamed_addr #2

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

declare i32 @is_light_turned_on() local_unnamed_addr #2

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

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

declare i32 @close(i32 noundef) local_unnamed_addr #2

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

!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, !11, i64 8}
!10 = !{!"ntttcp_stream_client", !6, i64 0, !11, i64 8, !11, i64 12, !6, i64 16, !11, i64 24, !11, i64 28, !11, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !13, i64 64, !13, i64 65, !13, i64 66, !13, i64 67, !13, i64 68, !11, i64 72, !11, i64 76, !12, i64 80}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!"_Bool", !7, i64 0}
!14 = !{!15, !16, i64 0}
!15 = !{!"sockaddr_in", !16, i64 0, !16, i64 2, !17, i64 4, !7, i64 8}
!16 = !{!"short", !7, i64 0}
!17 = !{!"in_addr", !11, i64 0}
!18 = !{!10, !11, i64 24}
!19 = !{!15, !16, i64 2}
!20 = !{!10, !6, i64 16}
!21 = !{!7, !7, i64 0}
!22 = !{!16, !16, i64 0}
!23 = !{!24, !6, i64 24}
!24 = !{!"hostent", !6, i64 0, !6, i64 8, !11, i64 16, !11, i64 20, !6, i64 24}
!25 = !{!24, !11, i64 20}
!26 = !{!15, !11, i64 4}
!27 = !{!10, !11, i64 32}
!28 = !{!10, !11, i64 28}
!29 = !{!11, !11, i64 0}
!30 = !{!10, !12, i64 56}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!10, !11, i64 76}
!34 = !{!10, !12, i64 40}
!35 = distinct !{!35, !32}
!36 = !{!10, !13, i64 64}
!37 = !{i8 0, i8 2}
!38 = !{}
!39 = !{!10, !12, i64 80}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !32}


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