; 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.__DMA_HandleTypeDef = type { ptr, %struct.DMA_InitTypeDef, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i32, ptr, ptr, i32 }
%struct.DMA_InitTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.DMA_Base_Registers = type { i32, i32, i32 }
%struct.BDMA_Base_Registers = type { i32, i32 }
%struct.DMA_Stream_TypeDef = type { i32, i32, i32, i32, i32, i32 }
%struct.BDMA_Channel_TypeDef = type { i32, i32, i32, i32, i32 }

@SystemCoreClock = external global i32, align 4

; 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 void @HAL_DMA_IRQHandler(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #2
  store volatile i32 0, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  %11 = load i32, ptr @SystemCoreClock, align 4, !tbaa !9
  %12 = udiv i32 %11, 9600
  store i32 %12, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #2
  %13 = load ptr, ptr %2, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %13, i32 0, i32 12
  %15 = load i32, ptr %14, align 4, !tbaa !11
  %16 = zext i32 %15 to i64
  %17 = inttoptr i64 %16 to ptr
  store ptr %17, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #2
  %18 = load ptr, ptr %2, align 8, !tbaa !5
  %19 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %18, i32 0, i32 12
  %20 = load i32, ptr %19, align 4, !tbaa !11
  %21 = zext i32 %20 to i64
  %22 = inttoptr i64 %21 to ptr
  store ptr %22, ptr %9, align 8, !tbaa !5
  %23 = load ptr, ptr %8, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %23, i32 0, i32 0
  %25 = load volatile i32, ptr %24, align 4, !tbaa !14
  store i32 %25, ptr %3, align 4, !tbaa !9
  %26 = load ptr, ptr %9, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.BDMA_Base_Registers, ptr %26, i32 0, i32 0
  %28 = load volatile i32, ptr %27, align 4, !tbaa !16
  store i32 %28, ptr %4, align 4, !tbaa !9
  %29 = load ptr, ptr %2, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %29, i32 0, i32 0
  %31 = load ptr, ptr %30, align 8, !tbaa !18
  %32 = icmp eq ptr %31, inttoptr (i64 1073872912 to ptr)
  br i1 %32, label %108, label %33

33:                                               ; preds = %1
  %34 = load ptr, ptr %2, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %34, i32 0, i32 0
  %36 = load ptr, ptr %35, align 8, !tbaa !18
  %37 = icmp eq ptr %36, inttoptr (i64 1073872936 to ptr)
  br i1 %37, label %108, label %38

38:                                               ; preds = %33
  %39 = load ptr, ptr %2, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %39, i32 0, i32 0
  %41 = load ptr, ptr %40, align 8, !tbaa !18
  %42 = icmp eq ptr %41, inttoptr (i64 1073872960 to ptr)
  br i1 %42, label %108, label %43

43:                                               ; preds = %38
  %44 = load ptr, ptr %2, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %44, i32 0, i32 0
  %46 = load ptr, ptr %45, align 8, !tbaa !18
  %47 = icmp eq ptr %46, inttoptr (i64 1073872984 to ptr)
  br i1 %47, label %108, label %48

48:                                               ; preds = %43
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %49, i32 0, i32 0
  %51 = load ptr, ptr %50, align 8, !tbaa !18
  %52 = icmp eq ptr %51, inttoptr (i64 1073873008 to ptr)
  br i1 %52, label %108, label %53

53:                                               ; preds = %48
  %54 = load ptr, ptr %2, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %54, i32 0, i32 0
  %56 = load ptr, ptr %55, align 8, !tbaa !18
  %57 = icmp eq ptr %56, inttoptr (i64 1073873032 to ptr)
  br i1 %57, label %108, label %58

58:                                               ; preds = %53
  %59 = load ptr, ptr %2, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %59, i32 0, i32 0
  %61 = load ptr, ptr %60, align 8, !tbaa !18
  %62 = icmp eq ptr %61, inttoptr (i64 1073873056 to ptr)
  br i1 %62, label %108, label %63

63:                                               ; preds = %58
  %64 = load ptr, ptr %2, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %64, i32 0, i32 0
  %66 = load ptr, ptr %65, align 8, !tbaa !18
  %67 = icmp eq ptr %66, inttoptr (i64 1073873080 to ptr)
  br i1 %67, label %108, label %68

68:                                               ; preds = %63
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %69, i32 0, i32 0
  %71 = load ptr, ptr %70, align 8, !tbaa !18
  %72 = icmp eq ptr %71, inttoptr (i64 1073873936 to ptr)
  br i1 %72, label %108, label %73

73:                                               ; preds = %68
  %74 = load ptr, ptr %2, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %74, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8, !tbaa !18
  %77 = icmp eq ptr %76, inttoptr (i64 1073873960 to ptr)
  br i1 %77, label %108, label %78

78:                                               ; preds = %73
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %79, i32 0, i32 0
  %81 = load ptr, ptr %80, align 8, !tbaa !18
  %82 = icmp eq ptr %81, inttoptr (i64 1073873984 to ptr)
  br i1 %82, label %108, label %83

83:                                               ; preds = %78
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %84, i32 0, i32 0
  %86 = load ptr, ptr %85, align 8, !tbaa !18
  %87 = icmp eq ptr %86, inttoptr (i64 1073874008 to ptr)
  br i1 %87, label %108, label %88

88:                                               ; preds = %83
  %89 = load ptr, ptr %2, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %89, i32 0, i32 0
  %91 = load ptr, ptr %90, align 8, !tbaa !18
  %92 = icmp eq ptr %91, inttoptr (i64 1073874032 to ptr)
  br i1 %92, label %108, label %93

93:                                               ; preds = %88
  %94 = load ptr, ptr %2, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %94, i32 0, i32 0
  %96 = load ptr, ptr %95, align 8, !tbaa !18
  %97 = icmp eq ptr %96, inttoptr (i64 1073874056 to ptr)
  br i1 %97, label %108, label %98

98:                                               ; preds = %93
  %99 = load ptr, ptr %2, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %99, i32 0, i32 0
  %101 = load ptr, ptr %100, align 8, !tbaa !18
  %102 = icmp eq ptr %101, inttoptr (i64 1073874080 to ptr)
  br i1 %102, label %108, label %103

103:                                              ; preds = %98
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %104, i32 0, i32 0
  %106 = load ptr, ptr %105, align 8, !tbaa !18
  %107 = icmp eq ptr %106, inttoptr (i64 1073874104 to ptr)
  br label %108

108:                                              ; preds = %103, %98, %93, %88, %83, %78, %73, %68, %63, %58, %53, %48, %43, %38, %33, %1
  %109 = phi i1 [ true, %98 ], [ true, %93 ], [ true, %88 ], [ true, %83 ], [ true, %78 ], [ true, %73 ], [ true, %68 ], [ true, %63 ], [ true, %58 ], [ true, %53 ], [ true, %48 ], [ true, %43 ], [ true, %38 ], [ true, %33 ], [ true, %1 ], [ %107, %103 ]
  %110 = zext i1 %109 to i32
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %112, label %1079

112:                                              ; preds = %108
  %113 = load i32, ptr %3, align 4, !tbaa !9
  %114 = load ptr, ptr %2, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %114, i32 0, i32 13
  %116 = load i32, ptr %115, align 8, !tbaa !19
  %117 = and i32 %116, 31
  %118 = shl i32 8, %117
  %119 = and i32 %113, %118
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %121, label %239

121:                                              ; preds = %112
  %122 = load ptr, ptr %2, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %122, i32 0, i32 0
  %124 = load ptr, ptr %123, align 8, !tbaa !18
  %125 = icmp eq ptr %124, inttoptr (i64 1073872912 to ptr)
  br i1 %125, label %201, label %126

126:                                              ; preds = %121
  %127 = load ptr, ptr %2, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %127, i32 0, i32 0
  %129 = load ptr, ptr %128, align 8, !tbaa !18
  %130 = icmp eq ptr %129, inttoptr (i64 1073872936 to ptr)
  br i1 %130, label %201, label %131

131:                                              ; preds = %126
  %132 = load ptr, ptr %2, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %132, i32 0, i32 0
  %134 = load ptr, ptr %133, align 8, !tbaa !18
  %135 = icmp eq ptr %134, inttoptr (i64 1073872960 to ptr)
  br i1 %135, label %201, label %136

136:                                              ; preds = %131
  %137 = load ptr, ptr %2, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %137, i32 0, i32 0
  %139 = load ptr, ptr %138, align 8, !tbaa !18
  %140 = icmp eq ptr %139, inttoptr (i64 1073872984 to ptr)
  br i1 %140, label %201, label %141

141:                                              ; preds = %136
  %142 = load ptr, ptr %2, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %142, i32 0, i32 0
  %144 = load ptr, ptr %143, align 8, !tbaa !18
  %145 = icmp eq ptr %144, inttoptr (i64 1073873008 to ptr)
  br i1 %145, label %201, label %146

146:                                              ; preds = %141
  %147 = load ptr, ptr %2, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %147, i32 0, i32 0
  %149 = load ptr, ptr %148, align 8, !tbaa !18
  %150 = icmp eq ptr %149, inttoptr (i64 1073873032 to ptr)
  br i1 %150, label %201, label %151

151:                                              ; preds = %146
  %152 = load ptr, ptr %2, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %152, i32 0, i32 0
  %154 = load ptr, ptr %153, align 8, !tbaa !18
  %155 = icmp eq ptr %154, inttoptr (i64 1073873056 to ptr)
  br i1 %155, label %201, label %156

156:                                              ; preds = %151
  %157 = load ptr, ptr %2, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %157, i32 0, i32 0
  %159 = load ptr, ptr %158, align 8, !tbaa !18
  %160 = icmp eq ptr %159, inttoptr (i64 1073873080 to ptr)
  br i1 %160, label %201, label %161

161:                                              ; preds = %156
  %162 = load ptr, ptr %2, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %162, i32 0, i32 0
  %164 = load ptr, ptr %163, align 8, !tbaa !18
  %165 = icmp eq ptr %164, inttoptr (i64 1073873936 to ptr)
  br i1 %165, label %201, label %166

166:                                              ; preds = %161
  %167 = load ptr, ptr %2, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %167, i32 0, i32 0
  %169 = load ptr, ptr %168, align 8, !tbaa !18
  %170 = icmp eq ptr %169, inttoptr (i64 1073873960 to ptr)
  br i1 %170, label %201, label %171

171:                                              ; preds = %166
  %172 = load ptr, ptr %2, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %172, i32 0, i32 0
  %174 = load ptr, ptr %173, align 8, !tbaa !18
  %175 = icmp eq ptr %174, inttoptr (i64 1073873984 to ptr)
  br i1 %175, label %201, label %176

176:                                              ; preds = %171
  %177 = load ptr, ptr %2, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %177, i32 0, i32 0
  %179 = load ptr, ptr %178, align 8, !tbaa !18
  %180 = icmp eq ptr %179, inttoptr (i64 1073874008 to ptr)
  br i1 %180, label %201, label %181

181:                                              ; preds = %176
  %182 = load ptr, ptr %2, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %182, i32 0, i32 0
  %184 = load ptr, ptr %183, align 8, !tbaa !18
  %185 = icmp eq ptr %184, inttoptr (i64 1073874032 to ptr)
  br i1 %185, label %201, label %186

186:                                              ; preds = %181
  %187 = load ptr, ptr %2, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %187, i32 0, i32 0
  %189 = load ptr, ptr %188, align 8, !tbaa !18
  %190 = icmp eq ptr %189, inttoptr (i64 1073874056 to ptr)
  br i1 %190, label %201, label %191

191:                                              ; preds = %186
  %192 = load ptr, ptr %2, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %192, i32 0, i32 0
  %194 = load ptr, ptr %193, align 8, !tbaa !18
  %195 = icmp eq ptr %194, inttoptr (i64 1073874080 to ptr)
  br i1 %195, label %201, label %196

196:                                              ; preds = %191
  %197 = load ptr, ptr %2, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %197, i32 0, i32 0
  %199 = load ptr, ptr %198, align 8, !tbaa !18
  %200 = icmp eq ptr %199, inttoptr (i64 1073874104 to ptr)
  br i1 %200, label %201, label %209

201:                                              ; preds = %196, %191, %186, %181, %176, %171, %166, %161, %156, %151, %146, %141, %136, %131, %126, %121
  %202 = load ptr, ptr %2, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %202, i32 0, i32 0
  %204 = load ptr, ptr %203, align 8, !tbaa !18
  %205 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %204, i32 0, i32 0
  %206 = load volatile i32, ptr %205, align 4, !tbaa !20
  %207 = and i32 %206, 4
  %208 = zext i32 %207 to i64
  br label %217

209:                                              ; preds = %196
  %210 = load ptr, ptr %2, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %210, i32 0, i32 0
  %212 = load ptr, ptr %211, align 8, !tbaa !18
  %213 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %212, i32 0, i32 0
  %214 = load volatile i32, ptr %213, align 4, !tbaa !22
  %215 = zext i32 %214 to i64
  %216 = and i64 %215, 8
  br label %217

217:                                              ; preds = %209, %201
  %218 = phi i64 [ %208, %201 ], [ %216, %209 ]
  %219 = icmp ne i64 %218, 0
  br i1 %219, label %220, label %238

220:                                              ; preds = %217
  %221 = load ptr, ptr %2, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %221, i32 0, i32 0
  %223 = load ptr, ptr %222, align 8, !tbaa !18
  %224 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %223, i32 0, i32 0
  %225 = load volatile i32, ptr %224, align 4, !tbaa !20
  %226 = and i32 %225, -5
  store volatile i32 %226, ptr %224, align 4, !tbaa !20
  %227 = load ptr, ptr %2, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %227, i32 0, i32 13
  %229 = load i32, ptr %228, align 8, !tbaa !19
  %230 = and i32 %229, 31
  %231 = shl i32 8, %230
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %232, i32 0, i32 2
  store volatile i32 %231, ptr %233, align 4, !tbaa !24
  %234 = load ptr, ptr %2, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %234, i32 0, i32 11
  %236 = load volatile i32, ptr %235, align 8, !tbaa !25
  %237 = or i32 %236, 1
  store volatile i32 %237, ptr %235, align 8, !tbaa !25
  br label %238

238:                                              ; preds = %220, %217
  br label %239

239:                                              ; preds = %238, %112
  %240 = load i32, ptr %3, align 4, !tbaa !9
  %241 = load ptr, ptr %2, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %241, i32 0, i32 13
  %243 = load i32, ptr %242, align 8, !tbaa !19
  %244 = and i32 %243, 31
  %245 = shl i32 1, %244
  %246 = and i32 %240, %245
  %247 = icmp ne i32 %246, 0
  br i1 %247, label %248, label %360

248:                                              ; preds = %239
  %249 = load ptr, ptr %2, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %249, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8, !tbaa !18
  %252 = icmp eq ptr %251, inttoptr (i64 1073872912 to ptr)
  br i1 %252, label %328, label %253

253:                                              ; preds = %248
  %254 = load ptr, ptr %2, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %254, i32 0, i32 0
  %256 = load ptr, ptr %255, align 8, !tbaa !18
  %257 = icmp eq ptr %256, inttoptr (i64 1073872936 to ptr)
  br i1 %257, label %328, label %258

258:                                              ; preds = %253
  %259 = load ptr, ptr %2, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %259, i32 0, i32 0
  %261 = load ptr, ptr %260, align 8, !tbaa !18
  %262 = icmp eq ptr %261, inttoptr (i64 1073872960 to ptr)
  br i1 %262, label %328, label %263

263:                                              ; preds = %258
  %264 = load ptr, ptr %2, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %264, i32 0, i32 0
  %266 = load ptr, ptr %265, align 8, !tbaa !18
  %267 = icmp eq ptr %266, inttoptr (i64 1073872984 to ptr)
  br i1 %267, label %328, label %268

268:                                              ; preds = %263
  %269 = load ptr, ptr %2, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %269, i32 0, i32 0
  %271 = load ptr, ptr %270, align 8, !tbaa !18
  %272 = icmp eq ptr %271, inttoptr (i64 1073873008 to ptr)
  br i1 %272, label %328, label %273

273:                                              ; preds = %268
  %274 = load ptr, ptr %2, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %274, i32 0, i32 0
  %276 = load ptr, ptr %275, align 8, !tbaa !18
  %277 = icmp eq ptr %276, inttoptr (i64 1073873032 to ptr)
  br i1 %277, label %328, label %278

278:                                              ; preds = %273
  %279 = load ptr, ptr %2, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %279, i32 0, i32 0
  %281 = load ptr, ptr %280, align 8, !tbaa !18
  %282 = icmp eq ptr %281, inttoptr (i64 1073873056 to ptr)
  br i1 %282, label %328, label %283

283:                                              ; preds = %278
  %284 = load ptr, ptr %2, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %284, i32 0, i32 0
  %286 = load ptr, ptr %285, align 8, !tbaa !18
  %287 = icmp eq ptr %286, inttoptr (i64 1073873080 to ptr)
  br i1 %287, label %328, label %288

288:                                              ; preds = %283
  %289 = load ptr, ptr %2, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %289, i32 0, i32 0
  %291 = load ptr, ptr %290, align 8, !tbaa !18
  %292 = icmp eq ptr %291, inttoptr (i64 1073873936 to ptr)
  br i1 %292, label %328, label %293

293:                                              ; preds = %288
  %294 = load ptr, ptr %2, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %294, i32 0, i32 0
  %296 = load ptr, ptr %295, align 8, !tbaa !18
  %297 = icmp eq ptr %296, inttoptr (i64 1073873960 to ptr)
  br i1 %297, label %328, label %298

298:                                              ; preds = %293
  %299 = load ptr, ptr %2, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %299, i32 0, i32 0
  %301 = load ptr, ptr %300, align 8, !tbaa !18
  %302 = icmp eq ptr %301, inttoptr (i64 1073873984 to ptr)
  br i1 %302, label %328, label %303

303:                                              ; preds = %298
  %304 = load ptr, ptr %2, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %304, i32 0, i32 0
  %306 = load ptr, ptr %305, align 8, !tbaa !18
  %307 = icmp eq ptr %306, inttoptr (i64 1073874008 to ptr)
  br i1 %307, label %328, label %308

308:                                              ; preds = %303
  %309 = load ptr, ptr %2, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %309, i32 0, i32 0
  %311 = load ptr, ptr %310, align 8, !tbaa !18
  %312 = icmp eq ptr %311, inttoptr (i64 1073874032 to ptr)
  br i1 %312, label %328, label %313

313:                                              ; preds = %308
  %314 = load ptr, ptr %2, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %314, i32 0, i32 0
  %316 = load ptr, ptr %315, align 8, !tbaa !18
  %317 = icmp eq ptr %316, inttoptr (i64 1073874056 to ptr)
  br i1 %317, label %328, label %318

318:                                              ; preds = %313
  %319 = load ptr, ptr %2, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %319, i32 0, i32 0
  %321 = load ptr, ptr %320, align 8, !tbaa !18
  %322 = icmp eq ptr %321, inttoptr (i64 1073874080 to ptr)
  br i1 %322, label %328, label %323

323:                                              ; preds = %318
  %324 = load ptr, ptr %2, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %324, i32 0, i32 0
  %326 = load ptr, ptr %325, align 8, !tbaa !18
  %327 = icmp eq ptr %326, inttoptr (i64 1073874104 to ptr)
  br i1 %327, label %328, label %336

328:                                              ; preds = %323, %318, %313, %308, %303, %298, %293, %288, %283, %278, %273, %268, %263, %258, %253, %248
  %329 = load ptr, ptr %2, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %329, i32 0, i32 0
  %331 = load ptr, ptr %330, align 8, !tbaa !18
  %332 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %331, i32 0, i32 5
  %333 = load volatile i32, ptr %332, align 4, !tbaa !26
  %334 = and i32 %333, 128
  %335 = zext i32 %334 to i64
  br label %344

336:                                              ; preds = %323
  %337 = load ptr, ptr %2, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %337, i32 0, i32 0
  %339 = load ptr, ptr %338, align 8, !tbaa !18
  %340 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %339, i32 0, i32 0
  %341 = load volatile i32, ptr %340, align 4, !tbaa !22
  %342 = zext i32 %341 to i64
  %343 = and i64 %342, 0
  br label %344

344:                                              ; preds = %336, %328
  %345 = phi i64 [ %335, %328 ], [ %343, %336 ]
  %346 = icmp ne i64 %345, 0
  br i1 %346, label %347, label %359

347:                                              ; preds = %344
  %348 = load ptr, ptr %2, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %348, i32 0, i32 13
  %350 = load i32, ptr %349, align 8, !tbaa !19
  %351 = and i32 %350, 31
  %352 = shl i32 1, %351
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %353, i32 0, i32 2
  store volatile i32 %352, ptr %354, align 4, !tbaa !24
  %355 = load ptr, ptr %2, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %355, i32 0, i32 11
  %357 = load volatile i32, ptr %356, align 8, !tbaa !25
  %358 = or i32 %357, 2
  store volatile i32 %358, ptr %356, align 8, !tbaa !25
  br label %359

359:                                              ; preds = %347, %344
  br label %360

360:                                              ; preds = %359, %239
  %361 = load i32, ptr %3, align 4, !tbaa !9
  %362 = load ptr, ptr %2, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %362, i32 0, i32 13
  %364 = load i32, ptr %363, align 8, !tbaa !19
  %365 = and i32 %364, 31
  %366 = shl i32 4, %365
  %367 = and i32 %361, %366
  %368 = icmp ne i32 %367, 0
  br i1 %368, label %369, label %481

369:                                              ; preds = %360
  %370 = load ptr, ptr %2, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %370, i32 0, i32 0
  %372 = load ptr, ptr %371, align 8, !tbaa !18
  %373 = icmp eq ptr %372, inttoptr (i64 1073872912 to ptr)
  br i1 %373, label %449, label %374

374:                                              ; preds = %369
  %375 = load ptr, ptr %2, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %375, i32 0, i32 0
  %377 = load ptr, ptr %376, align 8, !tbaa !18
  %378 = icmp eq ptr %377, inttoptr (i64 1073872936 to ptr)
  br i1 %378, label %449, label %379

379:                                              ; preds = %374
  %380 = load ptr, ptr %2, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %380, i32 0, i32 0
  %382 = load ptr, ptr %381, align 8, !tbaa !18
  %383 = icmp eq ptr %382, inttoptr (i64 1073872960 to ptr)
  br i1 %383, label %449, label %384

384:                                              ; preds = %379
  %385 = load ptr, ptr %2, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %385, i32 0, i32 0
  %387 = load ptr, ptr %386, align 8, !tbaa !18
  %388 = icmp eq ptr %387, inttoptr (i64 1073872984 to ptr)
  br i1 %388, label %449, label %389

389:                                              ; preds = %384
  %390 = load ptr, ptr %2, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %390, i32 0, i32 0
  %392 = load ptr, ptr %391, align 8, !tbaa !18
  %393 = icmp eq ptr %392, inttoptr (i64 1073873008 to ptr)
  br i1 %393, label %449, label %394

394:                                              ; preds = %389
  %395 = load ptr, ptr %2, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %395, i32 0, i32 0
  %397 = load ptr, ptr %396, align 8, !tbaa !18
  %398 = icmp eq ptr %397, inttoptr (i64 1073873032 to ptr)
  br i1 %398, label %449, label %399

399:                                              ; preds = %394
  %400 = load ptr, ptr %2, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %400, i32 0, i32 0
  %402 = load ptr, ptr %401, align 8, !tbaa !18
  %403 = icmp eq ptr %402, inttoptr (i64 1073873056 to ptr)
  br i1 %403, label %449, label %404

404:                                              ; preds = %399
  %405 = load ptr, ptr %2, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %405, i32 0, i32 0
  %407 = load ptr, ptr %406, align 8, !tbaa !18
  %408 = icmp eq ptr %407, inttoptr (i64 1073873080 to ptr)
  br i1 %408, label %449, label %409

409:                                              ; preds = %404
  %410 = load ptr, ptr %2, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %410, i32 0, i32 0
  %412 = load ptr, ptr %411, align 8, !tbaa !18
  %413 = icmp eq ptr %412, inttoptr (i64 1073873936 to ptr)
  br i1 %413, label %449, label %414

414:                                              ; preds = %409
  %415 = load ptr, ptr %2, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %415, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8, !tbaa !18
  %418 = icmp eq ptr %417, inttoptr (i64 1073873960 to ptr)
  br i1 %418, label %449, label %419

419:                                              ; preds = %414
  %420 = load ptr, ptr %2, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %420, i32 0, i32 0
  %422 = load ptr, ptr %421, align 8, !tbaa !18
  %423 = icmp eq ptr %422, inttoptr (i64 1073873984 to ptr)
  br i1 %423, label %449, label %424

424:                                              ; preds = %419
  %425 = load ptr, ptr %2, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %425, i32 0, i32 0
  %427 = load ptr, ptr %426, align 8, !tbaa !18
  %428 = icmp eq ptr %427, inttoptr (i64 1073874008 to ptr)
  br i1 %428, label %449, label %429

429:                                              ; preds = %424
  %430 = load ptr, ptr %2, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %430, i32 0, i32 0
  %432 = load ptr, ptr %431, align 8, !tbaa !18
  %433 = icmp eq ptr %432, inttoptr (i64 1073874032 to ptr)
  br i1 %433, label %449, label %434

434:                                              ; preds = %429
  %435 = load ptr, ptr %2, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %435, i32 0, i32 0
  %437 = load ptr, ptr %436, align 8, !tbaa !18
  %438 = icmp eq ptr %437, inttoptr (i64 1073874056 to ptr)
  br i1 %438, label %449, label %439

439:                                              ; preds = %434
  %440 = load ptr, ptr %2, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %440, i32 0, i32 0
  %442 = load ptr, ptr %441, align 8, !tbaa !18
  %443 = icmp eq ptr %442, inttoptr (i64 1073874080 to ptr)
  br i1 %443, label %449, label %444

444:                                              ; preds = %439
  %445 = load ptr, ptr %2, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %445, i32 0, i32 0
  %447 = load ptr, ptr %446, align 8, !tbaa !18
  %448 = icmp eq ptr %447, inttoptr (i64 1073874104 to ptr)
  br i1 %448, label %449, label %457

449:                                              ; preds = %444, %439, %434, %429, %424, %419, %414, %409, %404, %399, %394, %389, %384, %379, %374, %369
  %450 = load ptr, ptr %2, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %450, i32 0, i32 0
  %452 = load ptr, ptr %451, align 8, !tbaa !18
  %453 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %452, i32 0, i32 0
  %454 = load volatile i32, ptr %453, align 4, !tbaa !20
  %455 = and i32 %454, 2
  %456 = zext i32 %455 to i64
  br label %465

457:                                              ; preds = %444
  %458 = load ptr, ptr %2, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %458, i32 0, i32 0
  %460 = load ptr, ptr %459, align 8, !tbaa !18
  %461 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %460, i32 0, i32 0
  %462 = load volatile i32, ptr %461, align 4, !tbaa !22
  %463 = zext i32 %462 to i64
  %464 = and i64 %463, 0
  br label %465

465:                                              ; preds = %457, %449
  %466 = phi i64 [ %456, %449 ], [ %464, %457 ]
  %467 = icmp ne i64 %466, 0
  br i1 %467, label %468, label %480

468:                                              ; preds = %465
  %469 = load ptr, ptr %2, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %469, i32 0, i32 13
  %471 = load i32, ptr %470, align 8, !tbaa !19
  %472 = and i32 %471, 31
  %473 = shl i32 4, %472
  %474 = load ptr, ptr %8, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %474, i32 0, i32 2
  store volatile i32 %473, ptr %475, align 4, !tbaa !24
  %476 = load ptr, ptr %2, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %476, i32 0, i32 11
  %478 = load volatile i32, ptr %477, align 8, !tbaa !25
  %479 = or i32 %478, 4
  store volatile i32 %479, ptr %477, align 8, !tbaa !25
  br label %480

480:                                              ; preds = %468, %465
  br label %481

481:                                              ; preds = %480, %360
  %482 = load i32, ptr %3, align 4, !tbaa !9
  %483 = load ptr, ptr %2, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %483, i32 0, i32 13
  %485 = load i32, ptr %484, align 8, !tbaa !19
  %486 = and i32 %485, 31
  %487 = shl i32 16, %486
  %488 = and i32 %482, %487
  %489 = icmp ne i32 %488, 0
  br i1 %489, label %490, label %665

490:                                              ; preds = %481
  %491 = load ptr, ptr %2, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %491, i32 0, i32 0
  %493 = load ptr, ptr %492, align 8, !tbaa !18
  %494 = icmp eq ptr %493, inttoptr (i64 1073872912 to ptr)
  br i1 %494, label %570, label %495

495:                                              ; preds = %490
  %496 = load ptr, ptr %2, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %496, i32 0, i32 0
  %498 = load ptr, ptr %497, align 8, !tbaa !18
  %499 = icmp eq ptr %498, inttoptr (i64 1073872936 to ptr)
  br i1 %499, label %570, label %500

500:                                              ; preds = %495
  %501 = load ptr, ptr %2, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %501, i32 0, i32 0
  %503 = load ptr, ptr %502, align 8, !tbaa !18
  %504 = icmp eq ptr %503, inttoptr (i64 1073872960 to ptr)
  br i1 %504, label %570, label %505

505:                                              ; preds = %500
  %506 = load ptr, ptr %2, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %506, i32 0, i32 0
  %508 = load ptr, ptr %507, align 8, !tbaa !18
  %509 = icmp eq ptr %508, inttoptr (i64 1073872984 to ptr)
  br i1 %509, label %570, label %510

510:                                              ; preds = %505
  %511 = load ptr, ptr %2, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %511, i32 0, i32 0
  %513 = load ptr, ptr %512, align 8, !tbaa !18
  %514 = icmp eq ptr %513, inttoptr (i64 1073873008 to ptr)
  br i1 %514, label %570, label %515

515:                                              ; preds = %510
  %516 = load ptr, ptr %2, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %516, i32 0, i32 0
  %518 = load ptr, ptr %517, align 8, !tbaa !18
  %519 = icmp eq ptr %518, inttoptr (i64 1073873032 to ptr)
  br i1 %519, label %570, label %520

520:                                              ; preds = %515
  %521 = load ptr, ptr %2, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %521, i32 0, i32 0
  %523 = load ptr, ptr %522, align 8, !tbaa !18
  %524 = icmp eq ptr %523, inttoptr (i64 1073873056 to ptr)
  br i1 %524, label %570, label %525

525:                                              ; preds = %520
  %526 = load ptr, ptr %2, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %526, i32 0, i32 0
  %528 = load ptr, ptr %527, align 8, !tbaa !18
  %529 = icmp eq ptr %528, inttoptr (i64 1073873080 to ptr)
  br i1 %529, label %570, label %530

530:                                              ; preds = %525
  %531 = load ptr, ptr %2, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %531, i32 0, i32 0
  %533 = load ptr, ptr %532, align 8, !tbaa !18
  %534 = icmp eq ptr %533, inttoptr (i64 1073873936 to ptr)
  br i1 %534, label %570, label %535

535:                                              ; preds = %530
  %536 = load ptr, ptr %2, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %536, i32 0, i32 0
  %538 = load ptr, ptr %537, align 8, !tbaa !18
  %539 = icmp eq ptr %538, inttoptr (i64 1073873960 to ptr)
  br i1 %539, label %570, label %540

540:                                              ; preds = %535
  %541 = load ptr, ptr %2, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %541, i32 0, i32 0
  %543 = load ptr, ptr %542, align 8, !tbaa !18
  %544 = icmp eq ptr %543, inttoptr (i64 1073873984 to ptr)
  br i1 %544, label %570, label %545

545:                                              ; preds = %540
  %546 = load ptr, ptr %2, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %546, i32 0, i32 0
  %548 = load ptr, ptr %547, align 8, !tbaa !18
  %549 = icmp eq ptr %548, inttoptr (i64 1073874008 to ptr)
  br i1 %549, label %570, label %550

550:                                              ; preds = %545
  %551 = load ptr, ptr %2, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %551, i32 0, i32 0
  %553 = load ptr, ptr %552, align 8, !tbaa !18
  %554 = icmp eq ptr %553, inttoptr (i64 1073874032 to ptr)
  br i1 %554, label %570, label %555

555:                                              ; preds = %550
  %556 = load ptr, ptr %2, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %556, i32 0, i32 0
  %558 = load ptr, ptr %557, align 8, !tbaa !18
  %559 = icmp eq ptr %558, inttoptr (i64 1073874056 to ptr)
  br i1 %559, label %570, label %560

560:                                              ; preds = %555
  %561 = load ptr, ptr %2, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %561, i32 0, i32 0
  %563 = load ptr, ptr %562, align 8, !tbaa !18
  %564 = icmp eq ptr %563, inttoptr (i64 1073874080 to ptr)
  br i1 %564, label %570, label %565

565:                                              ; preds = %560
  %566 = load ptr, ptr %2, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %566, i32 0, i32 0
  %568 = load ptr, ptr %567, align 8, !tbaa !18
  %569 = icmp eq ptr %568, inttoptr (i64 1073874104 to ptr)
  br i1 %569, label %570, label %578

570:                                              ; preds = %565, %560, %555, %550, %545, %540, %535, %530, %525, %520, %515, %510, %505, %500, %495, %490
  %571 = load ptr, ptr %2, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %571, i32 0, i32 0
  %573 = load ptr, ptr %572, align 8, !tbaa !18
  %574 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %573, i32 0, i32 0
  %575 = load volatile i32, ptr %574, align 4, !tbaa !20
  %576 = and i32 %575, 8
  %577 = zext i32 %576 to i64
  br label %586

578:                                              ; preds = %565
  %579 = load ptr, ptr %2, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %579, i32 0, i32 0
  %581 = load ptr, ptr %580, align 8, !tbaa !18
  %582 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %581, i32 0, i32 0
  %583 = load volatile i32, ptr %582, align 4, !tbaa !22
  %584 = zext i32 %583 to i64
  %585 = and i64 %584, 4
  br label %586

586:                                              ; preds = %578, %570
  %587 = phi i64 [ %577, %570 ], [ %585, %578 ]
  %588 = icmp ne i64 %587, 0
  br i1 %588, label %589, label %664

589:                                              ; preds = %586
  %590 = load ptr, ptr %2, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %590, i32 0, i32 13
  %592 = load i32, ptr %591, align 8, !tbaa !19
  %593 = and i32 %592, 31
  %594 = shl i32 16, %593
  %595 = load ptr, ptr %8, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %595, i32 0, i32 2
  store volatile i32 %594, ptr %596, align 4, !tbaa !24
  %597 = load ptr, ptr %2, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %597, i32 0, i32 0
  %599 = load ptr, ptr %598, align 8, !tbaa !18
  %600 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %599, i32 0, i32 0
  %601 = load volatile i32, ptr %600, align 4, !tbaa !20
  %602 = and i32 %601, 262144
  %603 = icmp ne i32 %602, 0
  br i1 %603, label %604, label %636

604:                                              ; preds = %589
  %605 = load ptr, ptr %2, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %605, i32 0, i32 0
  %607 = load ptr, ptr %606, align 8, !tbaa !18
  %608 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %607, i32 0, i32 0
  %609 = load volatile i32, ptr %608, align 4, !tbaa !20
  %610 = zext i32 %609 to i64
  %611 = and i64 %610, 524288
  %612 = icmp eq i64 %611, 0
  br i1 %612, label %613, label %624

613:                                              ; preds = %604
  %614 = load ptr, ptr %2, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %614, i32 0, i32 6
  %616 = load ptr, ptr %615, align 8, !tbaa !27
  %617 = icmp ne ptr %616, null
  br i1 %617, label %618, label %623

618:                                              ; preds = %613
  %619 = load ptr, ptr %2, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %619, i32 0, i32 6
  %621 = load ptr, ptr %620, align 8, !tbaa !27
  %622 = load ptr, ptr %2, align 8, !tbaa !5
  call void %621(ptr noundef %622)
  br label %623

623:                                              ; preds = %618, %613
  br label %635

624:                                              ; preds = %604
  %625 = load ptr, ptr %2, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %625, i32 0, i32 8
  %627 = load ptr, ptr %626, align 8, !tbaa !28
  %628 = icmp ne ptr %627, null
  br i1 %628, label %629, label %634

629:                                              ; preds = %624
  %630 = load ptr, ptr %2, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %630, i32 0, i32 8
  %632 = load ptr, ptr %631, align 8, !tbaa !28
  %633 = load ptr, ptr %2, align 8, !tbaa !5
  call void %632(ptr noundef %633)
  br label %634

634:                                              ; preds = %629, %624
  br label %635

635:                                              ; preds = %634, %623
  br label %663

636:                                              ; preds = %589
  %637 = load ptr, ptr %2, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %637, i32 0, i32 0
  %639 = load ptr, ptr %638, align 8, !tbaa !18
  %640 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %639, i32 0, i32 0
  %641 = load volatile i32, ptr %640, align 4, !tbaa !20
  %642 = zext i32 %641 to i64
  %643 = and i64 %642, 256
  %644 = icmp eq i64 %643, 0
  br i1 %644, label %645, label %652

645:                                              ; preds = %636
  %646 = load ptr, ptr %2, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %646, i32 0, i32 0
  %648 = load ptr, ptr %647, align 8, !tbaa !18
  %649 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %648, i32 0, i32 0
  %650 = load volatile i32, ptr %649, align 4, !tbaa !20
  %651 = and i32 %650, -9
  store volatile i32 %651, ptr %649, align 4, !tbaa !20
  br label %652

652:                                              ; preds = %645, %636
  %653 = load ptr, ptr %2, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %653, i32 0, i32 6
  %655 = load ptr, ptr %654, align 8, !tbaa !27
  %656 = icmp ne ptr %655, null
  br i1 %656, label %657, label %662

657:                                              ; preds = %652
  %658 = load ptr, ptr %2, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %658, i32 0, i32 6
  %660 = load ptr, ptr %659, align 8, !tbaa !27
  %661 = load ptr, ptr %2, align 8, !tbaa !5
  call void %660(ptr noundef %661)
  br label %662

662:                                              ; preds = %657, %652
  br label %663

663:                                              ; preds = %662, %635
  br label %664

664:                                              ; preds = %663, %586
  br label %665

665:                                              ; preds = %664, %481
  %666 = load i32, ptr %3, align 4, !tbaa !9
  %667 = load ptr, ptr %2, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %667, i32 0, i32 13
  %669 = load i32, ptr %668, align 8, !tbaa !19
  %670 = and i32 %669, 31
  %671 = shl i32 32, %670
  %672 = and i32 %666, %671
  %673 = icmp ne i32 %672, 0
  br i1 %673, label %674, label %917

674:                                              ; preds = %665
  %675 = load ptr, ptr %2, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %675, i32 0, i32 0
  %677 = load ptr, ptr %676, align 8, !tbaa !18
  %678 = icmp eq ptr %677, inttoptr (i64 1073872912 to ptr)
  br i1 %678, label %754, label %679

679:                                              ; preds = %674
  %680 = load ptr, ptr %2, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %680, i32 0, i32 0
  %682 = load ptr, ptr %681, align 8, !tbaa !18
  %683 = icmp eq ptr %682, inttoptr (i64 1073872936 to ptr)
  br i1 %683, label %754, label %684

684:                                              ; preds = %679
  %685 = load ptr, ptr %2, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %685, i32 0, i32 0
  %687 = load ptr, ptr %686, align 8, !tbaa !18
  %688 = icmp eq ptr %687, inttoptr (i64 1073872960 to ptr)
  br i1 %688, label %754, label %689

689:                                              ; preds = %684
  %690 = load ptr, ptr %2, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %690, i32 0, i32 0
  %692 = load ptr, ptr %691, align 8, !tbaa !18
  %693 = icmp eq ptr %692, inttoptr (i64 1073872984 to ptr)
  br i1 %693, label %754, label %694

694:                                              ; preds = %689
  %695 = load ptr, ptr %2, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %695, i32 0, i32 0
  %697 = load ptr, ptr %696, align 8, !tbaa !18
  %698 = icmp eq ptr %697, inttoptr (i64 1073873008 to ptr)
  br i1 %698, label %754, label %699

699:                                              ; preds = %694
  %700 = load ptr, ptr %2, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %700, i32 0, i32 0
  %702 = load ptr, ptr %701, align 8, !tbaa !18
  %703 = icmp eq ptr %702, inttoptr (i64 1073873032 to ptr)
  br i1 %703, label %754, label %704

704:                                              ; preds = %699
  %705 = load ptr, ptr %2, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %705, i32 0, i32 0
  %707 = load ptr, ptr %706, align 8, !tbaa !18
  %708 = icmp eq ptr %707, inttoptr (i64 1073873056 to ptr)
  br i1 %708, label %754, label %709

709:                                              ; preds = %704
  %710 = load ptr, ptr %2, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %710, i32 0, i32 0
  %712 = load ptr, ptr %711, align 8, !tbaa !18
  %713 = icmp eq ptr %712, inttoptr (i64 1073873080 to ptr)
  br i1 %713, label %754, label %714

714:                                              ; preds = %709
  %715 = load ptr, ptr %2, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %715, i32 0, i32 0
  %717 = load ptr, ptr %716, align 8, !tbaa !18
  %718 = icmp eq ptr %717, inttoptr (i64 1073873936 to ptr)
  br i1 %718, label %754, label %719

719:                                              ; preds = %714
  %720 = load ptr, ptr %2, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %720, i32 0, i32 0
  %722 = load ptr, ptr %721, align 8, !tbaa !18
  %723 = icmp eq ptr %722, inttoptr (i64 1073873960 to ptr)
  br i1 %723, label %754, label %724

724:                                              ; preds = %719
  %725 = load ptr, ptr %2, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %725, i32 0, i32 0
  %727 = load ptr, ptr %726, align 8, !tbaa !18
  %728 = icmp eq ptr %727, inttoptr (i64 1073873984 to ptr)
  br i1 %728, label %754, label %729

729:                                              ; preds = %724
  %730 = load ptr, ptr %2, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %730, i32 0, i32 0
  %732 = load ptr, ptr %731, align 8, !tbaa !18
  %733 = icmp eq ptr %732, inttoptr (i64 1073874008 to ptr)
  br i1 %733, label %754, label %734

734:                                              ; preds = %729
  %735 = load ptr, ptr %2, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %735, i32 0, i32 0
  %737 = load ptr, ptr %736, align 8, !tbaa !18
  %738 = icmp eq ptr %737, inttoptr (i64 1073874032 to ptr)
  br i1 %738, label %754, label %739

739:                                              ; preds = %734
  %740 = load ptr, ptr %2, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %740, i32 0, i32 0
  %742 = load ptr, ptr %741, align 8, !tbaa !18
  %743 = icmp eq ptr %742, inttoptr (i64 1073874056 to ptr)
  br i1 %743, label %754, label %744

744:                                              ; preds = %739
  %745 = load ptr, ptr %2, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %745, i32 0, i32 0
  %747 = load ptr, ptr %746, align 8, !tbaa !18
  %748 = icmp eq ptr %747, inttoptr (i64 1073874080 to ptr)
  br i1 %748, label %754, label %749

749:                                              ; preds = %744
  %750 = load ptr, ptr %2, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %750, i32 0, i32 0
  %752 = load ptr, ptr %751, align 8, !tbaa !18
  %753 = icmp eq ptr %752, inttoptr (i64 1073874104 to ptr)
  br i1 %753, label %754, label %762

754:                                              ; preds = %749, %744, %739, %734, %729, %724, %719, %714, %709, %704, %699, %694, %689, %684, %679, %674
  %755 = load ptr, ptr %2, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %755, i32 0, i32 0
  %757 = load ptr, ptr %756, align 8, !tbaa !18
  %758 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %757, i32 0, i32 0
  %759 = load volatile i32, ptr %758, align 4, !tbaa !20
  %760 = and i32 %759, 16
  %761 = zext i32 %760 to i64
  br label %770

762:                                              ; preds = %749
  %763 = load ptr, ptr %2, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %763, i32 0, i32 0
  %765 = load ptr, ptr %764, align 8, !tbaa !18
  %766 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %765, i32 0, i32 0
  %767 = load volatile i32, ptr %766, align 4, !tbaa !22
  %768 = zext i32 %767 to i64
  %769 = and i64 %768, 2
  br label %770

770:                                              ; preds = %762, %754
  %771 = phi i64 [ %761, %754 ], [ %769, %762 ]
  %772 = icmp ne i64 %771, 0
  br i1 %772, label %773, label %916

773:                                              ; preds = %770
  %774 = load ptr, ptr %2, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %774, i32 0, i32 13
  %776 = load i32, ptr %775, align 8, !tbaa !19
  %777 = and i32 %776, 31
  %778 = shl i32 32, %777
  %779 = load ptr, ptr %8, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %779, i32 0, i32 2
  store volatile i32 %778, ptr %780, align 4, !tbaa !24
  %781 = load ptr, ptr %2, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %781, i32 0, i32 3
  %783 = load volatile i32, ptr %782, align 4, !tbaa !29
  %784 = icmp eq i32 4, %783
  br i1 %784, label %785, label %841

785:                                              ; preds = %773
  %786 = load ptr, ptr %2, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %786, i32 0, i32 0
  %788 = load ptr, ptr %787, align 8, !tbaa !18
  %789 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %788, i32 0, i32 0
  %790 = load volatile i32, ptr %789, align 4, !tbaa !20
  %791 = and i32 %790, -23
  store volatile i32 %791, ptr %789, align 4, !tbaa !20
  %792 = load ptr, ptr %2, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %792, i32 0, i32 0
  %794 = load ptr, ptr %793, align 8, !tbaa !18
  %795 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %794, i32 0, i32 5
  %796 = load volatile i32, ptr %795, align 4, !tbaa !26
  %797 = and i32 %796, -129
  store volatile i32 %797, ptr %795, align 4, !tbaa !26
  %798 = load ptr, ptr %2, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %798, i32 0, i32 6
  %800 = load ptr, ptr %799, align 8, !tbaa !27
  %801 = icmp ne ptr %800, null
  br i1 %801, label %807, label %802

802:                                              ; preds = %785
  %803 = load ptr, ptr %2, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %803, i32 0, i32 8
  %805 = load ptr, ptr %804, align 8, !tbaa !28
  %806 = icmp ne ptr %805, null
  br i1 %806, label %807, label %814

807:                                              ; preds = %802, %785
  %808 = load ptr, ptr %2, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %808, i32 0, i32 0
  %810 = load ptr, ptr %809, align 8, !tbaa !18
  %811 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %810, i32 0, i32 0
  %812 = load volatile i32, ptr %811, align 4, !tbaa !20
  %813 = and i32 %812, -9
  store volatile i32 %813, ptr %811, align 4, !tbaa !20
  br label %814

814:                                              ; preds = %807, %802
  %815 = load ptr, ptr %2, align 8, !tbaa !5
  %816 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %815, i32 0, i32 13
  %817 = load i32, ptr %816, align 8, !tbaa !19
  %818 = and i32 %817, 31
  %819 = zext i32 %818 to i64
  %820 = shl i64 63, %819
  %821 = trunc i64 %820 to i32
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %822, i32 0, i32 2
  store volatile i32 %821, ptr %823, align 4, !tbaa !24
  br label %824

824:                                              ; preds = %814
  %825 = load ptr, ptr %2, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %825, i32 0, i32 2
  store i32 0, ptr %826, align 8, !tbaa !30
  br label %827

827:                                              ; preds = %824
  br label %828

828:                                              ; preds = %827
  %829 = load ptr, ptr %2, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %829, i32 0, i32 3
  store volatile i32 1, ptr %830, align 4, !tbaa !29
  %831 = load ptr, ptr %2, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %831, i32 0, i32 10
  %833 = load ptr, ptr %832, align 8, !tbaa !31
  %834 = icmp ne ptr %833, null
  br i1 %834, label %835, label %840

835:                                              ; preds = %828
  %836 = load ptr, ptr %2, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %836, i32 0, i32 10
  %838 = load ptr, ptr %837, align 8, !tbaa !31
  %839 = load ptr, ptr %2, align 8, !tbaa !5
  call void %838(ptr noundef %839)
  br label %840

840:                                              ; preds = %835, %828
  store i32 1, ptr %10, align 4
  br label %1624

841:                                              ; preds = %773
  %842 = load ptr, ptr %2, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %842, i32 0, i32 0
  %844 = load ptr, ptr %843, align 8, !tbaa !18
  %845 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %844, i32 0, i32 0
  %846 = load volatile i32, ptr %845, align 4, !tbaa !20
  %847 = and i32 %846, 262144
  %848 = icmp ne i32 %847, 0
  br i1 %848, label %849, label %881

849:                                              ; preds = %841
  %850 = load ptr, ptr %2, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %850, i32 0, i32 0
  %852 = load ptr, ptr %851, align 8, !tbaa !18
  %853 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %852, i32 0, i32 0
  %854 = load volatile i32, ptr %853, align 4, !tbaa !20
  %855 = zext i32 %854 to i64
  %856 = and i64 %855, 524288
  %857 = icmp eq i64 %856, 0
  br i1 %857, label %858, label %869

858:                                              ; preds = %849
  %859 = load ptr, ptr %2, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %859, i32 0, i32 7
  %861 = load ptr, ptr %860, align 8, !tbaa !32
  %862 = icmp ne ptr %861, null
  br i1 %862, label %863, label %868

863:                                              ; preds = %858
  %864 = load ptr, ptr %2, align 8, !tbaa !5
  %865 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %864, i32 0, i32 7
  %866 = load ptr, ptr %865, align 8, !tbaa !32
  %867 = load ptr, ptr %2, align 8, !tbaa !5
  call void %866(ptr noundef %867)
  br label %868

868:                                              ; preds = %863, %858
  br label %880

869:                                              ; preds = %849
  %870 = load ptr, ptr %2, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %870, i32 0, i32 5
  %872 = load ptr, ptr %871, align 8, !tbaa !33
  %873 = icmp ne ptr %872, null
  br i1 %873, label %874, label %879

874:                                              ; preds = %869
  %875 = load ptr, ptr %2, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %875, i32 0, i32 5
  %877 = load ptr, ptr %876, align 8, !tbaa !33
  %878 = load ptr, ptr %2, align 8, !tbaa !5
  call void %877(ptr noundef %878)
  br label %879

879:                                              ; preds = %874, %869
  br label %880

880:                                              ; preds = %879, %868
  br label %915

881:                                              ; preds = %841
  %882 = load ptr, ptr %2, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %882, i32 0, i32 0
  %884 = load ptr, ptr %883, align 8, !tbaa !18
  %885 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %884, i32 0, i32 0
  %886 = load volatile i32, ptr %885, align 4, !tbaa !20
  %887 = zext i32 %886 to i64
  %888 = and i64 %887, 256
  %889 = icmp eq i64 %888, 0
  br i1 %889, label %890, label %904

890:                                              ; preds = %881
  %891 = load ptr, ptr %2, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %891, i32 0, i32 0
  %893 = load ptr, ptr %892, align 8, !tbaa !18
  %894 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %893, i32 0, i32 0
  %895 = load volatile i32, ptr %894, align 4, !tbaa !20
  %896 = and i32 %895, -17
  store volatile i32 %896, ptr %894, align 4, !tbaa !20
  br label %897

897:                                              ; preds = %890
  %898 = load ptr, ptr %2, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %898, i32 0, i32 2
  store i32 0, ptr %899, align 8, !tbaa !30
  br label %900

900:                                              ; preds = %897
  br label %901

901:                                              ; preds = %900
  %902 = load ptr, ptr %2, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %902, i32 0, i32 3
  store volatile i32 1, ptr %903, align 4, !tbaa !29
  br label %904

904:                                              ; preds = %901, %881
  %905 = load ptr, ptr %2, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %905, i32 0, i32 5
  %907 = load ptr, ptr %906, align 8, !tbaa !33
  %908 = icmp ne ptr %907, null
  br i1 %908, label %909, label %914

909:                                              ; preds = %904
  %910 = load ptr, ptr %2, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %910, i32 0, i32 5
  %912 = load ptr, ptr %911, align 8, !tbaa !33
  %913 = load ptr, ptr %2, align 8, !tbaa !5
  call void %912(ptr noundef %913)
  br label %914

914:                                              ; preds = %909, %904
  br label %915

915:                                              ; preds = %914, %880
  br label %916

916:                                              ; preds = %915, %770
  br label %917

917:                                              ; preds = %916, %665
  %918 = load ptr, ptr %2, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %918, i32 0, i32 11
  %920 = load volatile i32, ptr %919, align 8, !tbaa !25
  %921 = icmp ne i32 %920, 0
  br i1 %921, label %922, label %1078

922:                                              ; preds = %917
  %923 = load ptr, ptr %2, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %923, i32 0, i32 11
  %925 = load volatile i32, ptr %924, align 8, !tbaa !25
  %926 = and i32 %925, 1
  %927 = icmp ne i32 %926, 0
  br i1 %927, label %928, label %1067

928:                                              ; preds = %922
  %929 = load ptr, ptr %2, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %929, i32 0, i32 3
  store volatile i32 4, ptr %930, align 4, !tbaa !29
  %931 = load ptr, ptr %2, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %931, i32 0, i32 0
  %933 = load ptr, ptr %932, align 8, !tbaa !18
  %934 = icmp eq ptr %933, inttoptr (i64 1073872912 to ptr)
  br i1 %934, label %1010, label %935

935:                                              ; preds = %928
  %936 = load ptr, ptr %2, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %936, i32 0, i32 0
  %938 = load ptr, ptr %937, align 8, !tbaa !18
  %939 = icmp eq ptr %938, inttoptr (i64 1073872936 to ptr)
  br i1 %939, label %1010, label %940

940:                                              ; preds = %935
  %941 = load ptr, ptr %2, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %941, i32 0, i32 0
  %943 = load ptr, ptr %942, align 8, !tbaa !18
  %944 = icmp eq ptr %943, inttoptr (i64 1073872960 to ptr)
  br i1 %944, label %1010, label %945

945:                                              ; preds = %940
  %946 = load ptr, ptr %2, align 8, !tbaa !5
  %947 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %946, i32 0, i32 0
  %948 = load ptr, ptr %947, align 8, !tbaa !18
  %949 = icmp eq ptr %948, inttoptr (i64 1073872984 to ptr)
  br i1 %949, label %1010, label %950

950:                                              ; preds = %945
  %951 = load ptr, ptr %2, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %951, i32 0, i32 0
  %953 = load ptr, ptr %952, align 8, !tbaa !18
  %954 = icmp eq ptr %953, inttoptr (i64 1073873008 to ptr)
  br i1 %954, label %1010, label %955

955:                                              ; preds = %950
  %956 = load ptr, ptr %2, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %956, i32 0, i32 0
  %958 = load ptr, ptr %957, align 8, !tbaa !18
  %959 = icmp eq ptr %958, inttoptr (i64 1073873032 to ptr)
  br i1 %959, label %1010, label %960

960:                                              ; preds = %955
  %961 = load ptr, ptr %2, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %961, i32 0, i32 0
  %963 = load ptr, ptr %962, align 8, !tbaa !18
  %964 = icmp eq ptr %963, inttoptr (i64 1073873056 to ptr)
  br i1 %964, label %1010, label %965

965:                                              ; preds = %960
  %966 = load ptr, ptr %2, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %966, i32 0, i32 0
  %968 = load ptr, ptr %967, align 8, !tbaa !18
  %969 = icmp eq ptr %968, inttoptr (i64 1073873080 to ptr)
  br i1 %969, label %1010, label %970

970:                                              ; preds = %965
  %971 = load ptr, ptr %2, align 8, !tbaa !5
  %972 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %971, i32 0, i32 0
  %973 = load ptr, ptr %972, align 8, !tbaa !18
  %974 = icmp eq ptr %973, inttoptr (i64 1073873936 to ptr)
  br i1 %974, label %1010, label %975

975:                                              ; preds = %970
  %976 = load ptr, ptr %2, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %976, i32 0, i32 0
  %978 = load ptr, ptr %977, align 8, !tbaa !18
  %979 = icmp eq ptr %978, inttoptr (i64 1073873960 to ptr)
  br i1 %979, label %1010, label %980

980:                                              ; preds = %975
  %981 = load ptr, ptr %2, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %981, i32 0, i32 0
  %983 = load ptr, ptr %982, align 8, !tbaa !18
  %984 = icmp eq ptr %983, inttoptr (i64 1073873984 to ptr)
  br i1 %984, label %1010, label %985

985:                                              ; preds = %980
  %986 = load ptr, ptr %2, align 8, !tbaa !5
  %987 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %986, i32 0, i32 0
  %988 = load ptr, ptr %987, align 8, !tbaa !18
  %989 = icmp eq ptr %988, inttoptr (i64 1073874008 to ptr)
  br i1 %989, label %1010, label %990

990:                                              ; preds = %985
  %991 = load ptr, ptr %2, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %991, i32 0, i32 0
  %993 = load ptr, ptr %992, align 8, !tbaa !18
  %994 = icmp eq ptr %993, inttoptr (i64 1073874032 to ptr)
  br i1 %994, label %1010, label %995

995:                                              ; preds = %990
  %996 = load ptr, ptr %2, align 8, !tbaa !5
  %997 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %996, i32 0, i32 0
  %998 = load ptr, ptr %997, align 8, !tbaa !18
  %999 = icmp eq ptr %998, inttoptr (i64 1073874056 to ptr)
  br i1 %999, label %1010, label %1000

1000:                                             ; preds = %995
  %1001 = load ptr, ptr %2, align 8, !tbaa !5
  %1002 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1001, i32 0, i32 0
  %1003 = load ptr, ptr %1002, align 8, !tbaa !18
  %1004 = icmp eq ptr %1003, inttoptr (i64 1073874080 to ptr)
  br i1 %1004, label %1010, label %1005

1005:                                             ; preds = %1000
  %1006 = load ptr, ptr %2, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1006, i32 0, i32 0
  %1008 = load ptr, ptr %1007, align 8, !tbaa !18
  %1009 = icmp eq ptr %1008, inttoptr (i64 1073874104 to ptr)
  br i1 %1009, label %1010, label %1019

1010:                                             ; preds = %1005, %1000, %995, %990, %985, %980, %975, %970, %965, %960, %955, %950, %945, %940, %935, %928
  %1011 = load ptr, ptr %2, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1011, i32 0, i32 0
  %1013 = load ptr, ptr %1012, align 8, !tbaa !18
  %1014 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %1013, i32 0, i32 0
  %1015 = load volatile i32, ptr %1014, align 4, !tbaa !20
  %1016 = zext i32 %1015 to i64
  %1017 = and i64 %1016, -2
  %1018 = trunc i64 %1017 to i32
  store volatile i32 %1018, ptr %1014, align 4, !tbaa !20
  br label %1028

1019:                                             ; preds = %1005
  %1020 = load ptr, ptr %2, align 8, !tbaa !5
  %1021 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1020, i32 0, i32 0
  %1022 = load ptr, ptr %1021, align 8, !tbaa !18
  %1023 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %1022, i32 0, i32 0
  %1024 = load volatile i32, ptr %1023, align 4, !tbaa !22
  %1025 = zext i32 %1024 to i64
  %1026 = and i64 %1025, -2
  %1027 = trunc i64 %1026 to i32
  store volatile i32 %1027, ptr %1023, align 4, !tbaa !22
  br label %1028

1028:                                             ; preds = %1019, %1010
  %1029 = phi i32 [ %1018, %1010 ], [ %1027, %1019 ]
  br label %1030

1030:                                             ; preds = %1037, %1028
  %1031 = load volatile i32, ptr %6, align 4, !tbaa !9
  %1032 = add i32 %1031, 1
  store volatile i32 %1032, ptr %6, align 4, !tbaa !9
  %1033 = load i32, ptr %7, align 4, !tbaa !9
  %1034 = icmp ugt i32 %1032, %1033
  br i1 %1034, label %1035, label %1036

1035:                                             ; preds = %1030
  br label %1046

1036:                                             ; preds = %1030
  br label %1037

1037:                                             ; preds = %1036
  %1038 = load ptr, ptr %2, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1038, i32 0, i32 0
  %1040 = load ptr, ptr %1039, align 8, !tbaa !18
  %1041 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %1040, i32 0, i32 0
  %1042 = load volatile i32, ptr %1041, align 4, !tbaa !20
  %1043 = zext i32 %1042 to i64
  %1044 = and i64 %1043, 1
  %1045 = icmp ne i64 %1044, 0
  br i1 %1045, label %1030, label %1046, !llvm.loop !34

1046:                                             ; preds = %1037, %1035
  br label %1047

1047:                                             ; preds = %1046
  %1048 = load ptr, ptr %2, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1048, i32 0, i32 2
  store i32 0, ptr %1049, align 8, !tbaa !30
  br label %1050

1050:                                             ; preds = %1047
  br label %1051

1051:                                             ; preds = %1050
  %1052 = load ptr, ptr %2, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1052, i32 0, i32 0
  %1054 = load ptr, ptr %1053, align 8, !tbaa !18
  %1055 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %1054, i32 0, i32 0
  %1056 = load volatile i32, ptr %1055, align 4, !tbaa !20
  %1057 = zext i32 %1056 to i64
  %1058 = and i64 %1057, 1
  %1059 = icmp ne i64 %1058, 0
  br i1 %1059, label %1060, label %1063

1060:                                             ; preds = %1051
  %1061 = load ptr, ptr %2, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1061, i32 0, i32 3
  store volatile i32 3, ptr %1062, align 4, !tbaa !29
  br label %1066

1063:                                             ; preds = %1051
  %1064 = load ptr, ptr %2, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1064, i32 0, i32 3
  store volatile i32 1, ptr %1065, align 4, !tbaa !29
  br label %1066

1066:                                             ; preds = %1063, %1060
  br label %1067

1067:                                             ; preds = %1066, %922
  %1068 = load ptr, ptr %2, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1068, i32 0, i32 9
  %1070 = load ptr, ptr %1069, align 8, !tbaa !36
  %1071 = icmp ne ptr %1070, null
  br i1 %1071, label %1072, label %1077

1072:                                             ; preds = %1067
  %1073 = load ptr, ptr %2, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1073, i32 0, i32 9
  %1075 = load ptr, ptr %1074, align 8, !tbaa !36
  %1076 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1075(ptr noundef %1076)
  br label %1077

1077:                                             ; preds = %1072, %1067
  br label %1078

1078:                                             ; preds = %1077, %917
  br label %1623

1079:                                             ; preds = %108
  %1080 = load ptr, ptr %2, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1080, i32 0, i32 0
  %1082 = load ptr, ptr %1081, align 8, !tbaa !18
  %1083 = icmp eq ptr %1082, inttoptr (i64 1476547592 to ptr)
  br i1 %1083, label %1119, label %1084

1084:                                             ; preds = %1079
  %1085 = load ptr, ptr %2, align 8, !tbaa !5
  %1086 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1085, i32 0, i32 0
  %1087 = load ptr, ptr %1086, align 8, !tbaa !18
  %1088 = icmp eq ptr %1087, inttoptr (i64 1476547612 to ptr)
  br i1 %1088, label %1119, label %1089

1089:                                             ; preds = %1084
  %1090 = load ptr, ptr %2, align 8, !tbaa !5
  %1091 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1090, i32 0, i32 0
  %1092 = load ptr, ptr %1091, align 8, !tbaa !18
  %1093 = icmp eq ptr %1092, inttoptr (i64 1476547632 to ptr)
  br i1 %1093, label %1119, label %1094

1094:                                             ; preds = %1089
  %1095 = load ptr, ptr %2, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1095, i32 0, i32 0
  %1097 = load ptr, ptr %1096, align 8, !tbaa !18
  %1098 = icmp eq ptr %1097, inttoptr (i64 1476547652 to ptr)
  br i1 %1098, label %1119, label %1099

1099:                                             ; preds = %1094
  %1100 = load ptr, ptr %2, align 8, !tbaa !5
  %1101 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1100, i32 0, i32 0
  %1102 = load ptr, ptr %1101, align 8, !tbaa !18
  %1103 = icmp eq ptr %1102, inttoptr (i64 1476547672 to ptr)
  br i1 %1103, label %1119, label %1104

1104:                                             ; preds = %1099
  %1105 = load ptr, ptr %2, align 8, !tbaa !5
  %1106 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1105, i32 0, i32 0
  %1107 = load ptr, ptr %1106, align 8, !tbaa !18
  %1108 = icmp eq ptr %1107, inttoptr (i64 1476547692 to ptr)
  br i1 %1108, label %1119, label %1109

1109:                                             ; preds = %1104
  %1110 = load ptr, ptr %2, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1110, i32 0, i32 0
  %1112 = load ptr, ptr %1111, align 8, !tbaa !18
  %1113 = icmp eq ptr %1112, inttoptr (i64 1476547712 to ptr)
  br i1 %1113, label %1119, label %1114

1114:                                             ; preds = %1109
  %1115 = load ptr, ptr %2, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1115, i32 0, i32 0
  %1117 = load ptr, ptr %1116, align 8, !tbaa !18
  %1118 = icmp eq ptr %1117, inttoptr (i64 1476547732 to ptr)
  br label %1119

1119:                                             ; preds = %1114, %1109, %1104, %1099, %1094, %1089, %1084, %1079
  %1120 = phi i1 [ true, %1109 ], [ true, %1104 ], [ true, %1099 ], [ true, %1094 ], [ true, %1089 ], [ true, %1084 ], [ true, %1079 ], [ %1118, %1114 ]
  %1121 = zext i1 %1120 to i32
  %1122 = icmp ne i32 %1121, 0
  br i1 %1122, label %1123, label %1621

1123:                                             ; preds = %1119
  %1124 = load ptr, ptr %2, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1124, i32 0, i32 0
  %1126 = load ptr, ptr %1125, align 8, !tbaa !18
  %1127 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %1126, i32 0, i32 0
  %1128 = load volatile i32, ptr %1127, align 4, !tbaa !22
  store i32 %1128, ptr %5, align 4, !tbaa !9
  %1129 = load i32, ptr %4, align 4, !tbaa !9
  %1130 = load ptr, ptr %2, align 8, !tbaa !5
  %1131 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1130, i32 0, i32 13
  %1132 = load i32, ptr %1131, align 8, !tbaa !19
  %1133 = and i32 %1132, 31
  %1134 = shl i32 4, %1133
  %1135 = and i32 %1129, %1134
  %1136 = icmp ne i32 %1135, 0
  br i1 %1136, label %1137, label %1299

1137:                                             ; preds = %1123
  %1138 = load i32, ptr %5, align 4, !tbaa !9
  %1139 = zext i32 %1138 to i64
  %1140 = and i64 %1139, 4
  %1141 = icmp ne i64 %1140, 0
  br i1 %1141, label %1142, label %1299

1142:                                             ; preds = %1137
  %1143 = load ptr, ptr %2, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1143, i32 0, i32 13
  %1145 = load i32, ptr %1144, align 8, !tbaa !19
  %1146 = and i32 %1145, 31
  %1147 = zext i32 %1146 to i64
  %1148 = shl i64 4, %1147
  %1149 = trunc i64 %1148 to i32
  %1150 = load ptr, ptr %9, align 8, !tbaa !5
  %1151 = getelementptr inbounds %struct.BDMA_Base_Registers, ptr %1150, i32 0, i32 1
  store volatile i32 %1149, ptr %1151, align 4, !tbaa !37
  %1152 = load i32, ptr %5, align 4, !tbaa !9
  %1153 = zext i32 %1152 to i64
  %1154 = and i64 %1153, 32768
  %1155 = icmp ne i64 %1154, 0
  br i1 %1155, label %1156, label %1184

1156:                                             ; preds = %1142
  %1157 = load i32, ptr %5, align 4, !tbaa !9
  %1158 = zext i32 %1157 to i64
  %1159 = and i64 %1158, 65536
  %1160 = icmp eq i64 %1159, 0
  br i1 %1160, label %1161, label %1172

1161:                                             ; preds = %1156
  %1162 = load ptr, ptr %2, align 8, !tbaa !5
  %1163 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1162, i32 0, i32 8
  %1164 = load ptr, ptr %1163, align 8, !tbaa !28
  %1165 = icmp ne ptr %1164, null
  br i1 %1165, label %1166, label %1171

1166:                                             ; preds = %1161
  %1167 = load ptr, ptr %2, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1167, i32 0, i32 8
  %1169 = load ptr, ptr %1168, align 8, !tbaa !28
  %1170 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1169(ptr noundef %1170)
  br label %1171

1171:                                             ; preds = %1166, %1161
  br label %1183

1172:                                             ; preds = %1156
  %1173 = load ptr, ptr %2, align 8, !tbaa !5
  %1174 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1173, i32 0, i32 6
  %1175 = load ptr, ptr %1174, align 8, !tbaa !27
  %1176 = icmp ne ptr %1175, null
  br i1 %1176, label %1177, label %1182

1177:                                             ; preds = %1172
  %1178 = load ptr, ptr %2, align 8, !tbaa !5
  %1179 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1178, i32 0, i32 6
  %1180 = load ptr, ptr %1179, align 8, !tbaa !27
  %1181 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1180(ptr noundef %1181)
  br label %1182

1182:                                             ; preds = %1177, %1172
  br label %1183

1183:                                             ; preds = %1182, %1171
  br label %1298

1184:                                             ; preds = %1142
  %1185 = load i32, ptr %5, align 4, !tbaa !9
  %1186 = zext i32 %1185 to i64
  %1187 = and i64 %1186, 32
  %1188 = icmp eq i64 %1187, 0
  br i1 %1188, label %1189, label %1287

1189:                                             ; preds = %1184
  %1190 = load ptr, ptr %2, align 8, !tbaa !5
  %1191 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1190, i32 0, i32 0
  %1192 = load ptr, ptr %1191, align 8, !tbaa !18
  %1193 = icmp eq ptr %1192, inttoptr (i64 1073872912 to ptr)
  br i1 %1193, label %1269, label %1194

1194:                                             ; preds = %1189
  %1195 = load ptr, ptr %2, align 8, !tbaa !5
  %1196 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1195, i32 0, i32 0
  %1197 = load ptr, ptr %1196, align 8, !tbaa !18
  %1198 = icmp eq ptr %1197, inttoptr (i64 1073872936 to ptr)
  br i1 %1198, label %1269, label %1199

1199:                                             ; preds = %1194
  %1200 = load ptr, ptr %2, align 8, !tbaa !5
  %1201 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1200, i32 0, i32 0
  %1202 = load ptr, ptr %1201, align 8, !tbaa !18
  %1203 = icmp eq ptr %1202, inttoptr (i64 1073872960 to ptr)
  br i1 %1203, label %1269, label %1204

1204:                                             ; preds = %1199
  %1205 = load ptr, ptr %2, align 8, !tbaa !5
  %1206 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1205, i32 0, i32 0
  %1207 = load ptr, ptr %1206, align 8, !tbaa !18
  %1208 = icmp eq ptr %1207, inttoptr (i64 1073872984 to ptr)
  br i1 %1208, label %1269, label %1209

1209:                                             ; preds = %1204
  %1210 = load ptr, ptr %2, align 8, !tbaa !5
  %1211 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1210, i32 0, i32 0
  %1212 = load ptr, ptr %1211, align 8, !tbaa !18
  %1213 = icmp eq ptr %1212, inttoptr (i64 1073873008 to ptr)
  br i1 %1213, label %1269, label %1214

1214:                                             ; preds = %1209
  %1215 = load ptr, ptr %2, align 8, !tbaa !5
  %1216 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1215, i32 0, i32 0
  %1217 = load ptr, ptr %1216, align 8, !tbaa !18
  %1218 = icmp eq ptr %1217, inttoptr (i64 1073873032 to ptr)
  br i1 %1218, label %1269, label %1219

1219:                                             ; preds = %1214
  %1220 = load ptr, ptr %2, align 8, !tbaa !5
  %1221 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1220, i32 0, i32 0
  %1222 = load ptr, ptr %1221, align 8, !tbaa !18
  %1223 = icmp eq ptr %1222, inttoptr (i64 1073873056 to ptr)
  br i1 %1223, label %1269, label %1224

1224:                                             ; preds = %1219
  %1225 = load ptr, ptr %2, align 8, !tbaa !5
  %1226 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1225, i32 0, i32 0
  %1227 = load ptr, ptr %1226, align 8, !tbaa !18
  %1228 = icmp eq ptr %1227, inttoptr (i64 1073873080 to ptr)
  br i1 %1228, label %1269, label %1229

1229:                                             ; preds = %1224
  %1230 = load ptr, ptr %2, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1230, i32 0, i32 0
  %1232 = load ptr, ptr %1231, align 8, !tbaa !18
  %1233 = icmp eq ptr %1232, inttoptr (i64 1073873936 to ptr)
  br i1 %1233, label %1269, label %1234

1234:                                             ; preds = %1229
  %1235 = load ptr, ptr %2, align 8, !tbaa !5
  %1236 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1235, i32 0, i32 0
  %1237 = load ptr, ptr %1236, align 8, !tbaa !18
  %1238 = icmp eq ptr %1237, inttoptr (i64 1073873960 to ptr)
  br i1 %1238, label %1269, label %1239

1239:                                             ; preds = %1234
  %1240 = load ptr, ptr %2, align 8, !tbaa !5
  %1241 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1240, i32 0, i32 0
  %1242 = load ptr, ptr %1241, align 8, !tbaa !18
  %1243 = icmp eq ptr %1242, inttoptr (i64 1073873984 to ptr)
  br i1 %1243, label %1269, label %1244

1244:                                             ; preds = %1239
  %1245 = load ptr, ptr %2, align 8, !tbaa !5
  %1246 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1245, i32 0, i32 0
  %1247 = load ptr, ptr %1246, align 8, !tbaa !18
  %1248 = icmp eq ptr %1247, inttoptr (i64 1073874008 to ptr)
  br i1 %1248, label %1269, label %1249

1249:                                             ; preds = %1244
  %1250 = load ptr, ptr %2, align 8, !tbaa !5
  %1251 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1250, i32 0, i32 0
  %1252 = load ptr, ptr %1251, align 8, !tbaa !18
  %1253 = icmp eq ptr %1252, inttoptr (i64 1073874032 to ptr)
  br i1 %1253, label %1269, label %1254

1254:                                             ; preds = %1249
  %1255 = load ptr, ptr %2, align 8, !tbaa !5
  %1256 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1255, i32 0, i32 0
  %1257 = load ptr, ptr %1256, align 8, !tbaa !18
  %1258 = icmp eq ptr %1257, inttoptr (i64 1073874056 to ptr)
  br i1 %1258, label %1269, label %1259

1259:                                             ; preds = %1254
  %1260 = load ptr, ptr %2, align 8, !tbaa !5
  %1261 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1260, i32 0, i32 0
  %1262 = load ptr, ptr %1261, align 8, !tbaa !18
  %1263 = icmp eq ptr %1262, inttoptr (i64 1073874080 to ptr)
  br i1 %1263, label %1269, label %1264

1264:                                             ; preds = %1259
  %1265 = load ptr, ptr %2, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1265, i32 0, i32 0
  %1267 = load ptr, ptr %1266, align 8, !tbaa !18
  %1268 = icmp eq ptr %1267, inttoptr (i64 1073874104 to ptr)
  br i1 %1268, label %1269, label %1276

1269:                                             ; preds = %1264, %1259, %1254, %1249, %1244, %1239, %1234, %1229, %1224, %1219, %1214, %1209, %1204, %1199, %1194, %1189
  %1270 = load ptr, ptr %2, align 8, !tbaa !5
  %1271 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1270, i32 0, i32 0
  %1272 = load ptr, ptr %1271, align 8, !tbaa !18
  %1273 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %1272, i32 0, i32 0
  %1274 = load volatile i32, ptr %1273, align 4, !tbaa !20
  %1275 = and i32 %1274, -9
  store volatile i32 %1275, ptr %1273, align 4, !tbaa !20
  br label %1285

1276:                                             ; preds = %1264
  %1277 = load ptr, ptr %2, align 8, !tbaa !5
  %1278 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1277, i32 0, i32 0
  %1279 = load ptr, ptr %1278, align 8, !tbaa !18
  %1280 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %1279, i32 0, i32 0
  %1281 = load volatile i32, ptr %1280, align 4, !tbaa !22
  %1282 = zext i32 %1281 to i64
  %1283 = and i64 %1282, -5
  %1284 = trunc i64 %1283 to i32
  store volatile i32 %1284, ptr %1280, align 4, !tbaa !22
  br label %1285

1285:                                             ; preds = %1276, %1269
  %1286 = phi i32 [ %1275, %1269 ], [ %1284, %1276 ]
  br label %1287

1287:                                             ; preds = %1285, %1184
  %1288 = load ptr, ptr %2, align 8, !tbaa !5
  %1289 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1288, i32 0, i32 6
  %1290 = load ptr, ptr %1289, align 8, !tbaa !27
  %1291 = icmp ne ptr %1290, null
  br i1 %1291, label %1292, label %1297

1292:                                             ; preds = %1287
  %1293 = load ptr, ptr %2, align 8, !tbaa !5
  %1294 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1293, i32 0, i32 6
  %1295 = load ptr, ptr %1294, align 8, !tbaa !27
  %1296 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1295(ptr noundef %1296)
  br label %1297

1297:                                             ; preds = %1292, %1287
  br label %1298

1298:                                             ; preds = %1297, %1183
  br label %1620

1299:                                             ; preds = %1137, %1123
  %1300 = load i32, ptr %4, align 4, !tbaa !9
  %1301 = load ptr, ptr %2, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1301, i32 0, i32 13
  %1303 = load i32, ptr %1302, align 8, !tbaa !19
  %1304 = and i32 %1303, 31
  %1305 = shl i32 2, %1304
  %1306 = and i32 %1300, %1305
  %1307 = icmp ne i32 %1306, 0
  br i1 %1307, label %1308, label %1477

1308:                                             ; preds = %1299
  %1309 = load i32, ptr %5, align 4, !tbaa !9
  %1310 = zext i32 %1309 to i64
  %1311 = and i64 %1310, 2
  %1312 = icmp ne i64 %1311, 0
  br i1 %1312, label %1313, label %1477

1313:                                             ; preds = %1308
  %1314 = load ptr, ptr %2, align 8, !tbaa !5
  %1315 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1314, i32 0, i32 13
  %1316 = load i32, ptr %1315, align 8, !tbaa !19
  %1317 = and i32 %1316, 31
  %1318 = zext i32 %1317 to i64
  %1319 = shl i64 2, %1318
  %1320 = trunc i64 %1319 to i32
  %1321 = load ptr, ptr %9, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.BDMA_Base_Registers, ptr %1321, i32 0, i32 1
  store volatile i32 %1320, ptr %1322, align 4, !tbaa !37
  %1323 = load i32, ptr %5, align 4, !tbaa !9
  %1324 = zext i32 %1323 to i64
  %1325 = and i64 %1324, 32768
  %1326 = icmp ne i64 %1325, 0
  br i1 %1326, label %1327, label %1355

1327:                                             ; preds = %1313
  %1328 = load i32, ptr %5, align 4, !tbaa !9
  %1329 = zext i32 %1328 to i64
  %1330 = and i64 %1329, 65536
  %1331 = icmp eq i64 %1330, 0
  br i1 %1331, label %1332, label %1343

1332:                                             ; preds = %1327
  %1333 = load ptr, ptr %2, align 8, !tbaa !5
  %1334 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1333, i32 0, i32 7
  %1335 = load ptr, ptr %1334, align 8, !tbaa !32
  %1336 = icmp ne ptr %1335, null
  br i1 %1336, label %1337, label %1342

1337:                                             ; preds = %1332
  %1338 = load ptr, ptr %2, align 8, !tbaa !5
  %1339 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1338, i32 0, i32 7
  %1340 = load ptr, ptr %1339, align 8, !tbaa !32
  %1341 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1340(ptr noundef %1341)
  br label %1342

1342:                                             ; preds = %1337, %1332
  br label %1354

1343:                                             ; preds = %1327
  %1344 = load ptr, ptr %2, align 8, !tbaa !5
  %1345 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1344, i32 0, i32 5
  %1346 = load ptr, ptr %1345, align 8, !tbaa !33
  %1347 = icmp ne ptr %1346, null
  br i1 %1347, label %1348, label %1353

1348:                                             ; preds = %1343
  %1349 = load ptr, ptr %2, align 8, !tbaa !5
  %1350 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1349, i32 0, i32 5
  %1351 = load ptr, ptr %1350, align 8, !tbaa !33
  %1352 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1351(ptr noundef %1352)
  br label %1353

1353:                                             ; preds = %1348, %1343
  br label %1354

1354:                                             ; preds = %1353, %1342
  br label %1476

1355:                                             ; preds = %1313
  %1356 = load i32, ptr %5, align 4, !tbaa !9
  %1357 = zext i32 %1356 to i64
  %1358 = and i64 %1357, 32
  %1359 = icmp eq i64 %1358, 0
  br i1 %1359, label %1360, label %1465

1360:                                             ; preds = %1355
  %1361 = load ptr, ptr %2, align 8, !tbaa !5
  %1362 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1361, i32 0, i32 0
  %1363 = load ptr, ptr %1362, align 8, !tbaa !18
  %1364 = icmp eq ptr %1363, inttoptr (i64 1073872912 to ptr)
  br i1 %1364, label %1440, label %1365

1365:                                             ; preds = %1360
  %1366 = load ptr, ptr %2, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1366, i32 0, i32 0
  %1368 = load ptr, ptr %1367, align 8, !tbaa !18
  %1369 = icmp eq ptr %1368, inttoptr (i64 1073872936 to ptr)
  br i1 %1369, label %1440, label %1370

1370:                                             ; preds = %1365
  %1371 = load ptr, ptr %2, align 8, !tbaa !5
  %1372 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1371, i32 0, i32 0
  %1373 = load ptr, ptr %1372, align 8, !tbaa !18
  %1374 = icmp eq ptr %1373, inttoptr (i64 1073872960 to ptr)
  br i1 %1374, label %1440, label %1375

1375:                                             ; preds = %1370
  %1376 = load ptr, ptr %2, align 8, !tbaa !5
  %1377 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1376, i32 0, i32 0
  %1378 = load ptr, ptr %1377, align 8, !tbaa !18
  %1379 = icmp eq ptr %1378, inttoptr (i64 1073872984 to ptr)
  br i1 %1379, label %1440, label %1380

1380:                                             ; preds = %1375
  %1381 = load ptr, ptr %2, align 8, !tbaa !5
  %1382 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1381, i32 0, i32 0
  %1383 = load ptr, ptr %1382, align 8, !tbaa !18
  %1384 = icmp eq ptr %1383, inttoptr (i64 1073873008 to ptr)
  br i1 %1384, label %1440, label %1385

1385:                                             ; preds = %1380
  %1386 = load ptr, ptr %2, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1386, i32 0, i32 0
  %1388 = load ptr, ptr %1387, align 8, !tbaa !18
  %1389 = icmp eq ptr %1388, inttoptr (i64 1073873032 to ptr)
  br i1 %1389, label %1440, label %1390

1390:                                             ; preds = %1385
  %1391 = load ptr, ptr %2, align 8, !tbaa !5
  %1392 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1391, i32 0, i32 0
  %1393 = load ptr, ptr %1392, align 8, !tbaa !18
  %1394 = icmp eq ptr %1393, inttoptr (i64 1073873056 to ptr)
  br i1 %1394, label %1440, label %1395

1395:                                             ; preds = %1390
  %1396 = load ptr, ptr %2, align 8, !tbaa !5
  %1397 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1396, i32 0, i32 0
  %1398 = load ptr, ptr %1397, align 8, !tbaa !18
  %1399 = icmp eq ptr %1398, inttoptr (i64 1073873080 to ptr)
  br i1 %1399, label %1440, label %1400

1400:                                             ; preds = %1395
  %1401 = load ptr, ptr %2, align 8, !tbaa !5
  %1402 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1401, i32 0, i32 0
  %1403 = load ptr, ptr %1402, align 8, !tbaa !18
  %1404 = icmp eq ptr %1403, inttoptr (i64 1073873936 to ptr)
  br i1 %1404, label %1440, label %1405

1405:                                             ; preds = %1400
  %1406 = load ptr, ptr %2, align 8, !tbaa !5
  %1407 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1406, i32 0, i32 0
  %1408 = load ptr, ptr %1407, align 8, !tbaa !18
  %1409 = icmp eq ptr %1408, inttoptr (i64 1073873960 to ptr)
  br i1 %1409, label %1440, label %1410

1410:                                             ; preds = %1405
  %1411 = load ptr, ptr %2, align 8, !tbaa !5
  %1412 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1411, i32 0, i32 0
  %1413 = load ptr, ptr %1412, align 8, !tbaa !18
  %1414 = icmp eq ptr %1413, inttoptr (i64 1073873984 to ptr)
  br i1 %1414, label %1440, label %1415

1415:                                             ; preds = %1410
  %1416 = load ptr, ptr %2, align 8, !tbaa !5
  %1417 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1416, i32 0, i32 0
  %1418 = load ptr, ptr %1417, align 8, !tbaa !18
  %1419 = icmp eq ptr %1418, inttoptr (i64 1073874008 to ptr)
  br i1 %1419, label %1440, label %1420

1420:                                             ; preds = %1415
  %1421 = load ptr, ptr %2, align 8, !tbaa !5
  %1422 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1421, i32 0, i32 0
  %1423 = load ptr, ptr %1422, align 8, !tbaa !18
  %1424 = icmp eq ptr %1423, inttoptr (i64 1073874032 to ptr)
  br i1 %1424, label %1440, label %1425

1425:                                             ; preds = %1420
  %1426 = load ptr, ptr %2, align 8, !tbaa !5
  %1427 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1426, i32 0, i32 0
  %1428 = load ptr, ptr %1427, align 8, !tbaa !18
  %1429 = icmp eq ptr %1428, inttoptr (i64 1073874056 to ptr)
  br i1 %1429, label %1440, label %1430

1430:                                             ; preds = %1425
  %1431 = load ptr, ptr %2, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1431, i32 0, i32 0
  %1433 = load ptr, ptr %1432, align 8, !tbaa !18
  %1434 = icmp eq ptr %1433, inttoptr (i64 1073874080 to ptr)
  br i1 %1434, label %1440, label %1435

1435:                                             ; preds = %1430
  %1436 = load ptr, ptr %2, align 8, !tbaa !5
  %1437 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1436, i32 0, i32 0
  %1438 = load ptr, ptr %1437, align 8, !tbaa !18
  %1439 = icmp eq ptr %1438, inttoptr (i64 1073874104 to ptr)
  br i1 %1439, label %1440, label %1447

1440:                                             ; preds = %1435, %1430, %1425, %1420, %1415, %1410, %1405, %1400, %1395, %1390, %1385, %1380, %1375, %1370, %1365, %1360
  %1441 = load ptr, ptr %2, align 8, !tbaa !5
  %1442 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1441, i32 0, i32 0
  %1443 = load ptr, ptr %1442, align 8, !tbaa !18
  %1444 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %1443, i32 0, i32 0
  %1445 = load volatile i32, ptr %1444, align 4, !tbaa !20
  %1446 = and i32 %1445, -21
  store volatile i32 %1446, ptr %1444, align 4, !tbaa !20
  br label %1456

1447:                                             ; preds = %1435
  %1448 = load ptr, ptr %2, align 8, !tbaa !5
  %1449 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1448, i32 0, i32 0
  %1450 = load ptr, ptr %1449, align 8, !tbaa !18
  %1451 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %1450, i32 0, i32 0
  %1452 = load volatile i32, ptr %1451, align 4, !tbaa !22
  %1453 = zext i32 %1452 to i64
  %1454 = and i64 %1453, -11
  %1455 = trunc i64 %1454 to i32
  store volatile i32 %1455, ptr %1451, align 4, !tbaa !22
  br label %1456

1456:                                             ; preds = %1447, %1440
  %1457 = phi i32 [ %1446, %1440 ], [ %1455, %1447 ]
  br label %1458

1458:                                             ; preds = %1456
  %1459 = load ptr, ptr %2, align 8, !tbaa !5
  %1460 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1459, i32 0, i32 2
  store i32 0, ptr %1460, align 8, !tbaa !30
  br label %1461

1461:                                             ; preds = %1458
  br label %1462

1462:                                             ; preds = %1461
  %1463 = load ptr, ptr %2, align 8, !tbaa !5
  %1464 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1463, i32 0, i32 3
  store volatile i32 1, ptr %1464, align 4, !tbaa !29
  br label %1465

1465:                                             ; preds = %1462, %1355
  %1466 = load ptr, ptr %2, align 8, !tbaa !5
  %1467 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1466, i32 0, i32 5
  %1468 = load ptr, ptr %1467, align 8, !tbaa !33
  %1469 = icmp ne ptr %1468, null
  br i1 %1469, label %1470, label %1475

1470:                                             ; preds = %1465
  %1471 = load ptr, ptr %2, align 8, !tbaa !5
  %1472 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1471, i32 0, i32 5
  %1473 = load ptr, ptr %1472, align 8, !tbaa !33
  %1474 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1473(ptr noundef %1474)
  br label %1475

1475:                                             ; preds = %1470, %1465
  br label %1476

1476:                                             ; preds = %1475, %1354
  br label %1619

1477:                                             ; preds = %1308, %1299
  %1478 = load i32, ptr %4, align 4, !tbaa !9
  %1479 = load ptr, ptr %2, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1479, i32 0, i32 13
  %1481 = load i32, ptr %1480, align 8, !tbaa !19
  %1482 = and i32 %1481, 31
  %1483 = shl i32 8, %1482
  %1484 = and i32 %1478, %1483
  %1485 = icmp ne i32 %1484, 0
  br i1 %1485, label %1486, label %1617

1486:                                             ; preds = %1477
  %1487 = load i32, ptr %5, align 4, !tbaa !9
  %1488 = zext i32 %1487 to i64
  %1489 = and i64 %1488, 8
  %1490 = icmp ne i64 %1489, 0
  br i1 %1490, label %1491, label %1617

1491:                                             ; preds = %1486
  %1492 = load ptr, ptr %2, align 8, !tbaa !5
  %1493 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1492, i32 0, i32 0
  %1494 = load ptr, ptr %1493, align 8, !tbaa !18
  %1495 = icmp eq ptr %1494, inttoptr (i64 1073872912 to ptr)
  br i1 %1495, label %1571, label %1496

1496:                                             ; preds = %1491
  %1497 = load ptr, ptr %2, align 8, !tbaa !5
  %1498 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1497, i32 0, i32 0
  %1499 = load ptr, ptr %1498, align 8, !tbaa !18
  %1500 = icmp eq ptr %1499, inttoptr (i64 1073872936 to ptr)
  br i1 %1500, label %1571, label %1501

1501:                                             ; preds = %1496
  %1502 = load ptr, ptr %2, align 8, !tbaa !5
  %1503 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1502, i32 0, i32 0
  %1504 = load ptr, ptr %1503, align 8, !tbaa !18
  %1505 = icmp eq ptr %1504, inttoptr (i64 1073872960 to ptr)
  br i1 %1505, label %1571, label %1506

1506:                                             ; preds = %1501
  %1507 = load ptr, ptr %2, align 8, !tbaa !5
  %1508 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1507, i32 0, i32 0
  %1509 = load ptr, ptr %1508, align 8, !tbaa !18
  %1510 = icmp eq ptr %1509, inttoptr (i64 1073872984 to ptr)
  br i1 %1510, label %1571, label %1511

1511:                                             ; preds = %1506
  %1512 = load ptr, ptr %2, align 8, !tbaa !5
  %1513 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1512, i32 0, i32 0
  %1514 = load ptr, ptr %1513, align 8, !tbaa !18
  %1515 = icmp eq ptr %1514, inttoptr (i64 1073873008 to ptr)
  br i1 %1515, label %1571, label %1516

1516:                                             ; preds = %1511
  %1517 = load ptr, ptr %2, align 8, !tbaa !5
  %1518 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1517, i32 0, i32 0
  %1519 = load ptr, ptr %1518, align 8, !tbaa !18
  %1520 = icmp eq ptr %1519, inttoptr (i64 1073873032 to ptr)
  br i1 %1520, label %1571, label %1521

1521:                                             ; preds = %1516
  %1522 = load ptr, ptr %2, align 8, !tbaa !5
  %1523 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1522, i32 0, i32 0
  %1524 = load ptr, ptr %1523, align 8, !tbaa !18
  %1525 = icmp eq ptr %1524, inttoptr (i64 1073873056 to ptr)
  br i1 %1525, label %1571, label %1526

1526:                                             ; preds = %1521
  %1527 = load ptr, ptr %2, align 8, !tbaa !5
  %1528 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1527, i32 0, i32 0
  %1529 = load ptr, ptr %1528, align 8, !tbaa !18
  %1530 = icmp eq ptr %1529, inttoptr (i64 1073873080 to ptr)
  br i1 %1530, label %1571, label %1531

1531:                                             ; preds = %1526
  %1532 = load ptr, ptr %2, align 8, !tbaa !5
  %1533 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1532, i32 0, i32 0
  %1534 = load ptr, ptr %1533, align 8, !tbaa !18
  %1535 = icmp eq ptr %1534, inttoptr (i64 1073873936 to ptr)
  br i1 %1535, label %1571, label %1536

1536:                                             ; preds = %1531
  %1537 = load ptr, ptr %2, align 8, !tbaa !5
  %1538 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1537, i32 0, i32 0
  %1539 = load ptr, ptr %1538, align 8, !tbaa !18
  %1540 = icmp eq ptr %1539, inttoptr (i64 1073873960 to ptr)
  br i1 %1540, label %1571, label %1541

1541:                                             ; preds = %1536
  %1542 = load ptr, ptr %2, align 8, !tbaa !5
  %1543 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1542, i32 0, i32 0
  %1544 = load ptr, ptr %1543, align 8, !tbaa !18
  %1545 = icmp eq ptr %1544, inttoptr (i64 1073873984 to ptr)
  br i1 %1545, label %1571, label %1546

1546:                                             ; preds = %1541
  %1547 = load ptr, ptr %2, align 8, !tbaa !5
  %1548 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1547, i32 0, i32 0
  %1549 = load ptr, ptr %1548, align 8, !tbaa !18
  %1550 = icmp eq ptr %1549, inttoptr (i64 1073874008 to ptr)
  br i1 %1550, label %1571, label %1551

1551:                                             ; preds = %1546
  %1552 = load ptr, ptr %2, align 8, !tbaa !5
  %1553 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1552, i32 0, i32 0
  %1554 = load ptr, ptr %1553, align 8, !tbaa !18
  %1555 = icmp eq ptr %1554, inttoptr (i64 1073874032 to ptr)
  br i1 %1555, label %1571, label %1556

1556:                                             ; preds = %1551
  %1557 = load ptr, ptr %2, align 8, !tbaa !5
  %1558 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1557, i32 0, i32 0
  %1559 = load ptr, ptr %1558, align 8, !tbaa !18
  %1560 = icmp eq ptr %1559, inttoptr (i64 1073874056 to ptr)
  br i1 %1560, label %1571, label %1561

1561:                                             ; preds = %1556
  %1562 = load ptr, ptr %2, align 8, !tbaa !5
  %1563 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1562, i32 0, i32 0
  %1564 = load ptr, ptr %1563, align 8, !tbaa !18
  %1565 = icmp eq ptr %1564, inttoptr (i64 1073874080 to ptr)
  br i1 %1565, label %1571, label %1566

1566:                                             ; preds = %1561
  %1567 = load ptr, ptr %2, align 8, !tbaa !5
  %1568 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1567, i32 0, i32 0
  %1569 = load ptr, ptr %1568, align 8, !tbaa !18
  %1570 = icmp eq ptr %1569, inttoptr (i64 1073874104 to ptr)
  br i1 %1570, label %1571, label %1578

1571:                                             ; preds = %1566, %1561, %1556, %1551, %1546, %1541, %1536, %1531, %1526, %1521, %1516, %1511, %1506, %1501, %1496, %1491
  %1572 = load ptr, ptr %2, align 8, !tbaa !5
  %1573 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1572, i32 0, i32 0
  %1574 = load ptr, ptr %1573, align 8, !tbaa !18
  %1575 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %1574, i32 0, i32 0
  %1576 = load volatile i32, ptr %1575, align 4, !tbaa !20
  %1577 = and i32 %1576, -29
  store volatile i32 %1577, ptr %1575, align 4, !tbaa !20
  br label %1587

1578:                                             ; preds = %1566
  %1579 = load ptr, ptr %2, align 8, !tbaa !5
  %1580 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1579, i32 0, i32 0
  %1581 = load ptr, ptr %1580, align 8, !tbaa !18
  %1582 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %1581, i32 0, i32 0
  %1583 = load volatile i32, ptr %1582, align 4, !tbaa !22
  %1584 = zext i32 %1583 to i64
  %1585 = and i64 %1584, -15
  %1586 = trunc i64 %1585 to i32
  store volatile i32 %1586, ptr %1582, align 4, !tbaa !22
  br label %1587

1587:                                             ; preds = %1578, %1571
  %1588 = phi i32 [ %1577, %1571 ], [ %1586, %1578 ]
  %1589 = load ptr, ptr %2, align 8, !tbaa !5
  %1590 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1589, i32 0, i32 13
  %1591 = load i32, ptr %1590, align 8, !tbaa !19
  %1592 = and i32 %1591, 31
  %1593 = zext i32 %1592 to i64
  %1594 = shl i64 1, %1593
  %1595 = trunc i64 %1594 to i32
  %1596 = load ptr, ptr %9, align 8, !tbaa !5
  %1597 = getelementptr inbounds %struct.BDMA_Base_Registers, ptr %1596, i32 0, i32 1
  store volatile i32 %1595, ptr %1597, align 4, !tbaa !37
  %1598 = load ptr, ptr %2, align 8, !tbaa !5
  %1599 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1598, i32 0, i32 11
  store volatile i32 1, ptr %1599, align 8, !tbaa !25
  br label %1600

1600:                                             ; preds = %1587
  %1601 = load ptr, ptr %2, align 8, !tbaa !5
  %1602 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1601, i32 0, i32 2
  store i32 0, ptr %1602, align 8, !tbaa !30
  br label %1603

1603:                                             ; preds = %1600
  br label %1604

1604:                                             ; preds = %1603
  %1605 = load ptr, ptr %2, align 8, !tbaa !5
  %1606 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1605, i32 0, i32 3
  store volatile i32 1, ptr %1606, align 4, !tbaa !29
  %1607 = load ptr, ptr %2, align 8, !tbaa !5
  %1608 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1607, i32 0, i32 9
  %1609 = load ptr, ptr %1608, align 8, !tbaa !36
  %1610 = icmp ne ptr %1609, null
  br i1 %1610, label %1611, label %1616

1611:                                             ; preds = %1604
  %1612 = load ptr, ptr %2, align 8, !tbaa !5
  %1613 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %1612, i32 0, i32 9
  %1614 = load ptr, ptr %1613, align 8, !tbaa !36
  %1615 = load ptr, ptr %2, align 8, !tbaa !5
  call void %1614(ptr noundef %1615)
  br label %1616

1616:                                             ; preds = %1611, %1604
  br label %1618

1617:                                             ; preds = %1486, %1477
  br label %1618

1618:                                             ; preds = %1617, %1616
  br label %1619

1619:                                             ; preds = %1618, %1476
  br label %1620

1620:                                             ; preds = %1619, %1298
  br label %1622

1621:                                             ; preds = %1119
  br label %1622

1622:                                             ; preds = %1621, %1620
  br label %1623

1623:                                             ; preds = %1622, %1078
  store i32 0, ptr %10, align 4
  br label %1624

1624:                                             ; preds = %1623, %840
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  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
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #2
  %1625 = load i32, ptr %10, align 4
  switch i32 %1625, label %1627 [
    i32 0, label %1626
    i32 1, label %1626
  ]

1626:                                             ; preds = %1624, %1624
  ret void

1627:                                             ; preds = %1624
  unreachable
}

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 = !{!12, !10, i64 124}
!12 = !{!"__DMA_HandleTypeDef", !6, i64 0, !13, i64 8, !10, i64 56, !10, i64 60, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !10, i64 124, !10, i64 128, !6, i64 136, !6, i64 144, !10, i64 152, !6, i64 160, !6, i64 168, !10, i64 176}
!13 = !{!"", !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}
!14 = !{!15, !10, i64 0}
!15 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8}
!16 = !{!17, !10, i64 0}
!17 = !{!"", !10, i64 0, !10, i64 4}
!18 = !{!12, !6, i64 0}
!19 = !{!12, !10, i64 128}
!20 = !{!21, !10, i64 0}
!21 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!22 = !{!23, !10, i64 0}
!23 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16}
!24 = !{!15, !10, i64 8}
!25 = !{!12, !10, i64 120}
!26 = !{!21, !10, i64 20}
!27 = !{!12, !6, i64 80}
!28 = !{!12, !6, i64 96}
!29 = !{!12, !10, i64 60}
!30 = !{!12, !10, i64 56}
!31 = !{!12, !6, i64 112}
!32 = !{!12, !6, i64 88}
!33 = !{!12, !6, i64 72}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!12, !6, i64 104}
!37 = !{!17, !10, i64 4}


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

