; LLVM IR from Water-Melon/Melon :: src (mln_event)

; 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.timeval = type { i64, i64 }
%struct.mln_event_s = type { %union.pthread_mutex_t, %union.pthread_mutex_t, %union.pthread_mutex_t, ptr, ptr, i32, i32, %struct.fd_set, %struct.fd_set, %struct.fd_set, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%struct.fd_set = type { [16 x i64] }
%struct.mln_event_desc_s = type { ptr, ptr, ptr, ptr, i32, i32, %union.anon }
%union.anon = type { %struct.mln_event_fd_s }
%struct.mln_event_fd_s = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64 }

; 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: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @mln_event_dispatch(ptr noundef nonnull %0) #2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %struct.timeval, align 8
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  %20 = load ptr, ptr %2, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.mln_event_s, ptr %20, i32 0, i32 7
  store ptr %21, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %22 = load ptr, ptr %2, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.mln_event_s, ptr %22, i32 0, i32 8
  store ptr %23, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  %24 = load ptr, ptr %2, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.mln_event_s, ptr %24, i32 0, i32 9
  store ptr %25, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  br label %26

26:                                               ; preds = %477, %276, %267, %1
  br label %27

27:                                               ; preds = %26
  %28 = load ptr, ptr %2, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.mln_event_s, ptr %28, i32 0, i32 2
  %30 = call i32 @pthread_mutex_trylock(ptr noundef %29) #6
  %31 = icmp ne i32 %30, 0
  br i1 %31, label %53, label %32

32:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %33 = load ptr, ptr %2, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.mln_event_s, ptr %33, i32 0, i32 3
  %35 = load ptr, ptr %34, align 8, !tbaa !9
  store ptr %35, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %36 = load ptr, ptr %2, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.mln_event_s, ptr %36, i32 0, i32 4
  %38 = load ptr, ptr %37, align 8, !tbaa !13
  store ptr %38, ptr %12, align 8, !tbaa !5
  %39 = load ptr, ptr %11, align 8, !tbaa !5
  %40 = icmp ne ptr %39, null
  br i1 %40, label %41, label %48

41:                                               ; preds = %32
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.mln_event_s, ptr %42, i32 0, i32 2
  %44 = call i32 @pthread_mutex_unlock(ptr noundef %43) #6
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  %46 = load ptr, ptr %2, align 8, !tbaa !5
  %47 = load ptr, ptr %12, align 8, !tbaa !5
  call void %45(ptr noundef %46, ptr noundef %47)
  br label %52

48:                                               ; preds = %32
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.mln_event_s, ptr %49, i32 0, i32 2
  %51 = call i32 @pthread_mutex_unlock(ptr noundef %50) #6
  br label %52

52:                                               ; preds = %48, %41
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  br label %53

53:                                               ; preds = %52, %27
  %54 = load ptr, ptr %2, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.mln_event_s, ptr %54, i32 0, i32 5
  %56 = load i32, ptr %55, align 8
  %57 = and i32 %56, 1
  %58 = icmp ne i32 %57, 0
  br i1 %58, label %59, label %60

59:                                               ; preds = %53
  store i32 1, ptr %13, align 4
  br label %478

60:                                               ; preds = %53
  %61 = load ptr, ptr %2, align 8, !tbaa !5
  call void @mln_event_timer_process(ptr noundef %61)
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.mln_event_s, ptr %62, i32 0, i32 5
  %64 = load i32, ptr %63, align 8
  %65 = and i32 %64, 1
  %66 = icmp ne i32 %65, 0
  br i1 %66, label %67, label %68

67:                                               ; preds = %60
  store i32 1, ptr %13, align 4
  br label %478

68:                                               ; preds = %60
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  call void @mln_event_active_fd_process(ptr noundef %69)
  %70 = load ptr, ptr %2, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.mln_event_s, ptr %70, i32 0, i32 5
  %72 = load i32, ptr %71, align 8
  %73 = and i32 %72, 1
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %75, label %76

75:                                               ; preds = %68
  store i32 1, ptr %13, align 4
  br label %478

76:                                               ; preds = %68
  %77 = load ptr, ptr %2, align 8, !tbaa !5
  call void @mln_event_fd_timeout_process(ptr noundef %77)
  %78 = load ptr, ptr %2, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.mln_event_s, ptr %78, i32 0, i32 5
  %80 = load i32, ptr %79, align 8
  %81 = and i32 %80, 1
  %82 = icmp ne i32 %81, 0
  br i1 %82, label %83, label %84

83:                                               ; preds = %76
  store i32 1, ptr %13, align 4
  br label %478

84:                                               ; preds = %76
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  call void @mln_event_timer_process(ptr noundef %85)
  %86 = load ptr, ptr %2, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.mln_event_s, ptr %86, i32 0, i32 5
  %88 = load i32, ptr %87, align 8
  %89 = and i32 %88, 1
  %90 = icmp ne i32 %89, 0
  br i1 %90, label %91, label %92

91:                                               ; preds = %84
  store i32 1, ptr %13, align 4
  br label %478

92:                                               ; preds = %84
  %93 = load ptr, ptr %2, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.mln_event_s, ptr %93, i32 0, i32 6
  store i32 1, ptr %94, align 4, !tbaa !14
  br label %95

95:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %96 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %96, ptr %15, align 8, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !15
  br label %97

97:                                               ; preds = %107, %95
  %98 = load i32, ptr %14, align 4, !tbaa !15
  %99 = zext i32 %98 to i64
  %100 = icmp ult i64 %99, 16
  br i1 %100, label %101, label %110

101:                                              ; preds = %97
  %102 = load ptr, ptr %15, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.fd_set, ptr %102, i32 0, i32 0
  %104 = load i32, ptr %14, align 4, !tbaa !15
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds [16 x i64], ptr %103, i64 0, i64 %105
  store i64 0, ptr %106, align 8, !tbaa !16
  br label %107

