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

; 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.MMC_HandleTypeDef = type { ptr, %struct.SDMMC_InitTypeDef, i32, ptr, i32, ptr, i32, i32, i32, i32, %struct.HAL_MMC_CardInfoTypeDef, [4 x i32], [4 x i32], [128 x i32] }
%struct.SDMMC_InitTypeDef = type { i32, i32, i32, i32, i32 }
%struct.HAL_MMC_CardInfoTypeDef = type { 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_MMC_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.MMC_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.MMC_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, 256
  %15 = icmp ne i64 %14, 0
  %16 = zext i1 %15 to i32
  %17 = icmp ne i32 %16, 0
  br i1 %17, label %18, label %161

18:                                               ; preds = %1
  %19 = load ptr, ptr %2, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %19, i32 0, i32 0
  %21 = load ptr, ptr %20, align 8, !tbaa !15
  %22 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %21, i32 0, i32 14
  store volatile i32 256, ptr %22, align 4, !tbaa !18
  %23 = load ptr, ptr %2, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %23, i32 0, i32 0
  %25 = load ptr, ptr %24, align 8, !tbaa !15
  %26 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %25, i32 0, i32 15
  %27 = load volatile i32, ptr %26, align 4, !tbaa !19
  %28 = zext i32 %27 to i64
  %29 = and i64 %28, -49467
  %30 = trunc i64 %29 to i32
  store volatile i32 %30, ptr %26, align 4, !tbaa !19
  %31 = load ptr, ptr %2, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %31, i32 0, i32 0
  %33 = load ptr, ptr %32, align 8, !tbaa !15
  %34 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %33, i32 0, i32 15
  %35 = load volatile i32, ptr %34, align 4, !tbaa !19
  %36 = zext i32 %35 to i64
  %37 = and i64 %36, -268435457
  %38 = trunc i64 %37 to i32
  store volatile i32 %38, ptr %34, align 4, !tbaa !19
  %39 = load ptr, ptr %2, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %39, i32 0, i32 0
  %41 = load ptr, ptr %40, align 8, !tbaa !15
  %42 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %41, i32 0, i32 3
  %43 = load volatile i32, ptr %42, align 4, !tbaa !20
  %44 = zext i32 %43 to i64
  %45 = and i64 %44, -65
  %46 = trunc i64 %45 to i32
  store volatile i32 %46, ptr %42, align 4, !tbaa !20
  %47 = load i32, ptr %4, align 4, !tbaa !14
  %48 = and i32 %47, 128
  %49 = icmp ne i32 %48, 0
  br i1 %49, label %50, label %112

50:                                               ; preds = %18
  %51 = load ptr, ptr %2, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %51, i32 0, i32 0
  %53 = load ptr, ptr %52, align 8, !tbaa !15
  %54 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %53, i32 0, i32 10
  store volatile i32 0, ptr %54, align 4, !tbaa !21
  %55 = load ptr, ptr %2, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %55, i32 0, i32 0
  %57 = load ptr, ptr %56, align 8, !tbaa !15
  %58 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %57, i32 0, i32 11
  store volatile i32 0, ptr %58, align 4, !tbaa !22
  %59 = load ptr, ptr %2, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %59, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8, !tbaa !15
  %62 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %61, i32 0, i32 18
  store volatile i32 0, ptr %62, align 4, !tbaa !23
  %63 = load i32, ptr %4, align 4, !tbaa !14
  %64 = and i32 %63, 2
  %65 = icmp ne i32 %64, 0
  br i1 %65, label %70, label %66

66:                                               ; preds = %50
  %67 = load i32, ptr %4, align 4, !tbaa !14
  %68 = and i32 %67, 32
  %69 = icmp ne i32 %68, 0
  br i1 %69, label %70, label %85

70:                                               ; preds = %66, %50
  %71 = load ptr, ptr %2, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %71, i32 0, i32 0
  %73 = load ptr, ptr %72, align 8, !tbaa !15
  %74 = call i32 @SDMMC_CmdStopTransfer(ptr noundef %73)
  store i32 %74, ptr %3, align 4, !tbaa !14
  %75 = load i32, ptr %3, align 4, !tbaa !14
  %76 = icmp ne i32 %75, 0
  br i1 %76, label %77, label %84

77:                                               ; preds = %70
  %78 = load i32, ptr %3, align 4, !tbaa !14
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %79, i32 0, i32 9
  %81 = load volatile i32, ptr %80, align 4, !tbaa !24
  %82 = or i32 %81, %78
  store volatile i32 %82, ptr %80, align 4, !tbaa !24
  %83 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMC_ErrorCallback(ptr noundef %83)
  br label %84

84:                                               ; preds = %77, %70
  br label %85

85:                                               ; preds = %84, %66
  %86 = load ptr, ptr %2, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %86, i32 0, i32 0
  %88 = load ptr, ptr %87, align 8, !tbaa !15
  %89 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %88, i32 0, i32 14
  store volatile i32 402657082, ptr %89, align 4, !tbaa !18
  %90 = load ptr, ptr %2, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %90, i32 0, i32 8
  store volatile i32 1, ptr %91, align 8, !tbaa !25
  %92 = load i32, ptr %4, align 4, !tbaa !14
  %93 = and i32 %92, 16
  %94 = icmp ne i32 %93, 0
  br i1 %94, label %99, label %95

95:                                               ; preds = %85
  %96 = load i32, ptr %4, align 4, !tbaa !14
  %97 = and i32 %96, 32
  %98 = icmp ne i32 %97, 0
  br i1 %98, label %99, label %101

99:                                               ; preds = %95, %85
  %100 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMC_TxCpltCallback(ptr noundef %100)
  br label %101

101:                                              ; preds = %99, %95
  %102 = load i32, ptr %4, align 4, !tbaa !14
  %103 = and i32 %102, 1
  %104 = icmp ne i32 %103, 0
  br i1 %104, label %109, label %105

105:                                              ; preds = %101
  %106 = load i32, ptr %4, align 4, !tbaa !14
  %107 = and i32 %106, 2
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %109, label %111

109:                                              ; preds = %105, %101
  %110 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMC_RxCpltCallback(ptr noundef %110)
  br label %111

111:                                              ; preds = %109, %105
  br label %160

112:                                              ; preds = %18
  %113 = load i32, ptr %4, align 4, !tbaa !14
  %114 = and i32 %113, 8
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %116, label %158

116:                                              ; preds = %112
  %117 = load i32, ptr %4, align 4, !tbaa !14
  %118 = and i32 %117, 2
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %124, label %120

120:                                              ; preds = %116
  %121 = load i32, ptr %4, align 4, !tbaa !14
  %122 = and i32 %121, 32
  %123 = icmp ne i32 %122, 0
  br i1 %123, label %124, label %139

124:                                              ; preds = %120, %116
  %125 = load ptr, ptr %2, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %125, i32 0, i32 0
  %127 = load ptr, ptr %126, align 8, !tbaa !15
  %128 = call i32 @SDMMC_CmdStopTransfer(ptr noundef %127)
  store i32 %128, ptr %3, align 4, !tbaa !14
  %129 = load i32, ptr %3, align 4, !tbaa !14
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %131, label %138

131:                                              ; preds = %124
  %132 = load i32, ptr %3, align 4, !tbaa !14
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %133, i32 0, i32 9
  %135 = load volatile i32, ptr %134, align 4, !tbaa !24
  %136 = or i32 %135, %132
  store volatile i32 %136, ptr %134, align 4, !tbaa !24
  %137 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMC_ErrorCallback(ptr noundef %137)
  br label %138

138:                                              ; preds = %131, %124
  br label %139

139:                                              ; preds = %138, %120
  %140 = load ptr, ptr %2, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %141, align 8, !tbaa !15
  %143 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %142, i32 0, i32 14
  store volatile i32 402657082, ptr %143, align 4, !tbaa !18
  %144 = load ptr, ptr %2, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %144, i32 0, i32 8
  store volatile i32 1, ptr %145, align 8, !tbaa !25
  %146 = load i32, ptr %4, align 4, !tbaa !14
  %147 = and i32 %146, 1
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %153, label %149

149:                                              ; preds = %139
  %150 = load i32, ptr %4, align 4, !tbaa !14
  %151 = and i32 %150, 2
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %153, label %155

153:                                              ; preds = %149, %139
  %154 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMC_RxCpltCallback(ptr noundef %154)
  br label %157

155:                                              ; preds = %149
  %156 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMC_TxCpltCallback(ptr noundef %156)
  br label %157

157:                                              ; preds = %155, %153
  br label %159

158:                                              ; preds = %112
  br label %159

159:                                              ; preds = %158, %157
  br label %160

160:                                              ; preds = %159, %111
  br label %411

161:                                              ; preds = %1
  %162 = load ptr, ptr %2, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %162, i32 0, i32 0
  %164 = load ptr, ptr %163, align 8, !tbaa !15
  %165 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %164, i32 0, i32 13
  %166 = load volatile i32, ptr %165, align 4, !tbaa !16
  %167 = zext i32 %166 to i64
  %168 = and i64 %167, 16384
  %169 = icmp ne i64 %168, 0
  %170 = zext i1 %169 to i32
  %171 = icmp ne i32 %170, 0
  br i1 %171, label %172, label %174

172:                                              ; preds = %161
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  call void @MMC_Write_IT(ptr noundef %173)
  br label %410

174:                                              ; preds = %161
  %175 = load ptr, ptr %2, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %175, i32 0, i32 0
  %177 = load ptr, ptr %176, align 8, !tbaa !15
  %178 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %177, i32 0, i32 13
  %179 = load volatile i32, ptr %178, align 4, !tbaa !16
  %180 = zext i32 %179 to i64
  %181 = and i64 %180, 32768
  %182 = icmp ne i64 %181, 0
  %183 = zext i1 %182 to i32
  %184 = icmp ne i32 %183, 0
  br i1 %184, label %185, label %187

185:                                              ; preds = %174
  %186 = load ptr, ptr %2, align 8, !tbaa !5
  call void @MMC_Read_IT(ptr noundef %186)
  br label %409

187:                                              ; preds = %174
  %188 = load ptr, ptr %2, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %188, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8, !tbaa !15
  %191 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %190, i32 0, i32 13
  %192 = load volatile i32, ptr %191, align 4, !tbaa !16
  %193 = zext i32 %192 to i64
  %194 = and i64 %193, 58
  %195 = icmp ne i64 %194, 0
  %196 = zext i1 %195 to i32
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %198, label %363

198:                                              ; preds = %187
  %199 = load ptr, ptr %2, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %199, i32 0, i32 0
  %201 = load ptr, ptr %200, align 8, !tbaa !15
  %202 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %201, i32 0, i32 13
  %203 = load volatile i32, ptr %202, align 4, !tbaa !16
  %204 = zext i32 %203 to i64
  %205 = and i64 %204, 2
  %206 = icmp ne i64 %205, 0
  %207 = zext i1 %206 to i32
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %214

209:                                              ; preds = %198
  %210 = load ptr, ptr %2, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %210, i32 0, i32 9
  %212 = load volatile i32, ptr %211, align 4, !tbaa !24
  %213 = or i32 %212, 2
  store volatile i32 %213, ptr %211, align 4, !tbaa !24
  br label %214

214:                                              ; preds = %209, %198
  %215 = load ptr, ptr %2, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %215, i32 0, i32 0
  %217 = load ptr, ptr %216, align 8, !tbaa !15
  %218 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %217, i32 0, i32 13
  %219 = load volatile i32, ptr %218, align 4, !tbaa !16
  %220 = zext i32 %219 to i64
  %221 = and i64 %220, 8
  %222 = icmp ne i64 %221, 0
  %223 = zext i1 %222 to i32
  %224 = icmp ne i32 %223, 0
  br i1 %224, label %225, label %230

225:                                              ; preds = %214
  %226 = load ptr, ptr %2, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %226, i32 0, i32 9
  %228 = load volatile i32, ptr %227, align 4, !tbaa !24
  %229 = or i32 %228, 8
  store volatile i32 %229, ptr %227, align 4, !tbaa !24
  br label %230

230:                                              ; preds = %225, %214
  %231 = load ptr, ptr %2, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %231, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8, !tbaa !15
  %234 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %233, i32 0, i32 13
  %235 = load volatile i32, ptr %234, align 4, !tbaa !16
  %236 = zext i32 %235 to i64
  %237 = and i64 %236, 32
  %238 = icmp ne i64 %237, 0
  %239 = zext i1 %238 to i32
  %240 = icmp ne i32 %239, 0
  br i1 %240, label %241, label %246

241:                                              ; preds = %230
  %242 = load ptr, ptr %2, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %242, i32 0, i32 9
  %244 = load volatile i32, ptr %243, align 4, !tbaa !24
  %245 = or i32 %244, 32
  store volatile i32 %245, ptr %243, align 4, !tbaa !24
  br label %246

246:                                              ; preds = %241, %230
  %247 = load ptr, ptr %2, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %247, i32 0, i32 0
  %249 = load ptr, ptr %248, align 8, !tbaa !15
  %250 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %249, i32 0, i32 13
  %251 = load volatile i32, ptr %250, align 4, !tbaa !16
  %252 = zext i32 %251 to i64
  %253 = and i64 %252, 16
  %254 = icmp ne i64 %253, 0
  %255 = zext i1 %254 to i32
  %256 = icmp ne i32 %255, 0
  br i1 %256, label %257, label %262

257:                                              ; preds = %246
  %258 = load ptr, ptr %2, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %258, i32 0, i32 9
  %260 = load volatile i32, ptr %259, align 4, !tbaa !24
  %261 = or i32 %260, 16
  store volatile i32 %261, ptr %259, align 4, !tbaa !24
  br label %262

262:                                              ; preds = %257, %246
  %263 = load ptr, ptr %2, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %263, i32 0, i32 0
  %265 = load ptr, ptr %264, align 8, !tbaa !15
  %266 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %265, i32 0, i32 14
  store volatile i32 402657082, ptr %266, align 4, !tbaa !18
  %267 = load ptr, ptr %2, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %267, i32 0, i32 0
  %269 = load ptr, ptr %268, align 8, !tbaa !15
  %270 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %269, i32 0, i32 15
  %271 = load volatile i32, ptr %270, align 4, !tbaa !19
  %272 = zext i32 %271 to i64
  %273 = and i64 %272, -3
  %274 = trunc i64 %273 to i32
  store volatile i32 %274, ptr %270, align 4, !tbaa !19
  %275 = load ptr, ptr %2, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.MMC_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.MMC_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.MMC_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 !22
  %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 !22
  %299 = load ptr, ptr %2, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.MMC_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.MMC_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.MMC_HandleTypeDef, ptr %311, i32 0, i32 9
  %313 = load volatile i32, ptr %312, align 4, !tbaa !24
  %314 = or i32 %313, %310
  store volatile i32 %314, ptr %312, align 4, !tbaa !24
  %315 = load ptr, ptr %2, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.MMC_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.MMC_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 %334

330:                                              ; preds = %262
  %331 = load ptr, ptr %2, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %331, i32 0, i32 8
  store volatile i32 1, ptr %332, align 8, !tbaa !25
  %333 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMC_ErrorCallback(ptr noundef %333)
  br label %362

334:                                              ; preds = %262
  %335 = load i32, ptr %4, align 4, !tbaa !14
  %336 = and i32 %335, 128
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %338, label %360

338:                                              ; preds = %334
  %339 = load ptr, ptr %2, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %339, i32 0, i32 9
  %341 = load volatile i32, ptr %340, align 4, !tbaa !24
  %342 = icmp ne i32 %341, 0
  br i1 %342, label %343, label %359

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

359:                                              ; preds = %343, %338
  br label %361

360:                                              ; preds = %334
  br label %361

361:                                              ; preds = %360, %359
  br label %362

362:                                              ; preds = %361, %330
  br label %408

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

374:                                              ; preds = %363
  %375 = load ptr, ptr %2, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %375, i32 0, i32 0
  %377 = load ptr, ptr %376, align 8, !tbaa !15
  %378 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %377, i32 0, i32 18
  %379 = load volatile i32, ptr %378, align 4, !tbaa !23
  %380 = zext i32 %379 to i64
  %381 = and i64 %380, 4
  %382 = icmp eq i64 %381, 0
  br i1 %382, label %383, label %392

383:                                              ; preds = %374
  %384 = load i32, ptr %4, align 4, !tbaa !14
  %385 = and i32 %384, 32
  %386 = icmp ne i32 %385, 0
  br i1 %386, label %387, label %389

387:                                              ; preds = %383
  %388 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMCEx_Write_DMADoubleBuf1CpltCallback(ptr noundef %388)
  br label %391

389:                                              ; preds = %383
  %390 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMCEx_Read_DMADoubleBuf1CpltCallback(ptr noundef %390)
  br label %391

391:                                              ; preds = %389, %387
  br label %401

392:                                              ; preds = %374
  %393 = load i32, ptr %4, align 4, !tbaa !14
  %394 = and i32 %393, 32
  %395 = icmp ne i32 %394, 0
  br i1 %395, label %396, label %398

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

398:                                              ; preds = %392
  %399 = load ptr, ptr %2, align 8, !tbaa !5
  call void @HAL_MMCEx_Read_DMADoubleBuf0CpltCallback(ptr noundef %399)
  br label %400

400:                                              ; preds = %398, %396
  br label %401

401:                                              ; preds = %400, %391
  %402 = load ptr, ptr %2, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.MMC_HandleTypeDef, ptr %402, i32 0, i32 0
  %404 = load ptr, ptr %403, align 8, !tbaa !15
  %405 = getelementptr inbounds %struct.SDMMC_TypeDef, ptr %404, i32 0, i32 14
  store volatile i32 268435456, ptr %405, align 4, !tbaa !18
  br label %407

406:                                              ; preds = %363
  br label %407

407:                                              ; preds = %406, %401
  br label %408

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

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

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

411:                                              ; preds = %410, %160
  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 dso_local void @HAL_MMC_ErrorCallback(ptr noundef) #2

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_MMCEx_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 100, !7, i64 116, !7, i64 132}
!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}
!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 = !{!17, !12, i64 40}
!22 = !{!17, !12, i64 44}
!23 = !{!17, !12, i64 80}
!24 = !{!10, !12, i64 68}
!25 = !{!10, !12, i64 64}


