; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/OptionRomPkg (E100bSetfilter)

; 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.s_data_instance = type { i16, i16, i8, i8, i16, i16, i16, i16, i16, [32 x i8], [32 x i8], [32 x i8], [64 x i32], [128 x i32], i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i32, i32, i16, i16, [2 x i16], i8, i8, i16, i32, ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i64, i64, i64, [64 x i64], i16, i16, i16, i16, i8, i8, i8, i8, i8, [3 x i8], %struct.mc, i64, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.mc = type { [3 x i16], i16, [8 x [32 x i8]] }
%struct.s_pxe_cpb_receive_filters = type { [8 x [32 x i8]] }
%struct.s_TxCB = type { %struct.CB_Header, i32, i16, i8, i8, [64 x i8], [16 x %struct.TBD], i32, i32, ptr, ptr, i64 }
%struct.CB_Header = type { i16, i16, i32 }
%struct.TBD = type { i32, i32 }
%struct.MC_CB_STRUCT = type { i16, [8 x [6 x i8]] }

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @InByte(ptr noundef, i32 noundef) #0

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @IssueCB(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @Configure(ptr noundef) #0

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

; Function Attrs: nounwind uwtable
declare dso_local signext i8 @CommandWaitForCompletion(ptr noundef, ptr noundef) #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local signext i8 @StartRU(ptr noundef) #0

; Function Attrs: nounwind uwtable
define dso_local i64 @E100bSetfilter(ptr noundef %0, i16 noundef zeroext %1, i64 noundef %2, i32 noundef %3) #0 {
  %5 = alloca i64, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i16, align 2
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i16, align 2
  %12 = alloca i16, align 2
  %13 = alloca i16, align 2
  %14 = alloca i16, align 2
  %15 = alloca i16, align 2
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i16, align 2
  %19 = alloca i32, align 4
  %20 = alloca i16, align 2
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i16 %1, ptr %7, align 2, !tbaa !9
  store i64 %2, ptr %8, align 8, !tbaa !11
  store i32 %3, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  %21 = load i64, ptr %8, align 8, !tbaa !11
  %22 = inttoptr i64 %21 to ptr
  store ptr %22, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #2
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.s_data_instance, ptr %23, i32 0, i32 54
  %25 = load i8, ptr %24, align 1, !tbaa !15
  %26 = zext i8 %25 to i16
  store i16 %26, ptr %12, align 2, !tbaa !9
  store i16 24, ptr %11, align 2, !tbaa !9
  %27 = load i16, ptr %12, align 2, !tbaa !9
  %28 = zext i16 %27 to i32
  %29 = load i16, ptr %11, align 2, !tbaa !9
  %30 = zext i16 %29 to i32
  %31 = and i32 %28, %30
  %32 = load i16, ptr %7, align 2, !tbaa !9
  %33 = zext i16 %32 to i32
  %34 = load i16, ptr %11, align 2, !tbaa !9
  %35 = zext i16 %34 to i32
  %36 = and i32 %33, %35
  %37 = icmp ne i32 %31, %36
  br i1 %37, label %38, label %55

38:                                               ; preds = %4
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  call void @XmitWaitForCompletion(ptr noundef %39)
  %40 = load ptr, ptr %6, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.s_data_instance, ptr %40, i32 0, i32 53
  %42 = load i8, ptr %41, align 2, !tbaa !18
  %43 = icmp ne i8 %42, 0
  br i1 %43, label %44, label %46

44:                                               ; preds = %38
  %45 = load ptr, ptr %6, align 8, !tbaa !5
  call void @StopRU(ptr noundef %45)
  br label %46

46:                                               ; preds = %44, %38
  %47 = load i16, ptr %7, align 2, !tbaa !9
  %48 = zext i16 %47 to i32
  %49 = or i32 %48, 2
  %50 = trunc i32 %49 to i8
  %51 = load ptr, ptr %6, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.s_data_instance, ptr %51, i32 0, i32 54
  store i8 %50, ptr %52, align 1, !tbaa !15
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = call zeroext i8 @Configure(ptr noundef %53)
  br label %55

55:                                               ; preds = %46, %4
  %56 = load i16, ptr %7, align 2, !tbaa !9
  %57 = zext i16 %56 to i32
  %58 = and i32 %57, 4
  %59 = load i16, ptr %12, align 2, !tbaa !9
  %60 = zext i16 %59 to i32
  %61 = and i32 %60, 4
  %62 = icmp ne i32 %58, %61
  br i1 %62, label %66, label %63

63:                                               ; preds = %55
  %64 = load ptr, ptr %10, align 8, !tbaa !5
  %65 = icmp ne ptr %64, null
  br i1 %65, label %66, label %261

66:                                               ; preds = %63, %55
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  %68 = icmp ne ptr %67, null
  br i1 %68, label %69, label %120

69:                                               ; preds = %66
  %70 = load i32, ptr %9, align 4, !tbaa !13
  %71 = udiv i32 %70, 32
  %72 = trunc i32 %71 to i16
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.s_data_instance, ptr %73, i32 0, i32 57
  %75 = getelementptr inbounds %struct.mc, ptr %74, i32 0, i32 1
  store i16 %72, ptr %75, align 2, !tbaa !19
  store i16 %72, ptr %15, align 2, !tbaa !9
  store i16 0, ptr %13, align 2, !tbaa !9
  br label %76

76:                                               ; preds = %116, %69
  %77 = load i16, ptr %13, align 2, !tbaa !9
  %78 = zext i16 %77 to i32
  %79 = load i16, ptr %15, align 2, !tbaa !9
  %80 = zext i16 %79 to i32
  %81 = icmp slt i32 %78, %80
  br i1 %81, label %82, label %86

82:                                               ; preds = %76
  %83 = load i16, ptr %13, align 2, !tbaa !9
  %84 = zext i16 %83 to i32
  %85 = icmp slt i32 %84, 8
  br label %86

86:                                               ; preds = %82, %76
  %87 = phi i1 [ false, %76 ], [ %85, %82 ]
  br i1 %87, label %88, label %119

88:                                               ; preds = %86
  store i16 0, ptr %14, align 2, !tbaa !9
  br label %89

89:                                               ; preds = %112, %88
  %90 = load i16, ptr %14, align 2, !tbaa !9
  %91 = zext i16 %90 to i32
  %92 = icmp slt i32 %91, 32
  br i1 %92, label %93, label %115

93:                                               ; preds = %89
  %94 = load ptr, ptr %10, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.s_pxe_cpb_receive_filters, ptr %94, i32 0, i32 0
  %96 = load i16, ptr %13, align 2, !tbaa !9
  %97 = zext i16 %96 to i64
  %98 = getelementptr inbounds [8 x [32 x i8]], ptr %95, i64 0, i64 %97
  %99 = load i16, ptr %14, align 2, !tbaa !9
  %100 = zext i16 %99 to i64
  %101 = getelementptr inbounds [32 x i8], ptr %98, i64 0, i64 %100
  %102 = load i8, ptr %101, align 1, !tbaa !20
  %103 = load ptr, ptr %6, align 8, !tbaa !5
  %104 = getelementptr inbounds %struct.s_data_instance, ptr %103, i32 0, i32 57
  %105 = getelementptr inbounds %struct.mc, ptr %104, i32 0, i32 2
  %106 = load i16, ptr %13, align 2, !tbaa !9
  %107 = zext i16 %106 to i64
  %108 = getelementptr inbounds [8 x [32 x i8]], ptr %105, i64 0, i64 %107
  %109 = load i16, ptr %14, align 2, !tbaa !9
  %110 = zext i16 %109 to i64
  %111 = getelementptr inbounds [32 x i8], ptr %108, i64 0, i64 %110
  store i8 %102, ptr %111, align 1, !tbaa !20
  br label %112

112:                                              ; preds = %93
  %113 = load i16, ptr %14, align 2, !tbaa !9
  %114 = add i16 %113, 1
  store i16 %114, ptr %14, align 2, !tbaa !9
  br label %89, !llvm.loop !21

115:                                              ; preds = %89
  br label %116

116:                                              ; preds = %115
  %117 = load i16, ptr %13, align 2, !tbaa !9
  %118 = add i16 %117, 1
  store i16 %118, ptr %13, align 2, !tbaa !9
  br label %76, !llvm.loop !23

119:                                              ; preds = %86
  br label %120

120:                                              ; preds = %119, %66
  %121 = load i16, ptr %7, align 2, !tbaa !9
  %122 = zext i16 %121 to i32
  %123 = and i32 %122, 4
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %125, label %144

125:                                              ; preds = %120
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.s_data_instance, ptr %126, i32 0, i32 57
  %128 = getelementptr inbounds %struct.mc, ptr %127, i32 0, i32 1
  %129 = load i16, ptr %128, align 2, !tbaa !19
  store i16 %129, ptr %15, align 2, !tbaa !9
  %130 = load i16, ptr %15, align 2, !tbaa !9
  %131 = zext i16 %130 to i32
  %132 = shl i32 %131, 2
  %133 = load i16, ptr %15, align 2, !tbaa !9
  %134 = zext i16 %133 to i32
  %135 = shl i32 %134, 1
  %136 = add nsw i32 %132, %135
  %137 = trunc i32 %136 to i16
  store i16 %137, ptr %18, align 2, !tbaa !9
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.s_data_instance, ptr %138, i32 0, i32 54
  %140 = load i8, ptr %139, align 1, !tbaa !15
  %141 = zext i8 %140 to i32
  %142 = or i32 %141, 4
  %143 = trunc i32 %142 to i8
  store i8 %143, ptr %139, align 1, !tbaa !15
  br label %151

144:                                              ; preds = %120
  store i16 0, ptr %15, align 2, !tbaa !9
  store i16 0, ptr %18, align 2, !tbaa !9
  %145 = load ptr, ptr %6, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.s_data_instance, ptr %145, i32 0, i32 54
  %147 = load i8, ptr %146, align 1, !tbaa !15
  %148 = zext i8 %147 to i32
  %149 = and i32 %148, -5
  %150 = trunc i32 %149 to i8
  store i8 %150, ptr %146, align 1, !tbaa !15
  br label %151

151:                                              ; preds = %144, %125
  %152 = load ptr, ptr %6, align 8, !tbaa !5
  call void @XmitWaitForCompletion(ptr noundef %152)
  %153 = load ptr, ptr %6, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.s_data_instance, ptr %153, i32 0, i32 53
  %155 = load i8, ptr %154, align 2, !tbaa !18
  %156 = icmp ne i8 %155, 0
  br i1 %156, label %157, label %159

157:                                              ; preds = %151
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  call void @StopRU(ptr noundef %158)
  br label %159

159:                                              ; preds = %157, %151
  %160 = load ptr, ptr %6, align 8, !tbaa !5
  %161 = call ptr @GetFreeCB(ptr noundef %160)
  store ptr %161, ptr %16, align 8, !tbaa !5
  %162 = load ptr, ptr %16, align 8, !tbaa !5
  %163 = icmp eq ptr %162, null
  br i1 %163, label %164, label %165

164:                                              ; preds = %159
  store i64 4, ptr %5, align 8
  store i32 1, ptr %19, align 4
  br label %294

165:                                              ; preds = %159
  %166 = load ptr, ptr %16, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.s_TxCB, ptr %166, i32 0, i32 1
  store ptr %167, ptr %17, align 8, !tbaa !5
  %168 = load i16, ptr %18, align 2, !tbaa !9
  %169 = load ptr, ptr %17, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.MC_CB_STRUCT, ptr %169, i32 0, i32 0
  store i16 %168, ptr %170, align 1, !tbaa !24
  store i16 0, ptr %13, align 2, !tbaa !9
  br label %171

171:                                              ; preds = %205, %165
  %172 = load i16, ptr %13, align 2, !tbaa !9
  %173 = zext i16 %172 to i32
  %174 = load i16, ptr %15, align 2, !tbaa !9
  %175 = zext i16 %174 to i32
  %176 = icmp slt i32 %173, %175
  br i1 %176, label %177, label %208

177:                                              ; preds = %171
  store i16 0, ptr %14, align 2, !tbaa !9
  br label %178

178:                                              ; preds = %201, %177
  %179 = load i16, ptr %14, align 2, !tbaa !9
  %180 = zext i16 %179 to i32
  %181 = icmp slt i32 %180, 6
  br i1 %181, label %182, label %204

182:                                              ; preds = %178
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.s_data_instance, ptr %183, i32 0, i32 57
  %185 = getelementptr inbounds %struct.mc, ptr %184, i32 0, i32 2
  %186 = load i16, ptr %13, align 2, !tbaa !9
  %187 = zext i16 %186 to i64
  %188 = getelementptr inbounds [8 x [32 x i8]], ptr %185, i64 0, i64 %187
  %189 = load i16, ptr %14, align 2, !tbaa !9
  %190 = zext i16 %189 to i64
  %191 = getelementptr inbounds [32 x i8], ptr %188, i64 0, i64 %190
  %192 = load i8, ptr %191, align 1, !tbaa !20
  %193 = load ptr, ptr %17, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.MC_CB_STRUCT, ptr %193, i32 0, i32 1
  %195 = load i16, ptr %13, align 2, !tbaa !9
  %196 = zext i16 %195 to i64
  %197 = getelementptr inbounds [8 x [6 x i8]], ptr %194, i64 0, i64 %196
  %198 = load i16, ptr %14, align 2, !tbaa !9
  %199 = zext i16 %198 to i64
  %200 = getelementptr inbounds [6 x i8], ptr %197, i64 0, i64 %199
  store i8 %192, ptr %200, align 1, !tbaa !20
  br label %201

201:                                              ; preds = %182
  %202 = load i16, ptr %14, align 2, !tbaa !9
  %203 = add i16 %202, 1
  store i16 %203, ptr %14, align 2, !tbaa !9
  br label %178, !llvm.loop !26

204:                                              ; preds = %178
  br label %205

205:                                              ; preds = %204
  %206 = load i16, ptr %13, align 2, !tbaa !9
  %207 = add i16 %206, 1
  store i16 %207, ptr %13, align 2, !tbaa !9
  br label %171, !llvm.loop !27

208:                                              ; preds = %171
  %209 = load ptr, ptr %16, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.s_TxCB, ptr %209, i32 0, i32 0
  %211 = getelementptr inbounds %struct.CB_Header, ptr %210, i32 0, i32 1
  store i16 16387, ptr %211, align 1, !tbaa !28
  %212 = load ptr, ptr %16, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.s_TxCB, ptr %212, i32 0, i32 0
  %214 = getelementptr inbounds %struct.CB_Header, ptr %213, i32 0, i32 0
  store i16 0, ptr %214, align 1, !tbaa !31
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  call void @BlockIt(ptr noundef %215, i32 noundef 1)
  %216 = load ptr, ptr %6, align 8, !tbaa !5
  %217 = load ptr, ptr %16, align 8, !tbaa !5
  %218 = call zeroext i8 @IssueCB(ptr noundef %216, ptr noundef %217)
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #2
  store i16 2000, ptr %20, align 2, !tbaa !9
  br label %219

219:                                              ; preds = %235, %208
  %220 = load ptr, ptr %6, align 8, !tbaa !5
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.s_data_instance, ptr %221, i32 0, i32 14
  %223 = load i32, ptr %222, align 8, !tbaa !32
  %224 = add i32 %223, 2
  %225 = call zeroext i8 @InByte(ptr noundef %220, i32 noundef %224)
  %226 = zext i8 %225 to i32
  %227 = icmp ne i32 %226, 0
  br i1 %227, label %228, label %233

228:                                              ; preds = %219
  %229 = load i16, ptr %20, align 2, !tbaa !9
  %230 = add i16 %229, -1
  store i16 %230, ptr %20, align 2, !tbaa !9
  %231 = sext i16 %230 to i32
  %232 = icmp sge i32 %231, 0
  br label %233

233:                                              ; preds = %228, %219
  %234 = phi i1 [ false, %219 ], [ %232, %228 ]
  br i1 %234, label %235, label %237

235:                                              ; preds = %233
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  call void @DelayIt(ptr noundef %236, i16 noundef zeroext 10)
  br label %219, !llvm.loop !33

237:                                              ; preds = %233
  %238 = load i16, ptr %20, align 2, !tbaa !9
  %239 = sext i16 %238 to i32
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %241, label %243

241:                                              ; preds = %237
  %242 = load ptr, ptr %6, align 8, !tbaa !5
  call void @DelayIt(ptr noundef %242, i16 noundef zeroext 50)
  br label %243

243:                                              ; preds = %241, %237
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #2
  %244 = load ptr, ptr %6, align 8, !tbaa !5
  call void @BlockIt(ptr noundef %244, i32 noundef 0)
  %245 = load ptr, ptr %16, align 8, !tbaa !5
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  %247 = call signext i8 @CommandWaitForCompletion(ptr noundef %245, ptr noundef %246)
  %248 = load ptr, ptr %16, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.s_TxCB, ptr %248, i32 0, i32 7
  %250 = load i32, ptr %249, align 1, !tbaa !34
  %251 = load ptr, ptr %16, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.s_TxCB, ptr %251, i32 0, i32 1
  store i32 %250, ptr %252, align 1, !tbaa !35
  %253 = load ptr, ptr %16, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.s_TxCB, ptr %253, i32 0, i32 4
  store i8 0, ptr %254, align 1, !tbaa !36
  %255 = load ptr, ptr %16, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.s_TxCB, ptr %255, i32 0, i32 3
  store i8 0, ptr %256, align 1, !tbaa !37
  %257 = load ptr, ptr %16, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.s_TxCB, ptr %257, i32 0, i32 2
  store i16 0, ptr %258, align 1, !tbaa !38
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = load ptr, ptr %16, align 8, !tbaa !5
  call void @SetFreeCB(ptr noundef %259, ptr noundef %260)
  br label %261

261:                                              ; preds = %243, %63
  %262 = load i16, ptr %7, align 2, !tbaa !9
  %263 = zext i16 %262 to i32
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %279

265:                                              ; preds = %261
  %266 = load ptr, ptr %6, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.s_data_instance, ptr %266, i32 0, i32 54
  %268 = load i8, ptr %267, align 1, !tbaa !15
  %269 = zext i8 %268 to i32
  %270 = load i16, ptr %7, align 2, !tbaa !9
  %271 = zext i16 %270 to i32
  %272 = or i32 %271, 1
  %273 = or i32 %269, %272
  %274 = trunc i32 %273 to i8
  %275 = load ptr, ptr %6, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.s_data_instance, ptr %275, i32 0, i32 54
  store i8 %274, ptr %276, align 1, !tbaa !15
  %277 = load ptr, ptr %6, align 8, !tbaa !5
  %278 = call signext i8 @StartRU(ptr noundef %277)
  br label %293

279:                                              ; preds = %261
  %280 = load ptr, ptr %6, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.s_data_instance, ptr %280, i32 0, i32 53
  %282 = load i8, ptr %281, align 2, !tbaa !18
  %283 = icmp ne i8 %282, 0
  br i1 %283, label %284, label %286

284:                                              ; preds = %279
  %285 = load ptr, ptr %6, align 8, !tbaa !5
  call void @StopRU(ptr noundef %285)
  br label %286

286:                                              ; preds = %284, %279
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.s_data_instance, ptr %287, i32 0, i32 54
  %289 = load i8, ptr %288, align 1, !tbaa !15
  %290 = zext i8 %289 to i32
  %291 = or i32 %290, -2
  %292 = trunc i32 %291 to i8
  store i8 %292, ptr %288, align 1, !tbaa !15
  br label %293

293:                                              ; preds = %286, %265
  store i64 0, ptr %5, align 8
  store i32 1, ptr %19, align 4
  br label %294

294:                                              ; preds = %293, %164
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  %295 = load i64, ptr %5, align 8
  ret i64 %295
}

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !7, i64 1539}
!16 = !{!"s_data_instance", !10, i64 0, !10, i64 2, !7, i64 4, !7, i64 5, !10, i64 6, !10, i64 8, !10, i64 10, !10, i64 12, !10, i64 14, !7, i64 16, !7, i64 48, !7, i64 80, !7, i64 112, !7, i64 368, !14, i64 880, !14, i64 884, !10, i64 888, !10, i64 890, !7, i64 892, !7, i64 893, !7, i64 894, !7, i64 895, !10, i64 896, !10, i64 898, !10, i64 900, !10, i64 902, !14, i64 904, !14, i64 908, !10, i64 912, !10, i64 914, !7, i64 916, !7, i64 920, !7, i64 921, !10, i64 922, !14, i64 924, !6, i64 928, !6, i64 936, !6, i64 944, !6, i64 952, !6, i64 960, !6, i64 968, !12, i64 976, !12, i64 984, !12, i64 992, !12, i64 1000, !12, i64 1008, !7, i64 1016, !10, i64 1528, !10, i64 1530, !10, i64 1532, !10, i64 1534, !7, i64 1536, !7, i64 1537, !7, i64 1538, !7, i64 1539, !7, i64 1540, !7, i64 1541, !17, i64 1544, !12, i64 1808, !6, i64 1816, !12, i64 1824, !6, i64 1832, !6, i64 1840, !6, i64 1848, !6, i64 1856, !6, i64 1864, !6, i64 1872, !6, i64 1880, !6, i64 1888, !6, i64 1896, !6, i64 1904, !6, i64 1912}
!17 = !{!"mc", !7, i64 0, !10, i64 6, !7, i64 8}
!18 = !{!16, !7, i64 1538}
!19 = !{!16, !10, i64 1550}
!20 = !{!7, !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!25, !10, i64 0}
!25 = !{!"MC_CB_STRUCT", !10, i64 0, !7, i64 2}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = !{!29, !10, i64 2}
!29 = !{!"s_TxCB", !30, i64 0, !14, i64 8, !10, i64 12, !7, i64 14, !7, i64 15, !7, i64 16, !7, i64 80, !14, i64 208, !14, i64 212, !6, i64 216, !6, i64 224, !12, i64 232}
!30 = !{!"CB_Header", !10, i64 0, !10, i64 2, !14, i64 4}
!31 = !{!29, !10, i64 0}
!32 = !{!16, !14, i64 880}
!33 = distinct !{!33, !22}
!34 = !{!29, !14, i64 208}
!35 = !{!29, !14, i64 8}
!36 = !{!29, !7, i64 15}
!37 = !{!29, !7, i64 14}
!38 = !{!29, !10, i64 12}


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

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @InByte(ptr noundef, i32 noundef) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @IssueCB(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @Configure(ptr noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare dso_local signext i8 @CommandWaitForCompletion(ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local signext i8 @StartRU(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local range(i64 0, 5) i64 @E100bSetfilter(ptr noundef %0, i16 noundef zeroext %1, i64 noundef %2, i32 noundef %3) local_unnamed_addr #0 {
  %5 = inttoptr i64 %2 to ptr
  %6 = getelementptr inbounds i8, ptr %0, i64 1539
  %7 = load i8, ptr %6, align 1, !tbaa !5
  %8 = zext i8 %7 to i32
  %9 = zext i16 %1 to i32
  %10 = xor i32 %8, %9
  %11 = and i32 %10, 24
  %.not = icmp eq i32 %11, 0
  br i1 %.not, label %20, label %12

12:                                               ; preds = %4
  tail call void @XmitWaitForCompletion(ptr noundef nonnull %0)
  %13 = getelementptr inbounds i8, ptr %0, i64 1538
  %14 = load i8, ptr %13, align 2, !tbaa !14
  %.not95 = icmp eq i8 %14, 0
  br i1 %.not95, label %16, label %15

15:                                               ; preds = %12
  tail call void @StopRU(ptr noundef nonnull %0)
  br label %16

16:                                               ; preds = %15, %12
  %17 = trunc i16 %1 to i8
  %18 = or i8 %17, 2
  store i8 %18, ptr %6, align 1, !tbaa !5
  %19 = tail call zeroext i8 @Configure(ptr noundef nonnull %0)
  br label %20

20:                                               ; preds = %16, %4
  %21 = and i32 %9, 4
  %22 = and i32 %8, 4
  %23 = icmp ne i32 %21, %22
  %24 = icmp ne i64 %2, 0
  %or.cond = or i1 %24, %23
  br i1 %or.cond, label %25, label %189

25:                                               ; preds = %20
  br i1 %24, label %26, label %.loopexit

26:                                               ; preds = %25
  %27 = lshr i32 %3, 5
  %28 = trunc i32 %27 to i16
  %29 = getelementptr inbounds i8, ptr %0, i64 1550
  store i16 %28, ptr %29, align 2, !tbaa !15
  %30 = and i32 %27, 65535
  %.not111 = icmp eq i32 %30, 0
  br i1 %.not111, label %.loopexit, label %.preheader102.lr.ph

.preheader102.lr.ph:                              ; preds = %26
  %31 = getelementptr inbounds i8, ptr %0, i64 1552
  %32 = add nsw i32 %30, -1
  %umin = tail call i32 @llvm.umin.i32(i32 %32, i32 7)
  %33 = add nuw nsw i32 %umin, 1
  %wide.trip.count = zext nneg i32 %33 to i64
  br label %.preheader102

.preheader102:                                    ; preds = %.preheader102.lr.ph, %.preheader102
  %indvars.iv = phi i64 [ 0, %.preheader102.lr.ph ], [ %indvars.iv.next, %.preheader102 ]
  %34 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 0
  %35 = load i8, ptr %34, align 1, !tbaa !16
  %36 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 0
  store i8 %35, ptr %36, align 1, !tbaa !16
  %37 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 1
  %38 = load i8, ptr %37, align 1, !tbaa !16
  %39 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 1
  store i8 %38, ptr %39, align 1, !tbaa !16
  %40 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 2
  %41 = load i8, ptr %40, align 1, !tbaa !16
  %42 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 2
  store i8 %41, ptr %42, align 1, !tbaa !16
  %43 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 3
  %44 = load i8, ptr %43, align 1, !tbaa !16
  %45 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 3
  store i8 %44, ptr %45, align 1, !tbaa !16
  %46 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 4
  %47 = load i8, ptr %46, align 1, !tbaa !16
  %48 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 4
  store i8 %47, ptr %48, align 1, !tbaa !16
  %49 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 5
  %50 = load i8, ptr %49, align 1, !tbaa !16
  %51 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 5
  store i8 %50, ptr %51, align 1, !tbaa !16
  %52 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 6
  %53 = load i8, ptr %52, align 1, !tbaa !16
  %54 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 6
  store i8 %53, ptr %54, align 1, !tbaa !16
  %55 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 7
  %56 = load i8, ptr %55, align 1, !tbaa !16
  %57 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 7
  store i8 %56, ptr %57, align 1, !tbaa !16
  %58 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 8
  %59 = load i8, ptr %58, align 1, !tbaa !16
  %60 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 8
  store i8 %59, ptr %60, align 1, !tbaa !16
  %61 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 9
  %62 = load i8, ptr %61, align 1, !tbaa !16
  %63 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 9
  store i8 %62, ptr %63, align 1, !tbaa !16
  %64 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 10
  %65 = load i8, ptr %64, align 1, !tbaa !16
  %66 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 10
  store i8 %65, ptr %66, align 1, !tbaa !16
  %67 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 11
  %68 = load i8, ptr %67, align 1, !tbaa !16
  %69 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 11
  store i8 %68, ptr %69, align 1, !tbaa !16
  %70 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 12
  %71 = load i8, ptr %70, align 1, !tbaa !16
  %72 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 12
  store i8 %71, ptr %72, align 1, !tbaa !16
  %73 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 13
  %74 = load i8, ptr %73, align 1, !tbaa !16
  %75 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 13
  store i8 %74, ptr %75, align 1, !tbaa !16
  %76 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 14
  %77 = load i8, ptr %76, align 1, !tbaa !16
  %78 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 14
  store i8 %77, ptr %78, align 1, !tbaa !16
  %79 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 15
  %80 = load i8, ptr %79, align 1, !tbaa !16
  %81 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 15
  store i8 %80, ptr %81, align 1, !tbaa !16
  %82 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 16
  %83 = load i8, ptr %82, align 1, !tbaa !16
  %84 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 16
  store i8 %83, ptr %84, align 1, !tbaa !16
  %85 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 17
  %86 = load i8, ptr %85, align 1, !tbaa !16
  %87 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 17
  store i8 %86, ptr %87, align 1, !tbaa !16
  %88 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 18
  %89 = load i8, ptr %88, align 1, !tbaa !16
  %90 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 18
  store i8 %89, ptr %90, align 1, !tbaa !16
  %91 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 19
  %92 = load i8, ptr %91, align 1, !tbaa !16
  %93 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 19
  store i8 %92, ptr %93, align 1, !tbaa !16
  %94 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 20
  %95 = load i8, ptr %94, align 1, !tbaa !16
  %96 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 20
  store i8 %95, ptr %96, align 1, !tbaa !16
  %97 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 21
  %98 = load i8, ptr %97, align 1, !tbaa !16
  %99 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 21
  store i8 %98, ptr %99, align 1, !tbaa !16
  %100 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 22
  %101 = load i8, ptr %100, align 1, !tbaa !16
  %102 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 22
  store i8 %101, ptr %102, align 1, !tbaa !16
  %103 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 23
  %104 = load i8, ptr %103, align 1, !tbaa !16
  %105 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 23
  store i8 %104, ptr %105, align 1, !tbaa !16
  %106 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 24
  %107 = load i8, ptr %106, align 1, !tbaa !16
  %108 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 24
  store i8 %107, ptr %108, align 1, !tbaa !16
  %109 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 25
  %110 = load i8, ptr %109, align 1, !tbaa !16
  %111 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 25
  store i8 %110, ptr %111, align 1, !tbaa !16
  %112 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 26
  %113 = load i8, ptr %112, align 1, !tbaa !16
  %114 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 26
  store i8 %113, ptr %114, align 1, !tbaa !16
  %115 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 27
  %116 = load i8, ptr %115, align 1, !tbaa !16
  %117 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 27
  store i8 %116, ptr %117, align 1, !tbaa !16
  %118 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 28
  %119 = load i8, ptr %118, align 1, !tbaa !16
  %120 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 28
  store i8 %119, ptr %120, align 1, !tbaa !16
  %121 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 29
  %122 = load i8, ptr %121, align 1, !tbaa !16
  %123 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 29
  store i8 %122, ptr %123, align 1, !tbaa !16
  %124 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 30
  %125 = load i8, ptr %124, align 1, !tbaa !16
  %126 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 30
  store i8 %125, ptr %126, align 1, !tbaa !16
  %127 = getelementptr inbounds [8 x [32 x i8]], ptr %5, i64 0, i64 %indvars.iv, i64 31
  %128 = load i8, ptr %127, align 1, !tbaa !16
  %129 = getelementptr inbounds [8 x [32 x i8]], ptr %31, i64 0, i64 %indvars.iv, i64 31
  store i8 %128, ptr %129, align 1, !tbaa !16
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %.preheader102, !llvm.loop !17

.loopexit:                                        ; preds = %.preheader102, %26, %25
  %.not96 = icmp eq i32 %21, 0
  br i1 %.not96, label %137, label %130

130:                                              ; preds = %.loopexit
  %131 = getelementptr inbounds i8, ptr %0, i64 1550
  %132 = load i16, ptr %131, align 2, !tbaa !15
  %133 = mul i16 %132, 6
  %134 = load i8, ptr %6, align 1, !tbaa !5
  %135 = or i8 %134, 4
  %136 = zext i16 %132 to i32
  br label %140

137:                                              ; preds = %.loopexit
  %138 = load i8, ptr %6, align 1, !tbaa !5
  %139 = and i8 %138, -5
  br label %140

140:                                              ; preds = %137, %130
  %storemerge = phi i8 [ %139, %137 ], [ %135, %130 ]
  %.089 = phi i32 [ 0, %137 ], [ %136, %130 ]
  %.085 = phi i16 [ 0, %137 ], [ %133, %130 ]
  store i8 %storemerge, ptr %6, align 1, !tbaa !5
  tail call void @XmitWaitForCompletion(ptr noundef nonnull %0)
  %141 = getelementptr inbounds i8, ptr %0, i64 1538
  %142 = load i8, ptr %141, align 2, !tbaa !14
  %.not97 = icmp eq i8 %142, 0
  br i1 %.not97, label %144, label %143

143:                                              ; preds = %140
  tail call void @StopRU(ptr noundef nonnull %0)
  br label %144

144:                                              ; preds = %143, %140
  %145 = tail call ptr @GetFreeCB(ptr noundef nonnull %0)
  %146 = icmp eq ptr %145, null
  br i1 %146, label %203, label %147

147:                                              ; preds = %144
  %148 = getelementptr inbounds i8, ptr %145, i64 8
  store i16 %.085, ptr %148, align 1, !tbaa !19
  %.not112 = icmp eq i32 %.089, 0
  br i1 %.not112, label %._crit_edge, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %147
  %149 = getelementptr inbounds i8, ptr %0, i64 1552
  %150 = getelementptr inbounds i8, ptr %145, i64 10
  %wide.trip.count125 = zext nneg i32 %.089 to i64
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %.preheader
  %indvars.iv122 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next123, %.preheader ]
  %151 = getelementptr inbounds [8 x [32 x i8]], ptr %149, i64 0, i64 %indvars.iv122, i64 0
  %152 = load i8, ptr %151, align 1, !tbaa !16
  %153 = getelementptr inbounds [8 x [6 x i8]], ptr %150, i64 0, i64 %indvars.iv122, i64 0
  store i8 %152, ptr %153, align 1, !tbaa !16
  %154 = getelementptr inbounds [8 x [32 x i8]], ptr %149, i64 0, i64 %indvars.iv122, i64 1
  %155 = load i8, ptr %154, align 1, !tbaa !16
  %156 = getelementptr inbounds [8 x [6 x i8]], ptr %150, i64 0, i64 %indvars.iv122, i64 1
  store i8 %155, ptr %156, align 1, !tbaa !16
  %157 = getelementptr inbounds [8 x [32 x i8]], ptr %149, i64 0, i64 %indvars.iv122, i64 2
  %158 = load i8, ptr %157, align 1, !tbaa !16
  %159 = getelementptr inbounds [8 x [6 x i8]], ptr %150, i64 0, i64 %indvars.iv122, i64 2
  store i8 %158, ptr %159, align 1, !tbaa !16
  %160 = getelementptr inbounds [8 x [32 x i8]], ptr %149, i64 0, i64 %indvars.iv122, i64 3
  %161 = load i8, ptr %160, align 1, !tbaa !16
  %162 = getelementptr inbounds [8 x [6 x i8]], ptr %150, i64 0, i64 %indvars.iv122, i64 3
  store i8 %161, ptr %162, align 1, !tbaa !16
  %163 = getelementptr inbounds [8 x [32 x i8]], ptr %149, i64 0, i64 %indvars.iv122, i64 4
  %164 = load i8, ptr %163, align 1, !tbaa !16
  %165 = getelementptr inbounds [8 x [6 x i8]], ptr %150, i64 0, i64 %indvars.iv122, i64 4
  store i8 %164, ptr %165, align 1, !tbaa !16
  %166 = getelementptr inbounds [8 x [32 x i8]], ptr %149, i64 0, i64 %indvars.iv122, i64 5
  %167 = load i8, ptr %166, align 1, !tbaa !16
  %168 = getelementptr inbounds [8 x [6 x i8]], ptr %150, i64 0, i64 %indvars.iv122, i64 5
  store i8 %167, ptr %168, align 1, !tbaa !16
  %indvars.iv.next123 = add nuw nsw i64 %indvars.iv122, 1
  %exitcond126.not = icmp eq i64 %indvars.iv.next123, %wide.trip.count125
  br i1 %exitcond126.not, label %._crit_edge, label %.preheader, !llvm.loop !21

._crit_edge:                                      ; preds = %.preheader, %147
  %169 = getelementptr inbounds i8, ptr %145, i64 2
  store i16 16387, ptr %169, align 1, !tbaa !22
  store i16 0, ptr %145, align 1, !tbaa !25
  tail call void @BlockIt(ptr noundef nonnull %0, i32 noundef 1)
  %170 = tail call zeroext i8 @IssueCB(ptr noundef nonnull %0, ptr noundef nonnull %145)
  %171 = getelementptr inbounds i8, ptr %0, i64 880
  %172 = load i32, ptr %171, align 8, !tbaa !26
  %173 = add i32 %172, 2
  %174 = tail call zeroext i8 @InByte(ptr noundef nonnull %0, i32 noundef %173)
  %.not98108 = icmp eq i8 %174, 0
  br i1 %.not98108, label %.critedge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %._crit_edge, %176
  %.0109 = phi i16 [ %177, %176 ], [ 2000, %._crit_edge ]
  %175 = icmp sgt i16 %.0109, 0
  br i1 %175, label %176, label %.critedge.thread

176:                                              ; preds = %.lr.ph
  %177 = add nsw i16 %.0109, -1
  tail call void @DelayIt(ptr noundef nonnull %0, i16 noundef zeroext 10)
  %178 = load i32, ptr %171, align 8, !tbaa !26
  %179 = add i32 %178, 2
  %180 = tail call zeroext i8 @InByte(ptr noundef nonnull %0, i32 noundef %179)
  %.not98 = icmp eq i8 %180, 0
  br i1 %.not98, label %.critedge, label %.lr.ph, !llvm.loop !27

.critedge:                                        ; preds = %176
  %181 = icmp eq i16 %177, 0
  br i1 %181, label %182, label %.critedge.thread

182:                                              ; preds = %.critedge
  tail call void @DelayIt(ptr noundef nonnull %0, i16 noundef zeroext 50)
  br label %.critedge.thread

.critedge.thread:                                 ; preds = %.lr.ph, %._crit_edge, %182, %.critedge
  tail call void @BlockIt(ptr noundef nonnull %0, i32 noundef 0)
  %183 = tail call signext i8 @CommandWaitForCompletion(ptr noundef nonnull %145, ptr noundef nonnull %0)
  %184 = getelementptr inbounds i8, ptr %145, i64 208
  %185 = load i32, ptr %184, align 1, !tbaa !28
  store i32 %185, ptr %148, align 1, !tbaa !29
  %186 = getelementptr inbounds i8, ptr %145, i64 15
  store i8 0, ptr %186, align 1, !tbaa !30
  %187 = getelementptr inbounds i8, ptr %145, i64 14
  store i8 0, ptr %187, align 1, !tbaa !31
  %188 = getelementptr inbounds i8, ptr %145, i64 12
  store i16 0, ptr %188, align 1, !tbaa !32
  tail call void @SetFreeCB(ptr noundef nonnull %0, ptr noundef nonnull %145)
  br label %189

189:                                              ; preds = %20, %.critedge.thread
  %.not99 = icmp eq i16 %1, 0
  br i1 %.not99, label %196, label %190

190:                                              ; preds = %189
  %191 = load i8, ptr %6, align 1, !tbaa !5
  %192 = trunc i16 %1 to i8
  %193 = or i8 %191, %192
  %194 = or i8 %193, 1
  store i8 %194, ptr %6, align 1, !tbaa !5
  %195 = tail call signext i8 @StartRU(ptr noundef nonnull %0)
  br label %203

196:                                              ; preds = %189
  %197 = getelementptr inbounds i8, ptr %0, i64 1538
  %198 = load i8, ptr %197, align 2, !tbaa !14
  %.not100 = icmp eq i8 %198, 0
  br i1 %.not100, label %200, label %199

199:                                              ; preds = %196
  tail call void @StopRU(ptr noundef nonnull %0)
  br label %200

200:                                              ; preds = %199, %196
  %201 = load i8, ptr %6, align 1, !tbaa !5
  %202 = or i8 %201, -2
  store i8 %202, ptr %6, align 1, !tbaa !5
  br label %203

203:                                              ; preds = %190, %200, %144
  %.086 = phi i64 [ 4, %144 ], [ 0, %200 ], [ 0, %190 ]
  ret i64 %.086
}

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind speculatable 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, !8, i64 1539}
!6 = !{!"s_data_instance", !7, i64 0, !7, i64 2, !8, i64 4, !8, i64 5, !7, i64 6, !7, i64 8, !7, i64 10, !7, i64 12, !7, i64 14, !8, i64 16, !8, i64 48, !8, i64 80, !8, i64 112, !8, i64 368, !10, i64 880, !10, i64 884, !7, i64 888, !7, i64 890, !8, i64 892, !8, i64 893, !8, i64 894, !8, i64 895, !7, i64 896, !7, i64 898, !7, i64 900, !7, i64 902, !10, i64 904, !10, i64 908, !7, i64 912, !7, i64 914, !8, i64 916, !8, i64 920, !8, i64 921, !7, i64 922, !10, i64 924, !11, i64 928, !11, i64 936, !11, i64 944, !11, i64 952, !11, i64 960, !11, i64 968, !12, i64 976, !12, i64 984, !12, i64 992, !12, i64 1000, !12, i64 1008, !8, i64 1016, !7, i64 1528, !7, i64 1530, !7, i64 1532, !7, i64 1534, !8, i64 1536, !8, i64 1537, !8, i64 1538, !8, i64 1539, !8, i64 1540, !8, i64 1541, !13, i64 1544, !12, i64 1808, !11, i64 1816, !12, i64 1824, !11, i64 1832, !11, i64 1840, !11, i64 1848, !11, i64 1856, !11, i64 1864, !11, i64 1872, !11, i64 1880, !11, i64 1888, !11, i64 1896, !11, i64 1904, !11, i64 1912}
!7 = !{!"short", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"long long", !8, i64 0}
!13 = !{!"mc", !8, i64 0, !7, i64 6, !8, i64 8}
!14 = !{!6, !8, i64 1538}
!15 = !{!6, !7, i64 1550}
!16 = !{!8, !8, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!20, !7, i64 0}
!20 = !{!"MC_CB_STRUCT", !7, i64 0, !8, i64 2}
!21 = distinct !{!21, !18}
!22 = !{!23, !7, i64 2}
!23 = !{!"s_TxCB", !24, i64 0, !10, i64 8, !7, i64 12, !8, i64 14, !8, i64 15, !8, i64 16, !8, i64 80, !10, i64 208, !10, i64 212, !11, i64 216, !11, i64 224, !12, i64 232}
!24 = !{!"CB_Header", !7, i64 0, !7, i64 2, !10, i64 4}
!25 = !{!23, !7, i64 0}
!26 = !{!6, !10, i64 880}
!27 = distinct !{!27, !18}
!28 = !{!23, !10, i64 208}
!29 = !{!23, !10, i64 8}
!30 = !{!23, !8, i64 15}
!31 = !{!23, !8, i64 14}
!32 = !{!23, !7, i64 12}


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