; 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_CfgTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.USB_OTG_GlobalTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [2 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [39 x i32], i32, [15 x 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_INEndpointTypeDef = type { i32, i32, i32, i32, i32, i32, 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_DevInit(ptr noundef %0, ptr noundef byval(%struct.USB_OTG_CfgTypeDef) align 8 %1) #1 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #2
  store i32 0, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #2
  %7 = load ptr, ptr %3, align 8, !tbaa !5
  %8 = ptrtoint ptr %7 to i32
  store i32 %8, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #2
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %9

9:                                                ; preds = %18, %2
  %10 = load i32, ptr %6, align 4, !tbaa !9
  %11 = icmp ult i32 %10, 15
  br i1 %11, label %12, label %21

12:                                               ; preds = %9
  %13 = load ptr, ptr %3, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %13, i32 0, i32 26
  %15 = load i32, ptr %6, align 4, !tbaa !9
  %16 = zext i32 %15 to i64
  %17 = getelementptr inbounds [15 x i32], ptr %14, i64 0, i64 %16
  store volatile i32 0, ptr %17, align 4, !tbaa !9
  br label %18

18:                                               ; preds = %12
  %19 = load i32, ptr %6, align 4, !tbaa !9
  %20 = add i32 %19, 1
  store i32 %20, ptr %6, align 4, !tbaa !9
  br label %9, !llvm.loop !11

21:                                               ; preds = %9
  %22 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 10
  %23 = load i32, ptr %22, align 8, !tbaa !13
  %24 = icmp eq i32 %23, 0
  br i1 %24, label %25, label %44

25:                                               ; preds = %21
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %26, i32 0, i32 13
  %28 = load volatile i32, ptr %27, align 4, !tbaa !15
  %29 = zext i32 %28 to i64
  %30 = and i64 %29, -2097153
  %31 = trunc i64 %30 to i32
  store volatile i32 %31, ptr %27, align 4, !tbaa !15
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %32, i32 0, i32 0
  %34 = load volatile i32, ptr %33, align 4, !tbaa !17
  %35 = zext i32 %34 to i64
  %36 = or i64 %35, 64
  %37 = trunc i64 %36 to i32
  store volatile i32 %37, ptr %33, align 4, !tbaa !17
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %38, i32 0, i32 0
  %40 = load volatile i32, ptr %39, align 4, !tbaa !17
  %41 = zext i32 %40 to i64
  %42 = or i64 %41, 128
  %43 = trunc i64 %42 to i32
  store volatile i32 %43, ptr %39, align 4, !tbaa !17
  br label %51

44:                                               ; preds = %21
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %45, i32 0, i32 13
  %47 = load volatile i32, ptr %46, align 4, !tbaa !15
  %48 = zext i32 %47 to i64
  %49 = or i64 %48, 2097152
  %50 = trunc i64 %49 to i32
  store volatile i32 %50, ptr %46, align 4, !tbaa !15
  br label %51

51:                                               ; preds = %44, %25
  %52 = load i32, ptr %5, align 4, !tbaa !9
  %53 = zext i32 %52 to i64
  %54 = add i64 %53, 3584
  %55 = inttoptr i64 %54 to ptr
  store volatile i32 0, ptr %55, align 4, !tbaa !9
  %56 = load i32, ptr %5, align 4, !tbaa !9
  %57 = zext i32 %56 to i64
  %58 = add i64 %57, 2048
  %59 = inttoptr i64 %58 to ptr
  %60 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %59, i32 0, i32 0
  %61 = load volatile i32, ptr %60, align 4, !tbaa !18
  %62 = or i32 %61, 0
  store volatile i32 %62, ptr %60, align 4, !tbaa !18
  %63 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 5
  %64 = load i32, ptr %63, align 4, !tbaa !20
  %65 = icmp eq i32 %64, 1
  br i1 %65, label %66, label %77

66:                                               ; preds = %51
  %67 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 2
  %68 = load i32, ptr %67, align 8, !tbaa !21
  %69 = icmp eq i32 %68, 0
  br i1 %69, label %70, label %73

70:                                               ; preds = %66
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = call i32 @USB_SetDevSpeed(ptr noundef %71, i8 noundef zeroext 0)
  br label %76

73:                                               ; preds = %66
  %74 = load ptr, ptr %3, align 8, !tbaa !5
  %75 = call i32 @USB_SetDevSpeed(ptr noundef %74, i8 noundef zeroext 1)
  br label %76

76:                                               ; preds = %73, %70
  br label %80

77:                                               ; preds = %51
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = call i32 @USB_SetDevSpeed(ptr noundef %78, i8 noundef zeroext 3)
  br label %80

80:                                               ; preds = %77, %76
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = call i32 @USB_FlushTxFifo(ptr noundef %81, i32 noundef 16)
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %84, label %85

84:                                               ; preds = %80
  store i32 1, ptr %4, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %84, %80
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = call i32 @USB_FlushRxFifo(ptr noundef %86)
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %89, label %90

89:                                               ; preds = %85
  store i32 1, ptr %4, align 4, !tbaa !9
  br label %90

90:                                               ; preds = %89, %85
  %91 = load i32, ptr %5, align 4, !tbaa !9
  %92 = zext i32 %91 to i64
  %93 = add i64 %92, 2048
  %94 = inttoptr i64 %93 to ptr
  %95 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %94, i32 0, i32 4
  store volatile i32 0, ptr %95, align 4, !tbaa !22
  %96 = load i32, ptr %5, align 4, !tbaa !9
  %97 = zext i32 %96 to i64
  %98 = add i64 %97, 2048
  %99 = inttoptr i64 %98 to ptr
  %100 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %99, i32 0, i32 5
  store volatile i32 0, ptr %100, align 4, !tbaa !23
  %101 = load i32, ptr %5, align 4, !tbaa !9
  %102 = zext i32 %101 to i64
  %103 = add i64 %102, 2048
  %104 = inttoptr i64 %103 to ptr
  %105 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %104, i32 0, i32 7
  store volatile i32 0, ptr %105, align 4, !tbaa !24
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %178, %90
  %107 = load i32, ptr %6, align 4, !tbaa !9
  %108 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 0
  %109 = load i32, ptr %108, align 8, !tbaa !25
  %110 = icmp ult i32 %107, %109
  br i1 %110, label %111, label %181

111:                                              ; preds = %106
  %112 = load i32, ptr %5, align 4, !tbaa !9
  %113 = zext i32 %112 to i64
  %114 = add i64 %113, 2304
  %115 = load i32, ptr %6, align 4, !tbaa !9
  %116 = zext i32 %115 to i64
  %117 = mul i64 %116, 32
  %118 = add i64 %114, %117
  %119 = inttoptr i64 %118 to ptr
  %120 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %119, i32 0, i32 0
  %121 = load volatile i32, ptr %120, align 4, !tbaa !26
  %122 = zext i32 %121 to i64
  %123 = and i64 %122, 2147483648
  %124 = icmp eq i64 %123, 2147483648
  br i1 %124, label %125, label %149

125:                                              ; preds = %111
  %126 = load i32, ptr %6, align 4, !tbaa !9
  %127 = icmp eq i32 %126, 0
  br i1 %127, label %128, label %138

128:                                              ; preds = %125
  %129 = load i32, ptr %5, align 4, !tbaa !9
  %130 = zext i32 %129 to i64
  %131 = add i64 %130, 2304
  %132 = load i32, ptr %6, align 4, !tbaa !9
  %133 = zext i32 %132 to i64
  %134 = mul i64 %133, 32
  %135 = add i64 %131, %134
  %136 = inttoptr i64 %135 to ptr
  %137 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %136, i32 0, i32 0
  store volatile i32 134217728, ptr %137, align 4, !tbaa !26
  br label %148

138:                                              ; preds = %125
  %139 = load i32, ptr %5, align 4, !tbaa !9
  %140 = zext i32 %139 to i64
  %141 = add i64 %140, 2304
  %142 = load i32, ptr %6, align 4, !tbaa !9
  %143 = zext i32 %142 to i64
  %144 = mul i64 %143, 32
  %145 = add i64 %141, %144
  %146 = inttoptr i64 %145 to ptr
  %147 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %146, i32 0, i32 0
  store volatile i32 1207959552, ptr %147, align 4, !tbaa !26
  br label %148

148:                                              ; preds = %138, %128
  br label %159

149:                                              ; preds = %111
  %150 = load i32, ptr %5, align 4, !tbaa !9
  %151 = zext i32 %150 to i64
  %152 = add i64 %151, 2304
  %153 = load i32, ptr %6, align 4, !tbaa !9
  %154 = zext i32 %153 to i64
  %155 = mul i64 %154, 32
  %156 = add i64 %152, %155
  %157 = inttoptr i64 %156 to ptr
  %158 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %157, i32 0, i32 0
  store volatile i32 0, ptr %158, align 4, !tbaa !26
  br label %159

159:                                              ; preds = %149, %148
  %160 = load i32, ptr %5, align 4, !tbaa !9
  %161 = zext i32 %160 to i64
  %162 = add i64 %161, 2304
  %163 = load i32, ptr %6, align 4, !tbaa !9
  %164 = zext i32 %163 to i64
  %165 = mul i64 %164, 32
  %166 = add i64 %162, %165
  %167 = inttoptr i64 %166 to ptr
  %168 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %167, i32 0, i32 4
  store volatile i32 0, ptr %168, align 4, !tbaa !28
  %169 = load i32, ptr %5, align 4, !tbaa !9
  %170 = zext i32 %169 to i64
  %171 = add i64 %170, 2304
  %172 = load i32, ptr %6, align 4, !tbaa !9
  %173 = zext i32 %172 to i64
  %174 = mul i64 %173, 32
  %175 = add i64 %171, %174
  %176 = inttoptr i64 %175 to ptr
  %177 = getelementptr inbounds %struct.USB_OTG_INEndpointTypeDef, ptr %176, i32 0, i32 2
  store volatile i32 64383, ptr %177, align 4, !tbaa !29
  br label %178

178:                                              ; preds = %159
  %179 = load i32, ptr %6, align 4, !tbaa !9
  %180 = add i32 %179, 1
  store i32 %180, ptr %6, align 4, !tbaa !9
  br label %106, !llvm.loop !30

181:                                              ; preds = %106
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %254, %181
  %183 = load i32, ptr %6, align 4, !tbaa !9
  %184 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 0
  %185 = load i32, ptr %184, align 8, !tbaa !25
  %186 = icmp ult i32 %183, %185
  br i1 %186, label %187, label %257

187:                                              ; preds = %182
  %188 = load i32, ptr %5, align 4, !tbaa !9
  %189 = zext i32 %188 to i64
  %190 = add i64 %189, 2816
  %191 = load i32, ptr %6, align 4, !tbaa !9
  %192 = zext i32 %191 to i64
  %193 = mul i64 %192, 32
  %194 = add i64 %190, %193
  %195 = inttoptr i64 %194 to ptr
  %196 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %195, i32 0, i32 0
  %197 = load volatile i32, ptr %196, align 4, !tbaa !31
  %198 = zext i32 %197 to i64
  %199 = and i64 %198, 2147483648
  %200 = icmp eq i64 %199, 2147483648
  br i1 %200, label %201, label %225

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

204:                                              ; preds = %201
  %205 = load i32, ptr %5, align 4, !tbaa !9
  %206 = zext i32 %205 to i64
  %207 = add i64 %206, 2816
  %208 = load i32, ptr %6, align 4, !tbaa !9
  %209 = zext i32 %208 to i64
  %210 = mul i64 %209, 32
  %211 = add i64 %207, %210
  %212 = inttoptr i64 %211 to ptr
  %213 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %212, i32 0, i32 0
  store volatile i32 134217728, ptr %213, align 4, !tbaa !31
  br label %224

214:                                              ; preds = %201
  %215 = load i32, ptr %5, align 4, !tbaa !9
  %216 = zext i32 %215 to i64
  %217 = add i64 %216, 2816
  %218 = load i32, ptr %6, align 4, !tbaa !9
  %219 = zext i32 %218 to i64
  %220 = mul i64 %219, 32
  %221 = add i64 %217, %220
  %222 = inttoptr i64 %221 to ptr
  %223 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %222, i32 0, i32 0
  store volatile i32 1207959552, ptr %223, align 4, !tbaa !31
  br label %224

224:                                              ; preds = %214, %204
  br label %235

225:                                              ; preds = %187
  %226 = load i32, ptr %5, align 4, !tbaa !9
  %227 = zext i32 %226 to i64
  %228 = add i64 %227, 2816
  %229 = load i32, ptr %6, align 4, !tbaa !9
  %230 = zext i32 %229 to i64
  %231 = mul i64 %230, 32
  %232 = add i64 %228, %231
  %233 = inttoptr i64 %232 to ptr
  %234 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %233, i32 0, i32 0
  store volatile i32 0, ptr %234, align 4, !tbaa !31
  br label %235

235:                                              ; preds = %225, %224
  %236 = load i32, ptr %5, align 4, !tbaa !9
  %237 = zext i32 %236 to i64
  %238 = add i64 %237, 2816
  %239 = load i32, ptr %6, align 4, !tbaa !9
  %240 = zext i32 %239 to i64
  %241 = mul i64 %240, 32
  %242 = add i64 %238, %241
  %243 = inttoptr i64 %242 to ptr
  %244 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %243, i32 0, i32 4
  store volatile i32 0, ptr %244, align 4, !tbaa !33
  %245 = load i32, ptr %5, align 4, !tbaa !9
  %246 = zext i32 %245 to i64
  %247 = add i64 %246, 2816
  %248 = load i32, ptr %6, align 4, !tbaa !9
  %249 = zext i32 %248 to i64
  %250 = mul i64 %249, 32
  %251 = add i64 %247, %250
  %252 = inttoptr i64 %251 to ptr
  %253 = getelementptr inbounds %struct.USB_OTG_OUTEndpointTypeDef, ptr %252, i32 0, i32 2
  store volatile i32 64383, ptr %253, align 4, !tbaa !34
  br label %254

254:                                              ; preds = %235
  %255 = load i32, ptr %6, align 4, !tbaa !9
  %256 = add i32 %255, 1
  store i32 %256, ptr %6, align 4, !tbaa !9
  br label %182, !llvm.loop !35

257:                                              ; preds = %182
  %258 = load i32, ptr %5, align 4, !tbaa !9
  %259 = zext i32 %258 to i64
  %260 = add i64 %259, 2048
  %261 = inttoptr i64 %260 to ptr
  %262 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %261, i32 0, i32 4
  %263 = load volatile i32, ptr %262, align 4, !tbaa !22
  %264 = zext i32 %263 to i64
  %265 = and i64 %264, -257
  %266 = trunc i64 %265 to i32
  store volatile i32 %266, ptr %262, align 4, !tbaa !22
  %267 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 3
  %268 = load i32, ptr %267, align 4, !tbaa !36
  %269 = icmp eq i32 %268, 1
  br i1 %269, label %270, label %285

270:                                              ; preds = %257
  %271 = load i32, ptr %5, align 4, !tbaa !9
  %272 = zext i32 %271 to i64
  %273 = add i64 %272, 2048
  %274 = inttoptr i64 %273 to ptr
  %275 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %274, i32 0, i32 12
  store volatile i32 8388864, ptr %275, align 4, !tbaa !37
  %276 = load i32, ptr %5, align 4, !tbaa !9
  %277 = zext i32 %276 to i64
  %278 = add i64 %277, 2048
  %279 = inttoptr i64 %278 to ptr
  %280 = getelementptr inbounds %struct.USB_OTG_DeviceTypeDef, ptr %279, i32 0, i32 12
  %281 = load volatile i32, ptr %280, align 4, !tbaa !37
  %282 = zext i32 %281 to i64
  %283 = or i64 %282, 65539
  %284 = trunc i64 %283 to i32
  store volatile i32 %284, ptr %280, align 4, !tbaa !37
  br label %285

285:                                              ; preds = %270, %257
  %286 = load ptr, ptr %3, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %286, i32 0, i32 6
  store volatile i32 0, ptr %287, align 4, !tbaa !38
  %288 = load ptr, ptr %3, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %288, i32 0, i32 5
  store volatile i32 -1073741825, ptr %289, align 4, !tbaa !39
  %290 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 3
  %291 = load i32, ptr %290, align 4, !tbaa !36
  %292 = icmp eq i32 %291, 0
  br i1 %292, label %293, label %300

293:                                              ; preds = %285
  %294 = load ptr, ptr %3, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %294, i32 0, i32 6
  %296 = load volatile i32, ptr %295, align 4, !tbaa !38
  %297 = zext i32 %296 to i64
  %298 = or i64 %297, 16
  %299 = trunc i64 %298 to i32
  store volatile i32 %299, ptr %295, align 4, !tbaa !38
  br label %300

300:                                              ; preds = %293, %285
  %301 = load ptr, ptr %3, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %301, i32 0, i32 6
  %303 = load volatile i32, ptr %302, align 4, !tbaa !38
  %304 = zext i32 %303 to i64
  %305 = or i64 %304, 2151430144
  %306 = trunc i64 %305 to i32
  store volatile i32 %306, ptr %302, align 4, !tbaa !38
  %307 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 6
  %308 = load i32, ptr %307, align 8, !tbaa !40
  %309 = icmp ne i32 %308, 0
  br i1 %309, label %310, label %317

310:                                              ; preds = %300
  %311 = load ptr, ptr %3, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %311, i32 0, i32 6
  %313 = load volatile i32, ptr %312, align 4, !tbaa !38
  %314 = zext i32 %313 to i64
  %315 = or i64 %314, 8
  %316 = trunc i64 %315 to i32
  store volatile i32 %316, ptr %312, align 4, !tbaa !38
  br label %317

317:                                              ; preds = %310, %300
  %318 = getelementptr inbounds %struct.USB_OTG_CfgTypeDef, ptr %1, i32 0, i32 10
  %319 = load i32, ptr %318, align 8, !tbaa !13
  %320 = icmp eq i32 %319, 1
  br i1 %320, label %321, label %328

321:                                              ; preds = %317
  %322 = load ptr, ptr %3, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.USB_OTG_GlobalTypeDef, ptr %322, i32 0, i32 6
  %324 = load volatile i32, ptr %323, align 4, !tbaa !38
  %325 = zext i32 %324 to i64
  %326 = or i64 %325, 1073741828
  %327 = trunc i64 %326 to i32
  store volatile i32 %327, ptr %323, align 4, !tbaa !38
  br label %328

328:                                              ; preds = %321, %317
  %329 = load i32, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #2
  ret i32 %329
}

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @USB_FlushTxFifo(ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @USB_FlushRxFifo(ptr noundef) #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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 40}
!14 = !{!"", !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}
!15 = !{!16, !10, i64 56}
!16 = !{!"", !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, !7, i64 48, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !7, i64 100, !10, i64 256, !7, i64 260}
!17 = !{!16, !10, i64 0}
!18 = !{!19, !10, i64 0}
!19 = !{!"", !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}
!20 = !{!14, !10, i64 20}
!21 = !{!14, !10, i64 8}
!22 = !{!19, !10, i64 16}
!23 = !{!19, !10, i64 20}
!24 = !{!19, !10, i64 28}
!25 = !{!14, !10, i64 0}
!26 = !{!27, !10, i64 0}
!27 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!28 = !{!27, !10, i64 16}
!29 = !{!27, !10, i64 8}
!30 = distinct !{!30, !12}
!31 = !{!32, !10, i64 0}
!32 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24}
!33 = !{!32, !10, i64 16}
!34 = !{!32, !10, i64 8}
!35 = distinct !{!35, !12}
!36 = !{!14, !10, i64 12}
!37 = !{!19, !10, i64 48}
!38 = !{!16, !10, i64 24}
!39 = !{!16, !10, i64 20}
!40 = !{!14, !10, i64 24}


; 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.USB_OTG_CfgTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @USB_DevInit(ptr noundef %0, ptr nocapture noundef readonly byval(%struct.USB_OTG_CfgTypeDef) align 8 %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 260
  store volatile i32 0, ptr %3, align 4, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 264
  store volatile i32 0, ptr %4, align 4, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 268
  store volatile i32 0, ptr %5, align 4, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 272
  store volatile i32 0, ptr %6, align 4, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 276
  store volatile i32 0, ptr %7, align 4, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 280
  store volatile i32 0, ptr %8, align 4, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %0, i64 284
  store volatile i32 0, ptr %9, align 4, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %0, i64 288
  store volatile i32 0, ptr %10, align 4, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 292
  store volatile i32 0, ptr %11, align 4, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 296
  store volatile i32 0, ptr %12, align 4, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %0, i64 300
  store volatile i32 0, ptr %13, align 4, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %0, i64 304
  store volatile i32 0, ptr %14, align 4, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %0, i64 308
  store volatile i32 0, ptr %15, align 4, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %0, i64 312
  store volatile i32 0, ptr %16, align 4, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %0, i64 316
  store volatile i32 0, ptr %17, align 4, !tbaa !5
  %18 = ptrtoint ptr %0 to i64
  %19 = getelementptr inbounds i8, ptr %1, i64 40
  %20 = load i32, ptr %19, align 8, !tbaa !9
  %21 = icmp eq i32 %20, 0
  %22 = getelementptr inbounds i8, ptr %0, i64 56
  %23 = load volatile i32, ptr %22, align 4, !tbaa !11
  br i1 %21, label %24, label %30

24:                                               ; preds = %2
  %25 = and i32 %23, -2097153
  store volatile i32 %25, ptr %22, align 4, !tbaa !11
  %26 = load volatile i32, ptr %0, align 4, !tbaa !13
  %27 = or i32 %26, 64
  store volatile i32 %27, ptr %0, align 4, !tbaa !13
  %28 = load volatile i32, ptr %0, align 4, !tbaa !13
  %29 = or i32 %28, 128
  store volatile i32 %29, ptr %0, align 4, !tbaa !13
  br label %32

30:                                               ; preds = %2
  %31 = or i32 %23, 2097152
  store volatile i32 %31, ptr %22, align 4, !tbaa !11
  br label %32

32:                                               ; preds = %30, %24
  %33 = and i64 %18, 4294967295
  %34 = add nuw nsw i64 %33, 3584
  %35 = inttoptr i64 %34 to ptr
  store volatile i32 0, ptr %35, align 4, !tbaa !5
  %36 = add nuw nsw i64 %33, 2048
  %37 = inttoptr i64 %36 to ptr
  %38 = load volatile i32, ptr %37, align 4, !tbaa !14
  store volatile i32 %38, ptr %37, align 4, !tbaa !14
  %39 = getelementptr inbounds i8, ptr %1, i64 20
  %40 = load i32, ptr %39, align 4, !tbaa !16
  %41 = icmp eq i32 %40, 1
  %42 = getelementptr inbounds i8, ptr %1, i64 8
  %43 = load i32, ptr %42, align 8
  %44 = icmp ne i32 %43, 0
  %. = zext i1 %44 to i8
  %.sink = select i1 %41, i8 %., i8 3
  %45 = tail call i32 @USB_SetDevSpeed(ptr noundef nonnull %0, i8 noundef zeroext %.sink)
  %46 = tail call i32 @USB_FlushTxFifo(ptr noundef nonnull %0, i32 noundef 16)
  %47 = tail call i32 @USB_FlushRxFifo(ptr noundef nonnull %0)
  %48 = getelementptr inbounds i8, ptr %37, i64 16
  store volatile i32 0, ptr %48, align 4, !tbaa !17
  %49 = getelementptr inbounds i8, ptr %37, i64 20
  store volatile i32 0, ptr %49, align 4, !tbaa !18
  %50 = getelementptr inbounds i8, ptr %37, i64 28
  store volatile i32 0, ptr %50, align 4, !tbaa !19
  %51 = load i32, ptr %1, align 8, !tbaa !20
  %.fr = freeze i32 %51
  %.not68 = icmp eq i32 %.fr, 0
  br i1 %.not68, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %32
  %52 = add nuw nsw i64 %33, 2304
  %wide.trip.count = zext i32 %.fr to i64
  %53 = inttoptr i64 %52 to ptr
  %54 = load volatile i32, ptr %53, align 4, !tbaa !21
  %55 = lshr i32 %54, 4
  %.86 = and i32 %55, 134217728
  store volatile i32 %.86, ptr %53, align 4, !tbaa !21
  %56 = getelementptr inbounds i8, ptr %53, i64 16
  store volatile i32 0, ptr %56, align 4, !tbaa !23
  %57 = getelementptr inbounds i8, ptr %53, i64 8
  store volatile i32 64383, ptr %57, align 4, !tbaa !24
  %exitcond.peel.not = icmp eq i32 %.fr, 1
  br i1 %exitcond.peel.not, label %.lr.ph67, label %.peel.next.preheader

.peel.next.preheader:                             ; preds = %.lr.ph
  %58 = add nsw i64 %wide.trip.count, -1
  %xtraiter = and i64 %58, 1
  %59 = icmp eq i32 %.fr, 2
  br i1 %59, label %.preheader.unr-lcssa, label %.peel.next.preheader.new

.peel.next.preheader.new:                         ; preds = %.peel.next.preheader
  %unroll_iter = and i64 %58, -2
  br label %.peel.next

.preheader.unr-lcssa.loopexit:                    ; preds = %.peel.next
  %60 = shl nuw nsw i64 %indvars.iv.next.1, 5
  br label %.preheader.unr-lcssa

.preheader.unr-lcssa:                             ; preds = %.preheader.unr-lcssa.loopexit, %.peel.next.preheader
  %indvars.iv.unr = phi i64 [ 32, %.peel.next.preheader ], [ %60, %.preheader.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader, label %.peel.next.epil

.peel.next.epil:                                  ; preds = %.preheader.unr-lcssa
  %61 = add nuw nsw i64 %52, %indvars.iv.unr
  %62 = inttoptr i64 %61 to ptr
  %63 = load volatile i32, ptr %62, align 4, !tbaa !21
  %.not63.inv.epil = icmp slt i32 %63, 0
  %.88.epil = select i1 %.not63.inv.epil, i32 1207959552, i32 0
  store volatile i32 %.88.epil, ptr %62, align 4, !tbaa !21
  %64 = getelementptr inbounds i8, ptr %62, i64 16
  store volatile i32 0, ptr %64, align 4, !tbaa !23
  %65 = getelementptr inbounds i8, ptr %62, i64 8
  store volatile i32 64383, ptr %65, align 4, !tbaa !24
  br label %.preheader

.preheader:                                       ; preds = %.preheader.unr-lcssa, %.peel.next.epil
  br i1 %.not68, label %._crit_edge, label %.lr.ph67

.lr.ph67:                                         ; preds = %.lr.ph, %.preheader
  %66 = add nuw nsw i64 %33, 2816
  %67 = inttoptr i64 %66 to ptr
  %68 = load volatile i32, ptr %67, align 4, !tbaa !25
  %69 = lshr i32 %68, 4
  %.87 = and i32 %69, 134217728
  store volatile i32 %.87, ptr %67, align 4, !tbaa !25
  %70 = getelementptr inbounds i8, ptr %67, i64 16
  store volatile i32 0, ptr %70, align 4, !tbaa !27
  %71 = getelementptr inbounds i8, ptr %67, i64 8
  store volatile i32 64383, ptr %71, align 4, !tbaa !28
  %exitcond77.peel.not = icmp eq i32 %.fr, 1
  br i1 %exitcond77.peel.not, label %._crit_edge, label %.peel.next79.preheader

.peel.next79.preheader:                           ; preds = %.lr.ph67
  %72 = add nsw i64 %wide.trip.count, -1
  %xtraiter90 = and i64 %72, 1
  %73 = icmp eq i32 %.fr, 2
  br i1 %73, label %._crit_edge.loopexit.unr-lcssa, label %.peel.next79.preheader.new

.peel.next79.preheader.new:                       ; preds = %.peel.next79.preheader
  %unroll_iter92 = and i64 %72, -2
  br label %.peel.next79

.peel.next:                                       ; preds = %.peel.next, %.peel.next.preheader.new
  %indvars.iv = phi i64 [ 1, %.peel.next.preheader.new ], [ %indvars.iv.next.1, %.peel.next ]
  %niter = phi i64 [ 0, %.peel.next.preheader.new ], [ %niter.next.1, %.peel.next ]
  %74 = shl nuw nsw i64 %indvars.iv, 5
  %75 = add nuw nsw i64 %52, %74
  %76 = inttoptr i64 %75 to ptr
  %77 = load volatile i32, ptr %76, align 4, !tbaa !21
  %.not63.inv = icmp slt i32 %77, 0
  %.88 = select i1 %.not63.inv, i32 1207959552, i32 0
  store volatile i32 %.88, ptr %76, align 4, !tbaa !21
  %78 = getelementptr inbounds i8, ptr %76, i64 16
  store volatile i32 0, ptr %78, align 4, !tbaa !23
  %79 = getelementptr inbounds i8, ptr %76, i64 8
  store volatile i32 64383, ptr %79, align 4, !tbaa !24
  %indvars.iv.next = shl i64 %indvars.iv, 5
  %80 = add i64 %indvars.iv.next, 32
  %81 = add nuw nsw i64 %52, %80
  %82 = inttoptr i64 %81 to ptr
  %83 = load volatile i32, ptr %82, align 4, !tbaa !21
  %.not63.inv.1 = icmp slt i32 %83, 0
  %.88.1 = select i1 %.not63.inv.1, i32 1207959552, i32 0
  store volatile i32 %.88.1, ptr %82, align 4, !tbaa !21
  %84 = getelementptr inbounds i8, ptr %82, i64 16
  store volatile i32 0, ptr %84, align 4, !tbaa !23
  %85 = getelementptr inbounds i8, ptr %82, i64 8
  store volatile i32 64383, ptr %85, align 4, !tbaa !24
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader.unr-lcssa.loopexit, label %.peel.next, !llvm.loop !29

.peel.next79:                                     ; preds = %.peel.next79, %.peel.next79.preheader.new
  %indvars.iv73 = phi i64 [ 1, %.peel.next79.preheader.new ], [ %indvars.iv.next74.1, %.peel.next79 ]
  %niter93 = phi i64 [ 0, %.peel.next79.preheader.new ], [ %niter93.next.1, %.peel.next79 ]
  %86 = shl nuw nsw i64 %indvars.iv73, 5
  %87 = add nuw nsw i64 %66, %86
  %88 = inttoptr i64 %87 to ptr
  %89 = load volatile i32, ptr %88, align 4, !tbaa !25
  %.not62.inv = icmp slt i32 %89, 0
  %.89 = select i1 %.not62.inv, i32 1207959552, i32 0
  store volatile i32 %.89, ptr %88, align 4, !tbaa !25
  %90 = getelementptr inbounds i8, ptr %88, i64 16
  store volatile i32 0, ptr %90, align 4, !tbaa !27
  %91 = getelementptr inbounds i8, ptr %88, i64 8
  store volatile i32 64383, ptr %91, align 4, !tbaa !28
  %indvars.iv.next74 = shl i64 %indvars.iv73, 5
  %92 = add i64 %indvars.iv.next74, 32
  %93 = add nuw nsw i64 %66, %92
  %94 = inttoptr i64 %93 to ptr
  %95 = load volatile i32, ptr %94, align 4, !tbaa !25
  %.not62.inv.1 = icmp slt i32 %95, 0
  %.89.1 = select i1 %.not62.inv.1, i32 1207959552, i32 0
  store volatile i32 %.89.1, ptr %94, align 4, !tbaa !25
  %96 = getelementptr inbounds i8, ptr %94, i64 16
  store volatile i32 0, ptr %96, align 4, !tbaa !27
  %97 = getelementptr inbounds i8, ptr %94, i64 8
  store volatile i32 64383, ptr %97, align 4, !tbaa !28
  %indvars.iv.next74.1 = add nuw nsw i64 %indvars.iv73, 2
  %niter93.next.1 = add i64 %niter93, 2
  %niter93.ncmp.1 = icmp eq i64 %niter93.next.1, %unroll_iter92
  br i1 %niter93.ncmp.1, label %._crit_edge.loopexit.unr-lcssa.loopexit, label %.peel.next79, !llvm.loop !32

._crit_edge.loopexit.unr-lcssa.loopexit:          ; preds = %.peel.next79
  %98 = shl nuw nsw i64 %indvars.iv.next74.1, 5
  br label %._crit_edge.loopexit.unr-lcssa

._crit_edge.loopexit.unr-lcssa:                   ; preds = %._crit_edge.loopexit.unr-lcssa.loopexit, %.peel.next79.preheader
  %indvars.iv73.unr = phi i64 [ 32, %.peel.next79.preheader ], [ %98, %._crit_edge.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod91.not = icmp eq i64 %xtraiter90, 0
  br i1 %lcmp.mod91.not, label %._crit_edge, label %.peel.next79.epil

.peel.next79.epil:                                ; preds = %._crit_edge.loopexit.unr-lcssa
  %99 = add nuw nsw i64 %66, %indvars.iv73.unr
  %100 = inttoptr i64 %99 to ptr
  %101 = load volatile i32, ptr %100, align 4, !tbaa !25
  %.not62.inv.epil = icmp slt i32 %101, 0
  %.89.epil = select i1 %.not62.inv.epil, i32 1207959552, i32 0
  store volatile i32 %.89.epil, ptr %100, align 4, !tbaa !25
  %102 = getelementptr inbounds i8, ptr %100, i64 16
  store volatile i32 0, ptr %102, align 4, !tbaa !27
  %103 = getelementptr inbounds i8, ptr %100, i64 8
  store volatile i32 64383, ptr %103, align 4, !tbaa !28
  br label %._crit_edge

._crit_edge:                                      ; preds = %.peel.next79.epil, %._crit_edge.loopexit.unr-lcssa, %32, %.lr.ph67, %.preheader
  %104 = load volatile i32, ptr %48, align 4, !tbaa !17
  %105 = and i32 %104, -257
  store volatile i32 %105, ptr %48, align 4, !tbaa !17
  %106 = getelementptr inbounds i8, ptr %1, i64 12
  %107 = load i32, ptr %106, align 4, !tbaa !33
  %108 = icmp eq i32 %107, 1
  br i1 %108, label %.thread, label %114

.thread:                                          ; preds = %._crit_edge
  %109 = getelementptr inbounds i8, ptr %37, i64 48
  store volatile i32 8388864, ptr %109, align 4, !tbaa !34
  %110 = load volatile i32, ptr %109, align 4, !tbaa !34
  %111 = or i32 %110, 65539
  store volatile i32 %111, ptr %109, align 4, !tbaa !34
  %112 = getelementptr inbounds i8, ptr %0, i64 24
  store volatile i32 0, ptr %112, align 4, !tbaa !35
  %113 = getelementptr inbounds i8, ptr %0, i64 20
  store volatile i32 -1073741825, ptr %113, align 4, !tbaa !36
  br label %121

114:                                              ; preds = %._crit_edge
  %115 = getelementptr inbounds i8, ptr %0, i64 24
  store volatile i32 0, ptr %115, align 4, !tbaa !35
  %116 = getelementptr inbounds i8, ptr %0, i64 20
  store volatile i32 -1073741825, ptr %116, align 4, !tbaa !36
  %117 = icmp eq i32 %107, 0
  br i1 %117, label %118, label %121

118:                                              ; preds = %114
  %119 = load volatile i32, ptr %115, align 4, !tbaa !35
  %120 = or i32 %119, 16
  store volatile i32 %120, ptr %115, align 4, !tbaa !35
  br label %121

121:                                              ; preds = %.thread, %118, %114
  %122 = phi ptr [ %112, %.thread ], [ %115, %118 ], [ %115, %114 ]
  %123 = load volatile i32, ptr %122, align 4, !tbaa !35
  %124 = or i32 %123, -2143537152
  store volatile i32 %124, ptr %122, align 4, !tbaa !35
  %125 = getelementptr inbounds i8, ptr %1, i64 24
  %126 = load i32, ptr %125, align 8, !tbaa !37
  %.not61 = icmp eq i32 %126, 0
  br i1 %.not61, label %130, label %127

127:                                              ; preds = %121
  %128 = load volatile i32, ptr %122, align 4, !tbaa !35
  %129 = or i32 %128, 8
  store volatile i32 %129, ptr %122, align 4, !tbaa !35
  br label %130

130:                                              ; preds = %127, %121
  %131 = icmp eq i32 %20, 1
  br i1 %131, label %132, label %135

132:                                              ; preds = %130
  %133 = load volatile i32, ptr %122, align 4, !tbaa !35
  %134 = or i32 %133, 1073741828
  store volatile i32 %134, ptr %122, align 4, !tbaa !35
  br label %135

135:                                              ; preds = %132, %130
  %.not60 = icmp ne i32 %47, 0
  %.not = icmp ne i32 %46, 0
  %narrow = select i1 %.not60, i1 true, i1 %.not
  %.159 = zext i1 %narrow to i32
  ret i32 %.159
}

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @USB_FlushRxFifo(ptr noundef) 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, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 40}
!10 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48}
!11 = !{!12, !6, i64 56}
!12 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !7, i64 48, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !7, i64 100, !6, i64 256, !7, i64 260}
!13 = !{!12, !6, i64 0}
!14 = !{!15, !6, i64 0}
!15 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !7, i64 72, !6, i64 132}
!16 = !{!10, !6, i64 20}
!17 = !{!15, !6, i64 16}
!18 = !{!15, !6, i64 20}
!19 = !{!15, !6, i64 28}
!20 = !{!10, !6, i64 0}
!21 = !{!22, !6, i64 0}
!22 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28}
!23 = !{!22, !6, i64 16}
!24 = !{!22, !6, i64 8}
!25 = !{!26, !6, i64 0}
!26 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !7, i64 24}
!27 = !{!26, !6, i64 16}
!28 = !{!26, !6, i64 8}
!29 = distinct !{!29, !30, !31}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!"llvm.loop.peeled.count", i32 1}
!32 = distinct !{!32, !30, !31}
!33 = !{!10, !6, i64 12}
!34 = !{!15, !6, i64 48}
!35 = !{!12, !6, i64 24}
!36 = !{!12, !6, i64 20}
!37 = !{!10, !6, i64 24}


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