; LLVM IR from lichen-community-systems/signaletic :: hosts/daisy/vendor/libDaisy/Drivers/STM32H7xx_HAL_Driver/Src (usb)

; 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.USB_OTG_EPTypeDef = type { i8, i8, i8, i8, i8, i8, i16, i32, ptr, i32, i32, i32 }
%struct.USB_OTG_INEndpointTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.USB_OTG_DeviceTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [15 x i32], i32 }
%struct.USB_OTG_OUTEndpointTypeDef = type { i32, i32, i32, i32, i32, i32, [2 x i32] }

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @USB_EPStartXfer(ptr noundef %0, ptr noundef %1, i8 noundef zeroext %2) #1 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i16, align 2
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i8 %2, ptr %6, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  %10 = load ptr, ptr %4, align 8, !tbaa !5
  %11 = ptrtoint ptr %10 to i32
  store i32 %11, ptr %7, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #2
  %12 = load ptr, ptr %5, align 8, !tbaa !5
  %13 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %12, i32 0, i32 0
  %14 = load i8, ptr %13, align 8, !tbaa !12
  %15 = zext i8 %14 to i32
  store i32 %15, ptr %8, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #2
  %16 = load ptr, ptr %5, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %16, i32 0, i32 1
  %18 = load i8, ptr %17, align 1, !tbaa !15
  %19 = zext i8 %18 to i32
  %20 = icmp eq i32 %19, 1
  br i1 %20, label %21, label %347

21:                                               ; preds = %3
  %22 = load ptr, ptr %5, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %22, i32 0, i32 10
  %24 = load i32, ptr %23, align 4, !tbaa !16
  %25 = icmp eq i32 %24, 0
  br i1 %25, label %26, label %66

26:                                               ; preds = %21
  %27 = load i32, ptr %7, align 4, !tbaa !10
  %28 = zext i32 %27 to i64
  %29 = add i64 %28, 2304
  %30 = load i32, ptr %8, align 4, !tbaa !10
  %31 = zext i32 %30 to i64
  %32 = mul i64 %31, 32
  %33 = add i64 %29, %32
  %34 = inttoptr i64 %33 to ptr
  %35 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %34, i32 0, i32 4
  %36 = load volatile i32, ptr %35, align 4, !tbaa !17
  %37 = zext i32 %36 to i64
  %38 = and i64 %37, -536346625
  %39 = trunc i64 %38 to i32
  store volatile i32 %39, ptr %35, align 4, !tbaa !17
  %40 = load i32, ptr %7, align 4, !tbaa !10
  %41 = zext i32 %40 to i64
  %42 = add i64 %41, 2304
  %43 = load i32, ptr %8, align 4, !tbaa !10
  %44 = zext i32 %43 to i64
  %45 = mul i64 %44, 32
  %46 = add i64 %42, %45
  %47 = inttoptr i64 %46 to ptr
  %48 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %47, i32 0, i32 4
  %49 = load volatile i32, ptr %48, align 4, !tbaa !17
  %50 = zext i32 %49 to i64
  %51 = or i64 %50, 524288
  %52 = trunc i64 %51 to i32
  store volatile i32 %52, ptr %48, align 4, !tbaa !17
  %53 = load i32, ptr %7, align 4, !tbaa !10
  %54 = zext i32 %53 to i64
  %55 = add i64 %54, 2304
  %56 = load i32, ptr %8, align 4, !tbaa !10
  %57 = zext i32 %56 to i64
  %58 = mul i64 %57, 32
  %59 = add i64 %55, %58
  %60 = inttoptr i64 %59 to ptr
  %61 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %60, i32 0, i32 4
  %62 = load volatile i32, ptr %61, align 4, !tbaa !17
  %63 = zext i32 %62 to i64
  %64 = and i64 %63, -524288
  %65 = trunc i64 %64 to i32
  store volatile i32 %65, ptr %61, align 4, !tbaa !17
  br label %172