; 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_MMC_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, 256
  %.not = icmp eq i32 %7, 0
  br i1 %.not, label %56, label %8

8:                                                ; preds = %1
  %9 = getelementptr inbounds i8, ptr %4, i64 56
  store volatile i32 256, ptr %9, align 4, !tbaa !16
  %10 = getelementptr inbounds i8, ptr %4, i64 60
  %11 = load volatile i32, ptr %10, align 4, !tbaa !17
  %12 = and i32 %11, -49467
  store volatile i32 %12, ptr %10, align 4, !tbaa !17
  %13 = load volatile i32, ptr %10, align 4, !tbaa !17
  %14 = and i32 %13, -268435457
  store volatile i32 %14, ptr %10, align 4, !tbaa !17
  %15 = getelementptr inbounds i8, ptr %4, i64 12
  %16 = load volatile i32, ptr %15, align 4, !tbaa !18
  %17 = and i32 %16, -65
  store volatile i32 %17, ptr %15, align 4, !tbaa !18
  %18 = and i32 %3, 128
  %.not93 = icmp eq i32 %18, 0
  br i1 %.not93, label %39, label %19

19:                                               ; preds = %8
  %20 = getelementptr inbounds i8, ptr %4, i64 40
  store volatile i32 0, ptr %20, align 4, !tbaa !19
  %21 = getelementptr inbounds i8, ptr %4, i64 44
  store volatile i32 0, ptr %21, align 4, !tbaa !20
  %22 = getelementptr inbounds i8, ptr %4, i64 80
  store volatile i32 0, ptr %22, align 4, !tbaa !21
  %23 = and i32 %3, 34
  %or.cond = icmp eq i32 %23, 0
  br i1 %or.cond, label %30, label %24