@SystemCoreClock = external local_unnamed_addr global i32, align 4

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

; Function Attrs: mustprogress 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 void @HAL_DMA_IRQHandler(ptr noundef %0) local_unnamed_addr #1 {
  %2 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2)
  store volatile i32 0, ptr %2, align 4, !tbaa !5
  %3 = load i32, ptr @SystemCoreClock, align 4, !tbaa !5
  %4 = udiv i32 %3, 9600
  %5 = getelementptr inbounds i8, ptr %0, i64 124
  %6 = load i32, ptr %5, align 4, !tbaa !9
  %7 = zext i32 %6 to i64
  %8 = inttoptr i64 %7 to ptr
  %9 = load volatile i32, ptr %8, align 4, !tbaa !13
  %10 = load volatile i32, ptr %8, align 4, !tbaa !15
  %11 = load ptr, ptr %0, align 8, !tbaa !17
  %magicptr524 = ptrtoint ptr %11 to i64
  switch i64 %magicptr524, label %240 [
    i64 1073872912, label %.critedge
    i64 1073872936, label %.critedge
    i64 1073872960, label %.critedge
    i64 1073872984, label %.critedge
    i64 1073873008, label %.critedge
    i64 1073873032, label %.critedge
    i64 1073873056, label %.critedge
    i64 1073873080, label %.critedge
    i64 1073873936, label %.critedge
    i64 1073873960, label %.critedge
    i64 1073873984, label %.critedge
    i64 1073874008, label %.critedge
    i64 1073874032, label %.critedge
    i64 1073874056, label %.critedge
    i64 1073874080, label %.critedge
    i64 1073874104, label %.critedge
    i64 1476547592, label %.critedge478
    i64 1476547612, label %.critedge478
    i64 1476547632, label %.critedge478
    i64 1476547652, label %.critedge478
    i64 1476547672, label %.critedge478
    i64 1476547692, label %.critedge478
    i64 1476547712, label %.critedge478
    i64 1476547732, label %.critedge478
  ]

