; LLVM IR from ctlst-tech/catpilot :: bsp/mcu/core/stm32/h753/hal/src (stm32h7xx_hal_sd)

; 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.SD_HandleTypeDef = type { ptr, %struct.SDMMC_InitTypeDef, i32, ptr, i32, ptr, i32, i32, i32, i32, %struct.HAL_SD_CardInfoTypeDef, [4 x i32], [4 x i32] }
%struct.SDMMC_InitTypeDef = type { i32, i32, i32, i32, i32 }
%struct.HAL_SD_CardInfoTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.SDMMC_TypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i32, i32, i32, i32, [8 x i32], i32, [222 x i32], 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

declare i32 @SDMMC_CmdStopTransfer(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @HAL_SD_IRQHandler(ptr noundef %0) #2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #3
  %5 = load ptr, ptr %2, align 8, !tbaa !5
  %6 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %5, i32 0, i32 7
  %7 = load volatile i32, ptr %6, align 4, !tbaa !9
  store i32 %7, ptr %4, align 4, !tbaa !14
  %8 = load ptr, ptr %2, align 8, !tbaa !5
  %9 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %8, i32 0, i32 0
  %10 = load ptr, ptr %9, align 8, !tbaa !15
  %11 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %10, i32 0, i32 13
  %12 = load volatile i32, ptr %11, align 4, !tbaa !16
  %13 = zext i32 %12 to i64
  %14 = and i64 %13, 32768
  %15 = icmp ne i64 %14, 0
  %16 = zext i1 %15 to i32
  %17 = icmp ne i32 %16, 0
  br i1 %17, label %18, label %24

18:                                               ; preds = %1
  %19 = load i32, ptr %4, align 4, !tbaa !14
  %20 = and i32 %19, 8
  %21 = icmp ne i32 %20, 0
  br i1 %21, label %22, label %24

22:                                               ; preds = %18
  %23 = load ptr, ptr %2, align 8, !tbaa !5
  call void @SD_Read_IT(ptr noundef %23)
  br label %413

24:                                               ; preds = %18, %1
  %25 = load ptr, ptr %2, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %25, i32 0, i32 0
  %27 = load ptr, ptr %26, align 8, !tbaa !15
  %28 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %27, i32 0, i32 13
  %29 = load volatile i32, ptr %28, align 4, !tbaa !16
  %30 = zext i32 %29 to i64
  %31 = and i64 %30, 256
  %32 = icmp ne i64 %31, 0
  %33 = zext i1 %32 to i32
  %34 = icmp ne i32 %33, 0
  br i1 %34, label %35, label %178

35:                                               ; preds = %24
  %36 = load ptr, ptr %2, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %36, i32 0, i32 0
  %38 = load ptr, ptr %37, align 8, !tbaa !15
  %39 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %38, i32 0, i32 14
  store volatile i32 256, ptr %39, align 4, !tbaa !18
  %40 = load ptr, ptr %2, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %40, i32 0, i32 0
  %42 = load ptr, ptr %41, align 8, !tbaa !15
  %43 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %42, i32 0, i32 15
  %44 = load volatile i32, ptr %43, align 4, !tbaa !19
  %45 = zext i32 %44 to i64
  %46 = and i64 %45, -49467
  %47 = trunc i64 %46 to i32
  store volatile i32 %47, ptr %43, align 4, !tbaa !19
  %48 = load ptr, ptr %2, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %48, i32 0, i32 0
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  %51 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %50, i32 0, i32 15
  %52 = load volatile i32, ptr %51, align 4, !tbaa !19
  %53 = zext i32 %52 to i64
  %54 = and i64 %53, -268435457
  %55 = trunc i64 %54 to i32
  store volatile i32 %55, ptr %51, align 4, !tbaa !19
  %56 = load ptr, ptr %2, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %56, i32 0, i32 0
  %58 = load ptr, ptr %57, align 8, !tbaa !15
  %59 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %58, i32 0, i32 3
  %60 = load volatile i32, ptr %59, align 4, !tbaa !20
  %61 = zext i32 %60 to i64
  %62 = and i64 %61, -65
  %63 = trunc i64 %62 to i32
  store volatile i32 %63, ptr %59, align 4, !tbaa !20
  %64 = load i32, ptr %4, align 4, !tbaa !14
  %65 = and i32 %64, 8
  %66 = icmp ne i32 %65, 0
  br i1 %66, label %67, label %111

67:                                               ; preds = %35
  %68 = load i32, ptr %4, align 4, !tbaa !14
  %69 = and i32 %68, 2
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %75, label %71

71:                                               ; preds = %67
  %72 = load i32, ptr %4, align 4, !tbaa !14
  %73 = and i32 %72, 32
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %75, label %90

75:                                               ; preds = %71, %67
  %76 = load ptr, ptr %2, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %76, i32 0, i32 0
  %78 = load ptr, ptr %77, align 8, !tbaa !15
  %79 = call i32 @SDMMC_CmdStopTransfer(ptr noundef %78)
  store i32 %79, ptr %3, align 4, !tbaa !14
  %80 = load i32, ptr %3, align 4, !tbaa !14
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %82, label %89

82:                                               ; preds = %75
  %83 = load i32, ptr %3, align 4, !tbaa !14
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %84, i32 0, i32 9
  %86 = load volatile i32, ptr %85, align 4, !tbaa !21
  %87 = or i32 %86, %83
  store volatile i32 %87, ptr %85, align 4, !tbaa !21
  %88 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_ErrorCallback(ptr noundef %88)
  br label %89

89:                                               ; preds = %82, %75
  br label %90

90:                                               ; preds = %89, %71
  %91 = load ptr, ptr %2, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %91, i32 0, i32 0
  %93 = load ptr, ptr %92, align 8, !tbaa !15
  %94 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %93, i32 0, i32 14
  store volatile i32 402657082, ptr %94, align 4, !tbaa !18
  %95 = load ptr, ptr %2, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %95, i32 0, i32 8
  store volatile i32 1, ptr %96, align 8, !tbaa !22
  %97 = load ptr, ptr %2, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %97, i32 0, i32 7
  store volatile i32 0, ptr %98, align 4, !tbaa !9
  %99 = load i32, ptr %4, align 4, !tbaa !14
  %100 = and i32 %99, 1
  %101 = icmp ne i32 %100, 0
  br i1 %101, label %106, label %102

102:                                              ; preds = %90
  %103 = load i32, ptr %4, align 4, !tbaa !14
  %104 = and i32 %103, 2
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %106, label %108

106:                                              ; preds = %102, %90
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_RxCpltCallback(ptr noundef %107)
  br label %110

108:                                              ; preds = %102
  %109 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_TxCpltCallback(ptr noundef %109)
  br label %110

110:                                              ; preds = %108, %106
  br label %177

111:                                              ; preds = %35
  %112 = load i32, ptr %4, align 4, !tbaa !14
  %113 = and i32 %112, 128
  %114 = icmp ne i32 %113, 0
  br i1 %114, label %115, label %175

115:                                              ; preds = %111
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %116, i32 0, i32 0
  %118 = load ptr, ptr %117, align 8, !tbaa !15
  %119 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %118, i32 0, i32 10
  store volatile i32 0, ptr %119, align 4, !tbaa !23
  %120 = load ptr, ptr %2, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %120, i32 0, i32 0
  %122 = load ptr, ptr %121, align 8, !tbaa !15
  %123 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %122, i32 0, i32 11
  store volatile i32 0, ptr %123, align 4, !tbaa !24
  %124 = load ptr, ptr %2, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %124, i32 0, i32 0
  %126 = load ptr, ptr %125, align 8, !tbaa !15
  %127 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %126, i32 0, i32 18
  store volatile i32 0, ptr %127, align 4, !tbaa !25
  %128 = load i32, ptr %4, align 4, !tbaa !14
  %129 = and i32 %128, 2
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %135, label %131

131:                                              ; preds = %115
  %132 = load i32, ptr %4, align 4, !tbaa !14
  %133 = and i32 %132, 32
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %135, label %150

135:                                              ; preds = %131, %115
  %136 = load ptr, ptr %2, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %136, i32 0, i32 0
  %138 = load ptr, ptr %137, align 8, !tbaa !15
  %139 = call i32 @SDMMC_CmdStopTransfer(ptr noundef %138)
  store i32 %139, ptr %3, align 4, !tbaa !14
  %140 = load i32, ptr %3, align 4, !tbaa !14
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %142, label %149

142:                                              ; preds = %135
  %143 = load i32, ptr %3, align 4, !tbaa !14
  %144 = load ptr, ptr %2, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %144, i32 0, i32 9
  %146 = load volatile i32, ptr %145, align 4, !tbaa !21
  %147 = or i32 %146, %143
  store volatile i32 %147, ptr %145, align 4, !tbaa !21
  %148 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_ErrorCallback(ptr noundef %148)
  br label %149

149:                                              ; preds = %142, %135
  br label %150

150:                                              ; preds = %149, %131
  %151 = load ptr, ptr %2, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %151, i32 0, i32 8
  store volatile i32 1, ptr %152, align 8, !tbaa !22
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %153, i32 0, i32 7
  store volatile i32 0, ptr %154, align 4, !tbaa !9
  %155 = load i32, ptr %4, align 4, !tbaa !14
  %156 = and i32 %155, 16
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %162, label %158

158:                                              ; preds = %150
  %159 = load i32, ptr %4, align 4, !tbaa !14
  %160 = and i32 %159, 32
  %161 = icmp ne i32 %160, 0
  br i1 %161, label %162, label %164

162:                                              ; preds = %158, %150
  %163 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_TxCpltCallback(ptr noundef %163)
  br label %164

164:                                              ; preds = %162, %158
  %165 = load i32, ptr %4, align 4, !tbaa !14
  %166 = and i32 %165, 1
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %172, label %168

168:                                              ; preds = %164
  %169 = load i32, ptr %4, align 4, !tbaa !14
  %170 = and i32 %169, 2
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %172, label %174

172:                                              ; preds = %168, %164
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_RxCpltCallback(ptr noundef %173)
  br label %174

174:                                              ; preds = %172, %168
  br label %176

175:                                              ; preds = %111
  br label %176

176:                                              ; preds = %175, %174
  br label %177

177:                                              ; preds = %176, %110
  br label %412

178:                                              ; preds = %24
  %179 = load ptr, ptr %2, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %179, i32 0, i32 0
  %181 = load ptr, ptr %180, align 8, !tbaa !15
  %182 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %181, i32 0, i32 13
  %183 = load volatile i32, ptr %182, align 4, !tbaa !16
  %184 = zext i32 %183 to i64
  %185 = and i64 %184, 16384
  %186 = icmp ne i64 %185, 0
  %187 = zext i1 %186 to i32
  %188 = icmp ne i32 %187, 0
  br i1 %188, label %189, label %195

189:                                              ; preds = %178
  %190 = load i32, ptr %4, align 4, !tbaa !14
  %191 = and i32 %190, 8
  %192 = icmp ne i32 %191, 0
  br i1 %192, label %193, label %195

193:                                              ; preds = %189
  %194 = load ptr, ptr %2, align 8, !tbaa !5
  call void @SD_Write_IT(ptr noundef %194)
  br label %411

195:                                              ; preds = %189, %178
  %196 = load ptr, ptr %2, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %196, i32 0, i32 0
  %198 = load ptr, ptr %197, align 8, !tbaa !15
  %199 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %198, i32 0, i32 13
  %200 = load volatile i32, ptr %199, align 4, !tbaa !16
  %201 = zext i32 %200 to i64
  %202 = and i64 %201, 58
  %203 = icmp ne i64 %202, 0
  %204 = zext i1 %203 to i32
  %205 = icmp ne i32 %204, 0
  br i1 %205, label %206, label %365

206:                                              ; preds = %195
  %207 = load ptr, ptr %2, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %207, i32 0, i32 0
  %209 = load ptr, ptr %208, align 8, !tbaa !15
  %210 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %209, i32 0, i32 13
  %211 = load volatile i32, ptr %210, align 4, !tbaa !16
  %212 = zext i32 %211 to i64
  %213 = and i64 %212, 2
  %214 = icmp ne i64 %213, 0
  %215 = zext i1 %214 to i32
  %216 = icmp ne i32 %215, 0
  br i1 %216, label %217, label %222

217:                                              ; preds = %206
  %218 = load ptr, ptr %2, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %218, i32 0, i32 9
  %220 = load volatile i32, ptr %219, align 4, !tbaa !21
  %221 = or i32 %220, 2
  store volatile i32 %221, ptr %219, align 4, !tbaa !21
  br label %222

222:                                              ; preds = %217, %206
  %223 = load ptr, ptr %2, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %223, i32 0, i32 0
  %225 = load ptr, ptr %224, align 8, !tbaa !15
  %226 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %225, i32 0, i32 13
  %227 = load volatile i32, ptr %226, align 4, !tbaa !16
  %228 = zext i32 %227 to i64
  %229 = and i64 %228, 8
  %230 = icmp ne i64 %229, 0
  %231 = zext i1 %230 to i32
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %233, label %238

233:                                              ; preds = %222
  %234 = load ptr, ptr %2, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %234, i32 0, i32 9
  %236 = load volatile i32, ptr %235, align 4, !tbaa !21
  %237 = or i32 %236, 8
  store volatile i32 %237, ptr %235, align 4, !tbaa !21
  br label %238

238:                                              ; preds = %233, %222
  %239 = load ptr, ptr %2, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %239, i32 0, i32 0
  %241 = load ptr, ptr %240, align 8, !tbaa !15
  %242 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %241, i32 0, i32 13
  %243 = load volatile i32, ptr %242, align 4, !tbaa !16
  %244 = zext i32 %243 to i64
  %245 = and i64 %244, 32
  %246 = icmp ne i64 %245, 0
  %247 = zext i1 %246 to i32
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %249, label %254

249:                                              ; preds = %238
  %250 = load ptr, ptr %2, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %250, i32 0, i32 9
  %252 = load volatile i32, ptr %251, align 4, !tbaa !21
  %253 = or i32 %252, 32
  store volatile i32 %253, ptr %251, align 4, !tbaa !21
  br label %254

254:                                              ; preds = %249, %238
  %255 = load ptr, ptr %2, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %255, i32 0, i32 0
  %257 = load ptr, ptr %256, align 8, !tbaa !15
  %258 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %257, i32 0, i32 13
  %259 = load volatile i32, ptr %258, align 4, !tbaa !16
  %260 = zext i32 %259 to i64
  %261 = and i64 %260, 16
  %262 = icmp ne i64 %261, 0
  %263 = zext i1 %262 to i32
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %270

265:                                              ; preds = %254
  %266 = load ptr, ptr %2, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %266, i32 0, i32 9
  %268 = load volatile i32, ptr %267, align 4, !tbaa !21
  %269 = or i32 %268, 16
  store volatile i32 %269, ptr %267, align 4, !tbaa !21
  br label %270

270:                                              ; preds = %265, %254
  %271 = load ptr, ptr %2, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %271, i32 0, i32 0
  %273 = load ptr, ptr %272, align 8, !tbaa !15
  %274 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %273, i32 0, i32 14
  store volatile i32 402657082, ptr %274, align 4, !tbaa !18
  %275 = load ptr, ptr %2, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %275, i32 0, i32 0
  %277 = load ptr, ptr %276, align 8, !tbaa !15
  %278 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %277, i32 0, i32 15
  %279 = load volatile i32, ptr %278, align 4, !tbaa !19
  %280 = zext i32 %279 to i64
  %281 = and i64 %280, -315
  %282 = trunc i64 %281 to i32
  store volatile i32 %282, ptr %278, align 4, !tbaa !19
  %283 = load ptr, ptr %2, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %283, i32 0, i32 0
  %285 = load ptr, ptr %284, align 8, !tbaa !15
  %286 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %285, i32 0, i32 3
  %287 = load volatile i32, ptr %286, align 4, !tbaa !20
  %288 = zext i32 %287 to i64
  %289 = and i64 %288, -65
  %290 = trunc i64 %289 to i32
  store volatile i32 %290, ptr %286, align 4, !tbaa !20
  %291 = load ptr, ptr %2, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %291, i32 0, i32 0
  %293 = load ptr, ptr %292, align 8, !tbaa !15
  %294 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %293, i32 0, i32 11
  %295 = load volatile i32, ptr %294, align 4, !tbaa !24
  %296 = zext i32 %295 to i64
  %297 = or i64 %296, 8192
  %298 = trunc i64 %297 to i32
  store volatile i32 %298, ptr %294, align 4, !tbaa !24
  %299 = load ptr, ptr %2, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %299, i32 0, i32 0
  %301 = load ptr, ptr %300, align 8, !tbaa !15
  %302 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %301, i32 0, i32 3
  %303 = load volatile i32, ptr %302, align 4, !tbaa !20
  %304 = zext i32 %303 to i64
  %305 = or i64 %304, 128
  %306 = trunc i64 %305 to i32
  store volatile i32 %306, ptr %302, align 4, !tbaa !20
  %307 = load ptr, ptr %2, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %307, i32 0, i32 0
  %309 = load ptr, ptr %308, align 8, !tbaa !15
  %310 = call i32 @SDMMC_CmdStopTransfer(ptr noundef %309)
  %311 = load ptr, ptr %2, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %311, i32 0, i32 9
  %313 = load volatile i32, ptr %312, align 4, !tbaa !21
  %314 = or i32 %313, %310
  store volatile i32 %314, ptr %312, align 4, !tbaa !21
  %315 = load ptr, ptr %2, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %315, i32 0, i32 0
  %317 = load ptr, ptr %316, align 8, !tbaa !15
  %318 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %317, i32 0, i32 3
  %319 = load volatile i32, ptr %318, align 4, !tbaa !20
  %320 = zext i32 %319 to i64
  %321 = and i64 %320, -129
  %322 = trunc i64 %321 to i32
  store volatile i32 %322, ptr %318, align 4, !tbaa !20
  %323 = load ptr, ptr %2, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %323, i32 0, i32 0
  %325 = load ptr, ptr %324, align 8, !tbaa !15
  %326 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %325, i32 0, i32 14
  store volatile i32 2048, ptr %326, align 4, !tbaa !18
  %327 = load i32, ptr %4, align 4, !tbaa !14
  %328 = and i32 %327, 8
  %329 = icmp ne i32 %328, 0
  br i1 %329, label %330, label %336

330:                                              ; preds = %270
  %331 = load ptr, ptr %2, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %331, i32 0, i32 8
  store volatile i32 1, ptr %332, align 8, !tbaa !22
  %333 = load ptr, ptr %2, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %333, i32 0, i32 7
  store volatile i32 0, ptr %334, align 4, !tbaa !9
  %335 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_ErrorCallback(ptr noundef %335)
  br label %364

336:                                              ; preds = %270
  %337 = load i32, ptr %4, align 4, !tbaa !14
  %338 = and i32 %337, 128
  %339 = icmp ne i32 %338, 0
  br i1 %339, label %340, label %362

340:                                              ; preds = %336
  %341 = load ptr, ptr %2, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %341, i32 0, i32 9
  %343 = load volatile i32, ptr %342, align 4, !tbaa !21
  %344 = icmp ne i32 %343, 0
  br i1 %344, label %345, label %361

345:                                              ; preds = %340
  %346 = load ptr, ptr %2, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %346, i32 0, i32 0
  %348 = load ptr, ptr %347, align 8, !tbaa !15
  %349 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %348, i32 0, i32 15
  %350 = load volatile i32, ptr %349, align 4, !tbaa !19
  %351 = zext i32 %350 to i64
  %352 = and i64 %351, -268435457
  %353 = trunc i64 %352 to i32
  store volatile i32 %353, ptr %349, align 4, !tbaa !19
  %354 = load ptr, ptr %2, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %354, i32 0, i32 0
  %356 = load ptr, ptr %355, align 8, !tbaa !15
  %357 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %356, i32 0, i32 18
  store volatile i32 0, ptr %357, align 4, !tbaa !25
  %358 = load ptr, ptr %2, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %358, i32 0, i32 8
  store volatile i32 1, ptr %359, align 8, !tbaa !22
  %360 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SD_ErrorCallback(ptr noundef %360)
  br label %361

361:                                              ; preds = %345, %340
  br label %363

362:                                              ; preds = %336
  br label %363

363:                                              ; preds = %362, %361
  br label %364

364:                                              ; preds = %363, %330
  br label %410

365:                                              ; preds = %195
  %366 = load ptr, ptr %2, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %366, i32 0, i32 0
  %368 = load ptr, ptr %367, align 8, !tbaa !15
  %369 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %368, i32 0, i32 13
  %370 = load volatile i32, ptr %369, align 4, !tbaa !16
  %371 = zext i32 %370 to i64
  %372 = and i64 %371, 268435456
  %373 = icmp ne i64 %372, 0
  %374 = zext i1 %373 to i32
  %375 = icmp ne i32 %374, 0
  br i1 %375, label %376, label %408

376:                                              ; preds = %365
  %377 = load ptr, ptr %2, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %377, i32 0, i32 0
  %379 = load ptr, ptr %378, align 8, !tbaa !15
  %380 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %379, i32 0, i32 14
  store volatile i32 268435456, ptr %380, align 4, !tbaa !18
  %381 = load ptr, ptr %2, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.SD_HandleTypeDef, ptr %381, i32 0, i32 0
  %383 = load ptr, ptr %382, align 8, !tbaa !15
  %384 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %383, i32 0, i32 18
  %385 = load volatile i32, ptr %384, align 4, !tbaa !25
  %386 = zext i32 %385 to i64
  %387 = and i64 %386, 4
  %388 = icmp eq i64 %387, 0
  br i1 %388, label %389, label %398

389:                                              ; preds = %376
  %390 = load i32, ptr %4, align 4, !tbaa !14
  %391 = and i32 %390, 32
  %392 = icmp ne i32 %391, 0
  br i1 %392, label %393, label %395

393:                                              ; preds = %389
  %394 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SDEx_Write_DMADoubleBuf1CpltCallback(ptr noundef %394)
  br label %397

395:                                              ; preds = %389
  %396 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SDEx_Read_DMADoubleBuf1CpltCallback(ptr noundef %396)
  br label %397

397:                                              ; preds = %395, %393
  br label %407

398:                                              ; preds = %376
  %399 = load i32, ptr %4, align 4, !tbaa !14
  %400 = and i32 %399, 32
  %401 = icmp ne i32 %400, 0
  br i1 %401, label %402, label %404

402:                                              ; preds = %398
  %403 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SDEx_Write_DMADoubleBuf0CpltCallback(ptr noundef %403)
  br label %406

404:                                              ; preds = %398
  %405 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_SDEx_Read_DMADoubleBuf0CpltCallback(ptr noundef %405)
  br label %406

406:                                              ; preds = %404, %402
  br label %407

407:                                              ; preds = %406, %397
  br label %409

408:                                              ; preds = %365
  br label %409

409:                                              ; preds = %408, %407
  br label %410

410:                                              ; preds = %409, %364
  br label %411

411:                                              ; preds = %410, %193
  br label %412

412:                                              ; preds = %411, %177
  br label %413

413:                                              ; preds = %412, %22
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #3
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden void @SD_Read_IT(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_SD_ErrorCallback(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_SD_RxCpltCallback(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_SD_TxCpltCallback(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @SD_Write_IT(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_SDEx_Write_DMADoubleBuf1CpltCallback(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_SDEx_Read_DMADoubleBuf1CpltCallback(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_SDEx_Write_DMADoubleBuf0CpltCallback(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_SDEx_Read_DMADoubleBuf0CpltCallback(ptr noundef) #2

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


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

declare i32 @SDMMC_CmdStopTransfer(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @HAL_SD_IRQHandler(ptr noundef %0) local_unnamed_addr #1 {
  %2 = getelementptr inbounds i8, ptr %0, i64 60
  %3 = load volatile i32, ptr %2, align 4, !tbaa !5
  %4 = load ptr, ptr %0, align 8, !tbaa !13
  %5 = getelementptr inbounds i8, ptr %4, i64 52
  %6 = load volatile i32, ptr %5, align 4, !tbaa !14
  %7 = and i32 %6, 32768
  %.not = icmp eq i32 %7, 0
  %8 = and i32 %3, 8
  %.not83 = icmp eq i32 %8, 0
  %or.cond = select i1 %.not, i1 true, i1 %.not83
  br i1 %or.cond, label %10, label %9

9:                                                ; preds = %1
  tail call void @SD_Read_IT(ptr noundef nonnull %0)
  br label %142

10:                                               ; preds = %1
  %11 = load volatile i32, ptr %5, align 4, !tbaa !14
  %12 = and i32 %11, 256
  %.not84 = icmp eq i32 %12, 0
  br i1 %.not84, label %58, label %13

13:                                               ; preds = %10
  %14 = getelementptr inbounds i8, ptr %4, i64 56
  store volatile i32 256, ptr %14, align 4, !tbaa !16
  %15 = getelementptr inbounds i8, ptr %4, i64 60
  %16 = load volatile i32, ptr %15, align 4, !tbaa !17
  %17 = and i32 %16, -49467
  store volatile i32 %17, ptr %15, align 4, !tbaa !17
  %18 = load volatile i32, ptr %15, align 4, !tbaa !17
  %19 = and i32 %18, -268435457
  store volatile i32 %19, ptr %15, align 4, !tbaa !17
  %20 = getelementptr inbounds i8, ptr %4, i64 12
  %21 = load volatile i32, ptr %20, align 4, !tbaa !18
  %22 = and i32 %21, -65
  store volatile i32 %22, ptr %20, align 4, !tbaa !18
  br i1 %.not83, label %38, label %23

23:                                               ; preds = %13
  %24 = and i32 %3, 34
  %or.cond110 = icmp eq i32 %24, 0
  br i1 %or.cond110, label %31, label %25

25:                                               ; preds = %23
  %26 = tail call i32 @SDMMC_CmdStopTransfer(ptr noundef nonnull %4) #2
  %.not108 = icmp eq i32 %26, 0
  br i1 %.not108, label %31, label %27

27:                                               ; preds = %25
  %28 = getelementptr inbounds i8, ptr %0, i64 68
  %29 = load volatile i32, ptr %28, align 4, !tbaa !19
  %30 = or i32 %29, %26
  store volatile i32 %30, ptr %28, align 4, !tbaa !19
  tail call void @HAL_SD_ErrorCallback(ptr noundef nonnull %0)
  br label %31

31:                                               ; preds = %23, %25, %27
  %32 = load ptr, ptr %0, align 8, !tbaa !13
  %33 = getelementptr inbounds i8, ptr %32, i64 56
  store volatile i32 402657082, ptr %33, align 4, !tbaa !16
  %34 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %34, align 8, !tbaa !20
  store volatile i32 0, ptr %2, align 4, !tbaa !5
  %35 = and i32 %3, 3
  %brmerge.not = icmp eq i32 %35, 0
  br i1 %brmerge.not, label %37, label %36

36:                                               ; preds = %31
  tail call void @HAL_SD_RxCpltCallback(ptr noundef nonnull %0)
  br label %142

37:                                               ; preds = %31
  tail call void @HAL_SD_TxCpltCallback(ptr noundef nonnull %0)
  br label %142

38:                                               ; preds = %13
  %39 = and i32 %3, 128
  %.not99 = icmp eq i32 %39, 0
  br i1 %.not99, label %142, label %40

40:                                               ; preds = %38
  %41 = getelementptr inbounds i8, ptr %4, i64 40
  store volatile i32 0, ptr %41, align 4, !tbaa !21
  %42 = getelementptr inbounds i8, ptr %4, i64 44
  store volatile i32 0, ptr %42, align 4, !tbaa !22
  %43 = getelementptr inbounds i8, ptr %4, i64 80
  store volatile i32 0, ptr %43, align 4, !tbaa !23
  %44 = and i32 %3, 34
  %or.cond111 = icmp eq i32 %44, 0
  br i1 %or.cond111, label %51, label %45

45:                                               ; preds = %40
  %46 = tail call i32 @SDMMC_CmdStopTransfer(ptr noundef nonnull %4) #2
  %.not102 = icmp eq i32 %46, 0
  br i1 %.not102, label %51, label %47

47:                                               ; preds = %45
  %48 = getelementptr inbounds i8, ptr %0, i64 68
  %49 = load volatile i32, ptr %48, align 4, !tbaa !19
  %50 = or i32 %49, %46
  store volatile i32 %50, ptr %48, align 4, !tbaa !19
  tail call void @HAL_SD_ErrorCallback(ptr noundef nonnull %0)
  br label %51

51:                                               ; preds = %40, %45, %47
  %52 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %52, align 8, !tbaa !20
  store volatile i32 0, ptr %2, align 4, !tbaa !5
  %53 = and i32 %3, 48
  %or.cond112 = icmp eq i32 %53, 0
  br i1 %or.cond112, label %55, label %54

54:                                               ; preds = %51
  tail call void @HAL_SD_TxCpltCallback(ptr noundef nonnull %0)
  br label %55

55:                                               ; preds = %51, %54
  %56 = and i32 %3, 3
  %brmerge113.not = icmp eq i32 %56, 0
  br i1 %brmerge113.not, label %142, label %57

57:                                               ; preds = %55
  tail call void @HAL_SD_RxCpltCallback(ptr noundef nonnull %0)
  br label %142

58:                                               ; preds = %10
  %59 = load volatile i32, ptr %5, align 4, !tbaa !14
  %60 = and i32 %59, 16384
  %.not85 = icmp eq i32 %60, 0
  %or.cond114 = select i1 %.not85, i1 true, i1 %.not83
  br i1 %or.cond114, label %62, label %61

61:                                               ; preds = %58
  tail call void @SD_Write_IT(ptr noundef nonnull %0)
  br label %142

62:                                               ; preds = %58
  %63 = load volatile i32, ptr %5, align 4, !tbaa !14
  %64 = and i32 %63, 58
  %.not87 = icmp eq i32 %64, 0
  %65 = load volatile i32, ptr %5, align 4, !tbaa !14
  br i1 %.not87, label %127, label %66

66:                                               ; preds = %62
  %67 = and i32 %65, 2
  %.not91 = icmp eq i32 %67, 0
  br i1 %.not91, label %72, label %68

68:                                               ; preds = %66
  %69 = getelementptr inbounds i8, ptr %0, i64 68
  %70 = load volatile i32, ptr %69, align 4, !tbaa !19
  %71 = or i32 %70, 2
  store volatile i32 %71, ptr %69, align 4, !tbaa !19
  br label %72

72:                                               ; preds = %68, %66
  %73 = load volatile i32, ptr %5, align 4, !tbaa !14
  %74 = and i32 %73, 8
  %.not92 = icmp eq i32 %74, 0
  br i1 %.not92, label %79, label %75

75:                                               ; preds = %72
  %76 = getelementptr inbounds i8, ptr %0, i64 68
  %77 = load volatile i32, ptr %76, align 4, !tbaa !19
  %78 = or i32 %77, 8
  store volatile i32 %78, ptr %76, align 4, !tbaa !19
  br label %79

79:                                               ; preds = %75, %72
  %80 = load volatile i32, ptr %5, align 4, !tbaa !14
  %81 = and i32 %80, 32
  %.not93 = icmp eq i32 %81, 0
  br i1 %.not93, label %86, label %82

82:                                               ; preds = %79
  %83 = getelementptr inbounds i8, ptr %0, i64 68
  %84 = load volatile i32, ptr %83, align 4, !tbaa !19
  %85 = or i32 %84, 32
  store volatile i32 %85, ptr %83, align 4, !tbaa !19
  br label %86

86:                                               ; preds = %82, %79
  %87 = load volatile i32, ptr %5, align 4, !tbaa !14
  %88 = and i32 %87, 16
  %.not94 = icmp eq i32 %88, 0
  br i1 %.not94, label %93, label %89

89:                                               ; preds = %86
  %90 = getelementptr inbounds i8, ptr %0, i64 68
  %91 = load volatile i32, ptr %90, align 4, !tbaa !19
  %92 = or i32 %91, 16
  store volatile i32 %92, ptr %90, align 4, !tbaa !19
  br label %93

93:                                               ; preds = %89, %86
  %94 = getelementptr inbounds i8, ptr %4, i64 56
  store volatile i32 402657082, ptr %94, align 4, !tbaa !16
  %95 = getelementptr inbounds i8, ptr %4, i64 60
  %96 = load volatile i32, ptr %95, align 4, !tbaa !17
  %97 = and i32 %96, -315
  store volatile i32 %97, ptr %95, align 4, !tbaa !17
  %98 = getelementptr inbounds i8, ptr %4, i64 12
  %99 = load volatile i32, ptr %98, align 4, !tbaa !18
  %100 = and i32 %99, -65
  store volatile i32 %100, ptr %98, align 4, !tbaa !18
  %101 = getelementptr inbounds i8, ptr %4, i64 44
  %102 = load volatile i32, ptr %101, align 4, !tbaa !22
  %103 = or i32 %102, 8192
  store volatile i32 %103, ptr %101, align 4, !tbaa !22
  %104 = load volatile i32, ptr %98, align 4, !tbaa !18
  %105 = or i32 %104, 128
  store volatile i32 %105, ptr %98, align 4, !tbaa !18
  %106 = tail call i32 @SDMMC_CmdStopTransfer(ptr noundef nonnull %4) #2
  %107 = getelementptr inbounds i8, ptr %0, i64 68
  %108 = load volatile i32, ptr %107, align 4, !tbaa !19
  %109 = or i32 %108, %106
  store volatile i32 %109, ptr %107, align 4, !tbaa !19
  %110 = load ptr, ptr %0, align 8, !tbaa !13
  %111 = getelementptr inbounds i8, ptr %110, i64 12
  %112 = load volatile i32, ptr %111, align 4, !tbaa !18
  %113 = and i32 %112, -129
  store volatile i32 %113, ptr %111, align 4, !tbaa !18
  %114 = getelementptr inbounds i8, ptr %110, i64 56
  store volatile i32 2048, ptr %114, align 4, !tbaa !16
  br i1 %.not83, label %117, label %115

115:                                              ; preds = %93
  %116 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %116, align 8, !tbaa !20
  store volatile i32 0, ptr %2, align 4, !tbaa !5
  tail call void @HAL_SD_ErrorCallback(ptr noundef nonnull %0)
  br label %142

117:                                              ; preds = %93
  %118 = and i32 %3, 128
  %.not96 = icmp eq i32 %118, 0
  br i1 %.not96, label %142, label %119

119:                                              ; preds = %117
  %120 = load volatile i32, ptr %107, align 4, !tbaa !19
  %.not97 = icmp eq i32 %120, 0
  br i1 %.not97, label %142, label %121

121:                                              ; preds = %119
  %122 = getelementptr inbounds i8, ptr %110, i64 60
  %123 = load volatile i32, ptr %122, align 4, !tbaa !17
  %124 = and i32 %123, -268435457
  store volatile i32 %124, ptr %122, align 4, !tbaa !17
  %125 = getelementptr inbounds i8, ptr %110, i64 80
  store volatile i32 0, ptr %125, align 4, !tbaa !23
  %126 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %126, align 8, !tbaa !20
  tail call void @HAL_SD_ErrorCallback(ptr noundef nonnull %0)
  br label %142

127:                                              ; preds = %62
  %128 = and i32 %65, 268435456
  %.not88 = icmp eq i32 %128, 0
  br i1 %.not88, label %142, label %129

129:                                              ; preds = %127
  %130 = getelementptr inbounds i8, ptr %4, i64 56
  store volatile i32 268435456, ptr %130, align 4, !tbaa !16
  %131 = getelementptr inbounds i8, ptr %4, i64 80
  %132 = load volatile i32, ptr %131, align 4, !tbaa !23
  %133 = and i32 %132, 4
  %134 = icmp eq i32 %133, 0
  %135 = and i32 %3, 32
  %.not90 = icmp eq i32 %135, 0
  br i1 %134, label %136, label %139

136:                                              ; preds = %129
  br i1 %.not90, label %138, label %137

137:                                              ; preds = %136
  tail call void @HAL_SDEx_Write_DMADoubleBuf1CpltCallback(ptr noundef nonnull %0)
  br label %142

138:                                              ; preds = %136
  tail call void @HAL_SDEx_Read_DMADoubleBuf1CpltCallback(ptr noundef nonnull %0)
  br label %142

139:                                              ; preds = %129
  br i1 %.not90, label %141, label %140

140:                                              ; preds = %139
  tail call void @HAL_SDEx_Write_DMADoubleBuf0CpltCallback(ptr noundef nonnull %0)
  br label %142

141:                                              ; preds = %139
  tail call void @HAL_SDEx_Read_DMADoubleBuf0CpltCallback(ptr noundef nonnull %0)
  br label %142

142:                                              ; preds = %55, %57, %38, %36, %37, %121, %119, %117, %115, %127, %138, %137, %141, %140, %61, %9
  ret void
}

; Function Attrs: nounwind uwtable
declare hidden void @SD_Read_IT(ptr noundef) local_unnamed_addr #1

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

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

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

; Function Attrs: nounwind uwtable
declare hidden void @SD_Write_IT(ptr noundef) local_unnamed_addr #1

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

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

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

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

attributes #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 = { 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, !11, i64 60}
!6 = !{!"", !7, i64 0, !10, i64 8, !11, i64 28, !7, i64 32, !11, i64 40, !7, i64 48, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !12, i64 72, !8, i64 108, !8, i64 124}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16}
!11 = !{!"int", !8, i64 0}
!12 = !{!"", !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}
!13 = !{!6, !7, i64 0}
!14 = !{!15, !11, i64 52}
!15 = !{!"", !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, !8, i64 68, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !8, i64 96, !11, i64 128, !8, i64 132, !11, i64 1020}
!16 = !{!15, !11, i64 56}
!17 = !{!15, !11, i64 60}
!18 = !{!15, !11, i64 12}
!19 = !{!6, !11, i64 68}
!20 = !{!6, !11, i64 64}
!21 = !{!15, !11, i64 40}
!22 = !{!15, !11, i64 44}
!23 = !{!15, !11, i64 80}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass