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

; 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_Stream_TypeDef = type { i32, i32, i32, i32, i32, i32 }
%struct.DMA_Base_Registers = type { i32, i32, i32 }
%struct.BDMA_Channel_TypeDef = type { i32, i32, i32, i32, i32 }
%struct.BDMA_Base_Registers = type { i32, i32 }
%struct.DMAMUX_RequestGenStatus_TypeDef = type { i32, i32 }
%struct.DMAMUX_ChannelStatus_TypeDef = type { i32, i32 }

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

declare i32 @HAL_GetTick() #1

; 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
declare dso_local i32 @HAL_DMA_Abort(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @HAL_DMA_PollForTransfer(ptr noundef %0, i32 noundef %1, i32 noundef %2) #2 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  store i32 0, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  %14 = call i32 @HAL_GetTick()
  store i32 %14, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %15 = load ptr, ptr %5, align 8, !tbaa !5
  %16 = icmp eq ptr %15, null
  br i1 %16, label %17, label %18

17:                                               ; preds = %3
  store i32 1, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

18:                                               ; preds = %3
  %19 = load ptr, ptr %5, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %19, i32 0, i32 3
  %21 = load volatile i32, ptr %20, align 4, !tbaa !11
  %22 = icmp ne i32 2, %21
  br i1 %22, label %23, label %31

23:                                               ; preds = %18
  %24 = load ptr, ptr %5, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %24, i32 0, i32 11
  store volatile i32 128, ptr %25, align 8, !tbaa !14
  br label %26

26:                                               ; preds = %23
  %27 = load ptr, ptr %5, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %27, i32 0, i32 2
  store i32 0, ptr %28, align 8, !tbaa !15
  br label %29

29:                                               ; preds = %26
  br label %30

30:                                               ; preds = %29
  store i32 1, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

31:                                               ; preds = %18
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %32, i32 0, i32 0
  %34 = load ptr, ptr %33, align 8, !tbaa !16
  %35 = icmp eq ptr %34, inttoptr (i64 1073872912 to ptr)
  br i1 %35, label %111, label %36

36:                                               ; preds = %31
  %37 = load ptr, ptr %5, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !16
  %40 = icmp eq ptr %39, inttoptr (i64 1073872936 to ptr)
  br i1 %40, label %111, label %41

41:                                               ; preds = %36
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %42, i32 0, i32 0
  %44 = load ptr, ptr %43, align 8, !tbaa !16
  %45 = icmp eq ptr %44, inttoptr (i64 1073872960 to ptr)
  br i1 %45, label %111, label %46

46:                                               ; preds = %41
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %47, i32 0, i32 0
  %49 = load ptr, ptr %48, align 8, !tbaa !16
  %50 = icmp eq ptr %49, inttoptr (i64 1073872984 to ptr)
  br i1 %50, label %111, label %51

51:                                               ; preds = %46
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %52, i32 0, i32 0
  %54 = load ptr, ptr %53, align 8, !tbaa !16
  %55 = icmp eq ptr %54, inttoptr (i64 1073873008 to ptr)
  br i1 %55, label %111, label %56

56:                                               ; preds = %51
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %57, i32 0, i32 0
  %59 = load ptr, ptr %58, align 8, !tbaa !16
  %60 = icmp eq ptr %59, inttoptr (i64 1073873032 to ptr)
  br i1 %60, label %111, label %61

61:                                               ; preds = %56
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %62, i32 0, i32 0
  %64 = load ptr, ptr %63, align 8, !tbaa !16
  %65 = icmp eq ptr %64, inttoptr (i64 1073873056 to ptr)
  br i1 %65, label %111, label %66

66:                                               ; preds = %61
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %67, i32 0, i32 0
  %69 = load ptr, ptr %68, align 8, !tbaa !16
  %70 = icmp eq ptr %69, inttoptr (i64 1073873080 to ptr)
  br i1 %70, label %111, label %71

71:                                               ; preds = %66
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %72, i32 0, i32 0
  %74 = load ptr, ptr %73, align 8, !tbaa !16
  %75 = icmp eq ptr %74, inttoptr (i64 1073873936 to ptr)
  br i1 %75, label %111, label %76

76:                                               ; preds = %71
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %77, i32 0, i32 0
  %79 = load ptr, ptr %78, align 8, !tbaa !16
  %80 = icmp eq ptr %79, inttoptr (i64 1073873960 to ptr)
  br i1 %80, label %111, label %81

81:                                               ; preds = %76
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %82, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8, !tbaa !16
  %85 = icmp eq ptr %84, inttoptr (i64 1073873984 to ptr)
  br i1 %85, label %111, label %86

86:                                               ; preds = %81
  %87 = load ptr, ptr %5, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %87, i32 0, i32 0
  %89 = load ptr, ptr %88, align 8, !tbaa !16
  %90 = icmp eq ptr %89, inttoptr (i64 1073874008 to ptr)
  br i1 %90, label %111, label %91

91:                                               ; preds = %86
  %92 = load ptr, ptr %5, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %92, i32 0, i32 0
  %94 = load ptr, ptr %93, align 8, !tbaa !16
  %95 = icmp eq ptr %94, inttoptr (i64 1073874032 to ptr)
  br i1 %95, label %111, label %96

96:                                               ; preds = %91
  %97 = load ptr, ptr %5, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %97, i32 0, i32 0
  %99 = load ptr, ptr %98, align 8, !tbaa !16
  %100 = icmp eq ptr %99, inttoptr (i64 1073874056 to ptr)
  br i1 %100, label %111, label %101

101:                                              ; preds = %96
  %102 = load ptr, ptr %5, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %102, i32 0, i32 0
  %104 = load ptr, ptr %103, align 8, !tbaa !16
  %105 = icmp eq ptr %104, inttoptr (i64 1073874080 to ptr)
  br i1 %105, label %111, label %106

106:                                              ; preds = %101
  %107 = load ptr, ptr %5, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %107, i32 0, i32 0
  %109 = load ptr, ptr %108, align 8, !tbaa !16
  %110 = icmp eq ptr %109, inttoptr (i64 1073874104 to ptr)
  br label %111

111:                                              ; preds = %106, %101, %96, %91, %86, %81, %76, %71, %66, %61, %56, %51, %46, %41, %36, %31
  %112 = phi i1 [ true, %101 ], [ true, %96 ], [ true, %91 ], [ true, %86 ], [ true, %81 ], [ true, %76 ], [ true, %71 ], [ true, %66 ], [ true, %61 ], [ true, %56 ], [ true, %51 ], [ true, %46 ], [ true, %41 ], [ true, %36 ], [ true, %31 ], [ %110, %106 ]
  %113 = zext i1 %112 to i32
  %114 = icmp ne i32 %113, 0
  br i1 %114, label %115, label %155

115:                                              ; preds = %111
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %116, i32 0, i32 0
  %118 = load ptr, ptr %117, align 8, !tbaa !16
  %119 = getelementptr inbounds %struct.DMA_Stream_TypeDef, ptr %118, i32 0, i32 0
  %120 = load volatile i32, ptr %119, align 4, !tbaa !17
  %121 = zext i32 %120 to i64
  %122 = and i64 %121, 256
  %123 = icmp ne i64 %122, 0
  br i1 %123, label %124, label %127

124:                                              ; preds = %115
  %125 = load ptr, ptr %5, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %125, i32 0, i32 11
  store volatile i32 256, ptr %126, align 8, !tbaa !14
  store i32 1, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

127:                                              ; preds = %115
  %128 = load i32, ptr %6, align 4, !tbaa !9
  %129 = icmp eq i32 %128, 0
  br i1 %129, label %130, label %136

130:                                              ; preds = %127
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %131, i32 0, i32 13
  %133 = load i32, ptr %132, align 8, !tbaa !19
  %134 = and i32 %133, 31
  %135 = shl i32 32, %134
  store i32 %135, ptr %9, align 4, !tbaa !9
  br label %142

136:                                              ; preds = %127
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %137, i32 0, i32 13
  %139 = load i32, ptr %138, align 8, !tbaa !19
  %140 = and i32 %139, 31
  %141 = shl i32 16, %140
  store i32 %141, ptr %9, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %136, %130
  %143 = load ptr, ptr %5, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %143, i32 0, i32 12
  %145 = load i32, ptr %144, align 4, !tbaa !20
  %146 = zext i32 %145 to i64
  %147 = inttoptr i64 %146 to ptr
  %148 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %147, i32 0, i32 0
  store ptr %148, ptr %11, align 8, !tbaa !5
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %149, i32 0, i32 12
  %151 = load i32, ptr %150, align 4, !tbaa !20
  %152 = zext i32 %151 to i64
  %153 = inttoptr i64 %152 to ptr
  %154 = getelementptr inbounds %struct.DMA_Base_Registers, ptr %153, i32 0, i32 2
  store ptr %154, ptr %12, align 8, !tbaa !5
  br label %195

155:                                              ; preds = %111
  %156 = load ptr, ptr %5, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %156, i32 0, i32 0
  %158 = load ptr, ptr %157, align 8, !tbaa !16
  %159 = getelementptr inbounds %struct.BDMA_Channel_TypeDef, ptr %158, i32 0, i32 0
  %160 = load volatile i32, ptr %159, align 4, !tbaa !21
  %161 = zext i32 %160 to i64
  %162 = and i64 %161, 32
  %163 = icmp ne i64 %162, 0
  br i1 %163, label %164, label %167

164:                                              ; preds = %155
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %165, i32 0, i32 11
  store volatile i32 256, ptr %166, align 8, !tbaa !14
  store i32 1, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

167:                                              ; preds = %155
  %168 = load i32, ptr %6, align 4, !tbaa !9
  %169 = icmp eq i32 %168, 0
  br i1 %169, label %170, label %176

170:                                              ; preds = %167
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %171, i32 0, i32 13
  %173 = load i32, ptr %172, align 8, !tbaa !19
  %174 = and i32 %173, 31
  %175 = shl i32 2, %174
  store i32 %175, ptr %9, align 4, !tbaa !9
  br label %182

176:                                              ; preds = %167
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %177, i32 0, i32 13
  %179 = load i32, ptr %178, align 8, !tbaa !19
  %180 = and i32 %179, 31
  %181 = shl i32 4, %180
  store i32 %181, ptr %9, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %176, %170
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %183, i32 0, i32 12
  %185 = load i32, ptr %184, align 4, !tbaa !20
  %186 = zext i32 %185 to i64
  %187 = inttoptr i64 %186 to ptr
  %188 = getelementptr inbounds %struct.BDMA_Base_Registers, ptr %187, i32 0, i32 0
  store ptr %188, ptr %11, align 8, !tbaa !5
  %189 = load ptr, ptr %5, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %189, i32 0, i32 12
  %191 = load i32, ptr %190, align 4, !tbaa !20
  %192 = zext i32 %191 to i64
  %193 = inttoptr i64 %192 to ptr
  %194 = getelementptr inbounds %struct.BDMA_Base_Registers, ptr %193, i32 0, i32 1
  store ptr %194, ptr %12, align 8, !tbaa !5
  br label %195

195:                                              ; preds = %182, %142
  br label %196

196:                                              ; preds = %581, %195
  %197 = load ptr, ptr %11, align 8, !tbaa !5
  %198 = load volatile i32, ptr %197, align 4, !tbaa !9
  %199 = load i32, ptr %9, align 4, !tbaa !9
  %200 = and i32 %198, %199
  %201 = icmp eq i32 %200, 0
  br i1 %201, label %202, label %582

202:                                              ; preds = %196
  %203 = load ptr, ptr %5, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %203, i32 0, i32 0
  %205 = load ptr, ptr %204, align 8, !tbaa !16
  %206 = icmp eq ptr %205, inttoptr (i64 1073872912 to ptr)
  br i1 %206, label %282, label %207

207:                                              ; preds = %202
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %209, align 8, !tbaa !16
  %211 = icmp eq ptr %210, inttoptr (i64 1073872936 to ptr)
  br i1 %211, label %282, label %212

212:                                              ; preds = %207
  %213 = load ptr, ptr %5, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %213, i32 0, i32 0
  %215 = load ptr, ptr %214, align 8, !tbaa !16
  %216 = icmp eq ptr %215, inttoptr (i64 1073872960 to ptr)
  br i1 %216, label %282, label %217

217:                                              ; preds = %212
  %218 = load ptr, ptr %5, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %218, i32 0, i32 0
  %220 = load ptr, ptr %219, align 8, !tbaa !16
  %221 = icmp eq ptr %220, inttoptr (i64 1073872984 to ptr)
  br i1 %221, label %282, label %222

222:                                              ; preds = %217
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %223, i32 0, i32 0
  %225 = load ptr, ptr %224, align 8, !tbaa !16
  %226 = icmp eq ptr %225, inttoptr (i64 1073873008 to ptr)
  br i1 %226, label %282, label %227

227:                                              ; preds = %222
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %228, i32 0, i32 0
  %230 = load ptr, ptr %229, align 8, !tbaa !16
  %231 = icmp eq ptr %230, inttoptr (i64 1073873032 to ptr)
  br i1 %231, label %282, label %232

232:                                              ; preds = %227
  %233 = load ptr, ptr %5, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %233, i32 0, i32 0
  %235 = load ptr, ptr %234, align 8, !tbaa !16
  %236 = icmp eq ptr %235, inttoptr (i64 1073873056 to ptr)
  br i1 %236, label %282, label %237

237:                                              ; preds = %232
  %238 = load ptr, ptr %5, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %238, i32 0, i32 0
  %240 = load ptr, ptr %239, align 8, !tbaa !16
  %241 = icmp eq ptr %240, inttoptr (i64 1073873080 to ptr)
  br i1 %241, label %282, label %242

242:                                              ; preds = %237
  %243 = load ptr, ptr %5, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %243, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !16
  %246 = icmp eq ptr %245, inttoptr (i64 1073873936 to ptr)
  br i1 %246, label %282, label %247

247:                                              ; preds = %242
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %248, i32 0, i32 0
  %250 = load ptr, ptr %249, align 8, !tbaa !16
  %251 = icmp eq ptr %250, inttoptr (i64 1073873960 to ptr)
  br i1 %251, label %282, label %252

252:                                              ; preds = %247
  %253 = load ptr, ptr %5, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %253, i32 0, i32 0
  %255 = load ptr, ptr %254, align 8, !tbaa !16
  %256 = icmp eq ptr %255, inttoptr (i64 1073873984 to ptr)
  br i1 %256, label %282, label %257

257:                                              ; preds = %252
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %258, i32 0, i32 0
  %260 = load ptr, ptr %259, align 8, !tbaa !16
  %261 = icmp eq ptr %260, inttoptr (i64 1073874008 to ptr)
  br i1 %261, label %282, label %262

262:                                              ; preds = %257
  %263 = load ptr, ptr %5, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %263, i32 0, i32 0
  %265 = load ptr, ptr %264, align 8, !tbaa !16
  %266 = icmp eq ptr %265, inttoptr (i64 1073874032 to ptr)
  br i1 %266, label %282, label %267

267:                                              ; preds = %262
  %268 = load ptr, ptr %5, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %268, i32 0, i32 0
  %270 = load ptr, ptr %269, align 8, !tbaa !16
  %271 = icmp eq ptr %270, inttoptr (i64 1073874056 to ptr)
  br i1 %271, label %282, label %272

272:                                              ; preds = %267
  %273 = load ptr, ptr %5, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %273, i32 0, i32 0
  %275 = load ptr, ptr %274, align 8, !tbaa !16
  %276 = icmp eq ptr %275, inttoptr (i64 1073874080 to ptr)
  br i1 %276, label %282, label %277

277:                                              ; preds = %272
  %278 = load ptr, ptr %5, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %278, i32 0, i32 0
  %280 = load ptr, ptr %279, align 8, !tbaa !16
  %281 = icmp eq ptr %280, inttoptr (i64 1073874104 to ptr)
  br label %282

282:                                              ; preds = %277, %272, %267, %262, %257, %252, %247, %242, %237, %232, %227, %222, %217, %212, %207, %202
  %283 = phi i1 [ true, %272 ], [ true, %267 ], [ true, %262 ], [ true, %257 ], [ true, %252 ], [ true, %247 ], [ true, %242 ], [ true, %237 ], [ true, %232 ], [ true, %227 ], [ true, %222 ], [ true, %217 ], [ true, %212 ], [ true, %207 ], [ true, %202 ], [ %281, %277 ]
  %284 = zext i1 %283 to i32
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %286, label %357

286:                                              ; preds = %282
  %287 = load ptr, ptr %11, align 8, !tbaa !5
  %288 = load volatile i32, ptr %287, align 4, !tbaa !9
  %289 = load ptr, ptr %5, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %289, i32 0, i32 13
  %291 = load i32, ptr %290, align 8, !tbaa !19
  %292 = and i32 %291, 31
  %293 = shl i32 1, %292
  %294 = and i32 %288, %293
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %296, label %307

296:                                              ; preds = %286
  %297 = load ptr, ptr %5, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %297, i32 0, i32 11
  %299 = load volatile i32, ptr %298, align 8, !tbaa !14
  %300 = or i32 %299, 2
  store volatile i32 %300, ptr %298, align 8, !tbaa !14
  %301 = load ptr, ptr %5, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %301, i32 0, i32 13
  %303 = load i32, ptr %302, align 8, !tbaa !19
  %304 = and i32 %303, 31
  %305 = shl i32 1, %304
  %306 = load ptr, ptr %12, align 8, !tbaa !5
  store volatile i32 %305, ptr %306, align 4, !tbaa !9
  br label %307

307:                                              ; preds = %296, %286
  %308 = load ptr, ptr %11, align 8, !tbaa !5
  %309 = load volatile i32, ptr %308, align 4, !tbaa !9
  %310 = load ptr, ptr %5, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %310, i32 0, i32 13
  %312 = load i32, ptr %311, align 8, !tbaa !19
  %313 = and i32 %312, 31
  %314 = shl i32 4, %313
  %315 = and i32 %309, %314
  %316 = icmp ne i32 %315, 0
  br i1 %316, label %317, label %328

317:                                              ; preds = %307
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %318, i32 0, i32 11
  %320 = load volatile i32, ptr %319, align 8, !tbaa !14
  %321 = or i32 %320, 4
  store volatile i32 %321, ptr %319, align 8, !tbaa !14
  %322 = load ptr, ptr %5, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %322, i32 0, i32 13
  %324 = load i32, ptr %323, align 8, !tbaa !19
  %325 = and i32 %324, 31
  %326 = shl i32 4, %325
  %327 = load ptr, ptr %12, align 8, !tbaa !5
  store volatile i32 %326, ptr %327, align 4, !tbaa !9
  br label %328

328:                                              ; preds = %317, %307
  %329 = load ptr, ptr %11, align 8, !tbaa !5
  %330 = load volatile i32, ptr %329, align 4, !tbaa !9
  %331 = load ptr, ptr %5, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %331, i32 0, i32 13
  %333 = load i32, ptr %332, align 8, !tbaa !19
  %334 = and i32 %333, 31
  %335 = shl i32 8, %334
  %336 = and i32 %330, %335
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %338, label %356

338:                                              ; preds = %328
  %339 = load ptr, ptr %5, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %339, i32 0, i32 11
  %341 = load volatile i32, ptr %340, align 8, !tbaa !14
  %342 = or i32 %341, 1
  store volatile i32 %342, ptr %340, align 8, !tbaa !14
  %343 = load ptr, ptr %5, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %343, i32 0, i32 13
  %345 = load i32, ptr %344, align 8, !tbaa !19
  %346 = and i32 %345, 31
  %347 = shl i32 8, %346
  %348 = load ptr, ptr %12, align 8, !tbaa !5
  store volatile i32 %347, ptr %348, align 4, !tbaa !9
  %349 = load ptr, ptr %5, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %349, i32 0, i32 3
  store volatile i32 1, ptr %350, align 4, !tbaa !11
  br label %351

351:                                              ; preds = %338
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %352, i32 0, i32 2
  store i32 0, ptr %353, align 8, !tbaa !15
  br label %354

354:                                              ; preds = %351
  br label %355

355:                                              ; preds = %354
  store i32 1, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

356:                                              ; preds = %328
  br label %386

357:                                              ; preds = %282
  %358 = load ptr, ptr %11, align 8, !tbaa !5
  %359 = load volatile i32, ptr %358, align 4, !tbaa !9
  %360 = load ptr, ptr %5, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %360, i32 0, i32 13
  %362 = load i32, ptr %361, align 8, !tbaa !19
  %363 = and i32 %362, 31
  %364 = shl i32 8, %363
  %365 = and i32 %359, %364
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %367, label %385

367:                                              ; preds = %357
  %368 = load ptr, ptr %5, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %368, i32 0, i32 13
  %370 = load i32, ptr %369, align 8, !tbaa !19
  %371 = and i32 %370, 31
  %372 = zext i32 %371 to i64
  %373 = shl i64 1, %372
  %374 = trunc i64 %373 to i32
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  store volatile i32 %374, ptr %375, align 4, !tbaa !9
  %376 = load ptr, ptr %5, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %376, i32 0, i32 11
  store volatile i32 1, ptr %377, align 8, !tbaa !14
  %378 = load ptr, ptr %5, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %378, i32 0, i32 3
  store volatile i32 1, ptr %379, align 4, !tbaa !11
  br label %380

380:                                              ; preds = %367
  %381 = load ptr, ptr %5, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %381, i32 0, i32 2
  store i32 0, ptr %382, align 8, !tbaa !15
  br label %383

383:                                              ; preds = %380
  br label %384

384:                                              ; preds = %383
  store i32 1, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

385:                                              ; preds = %357
  br label %386

386:                                              ; preds = %385, %356
  %387 = load i32, ptr %7, align 4, !tbaa !9
  %388 = icmp ne i32 %387, -1
  br i1 %388, label %389, label %404

389:                                              ; preds = %386
  %390 = call i32 @HAL_GetTick()
  %391 = load i32, ptr %10, align 4, !tbaa !9
  %392 = sub i32 %390, %391
  %393 = load i32, ptr %7, align 4, !tbaa !9
  %394 = icmp ugt i32 %392, %393
  br i1 %394, label %398, label %395

395:                                              ; preds = %389
  %396 = load i32, ptr %7, align 4, !tbaa !9
  %397 = icmp eq i32 %396, 0
  br i1 %397, label %398, label %403

398:                                              ; preds = %395, %389
  %399 = load ptr, ptr %5, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %399, i32 0, i32 11
  store volatile i32 32, ptr %400, align 8, !tbaa !14
  %401 = load ptr, ptr %5, align 8, !tbaa !5
  %402 = call i32 @HAL_DMA_Abort(ptr noundef %401)
  store i32 1, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

403:                                              ; preds = %395
  br label %404

404:                                              ; preds = %403, %386
  %405 = load ptr, ptr %5, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %405, i32 0, i32 0
  %407 = load ptr, ptr %406, align 8, !tbaa !16
  %408 = icmp eq ptr %407, inttoptr (i64 1073872912 to ptr)
  br i1 %408, label %524, label %409

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

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

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

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

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

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

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

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

449:                                              ; preds = %444
  %450 = load ptr, ptr %5, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %450, i32 0, i32 0
  %452 = load ptr, ptr %451, align 8, !tbaa !16
  %453 = icmp eq ptr %452, inttoptr (i64 1073873960 to ptr)
  br i1 %453, label %524, label %454

454:                                              ; preds = %449
  %455 = load ptr, ptr %5, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %455, i32 0, i32 0
  %457 = load ptr, ptr %456, align 8, !tbaa !16
  %458 = icmp eq ptr %457, inttoptr (i64 1073873984 to ptr)
  br i1 %458, label %524, label %459

459:                                              ; preds = %454
  %460 = load ptr, ptr %5, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %460, i32 0, i32 0
  %462 = load ptr, ptr %461, align 8, !tbaa !16
  %463 = icmp eq ptr %462, inttoptr (i64 1073874008 to ptr)
  br i1 %463, label %524, label %464

464:                                              ; preds = %459
  %465 = load ptr, ptr %5, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %465, i32 0, i32 0
  %467 = load ptr, ptr %466, align 8, !tbaa !16
  %468 = icmp eq ptr %467, inttoptr (i64 1073874032 to ptr)
  br i1 %468, label %524, label %469

469:                                              ; preds = %464
  %470 = load ptr, ptr %5, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %470, i32 0, i32 0
  %472 = load ptr, ptr %471, align 8, !tbaa !16
  %473 = icmp eq ptr %472, inttoptr (i64 1073874056 to ptr)
  br i1 %473, label %524, label %474

474:                                              ; preds = %469
  %475 = load ptr, ptr %5, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %475, i32 0, i32 0
  %477 = load ptr, ptr %476, align 8, !tbaa !16
  %478 = icmp eq ptr %477, inttoptr (i64 1073874080 to ptr)
  br i1 %478, label %524, label %479

479:                                              ; preds = %474
  %480 = load ptr, ptr %5, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %480, i32 0, i32 0
  %482 = load ptr, ptr %481, align 8, !tbaa !16
  %483 = icmp eq ptr %482, inttoptr (i64 1073874104 to ptr)
  br i1 %483, label %524, label %484

484:                                              ; preds = %479
  %485 = load ptr, ptr %5, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %485, i32 0, i32 0
  %487 = load ptr, ptr %486, align 8, !tbaa !16
  %488 = icmp eq ptr %487, inttoptr (i64 1476547592 to ptr)
  br i1 %488, label %524, label %489

489:                                              ; preds = %484
  %490 = load ptr, ptr %5, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %490, i32 0, i32 0
  %492 = load ptr, ptr %491, align 8, !tbaa !16
  %493 = icmp eq ptr %492, inttoptr (i64 1476547612 to ptr)
  br i1 %493, label %524, label %494

494:                                              ; preds = %489
  %495 = load ptr, ptr %5, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %495, i32 0, i32 0
  %497 = load ptr, ptr %496, align 8, !tbaa !16
  %498 = icmp eq ptr %497, inttoptr (i64 1476547632 to ptr)
  br i1 %498, label %524, label %499

499:                                              ; preds = %494
  %500 = load ptr, ptr %5, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %500, i32 0, i32 0
  %502 = load ptr, ptr %501, align 8, !tbaa !16
  %503 = icmp eq ptr %502, inttoptr (i64 1476547652 to ptr)
  br i1 %503, label %524, label %504

504:                                              ; preds = %499
  %505 = load ptr, ptr %5, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %505, i32 0, i32 0
  %507 = load ptr, ptr %506, align 8, !tbaa !16
  %508 = icmp eq ptr %507, inttoptr (i64 1476547672 to ptr)
  br i1 %508, label %524, label %509

509:                                              ; preds = %504
  %510 = load ptr, ptr %5, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %510, i32 0, i32 0
  %512 = load ptr, ptr %511, align 8, !tbaa !16
  %513 = icmp eq ptr %512, inttoptr (i64 1476547692 to ptr)
  br i1 %513, label %524, label %514

514:                                              ; preds = %509
  %515 = load ptr, ptr %5, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %515, i32 0, i32 0
  %517 = load ptr, ptr %516, align 8, !tbaa !16
  %518 = icmp eq ptr %517, inttoptr (i64 1476547712 to ptr)
  br i1 %518, label %524, label %519

519:                                              ; preds = %514
  %520 = load ptr, ptr %5, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %520, i32 0, i32 0
  %522 = load ptr, ptr %521, align 8, !tbaa !16
  %523 = icmp eq ptr %522, inttoptr (i64 1476547732 to ptr)
  br label %524

524:                                              ; preds = %519, %514, %509, %504, %499, %494, %489, %484, %479, %474, %469, %464, %459, %454, %449, %444, %439, %434, %429, %424, %419, %414, %409, %404
  %525 = phi i1 [ true, %514 ], [ true, %509 ], [ true, %504 ], [ true, %499 ], [ true, %494 ], [ true, %489 ], [ true, %484 ], [ true, %479 ], [ true, %474 ], [ true, %469 ], [ true, %464 ], [ true, %459 ], [ true, %454 ], [ true, %449 ], [ true, %444 ], [ true, %439 ], [ true, %434 ], [ true, %429 ], [ true, %424 ], [ true, %419 ], [ true, %414 ], [ true, %409 ], [ true, %404 ], [ %523, %519 ]
  %526 = zext i1 %525 to i32
  %527 = icmp ne i32 %526, 0
  br i1 %527, label %528, label %581

528:                                              ; preds = %524
  %529 = load ptr, ptr %5, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %529, i32 0, i32 17
  %531 = load ptr, ptr %530, align 8, !tbaa !23
  %532 = icmp ne ptr %531, null
  br i1 %532, label %533, label %557

533:                                              ; preds = %528
  %534 = load ptr, ptr %5, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %534, i32 0, i32 18
  %536 = load ptr, ptr %535, align 8, !tbaa !24
  %537 = getelementptr inbounds %struct.DMAMUX_RequestGenStatus_TypeDef, ptr %536, i32 0, i32 0
  %538 = load volatile i32, ptr %537, align 4, !tbaa !25
  %539 = load ptr, ptr %5, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %539, i32 0, i32 19
  %541 = load i32, ptr %540, align 8, !tbaa !27
  %542 = and i32 %538, %541
  %543 = icmp ne i32 %542, 0
  br i1 %543, label %544, label %556

544:                                              ; preds = %533
  %545 = load ptr, ptr %5, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %545, i32 0, i32 19
  %547 = load i32, ptr %546, align 8, !tbaa !27
  %548 = load ptr, ptr %5, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %548, i32 0, i32 18
  %550 = load ptr, ptr %549, align 8, !tbaa !24
  %551 = getelementptr inbounds %struct.DMAMUX_RequestGenStatus_TypeDef, ptr %550, i32 0, i32 1
  store volatile i32 %547, ptr %551, align 4, !tbaa !28
  %552 = load ptr, ptr %5, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %552, i32 0, i32 11
  %554 = load volatile i32, ptr %553, align 8, !tbaa !14
  %555 = or i32 %554, 1024
  store volatile i32 %555, ptr %553, align 8, !tbaa !14
  br label %556

556:                                              ; preds = %544, %533
  br label %557

557:                                              ; preds = %556, %528
  %558 = load ptr, ptr %5, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %558, i32 0, i32 15
  %560 = load ptr, ptr %559, align 8, !tbaa !29
  %561 = getelementptr inbounds %struct.DMAMUX_ChannelStatus_TypeDef, ptr %560, i32 0, i32 0
  %562 = load volatile i32, ptr %561, align 4, !tbaa !25
  %563 = load ptr, ptr %5, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %563, i32 0, i32 16
  %565 = load i32, ptr %564, align 8, !tbaa !30
  %566 = and i32 %562, %565
  %567 = icmp ne i32 %566, 0
  br i1 %567, label %568, label %580

568:                                              ; preds = %557
  %569 = load ptr, ptr %5, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %569, i32 0, i32 16
  %571 = load i32, ptr %570, align 8, !tbaa !30
  %572 = load ptr, ptr %5, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %572, i32 0, i32 15
  %574 = load ptr, ptr %573, align 8, !tbaa !29
  %575 = getelementptr inbounds %struct.DMAMUX_ChannelStatus_TypeDef, ptr %574, i32 0, i32 1
  store volatile i32 %571, ptr %575, align 4, !tbaa !28
  %576 = load ptr, ptr %5, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %576, i32 0, i32 11
  %578 = load volatile i32, ptr %577, align 8, !tbaa !14
  %579 = or i32 %578, 512
  store volatile i32 %579, ptr %577, align 8, !tbaa !14
  br label %580

580:                                              ; preds = %568, %557
  br label %581

581:                                              ; preds = %580, %524
  br label %196, !llvm.loop !31

582:                                              ; preds = %196
  %583 = load i32, ptr %6, align 4, !tbaa !9
  %584 = icmp eq i32 %583, 0
  br i1 %584, label %585, label %691

585:                                              ; preds = %582
  %586 = load ptr, ptr %5, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %586, i32 0, i32 0
  %588 = load ptr, ptr %587, align 8, !tbaa !16
  %589 = icmp eq ptr %588, inttoptr (i64 1073872912 to ptr)
  br i1 %589, label %665, label %590

590:                                              ; preds = %585
  %591 = load ptr, ptr %5, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %591, i32 0, i32 0
  %593 = load ptr, ptr %592, align 8, !tbaa !16
  %594 = icmp eq ptr %593, inttoptr (i64 1073872936 to ptr)
  br i1 %594, label %665, label %595

595:                                              ; preds = %590
  %596 = load ptr, ptr %5, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %596, i32 0, i32 0
  %598 = load ptr, ptr %597, align 8, !tbaa !16
  %599 = icmp eq ptr %598, inttoptr (i64 1073872960 to ptr)
  br i1 %599, label %665, label %600

600:                                              ; preds = %595
  %601 = load ptr, ptr %5, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %601, i32 0, i32 0
  %603 = load ptr, ptr %602, align 8, !tbaa !16
  %604 = icmp eq ptr %603, inttoptr (i64 1073872984 to ptr)
  br i1 %604, label %665, label %605

605:                                              ; preds = %600
  %606 = load ptr, ptr %5, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %606, i32 0, i32 0
  %608 = load ptr, ptr %607, align 8, !tbaa !16
  %609 = icmp eq ptr %608, inttoptr (i64 1073873008 to ptr)
  br i1 %609, label %665, label %610

610:                                              ; preds = %605
  %611 = load ptr, ptr %5, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %611, i32 0, i32 0
  %613 = load ptr, ptr %612, align 8, !tbaa !16
  %614 = icmp eq ptr %613, inttoptr (i64 1073873032 to ptr)
  br i1 %614, label %665, label %615

615:                                              ; preds = %610
  %616 = load ptr, ptr %5, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %616, i32 0, i32 0
  %618 = load ptr, ptr %617, align 8, !tbaa !16
  %619 = icmp eq ptr %618, inttoptr (i64 1073873056 to ptr)
  br i1 %619, label %665, label %620

620:                                              ; preds = %615
  %621 = load ptr, ptr %5, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %621, i32 0, i32 0
  %623 = load ptr, ptr %622, align 8, !tbaa !16
  %624 = icmp eq ptr %623, inttoptr (i64 1073873080 to ptr)
  br i1 %624, label %665, label %625

625:                                              ; preds = %620
  %626 = load ptr, ptr %5, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %626, i32 0, i32 0
  %628 = load ptr, ptr %627, align 8, !tbaa !16
  %629 = icmp eq ptr %628, inttoptr (i64 1073873936 to ptr)
  br i1 %629, label %665, label %630

630:                                              ; preds = %625
  %631 = load ptr, ptr %5, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %631, i32 0, i32 0
  %633 = load ptr, ptr %632, align 8, !tbaa !16
  %634 = icmp eq ptr %633, inttoptr (i64 1073873960 to ptr)
  br i1 %634, label %665, label %635

635:                                              ; preds = %630
  %636 = load ptr, ptr %5, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %636, i32 0, i32 0
  %638 = load ptr, ptr %637, align 8, !tbaa !16
  %639 = icmp eq ptr %638, inttoptr (i64 1073873984 to ptr)
  br i1 %639, label %665, label %640

640:                                              ; preds = %635
  %641 = load ptr, ptr %5, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %641, i32 0, i32 0
  %643 = load ptr, ptr %642, align 8, !tbaa !16
  %644 = icmp eq ptr %643, inttoptr (i64 1073874008 to ptr)
  br i1 %644, label %665, label %645

645:                                              ; preds = %640
  %646 = load ptr, ptr %5, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %646, i32 0, i32 0
  %648 = load ptr, ptr %647, align 8, !tbaa !16
  %649 = icmp eq ptr %648, inttoptr (i64 1073874032 to ptr)
  br i1 %649, label %665, label %650

650:                                              ; preds = %645
  %651 = load ptr, ptr %5, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %651, i32 0, i32 0
  %653 = load ptr, ptr %652, align 8, !tbaa !16
  %654 = icmp eq ptr %653, inttoptr (i64 1073874056 to ptr)
  br i1 %654, label %665, label %655

655:                                              ; preds = %650
  %656 = load ptr, ptr %5, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %656, i32 0, i32 0
  %658 = load ptr, ptr %657, align 8, !tbaa !16
  %659 = icmp eq ptr %658, inttoptr (i64 1073874080 to ptr)
  br i1 %659, label %665, label %660

660:                                              ; preds = %655
  %661 = load ptr, ptr %5, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %661, i32 0, i32 0
  %663 = load ptr, ptr %662, align 8, !tbaa !16
  %664 = icmp eq ptr %663, inttoptr (i64 1073874104 to ptr)
  br label %665

665:                                              ; preds = %660, %655, %650, %645, %640, %635, %630, %625, %620, %615, %610, %605, %600, %595, %590, %585
  %666 = phi i1 [ true, %655 ], [ true, %650 ], [ true, %645 ], [ true, %640 ], [ true, %635 ], [ true, %630 ], [ true, %625 ], [ true, %620 ], [ true, %615 ], [ true, %610 ], [ true, %605 ], [ true, %600 ], [ true, %595 ], [ true, %590 ], [ true, %585 ], [ %664, %660 ]
  %667 = zext i1 %666 to i32
  %668 = icmp ne i32 %667, 0
  br i1 %668, label %669, label %676

669:                                              ; preds = %665
  %670 = load ptr, ptr %5, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %670, i32 0, i32 13
  %672 = load i32, ptr %671, align 8, !tbaa !19
  %673 = and i32 %672, 31
  %674 = shl i32 48, %673
  %675 = load ptr, ptr %12, align 8, !tbaa !5
  store volatile i32 %674, ptr %675, align 4, !tbaa !9
  br label %683

676:                                              ; preds = %665
  %677 = load ptr, ptr %5, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %677, i32 0, i32 13
  %679 = load i32, ptr %678, align 8, !tbaa !19
  %680 = and i32 %679, 31
  %681 = shl i32 2, %680
  %682 = load ptr, ptr %12, align 8, !tbaa !5
  store volatile i32 %681, ptr %682, align 4, !tbaa !9
  br label %683

683:                                              ; preds = %676, %669
  %684 = load ptr, ptr %5, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %684, i32 0, i32 3
  store volatile i32 1, ptr %685, align 4, !tbaa !11
  br label %686

686:                                              ; preds = %683
  %687 = load ptr, ptr %5, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %687, i32 0, i32 2
  store i32 0, ptr %688, align 8, !tbaa !15
  br label %689

689:                                              ; preds = %686
  br label %690

690:                                              ; preds = %689
  br label %790

691:                                              ; preds = %582
  %692 = load ptr, ptr %5, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %692, i32 0, i32 0
  %694 = load ptr, ptr %693, align 8, !tbaa !16
  %695 = icmp eq ptr %694, inttoptr (i64 1073872912 to ptr)
  br i1 %695, label %771, label %696

696:                                              ; preds = %691
  %697 = load ptr, ptr %5, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %697, i32 0, i32 0
  %699 = load ptr, ptr %698, align 8, !tbaa !16
  %700 = icmp eq ptr %699, inttoptr (i64 1073872936 to ptr)
  br i1 %700, label %771, label %701

701:                                              ; preds = %696
  %702 = load ptr, ptr %5, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %702, i32 0, i32 0
  %704 = load ptr, ptr %703, align 8, !tbaa !16
  %705 = icmp eq ptr %704, inttoptr (i64 1073872960 to ptr)
  br i1 %705, label %771, label %706

706:                                              ; preds = %701
  %707 = load ptr, ptr %5, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %707, i32 0, i32 0
  %709 = load ptr, ptr %708, align 8, !tbaa !16
  %710 = icmp eq ptr %709, inttoptr (i64 1073872984 to ptr)
  br i1 %710, label %771, label %711

711:                                              ; preds = %706
  %712 = load ptr, ptr %5, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %712, i32 0, i32 0
  %714 = load ptr, ptr %713, align 8, !tbaa !16
  %715 = icmp eq ptr %714, inttoptr (i64 1073873008 to ptr)
  br i1 %715, label %771, label %716

716:                                              ; preds = %711
  %717 = load ptr, ptr %5, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %717, i32 0, i32 0
  %719 = load ptr, ptr %718, align 8, !tbaa !16
  %720 = icmp eq ptr %719, inttoptr (i64 1073873032 to ptr)
  br i1 %720, label %771, label %721

721:                                              ; preds = %716
  %722 = load ptr, ptr %5, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %722, i32 0, i32 0
  %724 = load ptr, ptr %723, align 8, !tbaa !16
  %725 = icmp eq ptr %724, inttoptr (i64 1073873056 to ptr)
  br i1 %725, label %771, label %726

726:                                              ; preds = %721
  %727 = load ptr, ptr %5, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %727, i32 0, i32 0
  %729 = load ptr, ptr %728, align 8, !tbaa !16
  %730 = icmp eq ptr %729, inttoptr (i64 1073873080 to ptr)
  br i1 %730, label %771, label %731

731:                                              ; preds = %726
  %732 = load ptr, ptr %5, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %732, i32 0, i32 0
  %734 = load ptr, ptr %733, align 8, !tbaa !16
  %735 = icmp eq ptr %734, inttoptr (i64 1073873936 to ptr)
  br i1 %735, label %771, label %736

736:                                              ; preds = %731
  %737 = load ptr, ptr %5, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %737, i32 0, i32 0
  %739 = load ptr, ptr %738, align 8, !tbaa !16
  %740 = icmp eq ptr %739, inttoptr (i64 1073873960 to ptr)
  br i1 %740, label %771, label %741

741:                                              ; preds = %736
  %742 = load ptr, ptr %5, align 8, !tbaa !5
  %743 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %742, i32 0, i32 0
  %744 = load ptr, ptr %743, align 8, !tbaa !16
  %745 = icmp eq ptr %744, inttoptr (i64 1073873984 to ptr)
  br i1 %745, label %771, label %746

746:                                              ; preds = %741
  %747 = load ptr, ptr %5, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %747, i32 0, i32 0
  %749 = load ptr, ptr %748, align 8, !tbaa !16
  %750 = icmp eq ptr %749, inttoptr (i64 1073874008 to ptr)
  br i1 %750, label %771, label %751

751:                                              ; preds = %746
  %752 = load ptr, ptr %5, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %752, i32 0, i32 0
  %754 = load ptr, ptr %753, align 8, !tbaa !16
  %755 = icmp eq ptr %754, inttoptr (i64 1073874032 to ptr)
  br i1 %755, label %771, label %756

756:                                              ; preds = %751
  %757 = load ptr, ptr %5, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %757, i32 0, i32 0
  %759 = load ptr, ptr %758, align 8, !tbaa !16
  %760 = icmp eq ptr %759, inttoptr (i64 1073874056 to ptr)
  br i1 %760, label %771, label %761

761:                                              ; preds = %756
  %762 = load ptr, ptr %5, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %762, i32 0, i32 0
  %764 = load ptr, ptr %763, align 8, !tbaa !16
  %765 = icmp eq ptr %764, inttoptr (i64 1073874080 to ptr)
  br i1 %765, label %771, label %766

766:                                              ; preds = %761
  %767 = load ptr, ptr %5, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %767, i32 0, i32 0
  %769 = load ptr, ptr %768, align 8, !tbaa !16
  %770 = icmp eq ptr %769, inttoptr (i64 1073874104 to ptr)
  br label %771

771:                                              ; preds = %766, %761, %756, %751, %746, %741, %736, %731, %726, %721, %716, %711, %706, %701, %696, %691
  %772 = phi i1 [ true, %761 ], [ true, %756 ], [ true, %751 ], [ true, %746 ], [ true, %741 ], [ true, %736 ], [ true, %731 ], [ true, %726 ], [ true, %721 ], [ true, %716 ], [ true, %711 ], [ true, %706 ], [ true, %701 ], [ true, %696 ], [ true, %691 ], [ %770, %766 ]
  %773 = zext i1 %772 to i32
  %774 = icmp ne i32 %773, 0
  br i1 %774, label %775, label %782

775:                                              ; preds = %771
  %776 = load ptr, ptr %5, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %776, i32 0, i32 13
  %778 = load i32, ptr %777, align 8, !tbaa !19
  %779 = and i32 %778, 31
  %780 = shl i32 16, %779
  %781 = load ptr, ptr %12, align 8, !tbaa !5
  store volatile i32 %780, ptr %781, align 4, !tbaa !9
  br label %789

782:                                              ; preds = %771
  %783 = load ptr, ptr %5, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.__DMA_HandleTypeDef, ptr %783, i32 0, i32 13
  %785 = load i32, ptr %784, align 8, !tbaa !19
  %786 = and i32 %785, 31
  %787 = shl i32 4, %786
  %788 = load ptr, ptr %12, align 8, !tbaa !5
  store volatile i32 %787, ptr %788, align 4, !tbaa !9
  br label %789

789:                                              ; preds = %782, %775
  br label %790

790:                                              ; preds = %789, %690
  %791 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %791, ptr %4, align 4
  store i32 1, ptr %13, align 4
  br label %792

792:                                              ; preds = %790, %398, %384, %355, %164, %124, %30, %17
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  %793 = load i32, ptr %4, align 4
  ret i32 %793
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 60}
!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 = !{!12, !10, i64 120}
!15 = !{!12, !10, i64 56}
!16 = !{!12, !6, i64 0}
!17 = !{!18, !10, i64 0}
!18 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!19 = !{!12, !10, i64 128}
!20 = !{!12, !10, i64 124}
!21 = !{!22, !10, i64 0}
!22 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16}
!23 = !{!12, !6, i64 160}
!24 = !{!12, !6, i64 168}
!25 = !{!26, !10, i64 0}
!26 = !{!"", !10, i64 0, !10, i64 4}
!27 = !{!12, !10, i64 176}
!28 = !{!26, !10, i64 4}
!29 = !{!12, !6, i64 144}
!30 = !{!12, !10, i64 152}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