.critedge:                                        ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %1
  %12 = getelementptr inbounds i8, ptr %0, i64 128
  %13 = load i32, ptr %12, align 8, !tbaa !18
  %14 = and i32 %13, 31
  %15 = shl i32 8, %14
  %16 = and i32 %15, %9
  %.not354 = icmp eq i32 %16, 0
  br i1 %.not354, label %29, label %17

17:                                               ; preds = %.critedge
  switch i64 %magicptr524, label %18 [
    i64 1073872912, label %19
    i64 1073872936, label %19
    i64 1073872960, label %19
    i64 1073872984, label %19
    i64 1073873008, label %19
    i64 1073873032, label %19
    i64 1073873056, label %19
    i64 1073873080, label %19
    i64 1073873936, label %19
    i64 1073873960, label %19
    i64 1073873984, label %19
    i64 1073874008, label %19
    i64 1073874032, label %19
    i64 1073874056, label %19
    i64 1073874080, label %19
    i64 1073874104, label %19
  ]

18:                                               ; preds = %17
  br label %19

19:                                               ; preds = %17, %17, %17, %17, %17, %17, %17, %17, %17, %17, %17, %17, %17, %17, %17, %17, %18
  %.sink529 = phi i32 [ 8, %18 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ], [ 4, %17 ]
  %20 = load volatile i32, ptr %11, align 4, !tbaa !5
  %21 = and i32 %20, %.sink529
  %.not355 = icmp eq i32 %21, 0
  br i1 %.not355, label %29, label %22