66:                                               ; preds = %21
  %67 = load i32, ptr %7, align 4, !tbaa !10
  %68 = zext i32 %67 to i64
  %69 = add i64 %68, 2304
  %70 = load i32, ptr %8, align 4, !tbaa !10
  %71 = zext i32 %70 to i64
  %72 = mul i64 %71, 32
  %73 = add i64 %69, %72
  %74 = inttoptr i64 %73 to ptr
  %75 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %74, i32 0, i32 4
  %76 = load volatile i32, ptr %75, align 4, !tbaa !17
  %77 = zext i32 %76 to i64
  %78 = and i64 %77, -524288
  %79 = trunc i64 %78 to i32
  store volatile i32 %79, ptr %75, align 4, !tbaa !17
  %80 = load i32, ptr %7, align 4, !tbaa !10
  %81 = zext i32 %80 to i64
  %82 = add i64 %81, 2304
  %83 = load i32, ptr %8, align 4, !tbaa !10
  %84 = zext i32 %83 to i64
  %85 = mul i64 %84, 32
  %86 = add i64 %82, %85
  %87 = inttoptr i64 %86 to ptr
  %88 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %87, i32 0, i32 4
  %89 = load volatile i32, ptr %88, align 4, !tbaa !17
  %90 = zext i32 %89 to i64
  %91 = and i64 %90, -536346625
  %92 = trunc i64 %91 to i32
  store volatile i32 %92, ptr %88, align 4, !tbaa !17
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %93, i32 0, i32 10
  %95 = load i32, ptr %94, align 4, !tbaa !16
  %96 = load ptr, ptr %5, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %96, i32 0, i32 7
  %98 = load i32, ptr %97, align 8, !tbaa !19
  %99 = add i32 %95, %98
  %100 = sub i32 %99, 1
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %101, i32 0, i32 7
  %103 = load i32, ptr %102, align 8, !tbaa !19
  %104 = udiv i32 %100, %103
  %105 = shl i32 %104, 19
  %106 = zext i32 %105 to i64
  %107 = and i64 536346624, %106
  %108 = load i32, ptr %7, align 4, !tbaa !10
  %109 = zext i32 %108 to i64
  %110 = add i64 %109, 2304
  %111 = load i32, ptr %8, align 4, !tbaa !10
  %112 = zext i32 %111 to i64
  %113 = mul i64 %112, 32
  %114 = add i64 %110, %113
  %115 = inttoptr i64 %114 to ptr
  %116 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %115, i32 0, i32 4
  %117 = load volatile i32, ptr %116, align 4, !tbaa !17
  %118 = zext i32 %117 to i64
  %119 = or i64 %118, %107
  %120 = trunc i64 %119 to i32
  store volatile i32 %120, ptr %116, align 4, !tbaa !17
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %121, i32 0, i32 10
  %123 = load i32, ptr %122, align 4, !tbaa !16
  %124 = zext i32 %123 to i64
  %125 = and i64 524287, %124
  %126 = load i32, ptr %7, align 4, !tbaa !10
  %127 = zext i32 %126 to i64
  %128 = add i64 %127, 2304
  %129 = load i32, ptr %8, align 4, !tbaa !10
  %130 = zext i32 %129 to i64
  %131 = mul i64 %130, 32
  %132 = add i64 %128, %131
  %133 = inttoptr i64 %132 to ptr
  %134 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %133, i32 0, i32 4
  %135 = load volatile i32, ptr %134, align 4, !tbaa !17
  %136 = zext i32 %135 to i64
  %137 = or i64 %136, %125
  %138 = trunc i64 %137 to i32
  store volatile i32 %138, ptr %134, align 4, !tbaa !17
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %139, i32 0, i32 3
  %141 = load i8, ptr %140, align 1, !tbaa !20
  %142 = zext i8 %141 to i32
  %143 = icmp eq i32 %142, 1
  br i1 %143, label %144, label %171

144:                                              ; preds = %66
  %145 = load i32, ptr %7, align 4, !tbaa !10
  %146 = zext i32 %145 to i64
  %147 = add i64 %146, 2304
  %148 = load i32, ptr %8, align 4, !tbaa !10
  %149 = zext i32 %148 to i64
  %150 = mul i64 %149, 32
  %151 = add i64 %147, %150
  %152 = inttoptr i64 %151 to ptr
  %153 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %152, i32 0, i32 4
  %154 = load volatile i32, ptr %153, align 4, !tbaa !17
  %155 = zext i32 %154 to i64
  %156 = and i64 %155, -1610612737
  %157 = trunc i64 %156 to i32
  store volatile i32 %157, ptr %153, align 4, !tbaa !17
  %158 = load i32, ptr %7, align 4, !tbaa !10
  %159 = zext i32 %158 to i64
  %160 = add i64 %159, 2304
  %161 = load i32, ptr %8, align 4, !tbaa !10
  %162 = zext i32 %161 to i64
  %163 = mul i64 %162, 32
  %164 = add i64 %160, %163
  %165 = inttoptr i64 %164 to ptr
  %166 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %165, i32 0, i32 4
  %167 = load volatile i32, ptr %166, align 4, !tbaa !17
  %168 = zext i32 %167 to i64
  %169 = or i64 %168, 536870912
  %170 = trunc i64 %169 to i32
  store volatile i32 %170, ptr %166, align 4, !tbaa !17
  br label %171

171:                                              ; preds = %144, %66
  br label %172

172:                                              ; preds = %171, %26
  %173 = load i8, ptr %6, align 1, !tbaa !9
  %174 = zext i8 %173 to i32
  %175 = icmp eq i32 %174, 1
  br i1 %175, label %176, label %252

176:                                              ; preds = %172
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %177, i32 0, i32 9
  %179 = load i32, ptr %178, align 8, !tbaa !21
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %194

181:                                              ; preds = %176
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %182, i32 0, i32 9
  %184 = load i32, ptr %183, align 8, !tbaa !21
  %185 = load i32, ptr %7, align 4, !tbaa !10
  %186 = zext i32 %185 to i64
  %187 = add i64 %186, 2304
  %188 = load i32, ptr %8, align 4, !tbaa !10
  %189 = zext i32 %188 to i64
  %190 = mul i64 %189, 32
  %191 = add i64 %187, %190
  %192 = inttoptr i64 %191 to ptr
  %193 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %192, i32 0, i32 5
  store volatile i32 %184, ptr %193, align 4, !tbaa !22
  br label %194

194:                                              ; preds = %181, %176
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %195, i32 0, i32 3
  %197 = load i8, ptr %196, align 1, !tbaa !20
  %198 = zext i8 %197 to i32
  %199 = icmp eq i32 %198, 1
  br i1 %199, label %200, label %238

200:                                              ; preds = %194
  %201 = load i32, ptr %7, align 4, !tbaa !10
  %202 = zext i32 %201 to i64
  %203 = add i64 %202, 2048
  %204 = inttoptr i64 %203 to ptr
  %205 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %204, i32 0, i32 2
  %206 = load volatile i32, ptr %205, align 4, !tbaa !23
  %207 = and i32 %206, 256
  %208 = icmp eq i32 %207, 0
  br i1 %208, label %209, label %223