24:                                               ; preds = %19
  %25 = tail call i32 @SDMMC_CmdStopTransfer(ptr noundef nonnull %4) #2
  %.not101 = icmp eq i32 %25, 0
  br i1 %.not101, label %30, label %26

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

30:                                               ; preds = %19, %24, %26
  %31 = load ptr, ptr %0, align 8, !tbaa !13
  %32 = getelementptr inbounds i8, ptr %31, i64 56
  store volatile i32 402657082, ptr %32, align 4, !tbaa !16
  %33 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %33, align 8, !tbaa !23
  %34 = and i32 %3, 48
  %or.cond105 = icmp eq i32 %34, 0
  br i1 %or.cond105, label %36, label %35

35:                                               ; preds = %30
  tail call void @HAL_MMC_TxCpltCallback(ptr noundef nonnull %0)
  br label %36

36:                                               ; preds = %30, %35
  %37 = and i32 %3, 3
  %brmerge.not = icmp eq i32 %37, 0
  br i1 %brmerge.not, label %149, label %38

38:                                               ; preds = %36
  tail call void @HAL_MMC_RxCpltCallback(ptr noundef nonnull %0)
  br label %149

39:                                               ; preds = %8
  %40 = and i32 %3, 8
  %.not94 = icmp eq i32 %40, 0
  br i1 %.not94, label %149, label %41