22:                                               ; preds = %19
  %23 = load volatile i32, ptr %11, align 4, !tbaa !19
  %24 = and i32 %23, -5
  store volatile i32 %24, ptr %11, align 4, !tbaa !19
  %25 = getelementptr inbounds i8, ptr %8, i64 8
  store volatile i32 %15, ptr %25, align 4, !tbaa !21
  %26 = getelementptr inbounds i8, ptr %0, i64 120
  %27 = load volatile i32, ptr %26, align 8, !tbaa !22
  %28 = or i32 %27, 1
  store volatile i32 %28, ptr %26, align 8, !tbaa !22
  br label %29

29:                                               ; preds = %19, %22, %.critedge
  %30 = shl nuw i32 1, %14
  %31 = and i32 %30, %9
  %.not356 = icmp eq i32 %31, 0
  br i1 %.not356, label %43, label %32

32:                                               ; preds = %29
  switch i64 %magicptr524, label %.thread [
    i64 1073872912, label %34
    i64 1073872936, label %34
    i64 1073872960, label %34
    i64 1073872984, label %34
    i64 1073873008, label %34
    i64 1073873032, label %34
    i64 1073873056, label %34
    i64 1073873080, label %34
    i64 1073873936, label %34
    i64 1073873960, label %34
    i64 1073873984, label %34
    i64 1073874008, label %34
    i64 1073874032, label %34
    i64 1073874056, label %34
    i64 1073874080, label %34
    i64 1073874104, label %34
  ]