107:                                              ; preds = %101
  %108 = load i32, ptr %14, align 4, !tbaa !15
  %109 = add i32 %108, 1
  store i32 %109, ptr %14, align 4, !tbaa !15
  br label %97, !llvm.loop !18

110:                                              ; preds = %97
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %111

111:                                              ; preds = %110
  br label %112

112:                                              ; preds = %111
  br label %113

113:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %114 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %114, ptr %17, align 8, !tbaa !5
  store i32 0, ptr %16, align 4, !tbaa !15
  br label %115

115:                                              ; preds = %125, %113
  %116 = load i32, ptr %16, align 4, !tbaa !15
  %117 = zext i32 %116 to i64
  %118 = icmp ult i64 %117, 16
  br i1 %118, label %119, label %128

119:                                              ; preds = %115
  %120 = load ptr, ptr %17, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.fd_set, ptr %120, i32 0, i32 0
  %122 = load i32, ptr %16, align 4, !tbaa !15
  %123 = zext i32 %122 to i64
  %124 = getelementptr inbounds [16 x i64], ptr %121, i64 0, i64 %123
  store i64 0, ptr %124, align 8, !tbaa !16
  br label %125

125:                                              ; preds = %119
  %126 = load i32, ptr %16, align 4, !tbaa !15
  %127 = add i32 %126, 1
  store i32 %127, ptr %16, align 4, !tbaa !15
  br label %115, !llvm.loop !20

128:                                              ; preds = %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129
  br label %131

131:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %132 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %132, ptr %19, align 8, !tbaa !5
  store i32 0, ptr %18, align 4, !tbaa !15
  br label %133

133:                                              ; preds = %143, %131
  %134 = load i32, ptr %18, align 4, !tbaa !15
  %135 = zext i32 %134 to i64
  %136 = icmp ult i64 %135, 16
  br i1 %136, label %137, label %146

137:                                              ; preds = %133
  %138 = load ptr, ptr %19, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.fd_set, ptr %138, i32 0, i32 0
  %140 = load i32, ptr %18, align 4, !tbaa !15
  %141 = zext i32 %140 to i64
  %142 = getelementptr inbounds [16 x i64], ptr %139, i64 0, i64 %141
  store i64 0, ptr %142, align 8, !tbaa !16
  br label %143

143:                                              ; preds = %137
  %144 = load i32, ptr %18, align 4, !tbaa !15
  %145 = add i32 %144, 1
  store i32 %145, ptr %18, align 4, !tbaa !15
  br label %133, !llvm.loop !21

146:                                              ; preds = %133
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %147

147:                                              ; preds = %146
  br label %148

148:                                              ; preds = %147
  %149 = load ptr, ptr %2, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.mln_event_s, ptr %149, i32 0, i32 0
  %151 = call i32 @pthread_mutex_trylock(ptr noundef %150) #6
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %163

153:                                              ; preds = %148
  %154 = getelementptr inbounds %struct.timeval, ptr %9, i32 0, i32 0
  store i64 0, ptr %154, align 8, !tbaa !22
  %155 = getelementptr inbounds %struct.timeval, ptr %9, i32 0, i32 1
  store i64 3000, ptr %155, align 8, !tbaa !24
  %156 = load ptr, ptr %2, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.mln_event_s, ptr %156, i32 0, i32 6
  %158 = load i32, ptr %157, align 4, !tbaa !14
  %159 = load ptr, ptr %6, align 8, !tbaa !5
  %160 = load ptr, ptr %7, align 8, !tbaa !5
  %161 = load ptr, ptr %8, align 8, !tbaa !5
  %162 = call i32 @select(i32 noundef %158, ptr noundef %159, ptr noundef %160, ptr noundef %161, ptr noundef %9)
  br label %477

163:                                              ; preds = %148
  %164 = load ptr, ptr %2, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.mln_event_s, ptr %164, i32 0, i32 11
  %166 = load ptr, ptr %165, align 8, !tbaa !25
  store ptr %166, ptr %5, align 8, !tbaa !5
  br label %167

167:                                              ; preds = %243, %163
  %168 = load ptr, ptr %5, align 8, !tbaa !5
  %169 = icmp ne ptr %168, null
  br i1 %169, label %170, label %247

170:                                              ; preds = %167
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.mln_event_desc_s, ptr %171, i32 0, i32 6
  %173 = getelementptr inbounds %struct.mln_event_fd_s, ptr %172, i32 0, i32 0
  %174 = load i32, ptr %173, align 8, !tbaa !26
  store i32 %174, ptr %4, align 4, !tbaa !15
  %175 = load ptr, ptr %5, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.mln_event_desc_s, ptr %175, i32 0, i32 5
  %177 = load i32, ptr %176, align 4, !tbaa !27
  %178 = and i32 %177, 1
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %180, label %193

180:                                              ; preds = %170
  %181 = load i32, ptr %4, align 4, !tbaa !15
  %182 = srem i32 %181, 64
  %183 = zext i32 %182 to i64
  %184 = shl i64 1, %183
  %185 = load ptr, ptr %6, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.fd_set, ptr %185, i32 0, i32 0
  %187 = load i32, ptr %4, align 4, !tbaa !15
  %188 = sdiv i32 %187, 64
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds [16 x i64], ptr %186, i64 0, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !16
  %192 = or i64 %191, %184
  store i64 %192, ptr %190, align 8, !tbaa !16
  br label %193

193:                                              ; preds = %180, %170
  %194 = load ptr, ptr %5, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.mln_event_desc_s, ptr %194, i32 0, i32 5
  %196 = load i32, ptr %195, align 4, !tbaa !27
  %197 = and i32 %196, 2
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %199, label %212

199:                                              ; preds = %193
  %200 = load i32, ptr %4, align 4, !tbaa !15
  %201 = srem i32 %200, 64
  %202 = zext i32 %201 to i64
  %203 = shl i64 1, %202
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.fd_set, ptr %204, i32 0, i32 0
  %206 = load i32, ptr %4, align 4, !tbaa !15
  %207 = sdiv i32 %206, 64
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds [16 x i64], ptr %205, i64 0, i64 %208
  %210 = load i64, ptr %209, align 8, !tbaa !16
  %211 = or i64 %210, %203
  store i64 %211, ptr %209, align 8, !tbaa !16
  br label %212