41:                                               ; preds = %39
  %42 = and i32 %3, 34
  %or.cond106 = icmp eq i32 %42, 0
  br i1 %or.cond106, label %49, label %43

43:                                               ; preds = %41
  %44 = tail call i32 @SDMMC_CmdStopTransfer(ptr noundef nonnull %4) #2
  %.not97 = icmp eq i32 %44, 0
  br i1 %.not97, label %49, label %45

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

49:                                               ; preds = %41, %43, %45
  %50 = load ptr, ptr %0, align 8, !tbaa !13
  %51 = getelementptr inbounds i8, ptr %50, i64 56
  store volatile i32 402657082, ptr %51, align 4, !tbaa !16
  %52 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %52, align 8, !tbaa !23
  %53 = and i32 %3, 3
  %brmerge107.not = icmp eq i32 %53, 0
  br i1 %brmerge107.not, label %55, label %54

54:                                               ; preds = %49
  tail call void @HAL_MMC_RxCpltCallback(ptr noundef nonnull %0)
  br label %149

55:                                               ; preds = %49
  tail call void @HAL_MMC_TxCpltCallback(ptr noundef nonnull %0)
  br label %149

56:                                               ; preds = %1
  %57 = load volatile i32, ptr %5, align 4, !tbaa !14
  %58 = and i32 %57, 16384
  %.not80 = icmp eq i32 %58, 0
  br i1 %.not80, label %60, label %59