.thread:                                          ; preds = %32
  %33 = load volatile i32, ptr %11, align 4, !tbaa !23
  br label %43

34:                                               ; preds = %32, %32, %32, %32, %32, %32, %32, %32, %32, %32, %32, %32, %32, %32, %32, %32
  %35 = getelementptr inbounds i8, ptr %11, i64 20
  %36 = load volatile i32, ptr %35, align 4, !tbaa !25
  %37 = and i32 %36, 128
  %.not357 = icmp eq i32 %37, 0
  br i1 %.not357, label %43, label %38

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %8, i64 8
  store volatile i32 %30, ptr %39, align 4, !tbaa !21
  %40 = getelementptr inbounds i8, ptr %0, i64 120
  %41 = load volatile i32, ptr %40, align 8, !tbaa !22
  %42 = or i32 %41, 2
  store volatile i32 %42, ptr %40, align 8, !tbaa !22
  br label %43

43:                                               ; preds = %.thread, %34, %38, %29
  %44 = shl i32 4, %14
  %45 = and i32 %44, %9
  %.not358 = icmp eq i32 %45, 0
  br i1 %.not358, label %56, label %46

46:                                               ; preds = %43
  switch i64 %magicptr524, label %.thread527 [
    i64 1073872912, label %48
    i64 1073872936, label %48
    i64 1073872960, label %48
    i64 1073872984, label %48
    i64 1073873008, label %48
    i64 1073873032, label %48
    i64 1073873056, label %48
    i64 1073873080, label %48
    i64 1073873936, label %48
    i64 1073873960, label %48
    i64 1073873984, label %48
    i64 1073874008, label %48
    i64 1073874032, label %48
    i64 1073874056, label %48
    i64 1073874080, label %48
    i64 1073874104, label %48
  ]