212:                                              ; preds = %199, %193
  %213 = load ptr, ptr %5, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.mln_event_desc_s, ptr %213, i32 0, i32 5
  %215 = load i32, ptr %214, align 4, !tbaa !27
  %216 = and i32 %215, 4
  %217 = icmp ne i32 %216, 0
  br i1 %217, label %218, label %231

218:                                              ; preds = %212
  %219 = load i32, ptr %4, align 4, !tbaa !15
  %220 = srem i32 %219, 64
  %221 = zext i32 %220 to i64
  %222 = shl i64 1, %221
  %223 = load ptr, ptr %8, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.fd_set, ptr %223, i32 0, i32 0
  %225 = load i32, ptr %4, align 4, !tbaa !15
  %226 = sdiv i32 %225, 64
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds [16 x i64], ptr %224, i64 0, i64 %227
  %229 = load i64, ptr %228, align 8, !tbaa !16
  %230 = or i64 %229, %222
  store i64 %230, ptr %228, align 8, !tbaa !16
  br label %231

231:                                              ; preds = %218, %212
  %232 = load i32, ptr %4, align 4, !tbaa !15
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.mln_event_s, ptr %233, i32 0, i32 6
  %235 = load i32, ptr %234, align 4, !tbaa !14
  %236 = icmp sge i32 %232, %235
  br i1 %236, label %237, label %242

237:                                              ; preds = %231
  %238 = load i32, ptr %4, align 4, !tbaa !15
  %239 = add nsw i32 %238, 1
  %240 = load ptr, ptr %2, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.mln_event_s, ptr %240, i32 0, i32 6
  store i32 %239, ptr %241, align 4, !tbaa !14
  br label %242

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

243:                                              ; preds = %242
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.mln_event_desc_s, ptr %244, i32 0, i32 1
  %246 = load ptr, ptr %245, align 8, !tbaa !29
  store ptr %246, ptr %5, align 8, !tbaa !5
  br label %167, !llvm.loop !30

247:                                              ; preds = %167
  %248 = getelementptr inbounds %struct.timeval, ptr %9, i32 0, i32 0
  store i64 0, ptr %248, align 8, !tbaa !22
  %249 = getelementptr inbounds %struct.timeval, ptr %9, i32 0, i32 1
  store i64 7000, ptr %249, align 8, !tbaa !24
  %250 = load ptr, ptr %2, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.mln_event_s, ptr %250, i32 0, i32 6
  %252 = load i32, ptr %251, align 4, !tbaa !14
  %253 = load ptr, ptr %6, align 8, !tbaa !5
  %254 = load ptr, ptr %7, align 8, !tbaa !5
  %255 = load ptr, ptr %8, align 8, !tbaa !5
  %256 = call i32 @select(i32 noundef %252, ptr noundef %253, ptr noundef %254, ptr noundef %255, ptr noundef %9)
  store i32 %256, ptr %3, align 4, !tbaa !15
  %257 = load i32, ptr %3, align 4, !tbaa !15
  %258 = icmp slt i32 %257, 0
  br i1 %258, label %259, label %273

259:                                              ; preds = %247
  %260 = call ptr @__errno_location() #7
  %261 = load i32, ptr %260, align 4, !tbaa !15
  %262 = icmp eq i32 %261, 4
  br i1 %262, label %267, label %263

263:                                              ; preds = %259
  %264 = call ptr @__errno_location() #7
  %265 = load i32, ptr %264, align 4, !tbaa !15
  %266 = icmp eq i32 %265, 12
  br i1 %266, label %267, label %271

267:                                              ; preds = %263, %259
  %268 = load ptr, ptr %2, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.mln_event_s, ptr %268, i32 0, i32 0
  %270 = call i32 @pthread_mutex_unlock(ptr noundef %269) #6
  br label %26

271:                                              ; preds = %263
  br label %272

272:                                              ; preds = %271
  br label %290

273:                                              ; preds = %247
  %274 = load i32, ptr %3, align 4, !tbaa !15
  %275 = icmp eq i32 %274, 0
  br i1 %275, label %276, label %289

276:                                              ; preds = %273
  %277 = load ptr, ptr %2, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.mln_event_s, ptr %277, i32 0, i32 0
  %279 = call i32 @pthread_mutex_unlock(ptr noundef %278) #6
  %280 = getelementptr inbounds %struct.timeval, ptr %9, i32 0, i32 0
  store i64 0, ptr %280, align 8, !tbaa !22
  %281 = getelementptr inbounds %struct.timeval, ptr %9, i32 0, i32 1
  store i64 3000, ptr %281, align 8, !tbaa !24
  %282 = load ptr, ptr %2, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.mln_event_s, ptr %282, i32 0, i32 6
  %284 = load i32, ptr %283, align 4, !tbaa !14
  %285 = load ptr, ptr %6, align 8, !tbaa !5
  %286 = load ptr, ptr %7, align 8, !tbaa !5
  %287 = load ptr, ptr %8, align 8, !tbaa !5
  %288 = call i32 @select(i32 noundef %284, ptr noundef %285, ptr noundef %286, ptr noundef %287, ptr noundef %9)
  br label %26

289:                                              ; preds = %273
  br label %290

290:                                              ; preds = %289, %272
  %291 = load ptr, ptr %2, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.mln_event_s, ptr %291, i32 0, i32 11
  %293 = load ptr, ptr %292, align 8, !tbaa !25
  store ptr %293, ptr %5, align 8, !tbaa !5
  br label %294

294:                                              ; preds = %469, %290
  %295 = load i32, ptr %3, align 4, !tbaa !15
  %296 = icmp sgt i32 %295, 0
  br i1 %296, label %297, label %300