59:                                               ; preds = %56
  tail call void @MMC_Write_IT(ptr noundef nonnull %0)
  br label %149

60:                                               ; preds = %56
  %61 = load volatile i32, ptr %5, align 4, !tbaa !14
  %62 = and i32 %61, 32768
  %.not81 = icmp eq i32 %62, 0
  br i1 %.not81, label %64, label %63

63:                                               ; preds = %60
  tail call void @MMC_Read_IT(ptr noundef nonnull %0)
  br label %149

64:                                               ; preds = %60
  %65 = load volatile i32, ptr %5, align 4, !tbaa !14
  %66 = and i32 %65, 58
  %.not82 = icmp eq i32 %66, 0
  %67 = load volatile i32, ptr %5, align 4, !tbaa !14
  br i1 %.not82, label %132, label %68

68:                                               ; preds = %64
  %69 = and i32 %67, 2
  %.not86 = icmp eq i32 %69, 0
  br i1 %.not86, label %74, label %70

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

74:                                               ; preds = %70, %68
  %75 = load volatile i32, ptr %5, align 4, !tbaa !14
  %76 = and i32 %75, 8
  %.not87 = icmp eq i32 %76, 0
  br i1 %.not87, label %81, label %77

77:                                               ; preds = %74
  %78 = getelementptr inbounds i8, ptr %0, i64 68
  %79 = load volatile i32, ptr %78, align 4, !tbaa !22
  %80 = or i32 %79, 8
  store volatile i32 %80, ptr %78, align 4, !tbaa !22
  br label %81