.thread527:                                       ; preds = %46
  %47 = load volatile i32, ptr %11, align 4, !tbaa !23
  br label %56

48:                                               ; preds = %46, %46, %46, %46, %46, %46, %46, %46, %46, %46, %46, %46, %46, %46, %46, %46
  %49 = load volatile i32, ptr %11, align 4, !tbaa !19
  %50 = and i32 %49, 2
  %.not359 = icmp eq i32 %50, 0
  br i1 %.not359, label %56, label %51

51:                                               ; preds = %48
  %52 = getelementptr inbounds i8, ptr %8, i64 8
  store volatile i32 %44, ptr %52, align 4, !tbaa !21
  %53 = getelementptr inbounds i8, ptr %0, i64 120
  %54 = load volatile i32, ptr %53, align 8, !tbaa !22
  %55 = or i32 %54, 4
  store volatile i32 %55, ptr %53, align 8, !tbaa !22
  br label %56

56:                                               ; preds = %.thread527, %48, %51, %43
  %57 = shl i32 16, %14
  %58 = and i32 %57, %9
  %.not360 = icmp eq i32 %58, 0
  br i1 %.not360, label %87, label %59

59:                                               ; preds = %56
  switch i64 %magicptr524, label %60 [
    i64 1073872912, label %61
    i64 1073872936, label %61
    i64 1073872960, label %61
    i64 1073872984, label %61
    i64 1073873008, label %61
    i64 1073873032, label %61
    i64 1073873056, label %61
    i64 1073873080, label %61
    i64 1073873936, label %61
    i64 1073873960, label %61
    i64 1073873984, label %61
    i64 1073874008, label %61
    i64 1073874032, label %61
    i64 1073874056, label %61
    i64 1073874080, label %61
    i64 1073874104, label %61
  ]