declare i32 @HAL_GetTick() local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @HAL_DMA_PollForTransfer(ptr noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #1 {
  %4 = tail call i32 @HAL_GetTick() #2
  %5 = icmp eq ptr %0, null
  br i1 %5, label %137, label %6

6:                                                ; preds = %3
  %7 = getelementptr inbounds i8, ptr %0, i64 60
  %8 = load volatile i32, ptr %7, align 4, !tbaa !5
  %.not = icmp eq i32 %8, 2
  br i1 %.not, label %12, label %9

9:                                                ; preds = %6
  %10 = getelementptr inbounds i8, ptr %0, i64 120
  store volatile i32 128, ptr %10, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %11, align 8, !tbaa !13
  br label %137

12:                                               ; preds = %6
  %13 = load ptr, ptr %0, align 8, !tbaa !14
  %magicptr = ptrtoint ptr %13 to i64
  switch i64 %magicptr, label %24 [
    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
  ]

.critedge:                                        ; preds = %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12
  %14 = load volatile i32, ptr %13, align 4, !tbaa !15
  %15 = and i32 %14, 256
  %.not173 = icmp eq i32 %15, 0
  br i1 %.not173, label %18, label %16

16:                                               ; preds = %.critedge
  %17 = getelementptr inbounds i8, ptr %0, i64 120
  store volatile i32 256, ptr %17, align 8, !tbaa !12
  br label %137

18:                                               ; preds = %.critedge
  %19 = icmp eq i32 %1, 0
  %20 = getelementptr inbounds i8, ptr %0, i64 128
  %21 = load i32, ptr %20, align 8, !tbaa !17
  %22 = and i32 %21, 31
  %. = select i1 %19, i32 32, i32 16
  %23 = shl i32 %., %22
  br label %35

24:                                               ; preds = %12
  %25 = load volatile i32, ptr %13, align 4, !tbaa !18
  %26 = and i32 %25, 32
  %.not172 = icmp eq i32 %26, 0
  br i1 %.not172, label %29, label %27

27:                                               ; preds = %24
  %28 = getelementptr inbounds i8, ptr %0, i64 120
  store volatile i32 256, ptr %28, align 8, !tbaa !12
  br label %137

29:                                               ; preds = %24
  %30 = icmp eq i32 %1, 0
  %31 = getelementptr inbounds i8, ptr %0, i64 128
  %32 = load i32, ptr %31, align 8, !tbaa !17
  %33 = and i32 %32, 31
  %.255 = select i1 %30, i32 2, i32 4
  %34 = shl i32 %.255, %33
  br label %35

35:                                               ; preds = %29, %18
  %.sink246 = phi i64 [ 4, %29 ], [ 8, %18 ]
  %.2 = phi i32 [ %34, %29 ], [ %23, %18 ]
  %36 = getelementptr inbounds i8, ptr %0, i64 124
  %37 = load i32, ptr %36, align 4, !tbaa !20
  %38 = zext i32 %37 to i64
  %39 = inttoptr i64 %38 to ptr
  %40 = getelementptr inbounds i8, ptr %39, i64 %.sink246
  %41 = load volatile i32, ptr %39, align 4, !tbaa !21
  %42 = and i32 %41, %.2
  %43 = icmp eq i32 %42, 0
  br i1 %43, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %35
  %44 = getelementptr inbounds i8, ptr %0, i64 128
  %45 = getelementptr inbounds i8, ptr %0, i64 120
  %.not178 = icmp eq i32 %2, -1
  %46 = icmp eq i32 %2, 0
  %47 = getelementptr inbounds i8, ptr %0, i64 160
  %48 = getelementptr inbounds i8, ptr %0, i64 168
  %49 = getelementptr inbounds i8, ptr %0, i64 176
  %50 = getelementptr inbounds i8, ptr %0, i64 144
  %51 = getelementptr inbounds i8, ptr %0, i64 152
  br label %52

52:                                               ; preds = %.lr.ph, %114
  %53 = phi ptr [ %13, %.lr.ph ], [ %94, %114 ]
  %magicptr229 = ptrtoint ptr %53 to i64
  switch i64 %magicptr229, label %77 [
    i64 1073872912, label %.critedge197
    i64 1073872936, label %.critedge197
    i64 1073872960, label %.critedge197
    i64 1073872984, label %.critedge197
    i64 1073873008, label %.critedge197
    i64 1073873032, label %.critedge197
    i64 1073873056, label %.critedge197
    i64 1073873080, label %.critedge197
    i64 1073873936, label %.critedge197
    i64 1073873960, label %.critedge197
    i64 1073873984, label %.critedge197
    i64 1073874008, label %.critedge197
    i64 1073874032, label %.critedge197
    i64 1073874056, label %.critedge197
    i64 1073874080, label %.critedge197
    i64 1073874104, label %.critedge197
  ]

.critedge197:                                     ; preds = %52, %52, %52, %52, %52, %52, %52, %52, %52, %52, %52, %52, %52, %52, %52, %52
  %54 = load volatile i32, ptr %39, align 4, !tbaa !21
  %55 = load i32, ptr %44, align 8, !tbaa !17
  %56 = and i32 %55, 31
  %57 = shl nuw i32 1, %56
  %58 = and i32 %57, %54
  %.not175 = icmp eq i32 %58, 0
  br i1 %.not175, label %62, label %59

59:                                               ; preds = %.critedge197
  %60 = load volatile i32, ptr %45, align 8, !tbaa !12
  %61 = or i32 %60, 2
  store volatile i32 %61, ptr %45, align 8, !tbaa !12
  store volatile i32 %57, ptr %40, align 4, !tbaa !21
  %.pre = load i32, ptr %44, align 8, !tbaa !17
  %.pre239 = and i32 %.pre, 31
  br label %62

62:                                               ; preds = %59, %.critedge197
  %.pre-phi = phi i32 [ %.pre239, %59 ], [ %56, %.critedge197 ]
  %63 = load volatile i32, ptr %39, align 4, !tbaa !21
  %64 = shl i32 4, %.pre-phi
  %65 = and i32 %64, %63
  %.not176 = icmp eq i32 %65, 0
  br i1 %.not176, label %69, label %66

66:                                               ; preds = %62
  %67 = load volatile i32, ptr %45, align 8, !tbaa !12
  %68 = or i32 %67, 4
  store volatile i32 %68, ptr %45, align 8, !tbaa !12
  store volatile i32 %64, ptr %40, align 4, !tbaa !21
  %.pre235 = load i32, ptr %44, align 8, !tbaa !17
  %.pre240 = and i32 %.pre235, 31
  br label %69

69:                                               ; preds = %66, %62
  %.pre-phi241 = phi i32 [ %.pre240, %66 ], [ %.pre-phi, %62 ]
  %70 = load volatile i32, ptr %39, align 4, !tbaa !21
  %71 = shl i32 8, %.pre-phi241
  %72 = and i32 %71, %70
  %.not177 = icmp eq i32 %72, 0
  br i1 %.not177, label %86, label %73

73:                                               ; preds = %69
  %74 = load volatile i32, ptr %45, align 8, !tbaa !12
  %75 = or i32 %74, 1
  store volatile i32 %75, ptr %45, align 8, !tbaa !12
  store volatile i32 %71, ptr %40, align 4, !tbaa !21
  store volatile i32 1, ptr %7, align 4, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %76, align 8, !tbaa !13
  br label %137

77:                                               ; preds = %52
  %78 = load volatile i32, ptr %39, align 4, !tbaa !21
  %79 = load i32, ptr %44, align 8, !tbaa !17
  %80 = and i32 %79, 31
  %81 = shl i32 8, %80
  %82 = and i32 %81, %78
  %.not174 = icmp eq i32 %82, 0
  br i1 %.not174, label %86, label %83

83:                                               ; preds = %77
  %84 = shl nuw i32 1, %80
  store volatile i32 %84, ptr %39, align 4, !tbaa !21
  store volatile i32 1, ptr %45, align 8, !tbaa !12
  store volatile i32 1, ptr %7, align 4, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %85, align 8, !tbaa !13
  br label %137

86:                                               ; preds = %77, %69
  br i1 %.not178, label %93, label %87

87:                                               ; preds = %86
  %88 = tail call i32 @HAL_GetTick() #2
  %89 = sub i32 %88, %4
  %90 = icmp ugt i32 %89, %2
  %or.cond = or i1 %46, %90
  br i1 %or.cond, label %91, label %._crit_edge236

._crit_edge236:                                   ; preds = %87
  %.pre237 = load ptr, ptr %0, align 8, !tbaa !14
  %.pre238 = ptrtoint ptr %.pre237 to i64
  br label %93

91:                                               ; preds = %87
  store volatile i32 32, ptr %45, align 8, !tbaa !12
  %92 = tail call i32 @HAL_DMA_Abort(ptr noundef nonnull %0)
  br label %137

93:                                               ; preds = %._crit_edge236, %86
  %magicptr230.pre-phi = phi i64 [ %.pre238, %._crit_edge236 ], [ %magicptr229, %86 ]
  %94 = phi ptr [ %.pre237, %._crit_edge236 ], [ %53, %86 ]
  switch i64 %magicptr230.pre-phi, label %114 [
    i64 1073872912, label %.critedge210
    i64 1073872936, label %.critedge210
    i64 1073872960, label %.critedge210
    i64 1073872984, label %.critedge210
    i64 1073873008, label %.critedge210
    i64 1073873032, label %.critedge210
    i64 1073873056, label %.critedge210
    i64 1073873080, label %.critedge210
    i64 1073873936, label %.critedge210
    i64 1073873960, label %.critedge210
    i64 1073873984, label %.critedge210
    i64 1073874008, label %.critedge210
    i64 1073874032, label %.critedge210
    i64 1073874056, label %.critedge210
    i64 1073874080, label %.critedge210
    i64 1073874104, label %.critedge210
    i64 1476547592, label %.critedge210
    i64 1476547612, label %.critedge210
    i64 1476547632, label %.critedge210
    i64 1476547652, label %.critedge210
    i64 1476547672, label %.critedge210
    i64 1476547692, label %.critedge210
    i64 1476547712, label %.critedge210
    i64 1476547732, label %.critedge210
  ]

.critedge210:                                     ; preds = %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93, %93
  %95 = load ptr, ptr %47, align 8, !tbaa !22
  %.not179 = icmp eq ptr %95, null
  br i1 %.not179, label %105, label %96

96:                                               ; preds = %.critedge210
  %97 = load ptr, ptr %48, align 8, !tbaa !23
  %98 = load volatile i32, ptr %97, align 4, !tbaa !24
  %99 = load i32, ptr %49, align 8, !tbaa !26
  %100 = and i32 %99, %98
  %.not180 = icmp eq i32 %100, 0
  br i1 %.not180, label %105, label %101

101:                                              ; preds = %96
  %102 = getelementptr inbounds i8, ptr %97, i64 4
  store volatile i32 %99, ptr %102, align 4, !tbaa !27
  %103 = load volatile i32, ptr %45, align 8, !tbaa !12
  %104 = or i32 %103, 1024
  store volatile i32 %104, ptr %45, align 8, !tbaa !12
  br label %105

105:                                              ; preds = %96, %101, %.critedge210
  %106 = load ptr, ptr %50, align 8, !tbaa !28
  %107 = load volatile i32, ptr %106, align 4, !tbaa !24
  %108 = load i32, ptr %51, align 8, !tbaa !29
  %109 = and i32 %108, %107
  %.not181 = icmp eq i32 %109, 0
  br i1 %.not181, label %114, label %110

110:                                              ; preds = %105
  %111 = getelementptr inbounds i8, ptr %106, i64 4
  store volatile i32 %108, ptr %111, align 4, !tbaa !27
  %112 = load volatile i32, ptr %45, align 8, !tbaa !12
  %113 = or i32 %112, 512
  store volatile i32 %113, ptr %45, align 8, !tbaa !12
  br label %114

114:                                              ; preds = %93, %105, %110
  %115 = load volatile i32, ptr %39, align 4, !tbaa !21
  %116 = and i32 %115, %.2
  %117 = icmp eq i32 %116, 0
  br i1 %117, label %52, label %._crit_edge, !llvm.loop !30

._crit_edge:                                      ; preds = %114, %35
  %118 = phi ptr [ %13, %35 ], [ %94, %114 ]
  %119 = icmp eq i32 %1, 0
  %magicptr231 = ptrtoint ptr %118 to i64
  br i1 %119, label %120, label %127

120:                                              ; preds = %._crit_edge
  switch i64 %magicptr231, label %121 [
    i64 1073872912, label %.critedge219
    i64 1073872936, label %.critedge219
    i64 1073872960, label %.critedge219
    i64 1073872984, label %.critedge219
    i64 1073873008, label %.critedge219
    i64 1073873032, label %.critedge219
    i64 1073873056, label %.critedge219
    i64 1073873080, label %.critedge219
    i64 1073873936, label %.critedge219
    i64 1073873960, label %.critedge219
    i64 1073873984, label %.critedge219
    i64 1073874008, label %.critedge219
    i64 1073874032, label %.critedge219
    i64 1073874056, label %.critedge219
    i64 1073874080, label %.critedge219
    i64 1073874104, label %.critedge219
  ]

121:                                              ; preds = %120
  br label %.critedge219

.critedge219:                                     ; preds = %120, %120, %120, %120, %120, %120, %120, %120, %120, %120, %120, %120, %120, %120, %120, %120, %121
  %.sink251 = phi i32 [ 2, %121 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ], [ 48, %120 ]
  %122 = getelementptr inbounds i8, ptr %0, i64 128
  %123 = load i32, ptr %122, align 8, !tbaa !17
  %124 = and i32 %123, 31
  %125 = shl i32 %.sink251, %124
  store volatile i32 %125, ptr %40, align 4, !tbaa !21
  store volatile i32 1, ptr %7, align 4, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 0, ptr %126, align 8, !tbaa !13
  br label %137

127:                                              ; preds = %._crit_edge
  switch i64 %magicptr231, label %132 [
    i64 1073872912, label %.critedge228
    i64 1073872936, label %.critedge228
    i64 1073872960, label %.critedge228
    i64 1073872984, label %.critedge228
    i64 1073873008, label %.critedge228
    i64 1073873032, label %.critedge228
    i64 1073873056, label %.critedge228
    i64 1073873080, label %.critedge228
    i64 1073873936, label %.critedge228
    i64 1073873960, label %.critedge228
    i64 1073873984, label %.critedge228
    i64 1073874008, label %.critedge228
    i64 1073874032, label %.critedge228
    i64 1073874056, label %.critedge228
    i64 1073874080, label %.critedge228
    i64 1073874104, label %.critedge228
  ]

.critedge228:                                     ; preds = %127, %127, %127, %127, %127, %127, %127, %127, %127, %127, %127, %127, %127, %127, %127, %127
  %128 = getelementptr inbounds i8, ptr %0, i64 128
  %129 = load i32, ptr %128, align 8, !tbaa !17
  %130 = and i32 %129, 31
  %131 = shl i32 16, %130
  store volatile i32 %131, ptr %40, align 4, !tbaa !21
  br label %137

132:                                              ; preds = %127
  %133 = getelementptr inbounds i8, ptr %0, i64 128
  %134 = load i32, ptr %133, align 8, !tbaa !17
  %135 = and i32 %134, 31
  %136 = shl i32 4, %135
  store volatile i32 %136, ptr %40, align 4, !tbaa !21
  br label %137

137:                                              ; preds = %.critedge219, %132, %.critedge228, %3, %91, %83, %73, %27, %16, %9
  %.0163 = phi i32 [ 1, %9 ], [ 1, %16 ], [ 1, %73 ], [ 1, %91 ], [ 1, %83 ], [ 1, %27 ], [ 1, %3 ], [ 0, %.critedge228 ], [ 0, %132 ], [ 0, %.critedge219 ]
  ret i32 %.0163
}

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !11, i64 60}
!6 = !{!"__DMA_HandleTypeDef", !7, i64 0, !10, i64 8, !11, i64 56, !11, i64 60, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !11, i64 120, !11, i64 124, !11, i64 128, !7, i64 136, !7, i64 144, !11, i64 152, !7, i64 160, !7, i64 168, !11, i64 176}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !11, i64 120}
!13 = !{!6, !11, i64 56}
!14 = !{!6, !7, i64 0}
!15 = !{!16, !11, i64 0}
!16 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20}
!17 = !{!6, !11, i64 128}
!18 = !{!19, !11, i64 0}
!19 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16}
!20 = !{!6, !11, i64 124}
!21 = !{!11, !11, i64 0}
!22 = !{!6, !7, i64 160}
!23 = !{!6, !7, i64 168}
!24 = !{!25, !11, i64 0}
!25 = !{!"", !11, i64 0, !11, i64 4}
!26 = !{!6, !11, i64 176}
!27 = !{!25, !11, i64 4}
!28 = !{!6, !7, i64 144}
!29 = !{!6, !11, i64 152}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}


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