209:                                              ; preds = %200
  %210 = load i32, ptr %7, align 4, !tbaa !10
  %211 = zext i32 %210 to i64
  %212 = add i64 %211, 2304
  %213 = load i32, ptr %8, align 4, !tbaa !10
  %214 = zext i32 %213 to i64
  %215 = mul i64 %214, 32
  %216 = add i64 %212, %215
  %217 = inttoptr i64 %216 to ptr
  %218 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %217, i32 0, i32 0
  %219 = load volatile i32, ptr %218, align 4, !tbaa !25
  %220 = zext i32 %219 to i64
  %221 = or i64 %220, 536870912
  %222 = trunc i64 %221 to i32
  store volatile i32 %222, ptr %218, align 4, !tbaa !25
  br label %237

223:                                              ; preds = %200
  %224 = load i32, ptr %7, align 4, !tbaa !10
  %225 = zext i32 %224 to i64
  %226 = add i64 %225, 2304
  %227 = load i32, ptr %8, align 4, !tbaa !10
  %228 = zext i32 %227 to i64
  %229 = mul i64 %228, 32
  %230 = add i64 %226, %229
  %231 = inttoptr i64 %230 to ptr
  %232 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %231, i32 0, i32 0
  %233 = load volatile i32, ptr %232, align 4, !tbaa !25
  %234 = zext i32 %233 to i64
  %235 = or i64 %234, 268435456
  %236 = trunc i64 %235 to i32
  store volatile i32 %236, ptr %232, align 4, !tbaa !25
  br label %237

237:                                              ; preds = %223, %209
  br label %238

238:                                              ; preds = %237, %194
  %239 = load i32, ptr %7, align 4, !tbaa !10
  %240 = zext i32 %239 to i64
  %241 = add i64 %240, 2304
  %242 = load i32, ptr %8, align 4, !tbaa !10
  %243 = zext i32 %242 to i64
  %244 = mul i64 %243, 32
  %245 = add i64 %241, %244
  %246 = inttoptr i64 %245 to ptr
  %247 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %246, i32 0, i32 0
  %248 = load volatile i32, ptr %247, align 4, !tbaa !25
  %249 = zext i32 %248 to i64
  %250 = or i64 %249, 2214592512
  %251 = trunc i64 %250 to i32
  store volatile i32 %251, ptr %247, align 4, !tbaa !25
  br label %346

252:                                              ; preds = %172
  %253 = load i32, ptr %7, align 4, !tbaa !10
  %254 = zext i32 %253 to i64
  %255 = add i64 %254, 2304
  %256 = load i32, ptr %8, align 4, !tbaa !10
  %257 = zext i32 %256 to i64
  %258 = mul i64 %257, 32
  %259 = add i64 %255, %258
  %260 = inttoptr i64 %259 to ptr
  %261 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %260, i32 0, i32 0
  %262 = load volatile i32, ptr %261, align 4, !tbaa !25
  %263 = zext i32 %262 to i64
  %264 = or i64 %263, 2214592512
  %265 = trunc i64 %264 to i32
  store volatile i32 %265, ptr %261, align 4, !tbaa !25
  %266 = load ptr, ptr %5, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %266, i32 0, i32 3
  %268 = load i8, ptr %267, align 1, !tbaa !20
  %269 = zext i8 %268 to i32
  %270 = icmp ne i32 %269, 1
  br i1 %270, label %271, label %294

271:                                              ; preds = %252
  %272 = load ptr, ptr %5, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %272, i32 0, i32 10
  %274 = load i32, ptr %273, align 4, !tbaa !16
  %275 = icmp ugt i32 %274, 0
  br i1 %275, label %276, label %293

276:                                              ; preds = %271
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %277, i32 0, i32 0
  %279 = load i8, ptr %278, align 8, !tbaa !12
  %280 = zext i8 %279 to i32
  %281 = and i32 %280, 15
  %282 = zext i32 %281 to i64
  %283 = shl i64 1, %282
  %284 = load i32, ptr %7, align 4, !tbaa !10
  %285 = zext i32 %284 to i64
  %286 = add i64 %285, 2048
  %287 = inttoptr i64 %286 to ptr
  %288 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %287, i32 0, i32 13
  %289 = load volatile i32, ptr %288, align 4, !tbaa !26
  %290 = zext i32 %289 to i64
  %291 = or i64 %290, %283
  %292 = trunc i64 %291 to i32
  store volatile i32 %292, ptr %288, align 4, !tbaa !26
  br label %293

293:                                              ; preds = %276, %271
  br label %345

294:                                              ; preds = %252
  %295 = load i32, ptr %7, align 4, !tbaa !10
  %296 = zext i32 %295 to i64
  %297 = add i64 %296, 2048
  %298 = inttoptr i64 %297 to ptr
  %299 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %298, i32 0, i32 2
  %300 = load volatile i32, ptr %299, align 4, !tbaa !23
  %301 = and i32 %300, 256
  %302 = icmp eq i32 %301, 0
  br i1 %302, label %303, label %317

303:                                              ; preds = %294
  %304 = load i32, ptr %7, align 4, !tbaa !10
  %305 = zext i32 %304 to i64
  %306 = add i64 %305, 2304
  %307 = load i32, ptr %8, align 4, !tbaa !10
  %308 = zext i32 %307 to i64
  %309 = mul i64 %308, 32
  %310 = add i64 %306, %309
  %311 = inttoptr i64 %310 to ptr
  %312 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %311, i32 0, i32 0
  %313 = load volatile i32, ptr %312, align 4, !tbaa !25
  %314 = zext i32 %313 to i64
  %315 = or i64 %314, 536870912
  %316 = trunc i64 %315 to i32
  store volatile i32 %316, ptr %312, align 4, !tbaa !25
  br label %331