60:                                               ; preds = %59
  br label %61

61:                                               ; preds = %59, %59, %59, %59, %59, %59, %59, %59, %59, %59, %59, %59, %59, %59, %59, %59, %60
  %.sink530 = phi i32 [ 4, %60 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ], [ 8, %59 ]
  %62 = load volatile i32, ptr %11, align 4, !tbaa !5
  %63 = and i32 %62, %.sink530
  %.not362 = icmp eq i32 %63, 0
  br i1 %.not362, label %87, label %64

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %8, i64 8
  store volatile i32 %57, ptr %65, align 4, !tbaa !21
  %66 = load volatile i32, ptr %11, align 4, !tbaa !19
  %67 = and i32 %66, 262144
  %.not363 = icmp eq i32 %67, 0
  %68 = load volatile i32, ptr %11, align 4, !tbaa !19
  br i1 %.not363, label %78, label %69

69:                                               ; preds = %64
  %70 = and i32 %68, 524288
  %71 = icmp eq i32 %70, 0
  br i1 %71, label %72, label %75

72:                                               ; preds = %69
  %73 = getelementptr inbounds i8, ptr %0, i64 80
  %74 = load ptr, ptr %73, align 8, !tbaa !26
  %.not366 = icmp eq ptr %74, null
  br i1 %.not366, label %87, label %.sink.split

75:                                               ; preds = %69
  %76 = getelementptr inbounds i8, ptr %0, i64 96
  %77 = load ptr, ptr %76, align 8, !tbaa !27
  %.not365 = icmp eq ptr %77, null
  br i1 %.not365, label %87, label %.sink.split

78:                                               ; preds = %64
  %79 = and i32 %68, 256
  %80 = icmp eq i32 %79, 0
  br i1 %80, label %81, label %84

81:                                               ; preds = %78
  %82 = load volatile i32, ptr %11, align 4, !tbaa !19
  %83 = and i32 %82, -9
  store volatile i32 %83, ptr %11, align 4, !tbaa !19
  br label %84

84:                                               ; preds = %81, %78
  %85 = getelementptr inbounds i8, ptr %0, i64 80
  %86 = load ptr, ptr %85, align 8, !tbaa !26
  %.not364 = icmp eq ptr %86, null
  br i1 %.not364, label %87, label %.sink.split