297:                                              ; preds = %294
  %298 = load ptr, ptr %5, align 8, !tbaa !5
  %299 = icmp ne ptr %298, null
  br label %300

300:                                              ; preds = %297, %294
  %301 = phi i1 [ false, %294 ], [ %299, %297 ]
  br i1 %301, label %302, label %473

302:                                              ; preds = %300
  %303 = load ptr, ptr %5, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.mln_event_desc_s, ptr %303, i32 0, i32 6
  %305 = getelementptr inbounds %struct.mln_event_fd_s, ptr %304, i32 0, i32 2
  %306 = load i32, ptr %305, align 8
  %307 = lshr i32 %306, 2
  %308 = and i32 %307, 1
  %309 = icmp ne i32 %308, 0
  br i1 %309, label %325, label %310

310:                                              ; preds = %302
  %311 = load ptr, ptr %5, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.mln_event_desc_s, ptr %311, i32 0, i32 6
  %313 = getelementptr inbounds %struct.mln_event_fd_s, ptr %312, i32 0, i32 2
  %314 = load i32, ptr %313, align 8
  %315 = and i32 %314, 1
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %325, label %317

317:                                              ; preds = %310
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.mln_event_desc_s, ptr %318, i32 0, i32 6
  %320 = getelementptr inbounds %struct.mln_event_fd_s, ptr %319, i32 0, i32 2
  %321 = load i32, ptr %320, align 8
  %322 = lshr i32 %321, 1
  %323 = and i32 %322, 1
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %325, label %326

325:                                              ; preds = %317, %310, %302
  br label %469

326:                                              ; preds = %317
  store i32 0, ptr %10, align 4, !tbaa !15
  %327 = load ptr, ptr %5, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.mln_event_desc_s, ptr %327, i32 0, i32 6
  %329 = getelementptr inbounds %struct.mln_event_fd_s, ptr %328, i32 0, i32 0
  %330 = load i32, ptr %329, align 8, !tbaa !26
  store i32 %330, ptr %4, align 4, !tbaa !15
  %331 = load ptr, ptr %6, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.fd_set, ptr %331, i32 0, i32 0
  %333 = load i32, ptr %4, align 4, !tbaa !15
  %334 = sdiv i32 %333, 64
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds [16 x i64], ptr %332, i64 0, i64 %335
  %337 = load i64, ptr %336, align 8, !tbaa !16
  %338 = load i32, ptr %4, align 4, !tbaa !15
  %339 = srem i32 %338, 64
  %340 = zext i32 %339 to i64
  %341 = shl i64 1, %340
  %342 = and i64 %337, %341
  %343 = icmp ne i64 %342, 0
  br i1 %343, label %344, label %371

344:                                              ; preds = %326
  %345 = load ptr, ptr %5, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.mln_event_desc_s, ptr %345, i32 0, i32 6
  %347 = getelementptr inbounds %struct.mln_event_fd_s, ptr %346, i32 0, i32 1
  %348 = load i32, ptr %347, align 4, !tbaa !26
  %349 = or i32 %348, 1
  store i32 %349, ptr %347, align 4, !tbaa !26
  %350 = load ptr, ptr %5, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.mln_event_desc_s, ptr %350, i32 0, i32 6
  %352 = getelementptr inbounds %struct.mln_event_fd_s, ptr %351, i32 0, i32 2
  %353 = load i32, ptr %352, align 8
  %354 = lshr i32 %353, 3
  %355 = and i32 %354, 1
  %356 = icmp eq i32 %355, 1
  br i1 %356, label %357, label %368

357:                                              ; preds = %344
  %358 = load ptr, ptr %5, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.mln_event_desc_s, ptr %358, i32 0, i32 5
  %360 = load i32, ptr %359, align 4, !tbaa !27
  %361 = and i32 %360, -2
  store i32 %361, ptr %359, align 4, !tbaa !27
  %362 = load ptr, ptr %5, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.mln_event_desc_s, ptr %362, i32 0, i32 6
  %364 = getelementptr inbounds %struct.mln_event_fd_s, ptr %363, i32 0, i32 2
  %365 = load i32, ptr %364, align 8
  %366 = and i32 %365, -9
  %367 = or i32 %366, 0
  store i32 %367, ptr %364, align 8
  br label %368

368:                                              ; preds = %357, %344
  %369 = load i32, ptr %3, align 4, !tbaa !15
  %370 = add nsw i32 %369, -1
  store i32 %370, ptr %3, align 4, !tbaa !15
  store i32 1, ptr %10, align 4, !tbaa !15
  br label %371

371:                                              ; preds = %368, %326
  %372 = load ptr, ptr %7, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.fd_set, ptr %372, i32 0, i32 0
  %374 = load i32, ptr %4, align 4, !tbaa !15
  %375 = sdiv i32 %374, 64
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds [16 x i64], ptr %373, i64 0, i64 %376
  %378 = load i64, ptr %377, align 8, !tbaa !16
  %379 = load i32, ptr %4, align 4, !tbaa !15
  %380 = srem i32 %379, 64
  %381 = zext i32 %380 to i64
  %382 = shl i64 1, %381
  %383 = and i64 %378, %382
  %384 = icmp ne i64 %383, 0
  br i1 %384, label %385, label %412

385:                                              ; preds = %371
  %386 = load ptr, ptr %5, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.mln_event_desc_s, ptr %386, i32 0, i32 6
  %388 = getelementptr inbounds %struct.mln_event_fd_s, ptr %387, i32 0, i32 1
  %389 = load i32, ptr %388, align 4, !tbaa !26
  %390 = or i32 %389, 2
  store i32 %390, ptr %388, align 4, !tbaa !26
  %391 = load ptr, ptr %5, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.mln_event_desc_s, ptr %391, i32 0, i32 6
  %393 = getelementptr inbounds %struct.mln_event_fd_s, ptr %392, i32 0, i32 2
  %394 = load i32, ptr %393, align 8
  %395 = lshr i32 %394, 4
  %396 = and i32 %395, 1
  %397 = icmp eq i32 %396, 1
  br i1 %397, label %398, label %409