317:                                              ; preds = %294
  %318 = load i32, ptr %7, align 4, !tbaa !10
  %319 = zext i32 %318 to i64
  %320 = add i64 %319, 2304
  %321 = load i32, ptr %8, align 4, !tbaa !10
  %322 = zext i32 %321 to i64
  %323 = mul i64 %322, 32
  %324 = add i64 %320, %323
  %325 = inttoptr i64 %324 to ptr
  %326 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %325, i32 0, i32 0
  %327 = load volatile i32, ptr %326, align 4, !tbaa !25
  %328 = zext i32 %327 to i64
  %329 = or i64 %328, 268435456
  %330 = trunc i64 %329 to i32
  store volatile i32 %330, ptr %326, align 4, !tbaa !25
  br label %331

331:                                              ; preds = %317, %303
  %332 = load ptr, ptr %4, align 8, !tbaa !5
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %333, i32 0, i32 8
  %335 = load ptr, ptr %334, align 8, !tbaa !27
  %336 = load ptr, ptr %5, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %336, i32 0, i32 0
  %338 = load i8, ptr %337, align 8, !tbaa !12
  %339 = load ptr, ptr %5, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %339, i32 0, i32 10
  %341 = load i32, ptr %340, align 4, !tbaa !16
  %342 = trunc i32 %341 to i16
  %343 = load i8, ptr %6, align 1, !tbaa !9
  %344 = call i32 @USB_WritePacket(ptr noundef %332, ptr noundef %335, i8 noundef zeroext %338, i16 noundef zeroext %342, i8 noundef zeroext %343)
  br label %345

345:                                              ; preds = %331, %293
  br label %346

346:                                              ; preds = %345, %238
  br label %546

347:                                              ; preds = %3
  %348 = load i32, ptr %7, align 4, !tbaa !10
  %349 = zext i32 %348 to i64
  %350 = add i64 %349, 2816
  %351 = load i32, ptr %8, align 4, !tbaa !10
  %352 = zext i32 %351 to i64
  %353 = mul i64 %352, 32
  %354 = add i64 %350, %353
  %355 = inttoptr i64 %354 to ptr
  %356 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %355, i32 0, i32 4
  %357 = load volatile i32, ptr %356, align 4, !tbaa !28
  %358 = zext i32 %357 to i64
  %359 = and i64 %358, -524288
  %360 = trunc i64 %359 to i32
  store volatile i32 %360, ptr %356, align 4, !tbaa !28
  %361 = load i32, ptr %7, align 4, !tbaa !10
  %362 = zext i32 %361 to i64
  %363 = add i64 %362, 2816
  %364 = load i32, ptr %8, align 4, !tbaa !10
  %365 = zext i32 %364 to i64
  %366 = mul i64 %365, 32
  %367 = add i64 %363, %366
  %368 = inttoptr i64 %367 to ptr
  %369 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %368, i32 0, i32 4
  %370 = load volatile i32, ptr %369, align 4, !tbaa !28
  %371 = zext i32 %370 to i64
  %372 = and i64 %371, -536346625
  %373 = trunc i64 %372 to i32
  store volatile i32 %373, ptr %369, align 4, !tbaa !28
  %374 = load ptr, ptr %5, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %374, i32 0, i32 10
  %376 = load i32, ptr %375, align 4, !tbaa !16
  %377 = icmp eq i32 %376, 0
  br i1 %377, label %378, label %410

378:                                              ; preds = %347
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %379, i32 0, i32 7
  %381 = load i32, ptr %380, align 8, !tbaa !19
  %382 = zext i32 %381 to i64
  %383 = and i64 524287, %382
  %384 = load i32, ptr %7, align 4, !tbaa !10
  %385 = zext i32 %384 to i64
  %386 = add i64 %385, 2816
  %387 = load i32, ptr %8, align 4, !tbaa !10
  %388 = zext i32 %387 to i64
  %389 = mul i64 %388, 32
  %390 = add i64 %386, %389
  %391 = inttoptr i64 %390 to ptr
  %392 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %391, i32 0, i32 4
  %393 = load volatile i32, ptr %392, align 4, !tbaa !28
  %394 = zext i32 %393 to i64
  %395 = or i64 %394, %383
  %396 = trunc i64 %395 to i32
  store volatile i32 %396, ptr %392, align 4, !tbaa !28
  %397 = load i32, ptr %7, align 4, !tbaa !10
  %398 = zext i32 %397 to i64
  %399 = add i64 %398, 2816
  %400 = load i32, ptr %8, align 4, !tbaa !10
  %401 = zext i32 %400 to i64
  %402 = mul i64 %401, 32
  %403 = add i64 %399, %402
  %404 = inttoptr i64 %403 to ptr
  %405 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %404, i32 0, i32 4
  %406 = load volatile i32, ptr %405, align 4, !tbaa !28
  %407 = zext i32 %406 to i64
  %408 = or i64 %407, 524288
  %409 = trunc i64 %408 to i32
  store volatile i32 %409, ptr %405, align 4, !tbaa !28
  br label %463