81:                                               ; preds = %77, %74
  %82 = load volatile i32, ptr %5, align 4, !tbaa !14
  %83 = and i32 %82, 32
  %.not88 = icmp eq i32 %83, 0
  br i1 %.not88, label %88, label %84

84:                                               ; preds = %81
  %85 = getelementptr inbounds i8, ptr %0, i64 68
  %86 = load volatile i32, ptr %85, align 4, !tbaa !22
  %87 = or i32 %86, 32
  store volatile i32 %87, ptr %85, align 4, !tbaa !22
  br label %88

88:                                               ; preds = %84, %81
  %89 = load volatile i32, ptr %5, align 4, !tbaa !14
  %90 = and i32 %89, 16
  %.not89 = icmp eq i32 %90, 0
  br i1 %.not89, label %95, label %91

91:                                               ; preds = %88
  %92 = getelementptr inbounds i8, ptr %0, i64 68
  %93 = load volatile i32, ptr %92, align 4, !tbaa !22
  %94 = or i32 %93, 16
  store volatile i32 %94, ptr %92, align 4, !tbaa !22
  br label %95

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

120:                                              ; preds = %95
  %121 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %121, align 8, !tbaa !23
  tail call void @HAL_MMC_ErrorCallback(ptr noundef nonnull %0)
  br label %149

122:                                              ; preds = %95
  %123 = and i32 %3, 128
  %.not91 = icmp eq i32 %123, 0
  br i1 %.not91, label %149, label %124

124:                                              ; preds = %122
  %125 = load volatile i32, ptr %111, align 4, !tbaa !22
  %.not92 = icmp eq i32 %125, 0
  br i1 %.not92, label %149, label %126

126:                                              ; preds = %124
  %127 = getelementptr inbounds i8, ptr %114, i64 60
  %128 = load volatile i32, ptr %127, align 4, !tbaa !17
  %129 = and i32 %128, -268435457
  store volatile i32 %129, ptr %127, align 4, !tbaa !17
  %130 = getelementptr inbounds i8, ptr %114, i64 80
  store volatile i32 0, ptr %130, align 4, !tbaa !21
  %131 = getelementptr inbounds i8, ptr %0, i64 64
  store volatile i32 1, ptr %131, align 8, !tbaa !23
  tail call void @HAL_MMC_ErrorCallback(ptr noundef nonnull %0)
  br label %149

132:                                              ; preds = %64
  %133 = and i32 %67, 268435456
  %.not83 = icmp eq i32 %133, 0
  br i1 %.not83, label %149, label %134

134:                                              ; preds = %132
  %135 = getelementptr inbounds i8, ptr %4, i64 80
  %136 = load volatile i32, ptr %135, align 4, !tbaa !21
  %137 = and i32 %136, 4
  %138 = icmp eq i32 %137, 0
  %139 = and i32 %3, 32
  %.not85 = icmp eq i32 %139, 0
  br i1 %138, label %140, label %143

140:                                              ; preds = %134
  br i1 %.not85, label %142, label %141

141:                                              ; preds = %140
  tail call void @HAL_MMCEx_Write_DMADoubleBuf1CpltCallback(ptr noundef nonnull %0)
  br label %146

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

143:                                              ; preds = %134
  br i1 %.not85, label %145, label %144

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

145:                                              ; preds = %143
  tail call void @HAL_MMCEx_Read_DMADoubleBuf0CpltCallback(ptr noundef nonnull %0)
  br label %146

146:                                              ; preds = %144, %145, %141, %142
  %147 = load ptr, ptr %0, align 8, !tbaa !13
  %148 = getelementptr inbounds i8, ptr %147, i64 56
  store volatile i32 268435456, ptr %148, align 4, !tbaa !16
  br label %149

149:                                              ; preds = %36, %59, %126, %124, %122, %120, %132, %146, %63, %38, %39, %54, %55
  ret void
}

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @HAL_MMCEx_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 100, !8, i64 116, !8, i64 132}
!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}
!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 = !{!15, !11, i64 40}
!20 = !{!15, !11, i64 44}
!21 = !{!15, !11, i64 80}
!22 = !{!6, !11, i64 68}
!23 = !{!6, !11, i64 64}


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