.sink.split:                                      ; preds = %84, %75, %72
  %.sink = phi ptr [ %74, %72 ], [ %77, %75 ], [ %86, %84 ]
  tail call void %.sink(ptr noundef nonnull %0) #2
  br label %87

87:                                               ; preds = %.sink.split, %61, %84, %72, %75, %56
  %88 = load i32, ptr %12, align 8, !tbaa !18
  %89 = and i32 %88, 31
  %90 = shl i32 32, %89
  %91 = and i32 %90, %9
  %.not367 = icmp eq i32 %91, 0
  br i1 %.not367, label %144, label %92

92:                                               ; preds = %87
  %93 = load ptr, ptr %0, align 8, !tbaa !17
  %magicptr455 = ptrtoint ptr %93 to i64
  switch i64 %magicptr455, label %94 [
    i64 1073872912, label %95
    i64 1073872936, label %95
    i64 1073872960, label %95
    i64 1073872984, label %95
    i64 1073873008, label %95
    i64 1073873032, label %95
    i64 1073873056, label %95
    i64 1073873080, label %95
    i64 1073873936, label %95
    i64 1073873960, label %95
    i64 1073873984, label %95
    i64 1073874008, label %95
    i64 1073874032, label %95
    i64 1073874056, label %95
    i64 1073874080, label %95
    i64 1073874104, label %95
  ]

94:                                               ; preds = %92
  br label %95

95:                                               ; preds = %92, %92, %92, %92, %92, %92, %92, %92, %92, %92, %92, %92, %92, %92, %92, %92, %94
  %.sink532 = phi i32 [ 2, %94 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ], [ 16, %92 ]
  %96 = load volatile i32, ptr %93, align 4, !tbaa !5
  %97 = and i32 %96, %.sink532
  %.not369 = icmp eq i32 %97, 0
  br i1 %.not369, label %144, label %98

98:                                               ; preds = %95
  %99 = getelementptr inbounds i8, ptr %8, i64 8
  store volatile i32 %90, ptr %99, align 4, !tbaa !21
  %100 = getelementptr inbounds i8, ptr %0, i64 60
  %101 = load volatile i32, ptr %100, align 4, !tbaa !28
  %102 = icmp eq i32 %101, 4
  %103 = load volatile i32, ptr %93, align 4, !tbaa !19
  br i1 %102, label %104, label %122

104:                                              ; preds = %98
  %105 = and i32 %103, -23
  store volatile i32 %105, ptr %93, align 4, !tbaa !19
  %106 = getelementptr inbounds i8, ptr %93, i64 20
  %107 = load volatile i32, ptr %106, align 4, !tbaa !25
  %108 = and i32 %107, -129
  store volatile i32 %108, ptr %106, align 4, !tbaa !25
  %109 = getelementptr inbounds i8, ptr %0, i64 80
  %110 = load ptr, ptr %109, align 8, !tbaa !26
  %.not379 = icmp eq ptr %110, null
  br i1 %.not379, label %111, label %114

111:                                              ; preds = %104
  %112 = getelementptr inbounds i8, ptr %0, i64 96
  %113 = load ptr, ptr %112, align 8, !tbaa !27
  %.not380 = icmp eq ptr %113, null
  br i1 %.not380, label %117, label %114

114:                                              ; preds = %111, %104
  %115 = load volatile i32, ptr %93, align 4, !tbaa !19
  %116 = and i32 %115, -9
  store volatile i32 %116, ptr %93, align 4, !tbaa !19
  br label %117

117:                                              ; preds = %114, %111
  %118 = shl i32 63, %89
  store volatile i32 %118, ptr %99, align 4, !tbaa !21
  %119 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %119, align 8, !tbaa !29
  store volatile i32 1, ptr %100, align 4, !tbaa !28
  %120 = getelementptr inbounds i8, ptr %0, i64 112
  %121 = load ptr, ptr %120, align 8, !tbaa !30
  %.not381 = icmp eq ptr %121, null
  br i1 %.not381, label %240, label %.sink.split539

122:                                              ; preds = %98
  %123 = and i32 %103, 262144
  %.not370 = icmp eq i32 %123, 0
  %124 = load volatile i32, ptr %93, align 4, !tbaa !19
  br i1 %.not370, label %134, label %125

125:                                              ; preds = %122
  %126 = and i32 %124, 524288
  %127 = icmp eq i32 %126, 0
  br i1 %127, label %128, label %131

128:                                              ; preds = %125
  %129 = getelementptr inbounds i8, ptr %0, i64 88
  %130 = load ptr, ptr %129, align 8, !tbaa !31
  %.not373 = icmp eq ptr %130, null
  br i1 %.not373, label %144, label %.sink.split533

131:                                              ; preds = %125
  %132 = getelementptr inbounds i8, ptr %0, i64 72
  %133 = load ptr, ptr %132, align 8, !tbaa !32
  %.not372 = icmp eq ptr %133, null
  br i1 %.not372, label %144, label %.sink.split533

134:                                              ; preds = %122
  %135 = and i32 %124, 256
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %141

137:                                              ; preds = %134
  %138 = load volatile i32, ptr %93, align 4, !tbaa !19
  %139 = and i32 %138, -17
  store volatile i32 %139, ptr %93, align 4, !tbaa !19
  %140 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %140, align 8, !tbaa !29
  store volatile i32 1, ptr %100, align 4, !tbaa !28
  br label %141

141:                                              ; preds = %137, %134
  %142 = getelementptr inbounds i8, ptr %0, i64 72
  %143 = load ptr, ptr %142, align 8, !tbaa !32
  %.not371 = icmp eq ptr %143, null
  br i1 %.not371, label %144, label %.sink.split533

.sink.split533:                                   ; preds = %141, %131, %128
  %.sink534 = phi ptr [ %130, %128 ], [ %133, %131 ], [ %143, %141 ]
  tail call void %.sink534(ptr noundef nonnull %0) #2
  br label %144

144:                                              ; preds = %.sink.split533, %95, %141, %128, %131, %87
  %145 = getelementptr inbounds i8, ptr %0, i64 120
  %146 = load volatile i32, ptr %145, align 8, !tbaa !22
  %.not374 = icmp eq i32 %146, 0
  br i1 %.not374, label %240, label %147

147:                                              ; preds = %144
  %148 = load volatile i32, ptr %145, align 8, !tbaa !22
  %149 = and i32 %148, 1
  %.not375 = icmp eq i32 %149, 0
  br i1 %.not375, label %164, label %150

150:                                              ; preds = %147
  %151 = getelementptr inbounds i8, ptr %0, i64 60
  store volatile i32 4, ptr %151, align 4, !tbaa !28
  %152 = load ptr, ptr %0, align 8, !tbaa !17
  %153 = load volatile i32, ptr %152, align 4, !tbaa !5
  %154 = and i32 %153, -2
  store volatile i32 %154, ptr %152, align 4, !tbaa !5
  br label %155

155:                                              ; preds = %158, %150
  %.0..0..0..0.11 = load volatile i32, ptr %2, align 4, !tbaa !5
  %156 = add i32 %.0..0..0..0.11, 1
  store volatile i32 %156, ptr %2, align 4, !tbaa !5
  %157 = icmp ugt i32 %156, %4
  br i1 %157, label %.sink.split537, label %158

158:                                              ; preds = %155
  %159 = load volatile i32, ptr %152, align 4, !tbaa !19
  %160 = and i32 %159, 1
  %.not376 = icmp eq i32 %160, 0
  br i1 %.not376, label %.sink.split537, label %155, !llvm.loop !33

.sink.split537:                                   ; preds = %158, %155
  %161 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %161, align 8, !tbaa !29
  %162 = load volatile i32, ptr %152, align 4, !tbaa !19
  %163 = and i32 %162, 1
  %.not377 = icmp eq i32 %163, 0
  %. = select i1 %.not377, i32 1, i32 3
  store volatile i32 %., ptr %151, align 4, !tbaa !28
  br label %164

164:                                              ; preds = %.sink.split537, %147
  %165 = getelementptr inbounds i8, ptr %0, i64 104
  %166 = load ptr, ptr %165, align 8, !tbaa !35
  %.not378 = icmp eq ptr %166, null
  br i1 %.not378, label %240, label %.sink.split539

.critedge478:                                     ; preds = %1, %1, %1, %1, %1, %1, %1, %1
  %167 = load volatile i32, ptr %11, align 4, !tbaa !23
  %168 = getelementptr inbounds i8, ptr %0, i64 128
  %169 = load i32, ptr %168, align 8, !tbaa !18
  %170 = and i32 %169, 31
  %171 = shl i32 4, %170
  %172 = and i32 %171, %10
  %.not = icmp eq i32 %172, 0
  br i1 %.not, label %197, label %173

173:                                              ; preds = %.critedge478
  %174 = zext i32 %167 to i64
  %175 = and i64 %174, 4
  %.not340 = icmp eq i64 %175, 0
  br i1 %.not340, label %197, label %176

176:                                              ; preds = %173
  %177 = getelementptr inbounds i8, ptr %8, i64 4
  store volatile i32 %171, ptr %177, align 4, !tbaa !36
  %178 = and i64 %174, 32768
  %.not350 = icmp eq i64 %178, 0
  br i1 %.not350, label %188, label %179

179:                                              ; preds = %176
  %180 = and i64 %174, 65536
  %181 = icmp eq i64 %180, 0
  br i1 %181, label %182, label %185

182:                                              ; preds = %179
  %183 = getelementptr inbounds i8, ptr %0, i64 96
  %184 = load ptr, ptr %183, align 8, !tbaa !27
  %.not353 = icmp eq ptr %184, null
  br i1 %.not353, label %240, label %.sink.split539

185:                                              ; preds = %179
  %186 = getelementptr inbounds i8, ptr %0, i64 80
  %187 = load ptr, ptr %186, align 8, !tbaa !26
  %.not352 = icmp eq ptr %187, null
  br i1 %.not352, label %240, label %.sink.split539

188:                                              ; preds = %176
  %189 = and i64 %174, 32
  %190 = icmp eq i64 %189, 0
  br i1 %190, label %191, label %194

191:                                              ; preds = %188
  %192 = load volatile i32, ptr %11, align 4, !tbaa !23
  %193 = and i32 %192, -5
  store volatile i32 %193, ptr %11, align 4, !tbaa !23
  br label %194

194:                                              ; preds = %191, %188
  %195 = getelementptr inbounds i8, ptr %0, i64 80
  %196 = load ptr, ptr %195, align 8, !tbaa !26
  %.not351 = icmp eq ptr %196, null
  br i1 %.not351, label %240, label %.sink.split539

197:                                              ; preds = %173, %.critedge478
  %198 = shl i32 2, %170
  %199 = and i32 %198, %10
  %.not341 = icmp eq i32 %199, 0
  br i1 %.not341, label %226, label %200

200:                                              ; preds = %197
  %201 = zext i32 %167 to i64
  %202 = and i64 %201, 2
  %.not342 = icmp eq i64 %202, 0
  br i1 %.not342, label %226, label %203

203:                                              ; preds = %200
  %204 = getelementptr inbounds i8, ptr %8, i64 4
  store volatile i32 %198, ptr %204, align 4, !tbaa !36
  %205 = and i64 %201, 32768
  %.not346 = icmp eq i64 %205, 0
  br i1 %.not346, label %215, label %206

206:                                              ; preds = %203
  %207 = and i64 %201, 65536
  %208 = icmp eq i64 %207, 0
  br i1 %208, label %209, label %212

209:                                              ; preds = %206
  %210 = getelementptr inbounds i8, ptr %0, i64 88
  %211 = load ptr, ptr %210, align 8, !tbaa !31
  %.not349 = icmp eq ptr %211, null
  br i1 %.not349, label %240, label %.sink.split539

212:                                              ; preds = %206
  %213 = getelementptr inbounds i8, ptr %0, i64 72
  %214 = load ptr, ptr %213, align 8, !tbaa !32
  %.not348 = icmp eq ptr %214, null
  br i1 %.not348, label %240, label %.sink.split539

215:                                              ; preds = %203
  %216 = and i64 %201, 32
  %217 = icmp eq i64 %216, 0
  br i1 %217, label %218, label %223

218:                                              ; preds = %215
  %219 = load volatile i32, ptr %11, align 4, !tbaa !23
  %220 = and i32 %219, -11
  store volatile i32 %220, ptr %11, align 4, !tbaa !23
  %221 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %221, align 8, !tbaa !29
  %222 = getelementptr inbounds i8, ptr %0, i64 60
  store volatile i32 1, ptr %222, align 4, !tbaa !28
  br label %223

223:                                              ; preds = %218, %215
  %224 = getelementptr inbounds i8, ptr %0, i64 72
  %225 = load ptr, ptr %224, align 8, !tbaa !32
  %.not347 = icmp eq ptr %225, null
  br i1 %.not347, label %240, label %.sink.split539

226:                                              ; preds = %200, %197
  %227 = shl i32 8, %170
  %228 = and i32 %227, %10
  %.not343 = icmp eq i32 %228, 0
  %229 = and i32 %167, 8
  %.not344 = icmp eq i32 %229, 0
  %or.cond = select i1 %.not343, i1 true, i1 %.not344
  br i1 %or.cond, label %240, label %230

230:                                              ; preds = %226
  %231 = load volatile i32, ptr %11, align 4, !tbaa !23
  %232 = and i32 %231, -15
  store volatile i32 %232, ptr %11, align 4, !tbaa !23
  %233 = shl nuw i32 1, %170
  %234 = getelementptr inbounds i8, ptr %8, i64 4
  store volatile i32 %233, ptr %234, align 4, !tbaa !36
  %235 = getelementptr inbounds i8, ptr %0, i64 120
  store volatile i32 1, ptr %235, align 8, !tbaa !22
  %236 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %236, align 8, !tbaa !29
  %237 = getelementptr inbounds i8, ptr %0, i64 60
  store volatile i32 1, ptr %237, align 4, !tbaa !28
  %238 = getelementptr inbounds i8, ptr %0, i64 104
  %239 = load ptr, ptr %238, align 8, !tbaa !35
  %.not345 = icmp eq ptr %239, null
  br i1 %.not345, label %240, label %.sink.split539

.sink.split539:                                   ; preds = %230, %223, %212, %209, %194, %185, %182, %164, %117
  %.sink540 = phi ptr [ %121, %117 ], [ %166, %164 ], [ %184, %182 ], [ %187, %185 ], [ %196, %194 ], [ %211, %209 ], [ %214, %212 ], [ %225, %223 ], [ %239, %230 ]
  tail call void %.sink540(ptr noundef nonnull %0) #2
  br label %240

240:                                              ; preds = %.sink.split539, %1, %164, %144, %194, %182, %185, %230, %226, %212, %209, %223, %117
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2)
  ret void
}

attributes #0 = { mustprogress 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 124}
!10 = !{!"__DMA_HandleTypeDef", !11, i64 0, !12, i64 8, !6, i64 56, !6, i64 60, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !6, i64 120, !6, i64 124, !6, i64 128, !11, i64 136, !11, i64 144, !6, i64 152, !11, i64 160, !11, i64 168, !6, i64 176}
!11 = !{!"any pointer", !7, i64 0}
!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}
!13 = !{!14, !6, i64 0}
!14 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8}
!15 = !{!16, !6, i64 0}
!16 = !{!"", !6, i64 0, !6, i64 4}
!17 = !{!10, !11, i64 0}
!18 = !{!10, !6, i64 128}
!19 = !{!20, !6, i64 0}
!20 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20}
!21 = !{!14, !6, i64 8}
!22 = !{!10, !6, i64 120}
!23 = !{!24, !6, i64 0}
!24 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16}
!25 = !{!20, !6, i64 20}
!26 = !{!10, !11, i64 80}
!27 = !{!10, !11, i64 96}
!28 = !{!10, !6, i64 60}
!29 = !{!10, !6, i64 56}
!30 = !{!10, !11, i64 112}
!31 = !{!10, !11, i64 88}
!32 = !{!10, !11, i64 72}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!10, !11, i64 104}
!36 = !{!16, !6, i64 4}


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