410:                                              ; preds = %347
  %411 = load ptr, ptr %5, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %411, i32 0, i32 10
  %413 = load i32, ptr %412, align 4, !tbaa !16
  %414 = load ptr, ptr %5, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %414, i32 0, i32 7
  %416 = load i32, ptr %415, align 8, !tbaa !19
  %417 = add i32 %413, %416
  %418 = sub i32 %417, 1
  %419 = load ptr, ptr %5, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %419, i32 0, i32 7
  %421 = load i32, ptr %420, align 8, !tbaa !19
  %422 = udiv i32 %418, %421
  %423 = trunc i32 %422 to i16
  store i16 %423, ptr %9, align 2, !tbaa !30
  %424 = load i16, ptr %9, align 2, !tbaa !30
  %425 = zext i16 %424 to i32
  %426 = shl i32 %425, 19
  %427 = zext i32 %426 to i64
  %428 = and i64 536346624, %427
  %429 = load i32, ptr %7, align 4, !tbaa !10
  %430 = zext i32 %429 to i64
  %431 = add i64 %430, 2816
  %432 = load i32, ptr %8, align 4, !tbaa !10
  %433 = zext i32 %432 to i64
  %434 = mul i64 %433, 32
  %435 = add i64 %431, %434
  %436 = inttoptr i64 %435 to ptr
  %437 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %436, i32 0, i32 4
  %438 = load volatile i32, ptr %437, align 4, !tbaa !28
  %439 = zext i32 %438 to i64
  %440 = or i64 %439, %428
  %441 = trunc i64 %440 to i32
  store volatile i32 %441, ptr %437, align 4, !tbaa !28
  %442 = load ptr, ptr %5, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %442, i32 0, i32 7
  %444 = load i32, ptr %443, align 8, !tbaa !19
  %445 = load i16, ptr %9, align 2, !tbaa !30
  %446 = zext i16 %445 to i32
  %447 = mul i32 %444, %446
  %448 = zext i32 %447 to i64
  %449 = and i64 524287, %448
  %450 = load i32, ptr %7, align 4, !tbaa !10
  %451 = zext i32 %450 to i64
  %452 = add i64 %451, 2816
  %453 = load i32, ptr %8, align 4, !tbaa !10
  %454 = zext i32 %453 to i64
  %455 = mul i64 %454, 32
  %456 = add i64 %452, %455
  %457 = inttoptr i64 %456 to ptr
  %458 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %457, i32 0, i32 4
  %459 = load volatile i32, ptr %458, align 4, !tbaa !28
  %460 = zext i32 %459 to i64
  %461 = or i64 %460, %449
  %462 = trunc i64 %461 to i32
  store volatile i32 %462, ptr %458, align 4, !tbaa !28
  br label %463

463:                                              ; preds = %410, %378
  %464 = load i8, ptr %6, align 1, !tbaa !9
  %465 = zext i8 %464 to i32
  %466 = icmp eq i32 %465, 1
  br i1 %466, label %467, label %488

467:                                              ; preds = %463
  %468 = load ptr, ptr %5, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %468, i32 0, i32 8
  %470 = load ptr, ptr %469, align 8, !tbaa !27
  %471 = ptrtoint ptr %470 to i32
  %472 = icmp ne i32 %471, 0
  br i1 %472, label %473, label %487

473:                                              ; preds = %467
  %474 = load ptr, ptr %5, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %474, i32 0, i32 8
  %476 = load ptr, ptr %475, align 8, !tbaa !27
  %477 = ptrtoint ptr %476 to i32
  %478 = load i32, ptr %7, align 4, !tbaa !10
  %479 = zext i32 %478 to i64
  %480 = add i64 %479, 2816
  %481 = load i32, ptr %8, align 4, !tbaa !10
  %482 = zext i32 %481 to i64
  %483 = mul i64 %482, 32
  %484 = add i64 %480, %483
  %485 = inttoptr i64 %484 to ptr
  %486 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %485, i32 0, i32 5
  store volatile i32 %477, ptr %486, align 4, !tbaa !31
  br label %487

487:                                              ; preds = %473, %467
  br label %488

488:                                              ; preds = %487, %463
  %489 = load ptr, ptr %5, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.USB_OTG_EPTypeDef, ptr %489, i32 0, i32 3
  %491 = load i8, ptr %490, align 1, !tbaa !20
  %492 = zext i8 %491 to i32
  %493 = icmp eq i32 %492, 1
  br i1 %493, label %494, label %532

494:                                              ; preds = %488
  %495 = load i32, ptr %7, align 4, !tbaa !10
  %496 = zext i32 %495 to i64
  %497 = add i64 %496, 2048
  %498 = inttoptr i64 %497 to ptr
  %499 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %498, i32 0, i32 2
  %500 = load volatile i32, ptr %499, align 4, !tbaa !23
  %501 = and i32 %500, 256
  %502 = icmp eq i32 %501, 0
  br i1 %502, label %503, label %517

503:                                              ; preds = %494
  %504 = load i32, ptr %7, align 4, !tbaa !10
  %505 = zext i32 %504 to i64
  %506 = add i64 %505, 2816
  %507 = load i32, ptr %8, align 4, !tbaa !10
  %508 = zext i32 %507 to i64
  %509 = mul i64 %508, 32
  %510 = add i64 %506, %509
  %511 = inttoptr i64 %510 to ptr
  %512 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %511, i32 0, i32 0
  %513 = load volatile i32, ptr %512, align 4, !tbaa !32
  %514 = zext i32 %513 to i64
  %515 = or i64 %514, 536870912
  %516 = trunc i64 %515 to i32
  store volatile i32 %516, ptr %512, align 4, !tbaa !32
  br label %531

517:                                              ; preds = %494
  %518 = load i32, ptr %7, align 4, !tbaa !10
  %519 = zext i32 %518 to i64
  %520 = add i64 %519, 2816
  %521 = load i32, ptr %8, align 4, !tbaa !10
  %522 = zext i32 %521 to i64
  %523 = mul i64 %522, 32
  %524 = add i64 %520, %523
  %525 = inttoptr i64 %524 to ptr
  %526 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %525, i32 0, i32 0
  %527 = load volatile i32, ptr %526, align 4, !tbaa !32
  %528 = zext i32 %527 to i64
  %529 = or i64 %528, 268435456
  %530 = trunc i64 %529 to i32
  store volatile i32 %530, ptr %526, align 4, !tbaa !32
  br label %531