398:                                              ; preds = %385
  %399 = load ptr, ptr %5, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.mln_event_desc_s, ptr %399, i32 0, i32 5
  %401 = load i32, ptr %400, align 4, !tbaa !27
  %402 = and i32 %401, -3
  store i32 %402, ptr %400, align 4, !tbaa !27
  %403 = load ptr, ptr %5, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.mln_event_desc_s, ptr %403, i32 0, i32 6
  %405 = getelementptr inbounds %struct.mln_event_fd_s, ptr %404, i32 0, i32 2
  %406 = load i32, ptr %405, align 8
  %407 = and i32 %406, -17
  %408 = or i32 %407, 0
  store i32 %408, ptr %405, align 8
  br label %409

409:                                              ; preds = %398, %385
  %410 = load i32, ptr %3, align 4, !tbaa !15
  %411 = add nsw i32 %410, -1
  store i32 %411, ptr %3, align 4, !tbaa !15
  store i32 1, ptr %10, align 4, !tbaa !15
  br label %412

412:                                              ; preds = %409, %371
  %413 = load ptr, ptr %8, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.fd_set, ptr %413, i32 0, i32 0
  %415 = load i32, ptr %4, align 4, !tbaa !15
  %416 = sdiv i32 %415, 64
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds [16 x i64], ptr %414, i64 0, i64 %417
  %419 = load i64, ptr %418, align 8, !tbaa !16
  %420 = load i32, ptr %4, align 4, !tbaa !15
  %421 = srem i32 %420, 64
  %422 = zext i32 %421 to i64
  %423 = shl i64 1, %422
  %424 = and i64 %419, %423
  %425 = icmp ne i64 %424, 0
  br i1 %425, label %426, label %453

426:                                              ; preds = %412
  %427 = load ptr, ptr %5, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.mln_event_desc_s, ptr %427, i32 0, i32 6
  %429 = getelementptr inbounds %struct.mln_event_fd_s, ptr %428, i32 0, i32 1
  %430 = load i32, ptr %429, align 4, !tbaa !26
  %431 = or i32 %430, 4
  store i32 %431, ptr %429, align 4, !tbaa !26
  %432 = load ptr, ptr %5, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.mln_event_desc_s, ptr %432, i32 0, i32 6
  %434 = getelementptr inbounds %struct.mln_event_fd_s, ptr %433, i32 0, i32 2
  %435 = load i32, ptr %434, align 8
  %436 = lshr i32 %435, 5
  %437 = and i32 %436, 1
  %438 = icmp eq i32 %437, 1
  br i1 %438, label %439, label %450

439:                                              ; preds = %426
  %440 = load ptr, ptr %5, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.mln_event_desc_s, ptr %440, i32 0, i32 5
  %442 = load i32, ptr %441, align 4, !tbaa !27
  %443 = and i32 %442, -5
  store i32 %443, ptr %441, align 4, !tbaa !27
  %444 = load ptr, ptr %5, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.mln_event_desc_s, ptr %444, i32 0, i32 6
  %446 = getelementptr inbounds %struct.mln_event_fd_s, ptr %445, i32 0, i32 2
  %447 = load i32, ptr %446, align 8
  %448 = and i32 %447, -33
  %449 = or i32 %448, 0
  store i32 %449, ptr %446, align 8
  br label %450

450:                                              ; preds = %439, %426
  %451 = load i32, ptr %3, align 4, !tbaa !15
  %452 = add nsw i32 %451, -1
  store i32 %452, ptr %3, align 4, !tbaa !15
  store i32 1, ptr %10, align 4, !tbaa !15
  br label %453

453:                                              ; preds = %450, %412
  %454 = load i32, ptr %10, align 4, !tbaa !15
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %468

456:                                              ; preds = %453
  %457 = load ptr, ptr %2, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.mln_event_s, ptr %457, i32 0, i32 13
  %459 = load ptr, ptr %2, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.mln_event_s, ptr %459, i32 0, i32 14
  %461 = load ptr, ptr %5, align 8, !tbaa !5
  call void @ev_fd_active_chain_add(ptr noundef %458, ptr noundef %460, ptr noundef %461)
  %462 = load ptr, ptr %5, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.mln_event_desc_s, ptr %462, i32 0, i32 6
  %464 = getelementptr inbounds %struct.mln_event_fd_s, ptr %463, i32 0, i32 2
  %465 = load i32, ptr %464, align 8
  %466 = and i32 %465, -5
  %467 = or i32 %466, 4
  store i32 %467, ptr %464, align 8
  br label %468

468:                                              ; preds = %456, %453
  br label %469

469:                                              ; preds = %468, %325
  %470 = load ptr, ptr %5, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.mln_event_desc_s, ptr %470, i32 0, i32 1
  %472 = load ptr, ptr %471, align 8, !tbaa !29
  store ptr %472, ptr %5, align 8, !tbaa !5
  br label %294, !llvm.loop !31

473:                                              ; preds = %300
  %474 = load ptr, ptr %2, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.mln_event_s, ptr %474, i32 0, i32 0
  %476 = call i32 @pthread_mutex_unlock(ptr noundef %475) #6
  br label %477

477:                                              ; preds = %473, %153
  br label %26

478:                                              ; preds = %91, %83, %75, %67, %59
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  ret void
}

; Function Attrs: nounwind
declare i32 @pthread_mutex_trylock(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @mln_event_timer_process(ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @mln_event_active_fd_process(ptr noundef nonnull) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @mln_event_fd_timeout_process(ptr noundef) #3

declare i32 @select(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @ev_fd_active_chain_add(ptr noundef, ptr noundef, ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 120}
!10 = !{!"mln_event_s", !7, i64 0, !7, i64 40, !7, i64 80, !6, i64 120, !6, i64 128, !11, i64 136, !11, i64 136, !11, i64 140, !12, i64 144, !12, i64 272, !12, i64 400, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576}
!11 = !{!"int", !7, i64 0}
!12 = !{!"", !7, i64 0}
!13 = !{!10, !6, i64 128}
!14 = !{!10, !11, i64 140}
!15 = !{!11, !11, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = !{!23, !17, i64 0}
!23 = !{!"timeval", !17, i64 0, !17, i64 8}
!24 = !{!23, !17, i64 8}
!25 = !{!10, !6, i64 536}
!26 = !{!7, !7, i64 0}
!27 = !{!28, !11, i64 36}
!28 = !{!"mln_event_desc_s", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !11, i64 32, !11, i64 36, !7, i64 40}
!29 = !{!28, !6, i64 8}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !19}


; 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.timeval = type { i64, i64 }

; 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: nounwind
declare i32 @pthread_mutex_unlock(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @mln_event_dispatch(ptr noundef nonnull %0) local_unnamed_addr #2 {
  %2 = alloca %struct.timeval, align 8
  %3 = getelementptr i8, ptr %0, i64 144
  %4 = getelementptr i8, ptr %0, i64 272
  %5 = getelementptr i8, ptr %0, i64 400
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2) #7
  %6 = getelementptr inbounds i8, ptr %0, i64 80
  %7 = getelementptr inbounds i8, ptr %0, i64 120
  %8 = getelementptr inbounds i8, ptr %0, i64 128
  %9 = getelementptr inbounds i8, ptr %0, i64 136
  %10 = getelementptr inbounds i8, ptr %0, i64 140
  %11 = getelementptr inbounds i8, ptr %2, i64 8
  %12 = getelementptr inbounds i8, ptr %0, i64 536
  %13 = getelementptr inbounds i8, ptr %0, i64 552
  %14 = getelementptr inbounds i8, ptr %0, i64 560
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %1
  %15 = call i32 @pthread_mutex_trylock(ptr noundef nonnull %6) #7
  %.not = icmp eq i32 %15, 0
  br i1 %.not, label %16, label %23

16:                                               ; preds = %.backedge
  %17 = load ptr, ptr %7, align 8, !tbaa !5
  %.not126 = icmp eq ptr %17, null
  br i1 %.not126, label %21, label %18

18:                                               ; preds = %16
  %19 = load ptr, ptr %8, align 8, !tbaa !12
  %20 = call i32 @pthread_mutex_unlock(ptr noundef nonnull %6) #7
  call void %17(ptr noundef nonnull %0, ptr noundef %19) #7
  br label %23

21:                                               ; preds = %16
  %22 = call i32 @pthread_mutex_unlock(ptr noundef nonnull %6) #7
  br label %23

23:                                               ; preds = %18, %21, %.backedge
  %24 = load i32, ptr %9, align 8
  %25 = and i32 %24, 1
  %.not127 = icmp eq i32 %25, 0
  br i1 %.not127, label %26, label %173

26:                                               ; preds = %23
  call void @mln_event_timer_process(ptr noundef nonnull %0)
  %27 = load i32, ptr %9, align 8
  %28 = and i32 %27, 1
  %.not128 = icmp eq i32 %28, 0
  br i1 %.not128, label %29, label %173

29:                                               ; preds = %26
  call void @mln_event_active_fd_process(ptr noundef %0)
  %30 = load i32, ptr %9, align 8
  %31 = and i32 %30, 1
  %.not129 = icmp eq i32 %31, 0
  br i1 %.not129, label %32, label %173

32:                                               ; preds = %29
  call void @mln_event_fd_timeout_process(ptr noundef nonnull %0)
  %33 = load i32, ptr %9, align 8
  %34 = and i32 %33, 1
  %.not130 = icmp eq i32 %34, 0
  br i1 %.not130, label %35, label %173

35:                                               ; preds = %32
  call void @mln_event_timer_process(ptr noundef nonnull %0)
  %36 = load i32, ptr %9, align 8
  %37 = and i32 %36, 1
  %.not131 = icmp eq i32 %37, 0
  br i1 %.not131, label %.preheader153.preheader, label %173

.preheader153.preheader:                          ; preds = %35
  store i32 1, ptr %10, align 4, !tbaa !13
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(384) %3, i8 0, i64 384, i1 false)
  %38 = call i32 @pthread_mutex_trylock(ptr noundef nonnull %0) #7
  %.not132 = icmp eq i32 %38, 0
  br i1 %.not132, label %42, label %39

39:                                               ; preds = %.preheader153.preheader
  store i64 0, ptr %2, align 8, !tbaa !14
  store i64 3000, ptr %11, align 8, !tbaa !17
  %40 = load i32, ptr %10, align 4, !tbaa !13
  %41 = call i32 @select(i32 noundef %40, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %2) #7
  br label %.backedge.backedge

.backedge.backedge:                               ; preds = %39, %._crit_edge165, %92, %96
  br label %.backedge

42:                                               ; preds = %.preheader153.preheader
  %.0113157 = load ptr, ptr %12, align 8, !tbaa !18
  %.not133158 = icmp eq ptr %.0113157, null
  %.pre = load i32, ptr %10, align 4, !tbaa !13
  br i1 %.not133158, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %42, %83
  %43 = phi i32 [ %84, %83 ], [ %.pre, %42 ]
  %.0113159 = phi ptr [ %.0113, %83 ], [ %.0113157, %42 ]
  %44 = getelementptr inbounds i8, ptr %.0113159, i64 40
  %45 = load i32, ptr %44, align 8, !tbaa !19
  %46 = getelementptr inbounds i8, ptr %.0113159, i64 36
  %47 = load i32, ptr %46, align 4, !tbaa !20
  %48 = and i32 %47, 1
  %.not144 = icmp eq i32 %48, 0
  br i1 %.not144, label %58, label %49

49:                                               ; preds = %.lr.ph
  %50 = srem i32 %45, 64
  %51 = zext nneg i32 %50 to i64
  %52 = shl nuw i64 1, %51
  %53 = sdiv i32 %45, 64
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [16 x i64], ptr %3, i64 0, i64 %54
  %56 = load i64, ptr %55, align 8, !tbaa !22
  %57 = or i64 %56, %52
  store i64 %57, ptr %55, align 8, !tbaa !22
  br label %58

58:                                               ; preds = %49, %.lr.ph
  %59 = and i32 %47, 2
  %.not145 = icmp eq i32 %59, 0
  br i1 %.not145, label %69, label %60

60:                                               ; preds = %58
  %61 = srem i32 %45, 64
  %62 = zext nneg i32 %61 to i64
  %63 = shl nuw i64 1, %62
  %64 = sdiv i32 %45, 64
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds [16 x i64], ptr %4, i64 0, i64 %65
  %67 = load i64, ptr %66, align 8, !tbaa !22
  %68 = or i64 %67, %63
  store i64 %68, ptr %66, align 8, !tbaa !22
  br label %69

69:                                               ; preds = %60, %58
  %70 = and i32 %47, 4
  %.not146 = icmp eq i32 %70, 0
  br i1 %.not146, label %80, label %71

71:                                               ; preds = %69
  %72 = srem i32 %45, 64
  %73 = zext nneg i32 %72 to i64
  %74 = shl nuw i64 1, %73
  %75 = sdiv i32 %45, 64
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds [16 x i64], ptr %5, i64 0, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !22
  %79 = or i64 %78, %74
  store i64 %79, ptr %77, align 8, !tbaa !22
  br label %80

80:                                               ; preds = %71, %69
  %.not147 = icmp slt i32 %45, %43
  br i1 %.not147, label %83, label %81

81:                                               ; preds = %80
  %82 = add nsw i32 %45, 1
  store i32 %82, ptr %10, align 4, !tbaa !13
  br label %83

83:                                               ; preds = %80, %81
  %84 = phi i32 [ %43, %80 ], [ %82, %81 ]
  %85 = getelementptr inbounds i8, ptr %.0113159, i64 8
  %.0113 = load ptr, ptr %85, align 8, !tbaa !18
  %.not133 = icmp eq ptr %.0113, null
  br i1 %.not133, label %._crit_edge, label %.lr.ph, !llvm.loop !23

._crit_edge:                                      ; preds = %83, %42
  %86 = phi i32 [ %.pre, %42 ], [ %84, %83 ]
  store i64 0, ptr %2, align 8, !tbaa !14
  store i64 7000, ptr %11, align 8, !tbaa !17
  %87 = call i32 @select(i32 noundef %86, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %2) #7
  %88 = icmp slt i32 %87, 0
  br i1 %88, label %89, label %94

89:                                               ; preds = %._crit_edge
  %90 = tail call ptr @__errno_location() #8
  %91 = load i32, ptr %90, align 4, !tbaa !25
  switch i32 %91, label %._crit_edge165 [
    i32 4, label %92
    i32 12, label %92
  ]

92:                                               ; preds = %89, %89
  %93 = call i32 @pthread_mutex_unlock(ptr noundef nonnull %0) #7
  br label %.backedge.backedge

94:                                               ; preds = %._crit_edge
  %95 = icmp eq i32 %87, 0
  br i1 %95, label %96, label %100

96:                                               ; preds = %94
  %97 = call i32 @pthread_mutex_unlock(ptr noundef nonnull %0) #7
  store i64 0, ptr %2, align 8, !tbaa !14
  store i64 3000, ptr %11, align 8, !tbaa !17
  %98 = load i32, ptr %10, align 4, !tbaa !13
  %99 = call i32 @select(i32 noundef %98, ptr noundef nonnull %3, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %2) #7
  br label %.backedge.backedge

100:                                              ; preds = %94
  %.1114160 = load ptr, ptr %12, align 8, !tbaa !18
  %.not182 = icmp eq ptr %.1114160, null
  br i1 %.not182, label %._crit_edge165, label %.lr.ph164

.lr.ph164:                                        ; preds = %100, %167
  %.1114162 = phi ptr [ %.1114, %167 ], [ %.1114160, %100 ]
  %.0161 = phi i32 [ %.4, %167 ], [ %87, %100 ]
  %101 = getelementptr inbounds i8, ptr %.1114162, i64 48
  %102 = load i32, ptr %101, align 8
  %103 = and i32 %102, 7
  %or.cond148 = icmp eq i32 %103, 0
  br i1 %or.cond148, label %104, label %167

104:                                              ; preds = %.lr.ph164
  %105 = getelementptr inbounds i8, ptr %.1114162, i64 40
  %106 = load i32, ptr %105, align 8, !tbaa !19
  %107 = sdiv i32 %106, 64
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [16 x i64], ptr %3, i64 0, i64 %108
  %110 = load i64, ptr %109, align 8, !tbaa !22
  %111 = srem i32 %106, 64
  %112 = zext nneg i32 %111 to i64
  %113 = shl nuw i64 1, %112
  %114 = and i64 %113, %110
  %.not137 = icmp eq i64 %114, 0
  br i1 %.not137, label %128, label %115

115:                                              ; preds = %104
  %116 = getelementptr inbounds i8, ptr %.1114162, i64 44
  %117 = load i32, ptr %116, align 4, !tbaa !19
  %118 = or i32 %117, 1
  store i32 %118, ptr %116, align 4, !tbaa !19
  %119 = and i32 %102, 8
  %.not138 = icmp eq i32 %119, 0
  br i1 %.not138, label %125, label %120

120:                                              ; preds = %115
  %121 = getelementptr inbounds i8, ptr %.1114162, i64 36
  %122 = load i32, ptr %121, align 4, !tbaa !20
  %123 = and i32 %122, -2
  store i32 %123, ptr %121, align 4, !tbaa !20
  %124 = and i32 %102, -16
  store i32 %124, ptr %101, align 8
  br label %125

125:                                              ; preds = %120, %115
  %126 = phi i32 [ %124, %120 ], [ %102, %115 ]
  %127 = add nsw i32 %.0161, -1
  br label %128

128:                                              ; preds = %125, %104
  %129 = phi i32 [ %126, %125 ], [ %102, %104 ]
  %.1 = phi i32 [ %127, %125 ], [ %.0161, %104 ]
  %130 = getelementptr inbounds [16 x i64], ptr %4, i64 0, i64 %108
  %131 = load i64, ptr %130, align 8, !tbaa !22
  %132 = and i64 %131, %113
  %.not139 = icmp eq i64 %132, 0
  br i1 %.not139, label %143, label %133

133:                                              ; preds = %128
  %134 = getelementptr inbounds i8, ptr %.1114162, i64 44
  %135 = load i32, ptr %134, align 4, !tbaa !19
  %136 = or i32 %135, 2
  store i32 %136, ptr %134, align 4, !tbaa !19
  %137 = and i32 %129, 16
  %.not140 = icmp eq i32 %137, 0
  br i1 %.not140, label %.thread171, label %138

138:                                              ; preds = %133
  %139 = getelementptr inbounds i8, ptr %.1114162, i64 36
  %140 = load i32, ptr %139, align 4, !tbaa !20
  %141 = and i32 %140, -3
  store i32 %141, ptr %139, align 4, !tbaa !20
  %142 = and i32 %129, -17
  store i32 %142, ptr %101, align 8
  br label %.thread171

143:                                              ; preds = %128
  %144 = getelementptr inbounds [16 x i64], ptr %5, i64 0, i64 %108
  %145 = load i64, ptr %144, align 8, !tbaa !22
  %146 = and i64 %145, %113
  %.not141 = icmp eq i64 %146, 0
  br i1 %.not141, label %164, label %152

.thread171:                                       ; preds = %133, %138
  %147 = phi i32 [ %142, %138 ], [ %129, %133 ]
  %148 = add nsw i32 %.1, -1
  %149 = getelementptr inbounds [16 x i64], ptr %5, i64 0, i64 %108
  %150 = load i64, ptr %149, align 8, !tbaa !22
  %151 = and i64 %150, %113
  %.not141174 = icmp eq i64 %151, 0
  br i1 %.not141174, label %.thread178, label %152

152:                                              ; preds = %.thread171, %143
  %.2176 = phi i32 [ %148, %.thread171 ], [ %.1, %143 ]
  %153 = phi i32 [ %147, %.thread171 ], [ %129, %143 ]
  %154 = getelementptr inbounds i8, ptr %.1114162, i64 44
  %155 = load i32, ptr %154, align 4, !tbaa !19
  %156 = or i32 %155, 4
  store i32 %156, ptr %154, align 4, !tbaa !19
  %157 = and i32 %153, 32
  %.not142 = icmp eq i32 %157, 0
  br i1 %.not142, label %.thread, label %158

158:                                              ; preds = %152
  %159 = getelementptr inbounds i8, ptr %.1114162, i64 36
  %160 = load i32, ptr %159, align 4, !tbaa !20
  %161 = and i32 %160, -5
  store i32 %161, ptr %159, align 4, !tbaa !20
  %162 = and i32 %153, -33
  store i32 %162, ptr %101, align 8
  br label %.thread

.thread:                                          ; preds = %152, %158
  %163 = add nsw i32 %.2176, -1
  br label %.thread178

164:                                              ; preds = %143
  br i1 %.not137, label %167, label %.thread178

.thread178:                                       ; preds = %.thread171, %.thread, %164
  %.3152 = phi i32 [ %163, %.thread ], [ %.1, %164 ], [ %148, %.thread171 ]
  call void @ev_fd_active_chain_add(ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %.1114162)
  %165 = load i32, ptr %101, align 8
  %166 = or i32 %165, 4
  store i32 %166, ptr %101, align 8
  br label %167

167:                                              ; preds = %164, %.thread178, %.lr.ph164
  %.4 = phi i32 [ %.0161, %.lr.ph164 ], [ %.3152, %.thread178 ], [ %.1, %164 ]
  %168 = getelementptr inbounds i8, ptr %.1114162, i64 8
  %.1114 = load ptr, ptr %168, align 8, !tbaa !18
  %169 = icmp sgt i32 %.4, 0
  %170 = icmp ne ptr %.1114, null
  %171 = select i1 %169, i1 %170, i1 false
  br i1 %171, label %.lr.ph164, label %._crit_edge165, !llvm.loop !26

._crit_edge165:                                   ; preds = %167, %89, %100
  %172 = call i32 @pthread_mutex_unlock(ptr noundef nonnull %0) #7
  br label %.backedge.backedge

173:                                              ; preds = %35, %32, %29, %26, %23
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2) #7
  ret void
}

; Function Attrs: nounwind
declare i32 @pthread_mutex_trylock(ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @mln_event_timer_process(ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @mln_event_active_fd_process(ptr noundef nonnull) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @mln_event_fd_timeout_process(ptr noundef) local_unnamed_addr #3

declare i32 @select(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @ev_fd_active_chain_add(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

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

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

!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, !9, i64 120}
!6 = !{!"mln_event_s", !7, i64 0, !7, i64 40, !7, i64 80, !9, i64 120, !9, i64 128, !10, i64 136, !10, i64 136, !10, i64 140, !11, i64 144, !11, i64 272, !11, i64 400, !9, i64 528, !9, i64 536, !9, i64 544, !9, i64 552, !9, i64 560, !9, i64 568, !9, i64 576}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"any pointer", !7, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!"", !7, i64 0}
!12 = !{!6, !9, i64 128}
!13 = !{!6, !10, i64 140}
!14 = !{!15, !16, i64 0}
!15 = !{!"timeval", !16, i64 0, !16, i64 8}
!16 = !{!"long", !7, i64 0}
!17 = !{!15, !16, i64 8}
!18 = !{!9, !9, i64 0}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !10, i64 36}
!21 = !{!"mln_event_desc_s", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24, !10, i64 32, !10, i64 36, !7, i64 40}
!22 = !{!16, !16, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!10, !10, i64 0}
!26 = distinct !{!26, !24}


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