531:                                              ; preds = %517, %503
  br label %532

532:                                              ; preds = %531, %488
  %533 = load i32, ptr %7, align 4, !tbaa !10
  %534 = zext i32 %533 to i64
  %535 = add i64 %534, 2816
  %536 = load i32, ptr %8, align 4, !tbaa !10
  %537 = zext i32 %536 to i64
  %538 = mul i64 %537, 32
  %539 = add i64 %535, %538
  %540 = inttoptr i64 %539 to ptr
  %541 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %540, i32 0, i32 0
  %542 = load volatile i32, ptr %541, align 4, !tbaa !32
  %543 = zext i32 %542 to i64
  %544 = or i64 %543, 2214592512
  %545 = trunc i64 %544 to i32
  store volatile i32 %545, ptr %541, align 4, !tbaa !32
  br label %546

546:                                              ; preds = %532, %346
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  ret i32 0
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @USB_WritePacket(ptr noundef, ptr noundef, i8 noundef zeroext, i16 noundef zeroext, i8 noundef zeroext) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !7, i64 0}
!13 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4, !7, i64 5, !14, i64 6, !11, i64 8, !6, i64 16, !11, i64 24, !11, i64 28, !11, i64 32}
!14 = !{!"short", !7, i64 0}
!15 = !{!13, !7, i64 1}
!16 = !{!13, !11, i64 28}
!17 = !{!18, !11, i64 16}
!18 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28}
!19 = !{!13, !11, i64 8}
!20 = !{!13, !7, i64 3}
!21 = !{!13, !11, i64 24}
!22 = !{!18, !11, i64 20}
!23 = !{!24, !11, i64 8}
!24 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !7, i64 72, !11, i64 132}
!25 = !{!18, !11, i64 0}
!26 = !{!24, !11, i64 52}
!27 = !{!13, !6, i64 16}
!28 = !{!29, !11, i64 16}
!29 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24}
!30 = !{!14, !14, i64 0}
!31 = !{!29, !11, i64 20}
!32 = !{!29, !11, i64 0}


; 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
define dso_local noundef i32 @USB_EPStartXfer(ptr noundef %0, ptr nocapture noundef readonly %1, i8 noundef zeroext %2) local_unnamed_addr #0 {
  %4 = ptrtoint ptr %0 to i64
  %5 = load i8, ptr %1, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 1
  %7 = load i8, ptr %6, align 1, !tbaa !12
  %8 = icmp eq i8 %7, 1
  br i1 %8, label %9, label %123

9:                                                ; preds = %3
  %10 = getelementptr inbounds i8, ptr %1, i64 28
  %11 = load i32, ptr %10, align 4, !tbaa !13
  %12 = icmp eq i32 %11, 0
  %13 = and i64 %4, 4294967295
  %14 = add nuw nsw i64 %13, 2304
  %15 = zext i8 %5 to i64
  %16 = shl nuw nsw i64 %15, 5
  %17 = add nuw nsw i64 %14, %16
  %18 = inttoptr i64 %17 to ptr
  %19 = getelementptr inbounds i8, ptr %18, i64 16
  %20 = load volatile i32, ptr %19, align 4, !tbaa !14
  br i1 %12, label %21, label %27

21:                                               ; preds = %9
  %22 = and i32 %20, -536346625
  store volatile i32 %22, ptr %19, align 4, !tbaa !14
  %23 = load volatile i32, ptr %19, align 4, !tbaa !14
  %24 = or i32 %23, 524288
  store volatile i32 %24, ptr %19, align 4, !tbaa !14
  %25 = load volatile i32, ptr %19, align 4, !tbaa !14
  %26 = and i32 %25, -524288
  br label %.sink.split

27:                                               ; preds = %9
  %28 = and i32 %20, -524288
  store volatile i32 %28, ptr %19, align 4, !tbaa !14
  %29 = load volatile i32, ptr %19, align 4, !tbaa !14
  %30 = and i32 %29, -536346625
  store volatile i32 %30, ptr %19, align 4, !tbaa !14
  %31 = getelementptr inbounds i8, ptr %1, i64 8
  %32 = load i32, ptr %31, align 8, !tbaa !16
  %33 = add i32 %11, -1
  %34 = add i32 %33, %32
  %35 = udiv i32 %34, %32
  %36 = shl i32 %35, 19
  %37 = and i32 %36, 536346624
  %38 = load volatile i32, ptr %19, align 4, !tbaa !14
  %39 = or i32 %37, %38
  store volatile i32 %39, ptr %19, align 4, !tbaa !14
  %40 = and i32 %11, 524287
  %41 = load volatile i32, ptr %19, align 4, !tbaa !14
  %42 = or i32 %41, %40
  store volatile i32 %42, ptr %19, align 4, !tbaa !14
  %43 = getelementptr inbounds i8, ptr %1, i64 3
  %44 = load i8, ptr %43, align 1, !tbaa !17
  %45 = icmp eq i8 %44, 1
  br i1 %45, label %46, label %51

46:                                               ; preds = %27
  %47 = load volatile i32, ptr %19, align 4, !tbaa !14
  %48 = and i32 %47, -1610612737
  store volatile i32 %48, ptr %19, align 4, !tbaa !14
  %49 = load volatile i32, ptr %19, align 4, !tbaa !14
  %50 = or i32 %49, 536870912
  br label %.sink.split

.sink.split:                                      ; preds = %21, %46
  %.sink = phi i32 [ %50, %46 ], [ %26, %21 ]
  store volatile i32 %.sink, ptr %19, align 4, !tbaa !14
  br label %51

51:                                               ; preds = %.sink.split, %27
  %52 = icmp eq i8 %2, 1
  br i1 %52, label %53, label %89

53:                                               ; preds = %51
  %54 = getelementptr inbounds i8, ptr %1, i64 24
  %55 = load i32, ptr %54, align 8, !tbaa !18
  %.not92 = icmp eq i32 %55, 0
  br i1 %.not92, label %64, label %56

56:                                               ; preds = %53
  %57 = and i64 %4, 4294967295
  %58 = add nuw nsw i64 %57, 2304
  %59 = zext i8 %5 to i64
  %60 = shl nuw nsw i64 %59, 5
  %61 = add nuw nsw i64 %58, %60
  %62 = inttoptr i64 %61 to ptr
  %63 = getelementptr inbounds i8, ptr %62, i64 20
  store volatile i32 %55, ptr %63, align 4, !tbaa !19
  br label %64

64:                                               ; preds = %56, %53
  %65 = getelementptr inbounds i8, ptr %1, i64 3
  %66 = load i8, ptr %65, align 1, !tbaa !17
  %67 = icmp eq i8 %66, 1
  %68 = and i64 %4, 4294967295
  br i1 %67, label %69, label %._crit_edge

._crit_edge:                                      ; preds = %64
  %.pre93 = add nuw nsw i64 %68, 2304
  %.pre95 = zext i8 %5 to i64
  %.pre97 = shl nuw nsw i64 %.pre95, 5
  %.pre99 = add nuw nsw i64 %.pre93, %.pre97
  %.pre101 = inttoptr i64 %.pre99 to ptr
  br label %86

69:                                               ; preds = %64
  %70 = add nuw nsw i64 %68, 2048
  %71 = inttoptr i64 %70 to ptr
  %72 = getelementptr inbounds i8, ptr %71, i64 8
  %73 = load volatile i32, ptr %72, align 4, !tbaa !20
  %74 = and i32 %73, 256
  %75 = icmp eq i32 %74, 0
  %76 = add nuw nsw i64 %68, 2304
  %77 = zext i8 %5 to i64
  %78 = shl nuw nsw i64 %77, 5
  %79 = add nuw nsw i64 %76, %78
  %80 = inttoptr i64 %79 to ptr
  %81 = load volatile i32, ptr %80, align 4, !tbaa !22
  br i1 %75, label %82, label %84

82:                                               ; preds = %69
  %83 = or i32 %81, 536870912
  store volatile i32 %83, ptr %80, align 4, !tbaa !22
  br label %86

84:                                               ; preds = %69
  %85 = or i32 %81, 268435456
  store volatile i32 %85, ptr %80, align 4, !tbaa !22
  br label %86

86:                                               ; preds = %._crit_edge, %82, %84
  %.pre-phi102 = phi ptr [ %.pre101, %._crit_edge ], [ %80, %82 ], [ %80, %84 ]
  %87 = load volatile i32, ptr %.pre-phi102, align 4, !tbaa !22
  %88 = or i32 %87, -2080374784
  store volatile i32 %88, ptr %.pre-phi102, align 4, !tbaa !22
  br label %181

89:                                               ; preds = %51
  %90 = and i64 %4, 4294967295
  %91 = add nuw nsw i64 %90, 2304
  %92 = zext i8 %5 to i64
  %93 = shl nuw nsw i64 %92, 5
  %94 = add nuw nsw i64 %91, %93
  %95 = inttoptr i64 %94 to ptr
  %96 = load volatile i32, ptr %95, align 4, !tbaa !22
  %97 = or i32 %96, -2080374784
  store volatile i32 %97, ptr %95, align 4, !tbaa !22
  %98 = getelementptr inbounds i8, ptr %1, i64 3
  %99 = load i8, ptr %98, align 1, !tbaa !17
  %.not90 = icmp eq i8 %99, 1
  br i1 %.not90, label %110, label %100

100:                                              ; preds = %89
  br i1 %12, label %181, label %101

101:                                              ; preds = %100
  %102 = and i8 %5, 15
  %103 = zext nneg i8 %102 to i32
  %104 = shl nuw nsw i32 1, %103
  %105 = add nuw nsw i64 %90, 2048
  %106 = inttoptr i64 %105 to ptr
  %107 = getelementptr inbounds i8, ptr %106, i64 52
  %108 = load volatile i32, ptr %107, align 4, !tbaa !23
  %109 = or i32 %108, %104
  store volatile i32 %109, ptr %107, align 4, !tbaa !23
  br label %181

110:                                              ; preds = %89
  %111 = add nuw nsw i64 %90, 2048
  %112 = inttoptr i64 %111 to ptr
  %113 = getelementptr inbounds i8, ptr %112, i64 8
  %114 = load volatile i32, ptr %113, align 4, !tbaa !20
  %115 = and i32 %114, 256
  %116 = icmp eq i32 %115, 0
  %117 = load volatile i32, ptr %95, align 4, !tbaa !22
  %. = select i1 %116, i32 536870912, i32 268435456
  %118 = or i32 %117, %.
  store volatile i32 %118, ptr %95, align 4, !tbaa !22
  %119 = getelementptr inbounds i8, ptr %1, i64 16
  %120 = load ptr, ptr %119, align 8, !tbaa !24
  %121 = trunc i32 %11 to i16
  %122 = tail call i32 @USB_WritePacket(ptr noundef %0, ptr noundef %120, i8 noundef zeroext %5, i16 noundef zeroext %121, i8 noundef zeroext %2)
  br label %181

123:                                              ; preds = %3
  %124 = and i64 %4, 4294967295
  %125 = add nuw nsw i64 %124, 2816
  %126 = zext i8 %5 to i64
  %127 = shl nuw nsw i64 %126, 5
  %128 = add nuw nsw i64 %125, %127
  %129 = inttoptr i64 %128 to ptr
  %130 = getelementptr inbounds i8, ptr %129, i64 16
  %131 = load volatile i32, ptr %130, align 4, !tbaa !25
  %132 = and i32 %131, -524288
  store volatile i32 %132, ptr %130, align 4, !tbaa !25
  %133 = load volatile i32, ptr %130, align 4, !tbaa !25
  %134 = and i32 %133, -536346625
  store volatile i32 %134, ptr %130, align 4, !tbaa !25
  %135 = getelementptr inbounds i8, ptr %1, i64 28
  %136 = load i32, ptr %135, align 4, !tbaa !13
  %137 = icmp eq i32 %136, 0
  %138 = getelementptr inbounds i8, ptr %1, i64 8
  %139 = load i32, ptr %138, align 8, !tbaa !16
  br i1 %137, label %140, label %144

140:                                              ; preds = %123
  %141 = and i32 %139, 524287
  %142 = load volatile i32, ptr %130, align 4, !tbaa !25
  %143 = or i32 %142, %141
  store volatile i32 %143, ptr %130, align 4, !tbaa !25
  br label %155

144:                                              ; preds = %123
  %145 = add i32 %136, -1
  %146 = add i32 %145, %139
  %147 = udiv i32 %146, %139
  %148 = and i32 %147, 65535
  %149 = shl i32 %147, 19
  %150 = and i32 %149, 536346624
  %151 = load volatile i32, ptr %130, align 4, !tbaa !25
  %152 = or i32 %150, %151
  store volatile i32 %152, ptr %130, align 4, !tbaa !25
  %153 = mul i32 %148, %139
  %154 = and i32 %153, 524287
  br label %155

155:                                              ; preds = %144, %140
  %.sink107 = phi i32 [ %154, %144 ], [ 524288, %140 ]
  %156 = load volatile i32, ptr %130, align 4, !tbaa !25
  %157 = or i32 %156, %.sink107
  store volatile i32 %157, ptr %130, align 4, !tbaa !25
  %158 = icmp eq i8 %2, 1
  br i1 %158, label %159, label %166

159:                                              ; preds = %155
  %160 = getelementptr inbounds i8, ptr %1, i64 16
  %161 = load ptr, ptr %160, align 8, !tbaa !24
  %162 = ptrtoint ptr %161 to i64
  %163 = trunc i64 %162 to i32
  %.not = icmp eq i32 %163, 0
  br i1 %.not, label %166, label %164

164:                                              ; preds = %159
  %165 = getelementptr inbounds i8, ptr %129, i64 20
  store volatile i32 %163, ptr %165, align 4, !tbaa !27
  br label %166

166:                                              ; preds = %159, %164, %155
  %167 = getelementptr inbounds i8, ptr %1, i64 3
  %168 = load i8, ptr %167, align 1, !tbaa !17
  %169 = icmp eq i8 %168, 1
  br i1 %169, label %.sink.split108, label %178

.sink.split108:                                   ; preds = %166
  %170 = add nuw nsw i64 %124, 2048
  %171 = inttoptr i64 %170 to ptr
  %172 = getelementptr inbounds i8, ptr %171, i64 8
  %173 = load volatile i32, ptr %172, align 4, !tbaa !20
  %174 = and i32 %173, 256
  %175 = icmp eq i32 %174, 0
  %176 = load volatile i32, ptr %129, align 4, !tbaa !28
  %.111 = select i1 %175, i32 536870912, i32 268435456
  %177 = or i32 %176, %.111
  store volatile i32 %177, ptr %129, align 4, !tbaa !28
  br label %178

178:                                              ; preds = %.sink.split108, %166
  %179 = load volatile i32, ptr %129, align 4, !tbaa !28
  %180 = or i32 %179, -2080374784
  store volatile i32 %180, ptr %129, align 4, !tbaa !28
  br label %181

181:                                              ; preds = %86, %100, %101, %110, %178
  ret i32 0
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @USB_WritePacket(ptr noundef, ptr noundef, i8 noundef zeroext, i16 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #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" }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"", !7, i64 0, !7, i64 1, !7, i64 2, !7, i64 3, !7, i64 4, !7, i64 5, !9, i64 6, !10, i64 8, !11, i64 16, !10, i64 24, !10, i64 28, !10, i64 32}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"short", !7, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!6, !7, i64 1}
!13 = !{!6, !10, i64 28}
!14 = !{!15, !10, i64 16}
!15 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!16 = !{!6, !10, i64 8}
!17 = !{!6, !7, i64 3}
!18 = !{!6, !10, i64 24}
!19 = !{!15, !10, i64 20}
!20 = !{!21, !10, i64 8}
!21 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !7, i64 72, !10, i64 132}
!22 = !{!15, !10, i64 0}
!23 = !{!21, !10, i64 52}
!24 = !{!6, !11, i64 16}
!25 = !{!26, !10, i64 16}
!26 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24}
!27 = !{!26, !10, i64 20}
!28 = !{!26, !10, i64 0}


; Effective O3 passes: BDCEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass