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

; 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.ADC_HandleTypeDef = type { ptr, %struct.ADC_InitTypeDef, ptr, i32, i32, i32, %struct.ADC_InjectionConfigTypeDef }
%struct.ADC_InitTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.ADC_OversamplingTypeDef }
%struct.ADC_OversamplingTypeDef = type { i32, i32, i32, i32 }
%struct.ADC_InjectionConfigTypeDef = type { i32, i32 }
%struct.ADC_InjectionConfTypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.ADC_InjOversamplingTypeDef }
%struct.ADC_InjOversamplingTypeDef = type { i32, i32 }
%struct.ADC_TypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], i32, i32, i32, i32, [4 x i32], i32, i32, i32, i32, [4 x i32], i32, i32, i32, i32, i32, i32, 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: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_IsEnabled(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_REG_IsConversionOngoing(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_INJ_IsConversionOngoing(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @HAL_ADCEx_InjectedConfigChannel(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %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 i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  store i32 0, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store volatile i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 0, ptr %12, align 4, !tbaa !9
  %14 = load ptr, ptr %4, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %14, i32 0, i32 1
  %16 = getelementptr inbounds %struct.ADC_InitTypeDef, ptr %15, i32 0, i32 2
  %17 = load i32, ptr %16, align 8, !tbaa !11
  %18 = zext i32 %17 to i64
  %19 = icmp ne i64 %18, 0
  br i1 %19, label %20, label %21

20:                                               ; preds = %2
  br label %21

21:                                               ; preds = %20, %2
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %22, i32 0, i32 1
  %24 = getelementptr inbounds %struct.ADC_InitTypeDef, ptr %23, i32 0, i32 14
  %25 = load i32, ptr %24, align 8, !tbaa !16
  %26 = icmp eq i32 %25, 1
  br i1 %26, label %27, label %28

27:                                               ; preds = %21
  br label %29

28:                                               ; preds = %21
  br label %29

29:                                               ; preds = %28, %27
  %30 = load ptr, ptr %5, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %30, i32 0, i32 3
  %32 = load i32, ptr %31, align 4, !tbaa !17
  %33 = zext i32 %32 to i64
  %34 = icmp ne i64 %33, 1207894016
  br i1 %34, label %35, label %36

35:                                               ; preds = %29
  br label %55

36:                                               ; preds = %29
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %37, i32 0, i32 0
  %39 = load ptr, ptr %38, align 8, !tbaa !19
  %40 = icmp eq ptr %39, inttoptr (i64 1073881088 to ptr)
  br i1 %40, label %41, label %42

41:                                               ; preds = %36
  br label %42

42:                                               ; preds = %41, %36
  %43 = load ptr, ptr %4, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %43, i32 0, i32 0
  %45 = load ptr, ptr %44, align 8, !tbaa !19
  %46 = icmp eq ptr %45, inttoptr (i64 1073881344 to ptr)
  br i1 %46, label %47, label %48

47:                                               ; preds = %42
  br label %48

48:                                               ; preds = %47, %42
  %49 = load ptr, ptr %4, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %49, i32 0, i32 0
  %51 = load ptr, ptr %50, align 8, !tbaa !19
  %52 = icmp eq ptr %51, inttoptr (i64 1476550656 to ptr)
  br i1 %52, label %53, label %54

53:                                               ; preds = %48
  br label %54

54:                                               ; preds = %53, %48
  br label %55

55:                                               ; preds = %54, %35
  br label %56

56:                                               ; preds = %55
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %57, i32 0, i32 3
  %59 = load i32, ptr %58, align 8, !tbaa !20
  %60 = icmp eq i32 %59, 1
  br i1 %60, label %61, label %62

61:                                               ; preds = %56
  store i32 2, ptr %3, align 4
  store i32 1, ptr %13, align 4
  br label %1216

62:                                               ; preds = %56
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %63, i32 0, i32 3
  store i32 1, ptr %64, align 8, !tbaa !20
  br label %65

65:                                               ; preds = %62
  br label %66

66:                                               ; preds = %65
  br label %67

67:                                               ; preds = %66
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %68, i32 0, i32 1
  %70 = getelementptr inbounds %struct.ADC_InitTypeDef, ptr %69, i32 0, i32 2
  %71 = load i32, ptr %70, align 8, !tbaa !11
  %72 = zext i32 %71 to i64
  %73 = icmp eq i64 %72, 0
  br i1 %73, label %79, label %74

74:                                               ; preds = %67
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %75, i32 0, i32 8
  %77 = load i32, ptr %76, align 4, !tbaa !21
  %78 = icmp eq i32 %77, 1
  br i1 %78, label %79, label %141

79:                                               ; preds = %74, %67
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 4, !tbaa !22
  %83 = zext i32 %82 to i64
  %84 = icmp eq i64 %83, 9
  br i1 %84, label %85, label %140

85:                                               ; preds = %79
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %86, i32 0, i32 12
  %88 = load i32, ptr %87, align 4, !tbaa !23
  %89 = zext i32 %88 to i64
  %90 = icmp ne i64 %89, 0
  br i1 %90, label %91, label %111

91:                                               ; preds = %85
  %92 = load ptr, ptr %5, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %92, i32 0, i32 0
  %94 = load i32, ptr %93, align 4, !tbaa !24
  %95 = zext i32 %94 to i64
  %96 = and i64 %95, 2080374784
  %97 = lshr i64 %96, 26
  %98 = shl i64 %97, 9
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %99, i32 0, i32 12
  %101 = load i32, ptr %100, align 4, !tbaa !23
  %102 = zext i32 %101 to i64
  %103 = and i64 %102, 124
  %104 = or i64 %98, %103
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %105, i32 0, i32 13
  %107 = load i32, ptr %106, align 4, !tbaa !25
  %108 = zext i32 %107 to i64
  %109 = or i64 %104, %108
  %110 = trunc i64 %109 to i32
  store i32 %110, ptr %12, align 4, !tbaa !9
  br label %120

111:                                              ; preds = %85
  %112 = load ptr, ptr %5, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %112, i32 0, i32 0
  %114 = load i32, ptr %113, align 4, !tbaa !24
  %115 = zext i32 %114 to i64
  %116 = and i64 %115, 2080374784
  %117 = lshr i64 %116, 26
  %118 = shl i64 %117, 9
  %119 = trunc i64 %118 to i32
  store i32 %119, ptr %12, align 4, !tbaa !9
  br label %120

120:                                              ; preds = %111, %91
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %121, i32 0, i32 0
  %123 = load ptr, ptr %122, align 8, !tbaa !19
  %124 = getelementptr inbounds %struct.ADC_TypeDef, ptr %123, i32 0, i32 19
  %125 = load volatile i32, ptr %124, align 4, !tbaa !26
  %126 = zext i32 %125 to i64
  %127 = and i64 %126, -4226793472
  %128 = load i32, ptr %12, align 4, !tbaa !9
  %129 = zext i32 %128 to i64
  %130 = or i64 %127, %129
  %131 = trunc i64 %130 to i32
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %132, i32 0, i32 0
  %134 = load ptr, ptr %133, align 8, !tbaa !19
  %135 = getelementptr inbounds %struct.ADC_TypeDef, ptr %134, i32 0, i32 19
  store volatile i32 %131, ptr %135, align 4, !tbaa !26
  %136 = load i32, ptr %12, align 4, !tbaa !9
  %137 = load ptr, ptr %4, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %137, i32 0, i32 6
  %139 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %138, i32 0, i32 0
  store i32 %136, ptr %139, align 4, !tbaa !28
  br label %140

140:                                              ; preds = %120, %79
  br label %250

141:                                              ; preds = %74
  %142 = load ptr, ptr %4, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %142, i32 0, i32 6
  %144 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %143, i32 0, i32 1
  %145 = load i32, ptr %144, align 4, !tbaa !29
  %146 = icmp eq i32 %145, 0
  br i1 %146, label %147, label %186

147:                                              ; preds = %141
  %148 = load ptr, ptr %5, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %148, i32 0, i32 8
  %150 = load i32, ptr %149, align 4, !tbaa !21
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %151, i32 0, i32 6
  %153 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %152, i32 0, i32 1
  store i32 %150, ptr %153, align 4, !tbaa !29
  %154 = load ptr, ptr %4, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %154, i32 0, i32 6
  %156 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %155, i32 0, i32 0
  store i32 0, ptr %156, align 4, !tbaa !28
  %157 = load ptr, ptr %5, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %157, i32 0, i32 12
  %159 = load i32, ptr %158, align 4, !tbaa !23
  %160 = zext i32 %159 to i64
  %161 = icmp ne i64 %160, 0
  br i1 %161, label %162, label %180

162:                                              ; preds = %147
  %163 = load ptr, ptr %5, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %163, i32 0, i32 8
  %165 = load i32, ptr %164, align 4, !tbaa !21
  %166 = sub i32 %165, 1
  %167 = zext i32 %166 to i64
  %168 = load ptr, ptr %5, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %168, i32 0, i32 12
  %170 = load i32, ptr %169, align 4, !tbaa !23
  %171 = zext i32 %170 to i64
  %172 = and i64 %171, 124
  %173 = or i64 %167, %172
  %174 = load ptr, ptr %5, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %174, i32 0, i32 13
  %176 = load i32, ptr %175, align 4, !tbaa !25
  %177 = zext i32 %176 to i64
  %178 = or i64 %173, %177
  %179 = trunc i64 %178 to i32
  store i32 %179, ptr %12, align 4, !tbaa !9
  br label %185

180:                                              ; preds = %147
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %181, i32 0, i32 8
  %183 = load i32, ptr %182, align 4, !tbaa !21
  %184 = sub i32 %183, 1
  store i32 %184, ptr %12, align 4, !tbaa !9
  br label %185

185:                                              ; preds = %180, %162
  br label %186

186:                                              ; preds = %185, %141
  %187 = load ptr, ptr %5, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %187, i32 0, i32 1
  %189 = load i32, ptr %188, align 4, !tbaa !22
  %190 = zext i32 %189 to i64
  %191 = and i64 %190, 31
  %192 = shl i64 0, %191
  %193 = xor i64 %192, -1
  %194 = load i32, ptr %12, align 4, !tbaa !9
  %195 = zext i32 %194 to i64
  %196 = and i64 %195, %193
  %197 = trunc i64 %196 to i32
  store i32 %197, ptr %12, align 4, !tbaa !9
  %198 = load ptr, ptr %5, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %198, i32 0, i32 0
  %200 = load i32, ptr %199, align 4, !tbaa !24
  %201 = zext i32 %200 to i64
  %202 = and i64 %201, 2080374784
  %203 = lshr i64 %202, 26
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %204, i32 0, i32 1
  %206 = load i32, ptr %205, align 4, !tbaa !22
  %207 = zext i32 %206 to i64
  %208 = and i64 %207, 31
  %209 = shl i64 %203, %208
  %210 = load i32, ptr %12, align 4, !tbaa !9
  %211 = zext i32 %210 to i64
  %212 = or i64 %211, %209
  %213 = trunc i64 %212 to i32
  store i32 %213, ptr %12, align 4, !tbaa !9
  %214 = load ptr, ptr %4, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %214, i32 0, i32 6
  %216 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %215, i32 0, i32 1
  %217 = load i32, ptr %216, align 4, !tbaa !29
  %218 = add i32 %217, -1
  store i32 %218, ptr %216, align 4, !tbaa !29
  %219 = load i32, ptr %12, align 4, !tbaa !9
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %220, i32 0, i32 6
  %222 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %221, i32 0, i32 0
  %223 = load i32, ptr %222, align 4, !tbaa !28
  %224 = or i32 %223, %219
  store i32 %224, ptr %222, align 4, !tbaa !28
  %225 = load ptr, ptr %4, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %225, i32 0, i32 6
  %227 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %226, i32 0, i32 1
  %228 = load i32, ptr %227, align 4, !tbaa !29
  %229 = icmp eq i32 %228, 0
  br i1 %229, label %230, label %249

230:                                              ; preds = %186
  %231 = load ptr, ptr %4, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %231, i32 0, i32 0
  %233 = load ptr, ptr %232, align 8, !tbaa !19
  %234 = getelementptr inbounds %struct.ADC_TypeDef, ptr %233, i32 0, i32 19
  %235 = load volatile i32, ptr %234, align 4, !tbaa !26
  %236 = zext i32 %235 to i64
  %237 = and i64 %236, -4226793472
  %238 = load ptr, ptr %4, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %238, i32 0, i32 6
  %240 = getelementptr inbounds %struct.ADC_InjectionConfigTypeDef, ptr %239, i32 0, i32 0
  %241 = load i32, ptr %240, align 4, !tbaa !28
  %242 = zext i32 %241 to i64
  %243 = or i64 %237, %242
  %244 = trunc i64 %243 to i32
  %245 = load ptr, ptr %4, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %245, i32 0, i32 0
  %247 = load ptr, ptr %246, align 8, !tbaa !19
  %248 = getelementptr inbounds %struct.ADC_TypeDef, ptr %247, i32 0, i32 19
  store volatile i32 %244, ptr %248, align 4, !tbaa !26
  br label %249

249:                                              ; preds = %230, %186
  br label %250

250:                                              ; preds = %249, %140
  %251 = load ptr, ptr %4, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %251, i32 0, i32 0
  %253 = load ptr, ptr %252, align 8, !tbaa !19
  %254 = call i32 @LL_ADC_INJ_IsConversionOngoing(ptr noundef %253)
  %255 = zext i32 %254 to i64
  %256 = icmp eq i64 %255, 0
  br i1 %256, label %257, label %340

257:                                              ; preds = %250
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %258, i32 0, i32 0
  %260 = load i32, ptr %259, align 4, !tbaa !24
  %261 = zext i32 %260 to i64
  %262 = and i64 %261, 1048575
  %263 = icmp eq i64 %262, 0
  br i1 %263, label %264, label %271

264:                                              ; preds = %257
  %265 = load ptr, ptr %5, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %265, i32 0, i32 0
  %267 = load i32, ptr %266, align 4, !tbaa !24
  %268 = zext i32 %267 to i64
  %269 = and i64 %268, 2080374784
  %270 = lshr i64 %269, 26
  br label %280

271:                                              ; preds = %257
  %272 = load ptr, ptr %5, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %272, i32 0, i32 0
  %274 = load i32, ptr %273, align 4, !tbaa !24
  %275 = call i32 @__RBIT(i32 noundef %274)
  %276 = call i32 @llvm.ctlz.i32(i32 %275, i1 true)
  %277 = trunc i32 %276 to i8
  %278 = zext i8 %277 to i32
  %279 = zext i32 %278 to i64
  br label %280

280:                                              ; preds = %271, %264
  %281 = phi i64 [ %270, %264 ], [ %279, %271 ]
  %282 = and i64 %281, 31
  %283 = shl i64 1, %282
  %284 = load ptr, ptr %4, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %284, i32 0, i32 0
  %286 = load ptr, ptr %285, align 8, !tbaa !19
  %287 = getelementptr inbounds %struct.ADC_TypeDef, ptr %286, i32 0, i32 7
  %288 = load volatile i32, ptr %287, align 4, !tbaa !30
  %289 = zext i32 %288 to i64
  %290 = or i64 %289, %283
  %291 = trunc i64 %290 to i32
  store volatile i32 %291, ptr %287, align 4, !tbaa !30
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %292, i32 0, i32 10
  %294 = load i32, ptr %293, align 4, !tbaa !31
  %295 = icmp eq i32 %294, 0
  br i1 %295, label %296, label %320

296:                                              ; preds = %280
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %297, i32 0, i32 0
  %299 = load ptr, ptr %298, align 8, !tbaa !19
  %300 = getelementptr inbounds %struct.ADC_TypeDef, ptr %299, i32 0, i32 3
  %301 = load volatile i32, ptr %300, align 4, !tbaa !32
  %302 = zext i32 %301 to i64
  %303 = and i64 %302, -3145729
  %304 = load ptr, ptr %5, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %304, i32 0, i32 11
  %306 = load i32, ptr %305, align 4, !tbaa !33
  %307 = shl i32 %306, 21
  %308 = load ptr, ptr %5, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %308, i32 0, i32 9
  %310 = load i32, ptr %309, align 4, !tbaa !34
  %311 = shl i32 %310, 20
  %312 = or i32 %307, %311
  %313 = zext i32 %312 to i64
  %314 = or i64 %303, %313
  %315 = trunc i64 %314 to i32
  %316 = load ptr, ptr %4, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %316, i32 0, i32 0
  %318 = load ptr, ptr %317, align 8, !tbaa !19
  %319 = getelementptr inbounds %struct.ADC_TypeDef, ptr %318, i32 0, i32 3
  store volatile i32 %315, ptr %319, align 4, !tbaa !32
  br label %339

320:                                              ; preds = %280
  %321 = load ptr, ptr %4, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %321, i32 0, i32 0
  %323 = load ptr, ptr %322, align 8, !tbaa !19
  %324 = getelementptr inbounds %struct.ADC_TypeDef, ptr %323, i32 0, i32 3
  %325 = load volatile i32, ptr %324, align 4, !tbaa !32
  %326 = zext i32 %325 to i64
  %327 = and i64 %326, -3145729
  %328 = load ptr, ptr %5, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %328, i32 0, i32 11
  %330 = load i32, ptr %329, align 4, !tbaa !33
  %331 = shl i32 %330, 21
  %332 = zext i32 %331 to i64
  %333 = or i64 %327, %332
  %334 = trunc i64 %333 to i32
  %335 = load ptr, ptr %4, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %335, i32 0, i32 0
  %337 = load ptr, ptr %336, align 8, !tbaa !19
  %338 = getelementptr inbounds %struct.ADC_TypeDef, ptr %337, i32 0, i32 3
  store volatile i32 %334, ptr %338, align 4, !tbaa !32
  br label %339

339:                                              ; preds = %320, %296
  br label %340

340:                                              ; preds = %339, %250
  %341 = load ptr, ptr %4, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %341, i32 0, i32 0
  %343 = load ptr, ptr %342, align 8, !tbaa !19
  %344 = call i32 @LL_ADC_REG_IsConversionOngoing(ptr noundef %343)
  store i32 %344, ptr %9, align 4, !tbaa !9
  %345 = load ptr, ptr %4, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %345, i32 0, i32 0
  %347 = load ptr, ptr %346, align 8, !tbaa !19
  %348 = call i32 @LL_ADC_INJ_IsConversionOngoing(ptr noundef %347)
  store i32 %348, ptr %10, align 4, !tbaa !9
  %349 = load i32, ptr %9, align 4, !tbaa !9
  %350 = zext i32 %349 to i64
  %351 = icmp eq i64 %350, 0
  br i1 %351, label %352, label %799

352:                                              ; preds = %340
  %353 = load i32, ptr %10, align 4, !tbaa !9
  %354 = zext i32 %353 to i64
  %355 = icmp eq i64 %354, 0
  br i1 %355, label %356, label %799

356:                                              ; preds = %352
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %357, i32 0, i32 12
  %359 = load i32, ptr %358, align 4, !tbaa !23
  %360 = zext i32 %359 to i64
  %361 = icmp eq i64 %360, 0
  br i1 %361, label %368, label %362

362:                                              ; preds = %356
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %363, i32 0, i32 13
  %365 = load i32, ptr %364, align 4, !tbaa !25
  %366 = zext i32 %365 to i64
  %367 = icmp eq i64 %366, 0
  br i1 %367, label %368, label %392

368:                                              ; preds = %362, %356
  %369 = load ptr, ptr %5, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %369, i32 0, i32 10
  %371 = load i32, ptr %370, align 4, !tbaa !31
  %372 = icmp eq i32 %371, 1
  br i1 %372, label %373, label %382

373:                                              ; preds = %368
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %374, i32 0, i32 0
  %376 = load ptr, ptr %375, align 8, !tbaa !19
  %377 = getelementptr inbounds %struct.ADC_TypeDef, ptr %376, i32 0, i32 3
  %378 = load volatile i32, ptr %377, align 4, !tbaa !32
  %379 = zext i32 %378 to i64
  %380 = or i64 %379, 33554432
  %381 = trunc i64 %380 to i32
  store volatile i32 %381, ptr %377, align 4, !tbaa !32
  br label %391

382:                                              ; preds = %368
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %383, i32 0, i32 0
  %385 = load ptr, ptr %384, align 8, !tbaa !19
  %386 = getelementptr inbounds %struct.ADC_TypeDef, ptr %385, i32 0, i32 3
  %387 = load volatile i32, ptr %386, align 4, !tbaa !32
  %388 = zext i32 %387 to i64
  %389 = and i64 %388, -33554433
  %390 = trunc i64 %389 to i32
  store volatile i32 %390, ptr %386, align 4, !tbaa !32
  br label %391

391:                                              ; preds = %382, %373
  br label %414

392:                                              ; preds = %362
  %393 = load ptr, ptr %5, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %393, i32 0, i32 10
  %395 = load i32, ptr %394, align 4, !tbaa !31
  %396 = icmp eq i32 %395, 1
  br i1 %396, label %397, label %404

397:                                              ; preds = %392
  %398 = load ptr, ptr %4, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %398, i32 0, i32 4
  %400 = load volatile i32, ptr %399, align 4, !tbaa !35
  %401 = zext i32 %400 to i64
  %402 = or i64 %401, 32
  %403 = trunc i64 %402 to i32
  store volatile i32 %403, ptr %399, align 4, !tbaa !35
  store i32 1, ptr %6, align 4, !tbaa !9
  br label %413

404:                                              ; preds = %392
  %405 = load ptr, ptr %4, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %405, i32 0, i32 0
  %407 = load ptr, ptr %406, align 8, !tbaa !19
  %408 = getelementptr inbounds %struct.ADC_TypeDef, ptr %407, i32 0, i32 3
  %409 = load volatile i32, ptr %408, align 4, !tbaa !32
  %410 = zext i32 %409 to i64
  %411 = and i64 %410, -33554433
  %412 = trunc i64 %411 to i32
  store volatile i32 %412, ptr %408, align 4, !tbaa !32
  br label %413

413:                                              ; preds = %404, %397
  br label %414

414:                                              ; preds = %413, %391
  %415 = load ptr, ptr %5, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %415, i32 0, i32 14
  %417 = load i32, ptr %416, align 4, !tbaa !36
  %418 = icmp eq i32 %417, 1
  br i1 %418, label %419, label %447

419:                                              ; preds = %414
  %420 = load ptr, ptr %4, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %420, i32 0, i32 0
  %422 = load ptr, ptr %421, align 8, !tbaa !19
  %423 = getelementptr inbounds %struct.ADC_TypeDef, ptr %422, i32 0, i32 4
  %424 = load volatile i32, ptr %423, align 4, !tbaa !37
  %425 = zext i32 %424 to i64
  %426 = and i64 %425, -67043811
  %427 = load ptr, ptr %5, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %427, i32 0, i32 15
  %429 = getelementptr inbounds %struct.ADC_InjOversamplingTypeDef, ptr %428, i32 0, i32 0
  %430 = load i32, ptr %429, align 4, !tbaa !38
  %431 = zext i32 %430 to i64
  %432 = sub i64 %431, 1
  %433 = shl i64 %432, 16
  %434 = or i64 2, %433
  %435 = load ptr, ptr %5, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %435, i32 0, i32 15
  %437 = getelementptr inbounds %struct.ADC_InjOversamplingTypeDef, ptr %436, i32 0, i32 1
  %438 = load i32, ptr %437, align 4, !tbaa !39
  %439 = zext i32 %438 to i64
  %440 = or i64 %434, %439
  %441 = or i64 %426, %440
  %442 = trunc i64 %441 to i32
  %443 = load ptr, ptr %4, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %443, i32 0, i32 0
  %445 = load ptr, ptr %444, align 8, !tbaa !19
  %446 = getelementptr inbounds %struct.ADC_TypeDef, ptr %445, i32 0, i32 4
  store volatile i32 %442, ptr %446, align 4, !tbaa !37
  br label %456

447:                                              ; preds = %414
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %448, i32 0, i32 0
  %450 = load ptr, ptr %449, align 8, !tbaa !19
  %451 = getelementptr inbounds %struct.ADC_TypeDef, ptr %450, i32 0, i32 4
  %452 = load volatile i32, ptr %451, align 4, !tbaa !37
  %453 = zext i32 %452 to i64
  %454 = and i64 %453, -3
  %455 = trunc i64 %454 to i32
  store volatile i32 %455, ptr %451, align 4, !tbaa !37
  br label %456

456:                                              ; preds = %447, %419
  %457 = load ptr, ptr %4, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %457, i32 0, i32 0
  %459 = load ptr, ptr %458, align 8, !tbaa !19
  %460 = load ptr, ptr %5, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %460, i32 0, i32 0
  %462 = load i32, ptr %461, align 4, !tbaa !24
  %463 = load ptr, ptr %5, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %463, i32 0, i32 2
  %465 = load i32, ptr %464, align 4, !tbaa !40
  call void @LL_ADC_SetChannelSamplingTime(ptr noundef %459, i32 noundef %462, i32 noundef %465)
  %466 = load volatile i32, ptr inttoptr (i64 1543507968 to ptr), align 4, !tbaa !41
  %467 = zext i32 %466 to i64
  %468 = and i64 %467, 4026531840
  %469 = icmp eq i64 %468, 268435456
  br i1 %469, label %470, label %485

470:                                              ; preds = %456
  %471 = load ptr, ptr %5, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %471, i32 0, i32 5
  %473 = load i32, ptr %472, align 4, !tbaa !43
  %474 = load ptr, ptr %4, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %474, i32 0, i32 0
  %476 = load ptr, ptr %475, align 8, !tbaa !19
  %477 = getelementptr inbounds %struct.ADC_TypeDef, ptr %476, i32 0, i32 3
  %478 = load volatile i32, ptr %477, align 4, !tbaa !32
  %479 = zext i32 %478 to i64
  %480 = and i64 %479, 28
  %481 = lshr i64 %480, 2
  %482 = mul i64 %481, 2
  %483 = trunc i64 %482 to i32
  %484 = shl i32 %473, %483
  br label %526

485:                                              ; preds = %456
  %486 = load ptr, ptr %4, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %486, i32 0, i32 0
  %488 = load ptr, ptr %487, align 8, !tbaa !19
  %489 = getelementptr inbounds %struct.ADC_TypeDef, ptr %488, i32 0, i32 3
  %490 = load volatile i32, ptr %489, align 4, !tbaa !32
  %491 = zext i32 %490 to i64
  %492 = and i64 %491, 16
  %493 = icmp eq i64 %492, 0
  br i1 %493, label %494, label %509

494:                                              ; preds = %485
  %495 = load ptr, ptr %5, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %495, i32 0, i32 5
  %497 = load i32, ptr %496, align 4, !tbaa !43
  %498 = load ptr, ptr %4, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %498, i32 0, i32 0
  %500 = load ptr, ptr %499, align 8, !tbaa !19
  %501 = getelementptr inbounds %struct.ADC_TypeDef, ptr %500, i32 0, i32 3
  %502 = load volatile i32, ptr %501, align 4, !tbaa !32
  %503 = zext i32 %502 to i64
  %504 = and i64 %503, 28
  %505 = lshr i64 %504, 2
  %506 = mul i64 %505, 2
  %507 = trunc i64 %506 to i32
  %508 = shl i32 %497, %507
  br label %524

509:                                              ; preds = %485
  %510 = load ptr, ptr %5, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %510, i32 0, i32 5
  %512 = load i32, ptr %511, align 4, !tbaa !43
  %513 = load ptr, ptr %4, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %513, i32 0, i32 0
  %515 = load ptr, ptr %514, align 8, !tbaa !19
  %516 = getelementptr inbounds %struct.ADC_TypeDef, ptr %515, i32 0, i32 3
  %517 = load volatile i32, ptr %516, align 4, !tbaa !32
  %518 = zext i32 %517 to i64
  %519 = and i64 %518, 16
  %520 = lshr i64 %519, 2
  %521 = mul i64 %520, 2
  %522 = trunc i64 %521 to i32
  %523 = shl i32 %512, %522
  br label %524

524:                                              ; preds = %509, %494
  %525 = phi i32 [ %508, %494 ], [ %523, %509 ]
  br label %526

526:                                              ; preds = %524, %470
  %527 = phi i32 [ %484, %470 ], [ %525, %524 ]
  store i32 %527, ptr %7, align 4, !tbaa !9
  %528 = load ptr, ptr %5, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %528, i32 0, i32 4
  %530 = load i32, ptr %529, align 4, !tbaa !44
  %531 = zext i32 %530 to i64
  %532 = icmp ne i64 %531, 4
  br i1 %532, label %533, label %557

533:                                              ; preds = %526
  %534 = load ptr, ptr %4, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %534, i32 0, i32 0
  %536 = load ptr, ptr %535, align 8, !tbaa !19
  %537 = load ptr, ptr %5, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %537, i32 0, i32 4
  %539 = load i32, ptr %538, align 4, !tbaa !44
  %540 = load ptr, ptr %5, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %540, i32 0, i32 0
  %542 = load i32, ptr %541, align 4, !tbaa !24
  %543 = load i32, ptr %7, align 4, !tbaa !9
  call void @LL_ADC_SetOffset(ptr noundef %536, i32 noundef %539, i32 noundef %542, i32 noundef %543)
  %544 = load ptr, ptr %4, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %544, i32 0, i32 0
  %546 = load ptr, ptr %545, align 8, !tbaa !19
  %547 = load ptr, ptr %5, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %547, i32 0, i32 4
  %549 = load i32, ptr %548, align 4, !tbaa !44
  %550 = load ptr, ptr %5, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %550, i32 0, i32 7
  %552 = load i32, ptr %551, align 4, !tbaa !45
  %553 = icmp eq i32 %552, 1
  %554 = zext i1 %553 to i64
  %555 = select i1 %553, i64 2147483648, i64 0
  %556 = trunc i64 %555 to i32
  call void @LL_ADC_SetOffsetSignedSaturation(ptr noundef %546, i32 noundef %549, i32 noundef %556)
  br label %798

557:                                              ; preds = %526
  %558 = load ptr, ptr %4, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %558, i32 0, i32 0
  %560 = load ptr, ptr %559, align 8, !tbaa !19
  %561 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %560, i32 noundef 0)
  %562 = zext i32 %561 to i64
  %563 = and i64 %562, 1048575
  %564 = icmp eq i64 %563, 0
  br i1 %564, label %565, label %573

565:                                              ; preds = %557
  %566 = load ptr, ptr %4, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %566, i32 0, i32 0
  %568 = load ptr, ptr %567, align 8, !tbaa !19
  %569 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %568, i32 noundef 0)
  %570 = zext i32 %569 to i64
  %571 = and i64 %570, 2080374784
  %572 = lshr i64 %571, 26
  br label %583

573:                                              ; preds = %557
  %574 = load ptr, ptr %4, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %574, i32 0, i32 0
  %576 = load ptr, ptr %575, align 8, !tbaa !19
  %577 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %576, i32 noundef 0)
  %578 = call i32 @__RBIT(i32 noundef %577)
  %579 = call i32 @llvm.ctlz.i32(i32 %578, i1 true)
  %580 = trunc i32 %579 to i8
  %581 = zext i8 %580 to i32
  %582 = zext i32 %581 to i64
  br label %583

583:                                              ; preds = %573, %565
  %584 = phi i64 [ %572, %565 ], [ %582, %573 ]
  %585 = load ptr, ptr %5, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %585, i32 0, i32 0
  %587 = load i32, ptr %586, align 4, !tbaa !24
  %588 = zext i32 %587 to i64
  %589 = and i64 %588, 1048575
  %590 = icmp eq i64 %589, 0
  br i1 %590, label %591, label %598

591:                                              ; preds = %583
  %592 = load ptr, ptr %5, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %592, i32 0, i32 0
  %594 = load i32, ptr %593, align 4, !tbaa !24
  %595 = zext i32 %594 to i64
  %596 = and i64 %595, 2080374784
  %597 = lshr i64 %596, 26
  br label %607

598:                                              ; preds = %583
  %599 = load ptr, ptr %5, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %599, i32 0, i32 0
  %601 = load i32, ptr %600, align 4, !tbaa !24
  %602 = call i32 @__RBIT(i32 noundef %601)
  %603 = call i32 @llvm.ctlz.i32(i32 %602, i1 true)
  %604 = trunc i32 %603 to i8
  %605 = zext i8 %604 to i32
  %606 = zext i32 %605 to i64
  br label %607

607:                                              ; preds = %598, %591
  %608 = phi i64 [ %597, %591 ], [ %606, %598 ]
  %609 = icmp eq i64 %584, %608
  br i1 %609, label %610, label %617

610:                                              ; preds = %607
  %611 = load ptr, ptr %4, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %611, i32 0, i32 0
  %613 = load ptr, ptr %612, align 8, !tbaa !19
  %614 = load ptr, ptr %5, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %614, i32 0, i32 0
  %616 = load i32, ptr %615, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %613, i32 noundef 0, i32 noundef %616, i32 noundef 0)
  br label %617

617:                                              ; preds = %610, %607
  %618 = load ptr, ptr %4, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %618, i32 0, i32 0
  %620 = load ptr, ptr %619, align 8, !tbaa !19
  %621 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %620, i32 noundef 1)
  %622 = zext i32 %621 to i64
  %623 = and i64 %622, 1048575
  %624 = icmp eq i64 %623, 0
  br i1 %624, label %625, label %633

625:                                              ; preds = %617
  %626 = load ptr, ptr %4, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %626, i32 0, i32 0
  %628 = load ptr, ptr %627, align 8, !tbaa !19
  %629 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %628, i32 noundef 1)
  %630 = zext i32 %629 to i64
  %631 = and i64 %630, 2080374784
  %632 = lshr i64 %631, 26
  br label %643

633:                                              ; preds = %617
  %634 = load ptr, ptr %4, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %634, i32 0, i32 0
  %636 = load ptr, ptr %635, align 8, !tbaa !19
  %637 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %636, i32 noundef 1)
  %638 = call i32 @__RBIT(i32 noundef %637)
  %639 = call i32 @llvm.ctlz.i32(i32 %638, i1 true)
  %640 = trunc i32 %639 to i8
  %641 = zext i8 %640 to i32
  %642 = zext i32 %641 to i64
  br label %643

643:                                              ; preds = %633, %625
  %644 = phi i64 [ %632, %625 ], [ %642, %633 ]
  %645 = load ptr, ptr %5, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %645, i32 0, i32 0
  %647 = load i32, ptr %646, align 4, !tbaa !24
  %648 = zext i32 %647 to i64
  %649 = and i64 %648, 1048575
  %650 = icmp eq i64 %649, 0
  br i1 %650, label %651, label %658

651:                                              ; preds = %643
  %652 = load ptr, ptr %5, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %652, i32 0, i32 0
  %654 = load i32, ptr %653, align 4, !tbaa !24
  %655 = zext i32 %654 to i64
  %656 = and i64 %655, 2080374784
  %657 = lshr i64 %656, 26
  br label %667

658:                                              ; preds = %643
  %659 = load ptr, ptr %5, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %659, i32 0, i32 0
  %661 = load i32, ptr %660, align 4, !tbaa !24
  %662 = call i32 @__RBIT(i32 noundef %661)
  %663 = call i32 @llvm.ctlz.i32(i32 %662, i1 true)
  %664 = trunc i32 %663 to i8
  %665 = zext i8 %664 to i32
  %666 = zext i32 %665 to i64
  br label %667

667:                                              ; preds = %658, %651
  %668 = phi i64 [ %657, %651 ], [ %666, %658 ]
  %669 = icmp eq i64 %644, %668
  br i1 %669, label %670, label %677

670:                                              ; preds = %667
  %671 = load ptr, ptr %4, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %671, i32 0, i32 0
  %673 = load ptr, ptr %672, align 8, !tbaa !19
  %674 = load ptr, ptr %5, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %674, i32 0, i32 0
  %676 = load i32, ptr %675, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %673, i32 noundef 1, i32 noundef %676, i32 noundef 0)
  br label %677

677:                                              ; preds = %670, %667
  %678 = load ptr, ptr %4, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %678, i32 0, i32 0
  %680 = load ptr, ptr %679, align 8, !tbaa !19
  %681 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %680, i32 noundef 2)
  %682 = zext i32 %681 to i64
  %683 = and i64 %682, 1048575
  %684 = icmp eq i64 %683, 0
  br i1 %684, label %685, label %693

685:                                              ; preds = %677
  %686 = load ptr, ptr %4, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %686, i32 0, i32 0
  %688 = load ptr, ptr %687, align 8, !tbaa !19
  %689 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %688, i32 noundef 2)
  %690 = zext i32 %689 to i64
  %691 = and i64 %690, 2080374784
  %692 = lshr i64 %691, 26
  br label %703

693:                                              ; preds = %677
  %694 = load ptr, ptr %4, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %694, i32 0, i32 0
  %696 = load ptr, ptr %695, align 8, !tbaa !19
  %697 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %696, i32 noundef 2)
  %698 = call i32 @__RBIT(i32 noundef %697)
  %699 = call i32 @llvm.ctlz.i32(i32 %698, i1 true)
  %700 = trunc i32 %699 to i8
  %701 = zext i8 %700 to i32
  %702 = zext i32 %701 to i64
  br label %703

703:                                              ; preds = %693, %685
  %704 = phi i64 [ %692, %685 ], [ %702, %693 ]
  %705 = load ptr, ptr %5, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %705, i32 0, i32 0
  %707 = load i32, ptr %706, align 4, !tbaa !24
  %708 = zext i32 %707 to i64
  %709 = and i64 %708, 1048575
  %710 = icmp eq i64 %709, 0
  br i1 %710, label %711, label %718

711:                                              ; preds = %703
  %712 = load ptr, ptr %5, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %712, i32 0, i32 0
  %714 = load i32, ptr %713, align 4, !tbaa !24
  %715 = zext i32 %714 to i64
  %716 = and i64 %715, 2080374784
  %717 = lshr i64 %716, 26
  br label %727

718:                                              ; preds = %703
  %719 = load ptr, ptr %5, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %719, i32 0, i32 0
  %721 = load i32, ptr %720, align 4, !tbaa !24
  %722 = call i32 @__RBIT(i32 noundef %721)
  %723 = call i32 @llvm.ctlz.i32(i32 %722, i1 true)
  %724 = trunc i32 %723 to i8
  %725 = zext i8 %724 to i32
  %726 = zext i32 %725 to i64
  br label %727

727:                                              ; preds = %718, %711
  %728 = phi i64 [ %717, %711 ], [ %726, %718 ]
  %729 = icmp eq i64 %704, %728
  br i1 %729, label %730, label %737

730:                                              ; preds = %727
  %731 = load ptr, ptr %4, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %731, i32 0, i32 0
  %733 = load ptr, ptr %732, align 8, !tbaa !19
  %734 = load ptr, ptr %5, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %734, i32 0, i32 0
  %736 = load i32, ptr %735, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %733, i32 noundef 3, i32 noundef %736, i32 noundef 0)
  br label %737

737:                                              ; preds = %730, %727
  %738 = load ptr, ptr %4, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %738, i32 0, i32 0
  %740 = load ptr, ptr %739, align 8, !tbaa !19
  %741 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %740, i32 noundef 3)
  %742 = zext i32 %741 to i64
  %743 = and i64 %742, 1048575
  %744 = icmp eq i64 %743, 0
  br i1 %744, label %745, label %753

745:                                              ; preds = %737
  %746 = load ptr, ptr %4, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %746, i32 0, i32 0
  %748 = load ptr, ptr %747, align 8, !tbaa !19
  %749 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %748, i32 noundef 3)
  %750 = zext i32 %749 to i64
  %751 = and i64 %750, 2080374784
  %752 = lshr i64 %751, 26
  br label %763

753:                                              ; preds = %737
  %754 = load ptr, ptr %4, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %754, i32 0, i32 0
  %756 = load ptr, ptr %755, align 8, !tbaa !19
  %757 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %756, i32 noundef 3)
  %758 = call i32 @__RBIT(i32 noundef %757)
  %759 = call i32 @llvm.ctlz.i32(i32 %758, i1 true)
  %760 = trunc i32 %759 to i8
  %761 = zext i8 %760 to i32
  %762 = zext i32 %761 to i64
  br label %763

763:                                              ; preds = %753, %745
  %764 = phi i64 [ %752, %745 ], [ %762, %753 ]
  %765 = load ptr, ptr %5, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %765, i32 0, i32 0
  %767 = load i32, ptr %766, align 4, !tbaa !24
  %768 = zext i32 %767 to i64
  %769 = and i64 %768, 1048575
  %770 = icmp eq i64 %769, 0
  br i1 %770, label %771, label %778

771:                                              ; preds = %763
  %772 = load ptr, ptr %5, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %772, i32 0, i32 0
  %774 = load i32, ptr %773, align 4, !tbaa !24
  %775 = zext i32 %774 to i64
  %776 = and i64 %775, 2080374784
  %777 = lshr i64 %776, 26
  br label %787

778:                                              ; preds = %763
  %779 = load ptr, ptr %5, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %779, i32 0, i32 0
  %781 = load i32, ptr %780, align 4, !tbaa !24
  %782 = call i32 @__RBIT(i32 noundef %781)
  %783 = call i32 @llvm.ctlz.i32(i32 %782, i1 true)
  %784 = trunc i32 %783 to i8
  %785 = zext i8 %784 to i32
  %786 = zext i32 %785 to i64
  br label %787

787:                                              ; preds = %778, %771
  %788 = phi i64 [ %777, %771 ], [ %786, %778 ]
  %789 = icmp eq i64 %764, %788
  br i1 %789, label %790, label %797

790:                                              ; preds = %787
  %791 = load ptr, ptr %4, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %791, i32 0, i32 0
  %793 = load ptr, ptr %792, align 8, !tbaa !19
  %794 = load ptr, ptr %5, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %794, i32 0, i32 0
  %796 = load i32, ptr %795, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %793, i32 noundef 3, i32 noundef %796, i32 noundef 0)
  br label %797

797:                                              ; preds = %790, %787
  br label %798

798:                                              ; preds = %797, %533
  br label %799

799:                                              ; preds = %798, %352, %340
  %800 = load ptr, ptr %4, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %800, i32 0, i32 0
  %802 = load ptr, ptr %801, align 8, !tbaa !19
  %803 = call i32 @LL_ADC_IsEnabled(ptr noundef %802)
  %804 = zext i32 %803 to i64
  %805 = icmp eq i64 %804, 0
  br i1 %805, label %806, label %1209

806:                                              ; preds = %799
  %807 = load ptr, ptr %4, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %807, i32 0, i32 0
  %809 = load ptr, ptr %808, align 8, !tbaa !19
  %810 = load ptr, ptr %5, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %810, i32 0, i32 0
  %812 = load i32, ptr %811, align 4, !tbaa !24
  %813 = load ptr, ptr %5, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %813, i32 0, i32 3
  %815 = load i32, ptr %814, align 4, !tbaa !17
  call void @LL_ADC_SetChannelSingleDiff(ptr noundef %809, i32 noundef %812, i32 noundef %815)
  %816 = load ptr, ptr %5, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %816, i32 0, i32 3
  %818 = load i32, ptr %817, align 4, !tbaa !17
  %819 = zext i32 %818 to i64
  %820 = icmp eq i64 %819, 1207894016
  br i1 %820, label %821, label %1031

821:                                              ; preds = %806
  %822 = load ptr, ptr %4, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %822, i32 0, i32 0
  %824 = load ptr, ptr %823, align 8, !tbaa !19
  %825 = load ptr, ptr %5, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %825, i32 0, i32 0
  %827 = load i32, ptr %826, align 4, !tbaa !24
  %828 = zext i32 %827 to i64
  %829 = and i64 %828, 1048575
  %830 = icmp eq i64 %829, 0
  br i1 %830, label %831, label %838

831:                                              ; preds = %821
  %832 = load ptr, ptr %5, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %832, i32 0, i32 0
  %834 = load i32, ptr %833, align 4, !tbaa !24
  %835 = zext i32 %834 to i64
  %836 = and i64 %835, 2080374784
  %837 = lshr i64 %836, 26
  br label %847

838:                                              ; preds = %821
  %839 = load ptr, ptr %5, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %839, i32 0, i32 0
  %841 = load i32, ptr %840, align 4, !tbaa !24
  %842 = call i32 @__RBIT(i32 noundef %841)
  %843 = call i32 @llvm.ctlz.i32(i32 %842, i1 true)
  %844 = trunc i32 %843 to i8
  %845 = zext i8 %844 to i32
  %846 = zext i32 %845 to i64
  br label %847

847:                                              ; preds = %838, %831
  %848 = phi i64 [ %837, %831 ], [ %846, %838 ]
  %849 = add i64 %848, 1
  %850 = and i64 %849, 31
  %851 = icmp ule i64 %850, 9
  br i1 %851, label %852, label %938

852:                                              ; preds = %847
  %853 = load ptr, ptr %5, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %853, i32 0, i32 0
  %855 = load i32, ptr %854, align 4, !tbaa !24
  %856 = zext i32 %855 to i64
  %857 = and i64 %856, 1048575
  %858 = icmp eq i64 %857, 0
  br i1 %858, label %859, label %866

859:                                              ; preds = %852
  %860 = load ptr, ptr %5, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %860, i32 0, i32 0
  %862 = load i32, ptr %861, align 4, !tbaa !24
  %863 = zext i32 %862 to i64
  %864 = and i64 %863, 2080374784
  %865 = lshr i64 %864, 26
  br label %875

866:                                              ; preds = %852
  %867 = load ptr, ptr %5, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %867, i32 0, i32 0
  %869 = load i32, ptr %868, align 4, !tbaa !24
  %870 = call i32 @__RBIT(i32 noundef %869)
  %871 = call i32 @llvm.ctlz.i32(i32 %870, i1 true)
  %872 = trunc i32 %871 to i8
  %873 = zext i8 %872 to i32
  %874 = zext i32 %873 to i64
  br label %875

875:                                              ; preds = %866, %859
  %876 = phi i64 [ %865, %859 ], [ %874, %866 ]
  %877 = add i64 %876, 1
  %878 = and i64 %877, 31
  %879 = shl i64 %878, 26
  %880 = load ptr, ptr %5, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %880, i32 0, i32 0
  %882 = load i32, ptr %881, align 4, !tbaa !24
  %883 = zext i32 %882 to i64
  %884 = and i64 %883, 1048575
  %885 = icmp eq i64 %884, 0
  br i1 %885, label %886, label %893

886:                                              ; preds = %875
  %887 = load ptr, ptr %5, align 8, !tbaa !5
  %888 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %887, i32 0, i32 0
  %889 = load i32, ptr %888, align 4, !tbaa !24
  %890 = zext i32 %889 to i64
  %891 = and i64 %890, 2080374784
  %892 = lshr i64 %891, 26
  br label %902

893:                                              ; preds = %875
  %894 = load ptr, ptr %5, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %894, i32 0, i32 0
  %896 = load i32, ptr %895, align 4, !tbaa !24
  %897 = call i32 @__RBIT(i32 noundef %896)
  %898 = call i32 @llvm.ctlz.i32(i32 %897, i1 true)
  %899 = trunc i32 %898 to i8
  %900 = zext i8 %899 to i32
  %901 = zext i32 %900 to i64
  br label %902

902:                                              ; preds = %893, %886
  %903 = phi i64 [ %892, %886 ], [ %901, %893 ]
  %904 = add i64 %903, 1
  %905 = and i64 %904, 31
  %906 = shl i64 1, %905
  %907 = or i64 %879, %906
  %908 = load ptr, ptr %5, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %908, i32 0, i32 0
  %910 = load i32, ptr %909, align 4, !tbaa !24
  %911 = zext i32 %910 to i64
  %912 = and i64 %911, 1048575
  %913 = icmp eq i64 %912, 0
  br i1 %913, label %914, label %921

914:                                              ; preds = %902
  %915 = load ptr, ptr %5, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %915, i32 0, i32 0
  %917 = load i32, ptr %916, align 4, !tbaa !24
  %918 = zext i32 %917 to i64
  %919 = and i64 %918, 2080374784
  %920 = lshr i64 %919, 26
  br label %930

921:                                              ; preds = %902
  %922 = load ptr, ptr %5, align 8, !tbaa !5
  %923 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %922, i32 0, i32 0
  %924 = load i32, ptr %923, align 4, !tbaa !24
  %925 = call i32 @__RBIT(i32 noundef %924)
  %926 = call i32 @llvm.ctlz.i32(i32 %925, i1 true)
  %927 = trunc i32 %926 to i8
  %928 = zext i8 %927 to i32
  %929 = zext i32 %928 to i64
  br label %930

930:                                              ; preds = %921, %914
  %931 = phi i64 [ %920, %914 ], [ %929, %921 ]
  %932 = add i64 %931, 1
  %933 = and i64 %932, 31
  %934 = mul i64 3, %933
  %935 = shl i64 %934, 20
  %936 = or i64 0, %935
  %937 = or i64 %907, %936
  br label %1025

938:                                              ; preds = %847
  %939 = load ptr, ptr %5, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %939, i32 0, i32 0
  %941 = load i32, ptr %940, align 4, !tbaa !24
  %942 = zext i32 %941 to i64
  %943 = and i64 %942, 1048575
  %944 = icmp eq i64 %943, 0
  br i1 %944, label %945, label %952

945:                                              ; preds = %938
  %946 = load ptr, ptr %5, align 8, !tbaa !5
  %947 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %946, i32 0, i32 0
  %948 = load i32, ptr %947, align 4, !tbaa !24
  %949 = zext i32 %948 to i64
  %950 = and i64 %949, 2080374784
  %951 = lshr i64 %950, 26
  br label %961

952:                                              ; preds = %938
  %953 = load ptr, ptr %5, align 8, !tbaa !5
  %954 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %953, i32 0, i32 0
  %955 = load i32, ptr %954, align 4, !tbaa !24
  %956 = call i32 @__RBIT(i32 noundef %955)
  %957 = call i32 @llvm.ctlz.i32(i32 %956, i1 true)
  %958 = trunc i32 %957 to i8
  %959 = zext i8 %958 to i32
  %960 = zext i32 %959 to i64
  br label %961

961:                                              ; preds = %952, %945
  %962 = phi i64 [ %951, %945 ], [ %960, %952 ]
  %963 = add i64 %962, 1
  %964 = and i64 %963, 31
  %965 = shl i64 %964, 26
  %966 = load ptr, ptr %5, align 8, !tbaa !5
  %967 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %966, i32 0, i32 0
  %968 = load i32, ptr %967, align 4, !tbaa !24
  %969 = zext i32 %968 to i64
  %970 = and i64 %969, 1048575
  %971 = icmp eq i64 %970, 0
  br i1 %971, label %972, label %979

972:                                              ; preds = %961
  %973 = load ptr, ptr %5, align 8, !tbaa !5
  %974 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %973, i32 0, i32 0
  %975 = load i32, ptr %974, align 4, !tbaa !24
  %976 = zext i32 %975 to i64
  %977 = and i64 %976, 2080374784
  %978 = lshr i64 %977, 26
  br label %988

979:                                              ; preds = %961
  %980 = load ptr, ptr %5, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %980, i32 0, i32 0
  %982 = load i32, ptr %981, align 4, !tbaa !24
  %983 = call i32 @__RBIT(i32 noundef %982)
  %984 = call i32 @llvm.ctlz.i32(i32 %983, i1 true)
  %985 = trunc i32 %984 to i8
  %986 = zext i8 %985 to i32
  %987 = zext i32 %986 to i64
  br label %988

988:                                              ; preds = %979, %972
  %989 = phi i64 [ %978, %972 ], [ %987, %979 ]
  %990 = add i64 %989, 1
  %991 = and i64 %990, 31
  %992 = shl i64 1, %991
  %993 = or i64 %965, %992
  %994 = load ptr, ptr %5, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %994, i32 0, i32 0
  %996 = load i32, ptr %995, align 4, !tbaa !24
  %997 = zext i32 %996 to i64
  %998 = and i64 %997, 1048575
  %999 = icmp eq i64 %998, 0
  br i1 %999, label %1000, label %1007

1000:                                             ; preds = %988
  %1001 = load ptr, ptr %5, align 8, !tbaa !5
  %1002 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1001, i32 0, i32 0
  %1003 = load i32, ptr %1002, align 4, !tbaa !24
  %1004 = zext i32 %1003 to i64
  %1005 = and i64 %1004, 2080374784
  %1006 = lshr i64 %1005, 26
  br label %1016

1007:                                             ; preds = %988
  %1008 = load ptr, ptr %5, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1008, i32 0, i32 0
  %1010 = load i32, ptr %1009, align 4, !tbaa !24
  %1011 = call i32 @__RBIT(i32 noundef %1010)
  %1012 = call i32 @llvm.ctlz.i32(i32 %1011, i1 true)
  %1013 = trunc i32 %1012 to i8
  %1014 = zext i8 %1013 to i32
  %1015 = zext i32 %1014 to i64
  br label %1016

1016:                                             ; preds = %1007, %1000
  %1017 = phi i64 [ %1006, %1000 ], [ %1015, %1007 ]
  %1018 = add i64 %1017, 1
  %1019 = and i64 %1018, 31
  %1020 = sub i64 %1019, 10
  %1021 = mul i64 3, %1020
  %1022 = shl i64 %1021, 20
  %1023 = or i64 33554432, %1022
  %1024 = or i64 %993, %1023
  br label %1025

1025:                                             ; preds = %1016, %930
  %1026 = phi i64 [ %937, %930 ], [ %1024, %1016 ]
  %1027 = trunc i64 %1026 to i32
  %1028 = load ptr, ptr %5, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1028, i32 0, i32 2
  %1030 = load i32, ptr %1029, align 4, !tbaa !40
  call void @LL_ADC_SetChannelSamplingTime(ptr noundef %824, i32 noundef %1027, i32 noundef %1030)
  br label %1031

1031:                                             ; preds = %1025, %806
  %1032 = load ptr, ptr %5, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1032, i32 0, i32 0
  %1034 = load i32, ptr %1033, align 4, !tbaa !24
  %1035 = zext i32 %1034 to i64
  %1036 = and i64 %1035, 2147483648
  %1037 = icmp ne i64 %1036, 0
  br i1 %1037, label %1038, label %1208

1038:                                             ; preds = %1031
  %1039 = load ptr, ptr %4, align 8, !tbaa !5
  %1040 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1039, i32 0, i32 0
  %1041 = load ptr, ptr %1040, align 8, !tbaa !19
  %1042 = icmp eq ptr %1041, inttoptr (i64 1073881088 to ptr)
  br i1 %1042, label %1048, label %1043

1043:                                             ; preds = %1038
  %1044 = load ptr, ptr %4, align 8, !tbaa !5
  %1045 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1044, i32 0, i32 0
  %1046 = load ptr, ptr %1045, align 8, !tbaa !19
  %1047 = icmp eq ptr %1046, inttoptr (i64 1073881344 to ptr)
  br label %1048

1048:                                             ; preds = %1043, %1038
  %1049 = phi i1 [ true, %1038 ], [ %1047, %1043 ]
  %1050 = zext i1 %1049 to i64
  %1051 = select i1 %1049, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1052 = icmp eq ptr %1051, inttoptr (i64 1073881856 to ptr)
  br i1 %1052, label %1053, label %1057

1053:                                             ; preds = %1048
  %1054 = call i32 @LL_ADC_IsEnabled(ptr noundef inttoptr (i64 1073881088 to ptr))
  %1055 = call i32 @LL_ADC_IsEnabled(ptr noundef inttoptr (i64 1073881344 to ptr))
  %1056 = or i32 %1054, %1055
  br label %1059

1057:                                             ; preds = %1048
  %1058 = call i32 @LL_ADC_IsEnabled(ptr noundef inttoptr (i64 1476550656 to ptr))
  br label %1059

1059:                                             ; preds = %1057, %1053
  %1060 = phi i32 [ %1056, %1053 ], [ %1058, %1057 ]
  %1061 = zext i32 %1060 to i64
  %1062 = icmp eq i64 %1061, 0
  br i1 %1062, label %1063, label %1200

1063:                                             ; preds = %1059
  %1064 = load ptr, ptr %4, align 8, !tbaa !5
  %1065 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1064, i32 0, i32 0
  %1066 = load ptr, ptr %1065, align 8, !tbaa !19
  %1067 = icmp eq ptr %1066, inttoptr (i64 1073881088 to ptr)
  br i1 %1067, label %1073, label %1068

1068:                                             ; preds = %1063
  %1069 = load ptr, ptr %4, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1069, i32 0, i32 0
  %1071 = load ptr, ptr %1070, align 8, !tbaa !19
  %1072 = icmp eq ptr %1071, inttoptr (i64 1073881344 to ptr)
  br label %1073

1073:                                             ; preds = %1068, %1063
  %1074 = phi i1 [ true, %1063 ], [ %1072, %1068 ]
  %1075 = zext i1 %1074 to i64
  %1076 = select i1 %1074, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1077 = call i32 @LL_ADC_GetCommonPathInternalCh(ptr noundef %1076)
  store i32 %1077, ptr %8, align 4, !tbaa !9
  %1078 = load ptr, ptr %5, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1078, i32 0, i32 0
  %1080 = load i32, ptr %1079, align 4, !tbaa !24
  %1081 = zext i32 %1080 to i64
  %1082 = icmp eq i64 %1081, 3414425600
  br i1 %1082, label %1083, label %1126

1083:                                             ; preds = %1073
  %1084 = load i32, ptr %8, align 4, !tbaa !9
  %1085 = zext i32 %1084 to i64
  %1086 = and i64 %1085, 8388608
  %1087 = icmp eq i64 %1086, 0
  br i1 %1087, label %1088, label %1126

1088:                                             ; preds = %1083
  %1089 = load ptr, ptr %4, align 8, !tbaa !5
  %1090 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1089, i32 0, i32 0
  %1091 = load ptr, ptr %1090, align 8, !tbaa !19
  %1092 = icmp eq ptr %1091, inttoptr (i64 1476550656 to ptr)
  br i1 %1092, label %1093, label %1125

1093:                                             ; preds = %1088
  %1094 = load ptr, ptr %4, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1094, i32 0, i32 0
  %1096 = load ptr, ptr %1095, align 8, !tbaa !19
  %1097 = icmp eq ptr %1096, inttoptr (i64 1073881088 to ptr)
  br i1 %1097, label %1103, label %1098

1098:                                             ; preds = %1093
  %1099 = load ptr, ptr %4, align 8, !tbaa !5
  %1100 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1099, i32 0, i32 0
  %1101 = load ptr, ptr %1100, align 8, !tbaa !19
  %1102 = icmp eq ptr %1101, inttoptr (i64 1073881344 to ptr)
  br label %1103

1103:                                             ; preds = %1098, %1093
  %1104 = phi i1 [ true, %1093 ], [ %1102, %1098 ]
  %1105 = zext i1 %1104 to i64
  %1106 = select i1 %1104, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1107 = load i32, ptr %8, align 4, !tbaa !9
  %1108 = zext i32 %1107 to i64
  %1109 = or i64 8388608, %1108
  %1110 = trunc i64 %1109 to i32
  call void @LL_ADC_SetCommonPathInternalCh(ptr noundef %1106, i32 noundef %1110)
  %1111 = load i32, ptr @SystemCoreClock, align 4, !tbaa !9
  %1112 = zext i32 %1111 to i64
  %1113 = udiv i64 %1112, 200000
  %1114 = add i64 %1113, 1
  %1115 = mul i64 2, %1114
  %1116 = trunc i64 %1115 to i32
  store volatile i32 %1116, ptr %11, align 4, !tbaa !9
  br label %1117

1117:                                             ; preds = %1121, %1103
  %1118 = load volatile i32, ptr %11, align 4, !tbaa !9
  %1119 = zext i32 %1118 to i64
  %1120 = icmp ne i64 %1119, 0
  br i1 %1120, label %1121, label %1124

1121:                                             ; preds = %1117
  %1122 = load volatile i32, ptr %11, align 4, !tbaa !9
  %1123 = add i32 %1122, -1
  store volatile i32 %1123, ptr %11, align 4, !tbaa !9
  br label %1117, !llvm.loop !46

1124:                                             ; preds = %1117
  br label %1125

1125:                                             ; preds = %1124, %1088
  br label %1199

1126:                                             ; preds = %1083, %1073
  %1127 = load ptr, ptr %5, align 8, !tbaa !5
  %1128 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1127, i32 0, i32 0
  %1129 = load i32, ptr %1128, align 4, !tbaa !24
  %1130 = zext i32 %1129 to i64
  %1131 = icmp eq i64 %1130, 3344039936
  br i1 %1131, label %1132, label %1161

1132:                                             ; preds = %1126
  %1133 = load i32, ptr %8, align 4, !tbaa !9
  %1134 = zext i32 %1133 to i64
  %1135 = and i64 %1134, 16777216
  %1136 = icmp eq i64 %1135, 0
  br i1 %1136, label %1137, label %1161

1137:                                             ; preds = %1132
  %1138 = load ptr, ptr %4, align 8, !tbaa !5
  %1139 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1138, i32 0, i32 0
  %1140 = load ptr, ptr %1139, align 8, !tbaa !19
  %1141 = icmp eq ptr %1140, inttoptr (i64 1476550656 to ptr)
  br i1 %1141, label %1142, label %1160

1142:                                             ; preds = %1137
  %1143 = load ptr, ptr %4, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1143, i32 0, i32 0
  %1145 = load ptr, ptr %1144, align 8, !tbaa !19
  %1146 = icmp eq ptr %1145, inttoptr (i64 1073881088 to ptr)
  br i1 %1146, label %1152, label %1147

1147:                                             ; preds = %1142
  %1148 = load ptr, ptr %4, align 8, !tbaa !5
  %1149 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1148, i32 0, i32 0
  %1150 = load ptr, ptr %1149, align 8, !tbaa !19
  %1151 = icmp eq ptr %1150, inttoptr (i64 1073881344 to ptr)
  br label %1152

1152:                                             ; preds = %1147, %1142
  %1153 = phi i1 [ true, %1142 ], [ %1151, %1147 ]
  %1154 = zext i1 %1153 to i64
  %1155 = select i1 %1153, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1156 = load i32, ptr %8, align 4, !tbaa !9
  %1157 = zext i32 %1156 to i64
  %1158 = or i64 16777216, %1157
  %1159 = trunc i64 %1158 to i32
  call void @LL_ADC_SetCommonPathInternalCh(ptr noundef %1155, i32 noundef %1159)
  br label %1160

1160:                                             ; preds = %1152, %1137
  br label %1198

1161:                                             ; preds = %1132, %1126
  %1162 = load ptr, ptr %5, align 8, !tbaa !5
  %1163 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1162, i32 0, i32 0
  %1164 = load i32, ptr %1163, align 4, !tbaa !24
  %1165 = zext i32 %1164 to i64
  %1166 = icmp eq i64 %1165, 3484942336
  br i1 %1166, label %1167, label %1196

1167:                                             ; preds = %1161
  %1168 = load i32, ptr %8, align 4, !tbaa !9
  %1169 = zext i32 %1168 to i64
  %1170 = and i64 %1169, 4194304
  %1171 = icmp eq i64 %1170, 0
  br i1 %1171, label %1172, label %1196

1172:                                             ; preds = %1167
  %1173 = load ptr, ptr %4, align 8, !tbaa !5
  %1174 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1173, i32 0, i32 0
  %1175 = load ptr, ptr %1174, align 8, !tbaa !19
  %1176 = icmp eq ptr %1175, inttoptr (i64 1476550656 to ptr)
  br i1 %1176, label %1177, label %1195

1177:                                             ; preds = %1172
  %1178 = load ptr, ptr %4, align 8, !tbaa !5
  %1179 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1178, i32 0, i32 0
  %1180 = load ptr, ptr %1179, align 8, !tbaa !19
  %1181 = icmp eq ptr %1180, inttoptr (i64 1073881088 to ptr)
  br i1 %1181, label %1187, label %1182

1182:                                             ; preds = %1177
  %1183 = load ptr, ptr %4, align 8, !tbaa !5
  %1184 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1183, i32 0, i32 0
  %1185 = load ptr, ptr %1184, align 8, !tbaa !19
  %1186 = icmp eq ptr %1185, inttoptr (i64 1073881344 to ptr)
  br label %1187

1187:                                             ; preds = %1182, %1177
  %1188 = phi i1 [ true, %1177 ], [ %1186, %1182 ]
  %1189 = zext i1 %1188 to i64
  %1190 = select i1 %1188, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1191 = load i32, ptr %8, align 4, !tbaa !9
  %1192 = zext i32 %1191 to i64
  %1193 = or i64 4194304, %1192
  %1194 = trunc i64 %1193 to i32
  call void @LL_ADC_SetCommonPathInternalCh(ptr noundef %1190, i32 noundef %1194)
  br label %1195

1195:                                             ; preds = %1187, %1172
  br label %1197

1196:                                             ; preds = %1167, %1161
  br label %1197

1197:                                             ; preds = %1196, %1195
  br label %1198

1198:                                             ; preds = %1197, %1160
  br label %1199

1199:                                             ; preds = %1198, %1125
  br label %1207

1200:                                             ; preds = %1059
  %1201 = load ptr, ptr %4, align 8, !tbaa !5
  %1202 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1201, i32 0, i32 4
  %1203 = load volatile i32, ptr %1202, align 4, !tbaa !35
  %1204 = zext i32 %1203 to i64
  %1205 = or i64 %1204, 32
  %1206 = trunc i64 %1205 to i32
  store volatile i32 %1206, ptr %1202, align 4, !tbaa !35
  store i32 1, ptr %6, align 4, !tbaa !9
  br label %1207

1207:                                             ; preds = %1200, %1199
  br label %1208

1208:                                             ; preds = %1207, %1031
  br label %1209

1209:                                             ; preds = %1208, %799
  br label %1210

1210:                                             ; preds = %1209
  %1211 = load ptr, ptr %4, align 8, !tbaa !5
  %1212 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1211, i32 0, i32 3
  store i32 0, ptr %1212, align 8, !tbaa !20
  br label %1213

1213:                                             ; preds = %1210
  br label %1214

1214:                                             ; preds = %1213
  %1215 = load i32, ptr %6, align 4, !tbaa !9
  store i32 %1215, ptr %3, align 4
  store i32 1, ptr %13, align 4
  br label %1216

1216:                                             ; preds = %1214, %61
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  %1217 = load i32, ptr %3, align 4
  ret i32 %1217
}

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @__RBIT(i32 noundef) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.ctlz.i32(i32, i1 immarg) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetChannelSamplingTime(ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetOffset(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetOffsetSignedSaturation(ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_GetOffsetChannel(ptr noundef, i32 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetChannelSingleDiff(ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_GetCommonPathInternalCh(ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetCommonPathInternalCh(ptr noundef, i32 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint 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 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 = { alwaysinline 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 16}
!12 = !{!"", !6, i64 0, !13, i64 8, !6, i64 88, !10, i64 96, !10, i64 100, !10, i64 104, !15, i64 108}
!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, !10, i64 48, !10, i64 52, !10, i64 56, !14, i64 60}
!14 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!15 = !{!"", !10, i64 0, !10, i64 4}
!16 = !{!12, !10, i64 64}
!17 = !{!18, !10, i64 12}
!18 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !15, i64 60}
!19 = !{!12, !6, i64 0}
!20 = !{!12, !10, i64 96}
!21 = !{!18, !10, i64 32}
!22 = !{!18, !10, i64 4}
!23 = !{!18, !10, i64 48}
!24 = !{!18, !10, i64 0}
!25 = !{!18, !10, i64 52}
!26 = !{!27, !10, i64 76}
!27 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !7, i64 80, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !7, i64 112, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !7, i64 144, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200}
!28 = !{!12, !10, i64 108}
!29 = !{!12, !10, i64 112}
!30 = !{!27, !10, i64 28}
!31 = !{!18, !10, i64 40}
!32 = !{!27, !10, i64 12}
!33 = !{!18, !10, i64 44}
!34 = !{!18, !10, i64 36}
!35 = !{!12, !10, i64 100}
!36 = !{!18, !10, i64 56}
!37 = !{!27, !10, i64 16}
!38 = !{!18, !10, i64 60}
!39 = !{!18, !10, i64 64}
!40 = !{!18, !10, i64 8}
!41 = !{!42, !10, i64 0}
!42 = !{!"", !10, i64 0, !10, i64 4, !7, i64 8, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84}
!43 = !{!18, !10, i64 20}
!44 = !{!18, !10, i64 16}
!45 = !{!18, !10, i64 28}
!46 = distinct !{!46, !47}
!47 = !{!"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"

@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: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_IsEnabled(ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_REG_IsConversionOngoing(ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_INJ_IsConversionOngoing(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 3) i32 @HAL_ADCEx_InjectedConfigChannel(ptr noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #2 {
  %3 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3)
  store volatile i32 0, ptr %3, align 4, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %1, i64 12
  %5 = getelementptr inbounds i8, ptr %0, i64 96
  %6 = load i32, ptr %5, align 8, !tbaa !9
  %7 = icmp eq i32 %6, 1
  br i1 %7, label %511, label %8

8:                                                ; preds = %2
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  store i32 1, ptr %5, align 8, !tbaa !9
  %10 = load i32, ptr %9, align 8, !tbaa !15
  %11 = icmp eq i32 %10, 0
  br i1 %11, label %16, label %12

12:                                               ; preds = %8
  %13 = getelementptr inbounds i8, ptr %1, i64 32
  %14 = load i32, ptr %13, align 4, !tbaa !16
  %15 = icmp eq i32 %14, 1
  br i1 %15, label %16, label %39

16:                                               ; preds = %12, %8
  %17 = getelementptr inbounds i8, ptr %1, i64 4
  %18 = load i32, ptr %17, align 4, !tbaa !18
  %19 = icmp eq i32 %18, 9
  br i1 %19, label %20, label %._crit_edge209

._crit_edge209:                                   ; preds = %16
  %.pre210 = load ptr, ptr %0, align 8, !tbaa !19
  br label %73

20:                                               ; preds = %16
  %21 = getelementptr inbounds i8, ptr %1, i64 48
  %22 = load i32, ptr %21, align 4, !tbaa !20
  %.not193 = icmp eq i32 %22, 0
  %23 = load i32, ptr %1, align 4, !tbaa !21
  %24 = lshr i32 %23, 17
  %25 = and i32 %24, 15872
  br i1 %.not193, label %32, label %26

26:                                               ; preds = %20
  %27 = and i32 %22, 124
  %28 = getelementptr inbounds i8, ptr %1, i64 52
  %29 = load i32, ptr %28, align 4, !tbaa !22
  %30 = or i32 %29, %27
  %31 = or i32 %30, %25
  br label %32

32:                                               ; preds = %20, %26
  %.0 = phi i32 [ %31, %26 ], [ %25, %20 ]
  %33 = load ptr, ptr %0, align 8, !tbaa !19
  %34 = getelementptr inbounds i8, ptr %33, i64 76
  %35 = load volatile i32, ptr %34, align 4, !tbaa !23
  %36 = and i32 %35, 68173824
  %37 = or i32 %36, %.0
  store volatile i32 %37, ptr %34, align 4, !tbaa !23
  %38 = getelementptr inbounds i8, ptr %0, i64 108
  store i32 %.0, ptr %38, align 4, !tbaa !25
  br label %73

39:                                               ; preds = %12
  %40 = getelementptr inbounds i8, ptr %0, i64 108
  %41 = getelementptr inbounds i8, ptr %0, i64 112
  %42 = load i32, ptr %41, align 4, !tbaa !26
  %43 = icmp eq i32 %42, 0
  br i1 %43, label %44, label %._crit_edge

._crit_edge:                                      ; preds = %39
  %.pre = load i32, ptr %40, align 4, !tbaa !25
  br label %54

44:                                               ; preds = %39
  %45 = getelementptr inbounds i8, ptr %1, i64 48
  %46 = load i32, ptr %45, align 4, !tbaa !20
  %.not192 = icmp eq i32 %46, 0
  %47 = add i32 %14, -1
  br i1 %.not192, label %54, label %48

48:                                               ; preds = %44
  %49 = and i32 %46, 124
  %50 = getelementptr inbounds i8, ptr %1, i64 52
  %51 = load i32, ptr %50, align 4, !tbaa !22
  %52 = or i32 %49, %51
  %53 = or i32 %52, %47
  br label %54

54:                                               ; preds = %44, %._crit_edge, %48
  %55 = phi i32 [ 0, %48 ], [ %.pre, %._crit_edge ], [ 0, %44 ]
  %56 = phi i32 [ %14, %48 ], [ %42, %._crit_edge ], [ %14, %44 ]
  %.1 = phi i32 [ %53, %48 ], [ 0, %._crit_edge ], [ %47, %44 ]
  %57 = getelementptr inbounds i8, ptr %1, i64 4
  %58 = load i32, ptr %57, align 4, !tbaa !18
  %59 = and i32 %58, 31
  %60 = load i32, ptr %1, align 4, !tbaa !21
  %61 = lshr i32 %60, 26
  %62 = and i32 %61, 31
  %63 = shl i32 %62, %59
  %64 = or i32 %63, %.1
  %65 = add i32 %56, -1
  store i32 %65, ptr %41, align 4, !tbaa !26
  %66 = or i32 %64, %55
  store i32 %66, ptr %40, align 4, !tbaa !25
  %67 = icmp eq i32 %65, 0
  %.pre211 = load ptr, ptr %0, align 8, !tbaa !19
  br i1 %67, label %68, label %73

68:                                               ; preds = %54
  %69 = getelementptr inbounds i8, ptr %.pre211, i64 76
  %70 = load volatile i32, ptr %69, align 4, !tbaa !23
  %71 = and i32 %70, 68173824
  %72 = or i32 %71, %66
  store volatile i32 %72, ptr %69, align 4, !tbaa !23
  br label %73

73:                                               ; preds = %._crit_edge209, %54, %68, %32
  %74 = phi ptr [ %.pre210, %._crit_edge209 ], [ %.pre211, %54 ], [ %.pre211, %68 ], [ %33, %32 ]
  %75 = tail call i32 @LL_ADC_INJ_IsConversionOngoing(ptr noundef %74)
  %76 = icmp eq i32 %75, 0
  br i1 %76, label %77, label %._crit_edge212

._crit_edge212:                                   ; preds = %73
  %.pre213 = load ptr, ptr %0, align 8, !tbaa !19
  br label %111

77:                                               ; preds = %73
  %78 = load i32, ptr %1, align 4, !tbaa !21
  %79 = and i32 %78, 1048575
  %80 = icmp eq i32 %79, 0
  br i1 %80, label %81, label %84

81:                                               ; preds = %77
  %82 = lshr i32 %78, 26
  %83 = and i32 %82, 31
  br label %87

84:                                               ; preds = %77
  %85 = tail call i32 @__RBIT(i32 noundef %78)
  %86 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %85, i1 true)
  br label %87

87:                                               ; preds = %84, %81
  %88 = phi i32 [ %83, %81 ], [ %86, %84 ]
  %89 = shl nuw i32 1, %88
  %90 = load ptr, ptr %0, align 8, !tbaa !19
  %91 = getelementptr inbounds i8, ptr %90, i64 28
  %92 = load volatile i32, ptr %91, align 4, !tbaa !27
  %93 = or i32 %92, %89
  store volatile i32 %93, ptr %91, align 4, !tbaa !27
  %94 = getelementptr inbounds i8, ptr %1, i64 40
  %95 = load i32, ptr %94, align 4, !tbaa !28
  %96 = icmp eq i32 %95, 0
  %97 = getelementptr inbounds i8, ptr %90, i64 12
  %98 = load volatile i32, ptr %97, align 4, !tbaa !29
  %99 = and i32 %98, -3145729
  %100 = getelementptr inbounds i8, ptr %1, i64 44
  %101 = load i32, ptr %100, align 4, !tbaa !30
  %102 = shl i32 %101, 21
  br i1 %96, label %103, label %109

103:                                              ; preds = %87
  %104 = getelementptr inbounds i8, ptr %1, i64 36
  %105 = load i32, ptr %104, align 4, !tbaa !31
  %106 = shl i32 %105, 20
  %107 = or i32 %99, %106
  %108 = or i32 %107, %102
  store volatile i32 %108, ptr %97, align 4, !tbaa !29
  br label %111

109:                                              ; preds = %87
  %110 = or i32 %102, %99
  store volatile i32 %110, ptr %97, align 4, !tbaa !29
  br label %111

111:                                              ; preds = %._crit_edge212, %103, %109
  %112 = phi ptr [ %.pre213, %._crit_edge212 ], [ %90, %103 ], [ %90, %109 ]
  %113 = tail call i32 @LL_ADC_REG_IsConversionOngoing(ptr noundef %112)
  %114 = load ptr, ptr %0, align 8, !tbaa !19
  %115 = tail call i32 @LL_ADC_INJ_IsConversionOngoing(ptr noundef %114)
  %116 = icmp eq i32 %113, 0
  %117 = icmp eq i32 %115, 0
  %or.cond = select i1 %116, i1 %117, i1 false
  br i1 %or.cond, label %118, label %341

118:                                              ; preds = %111
  %119 = getelementptr inbounds i8, ptr %1, i64 48
  %120 = load i32, ptr %119, align 4, !tbaa !20
  %121 = icmp eq i32 %120, 0
  br i1 %121, label %126, label %122

122:                                              ; preds = %118
  %123 = getelementptr inbounds i8, ptr %1, i64 52
  %124 = load i32, ptr %123, align 4, !tbaa !22
  %125 = icmp eq i32 %124, 0
  br i1 %125, label %126, label %137

126:                                              ; preds = %122, %118
  %127 = getelementptr inbounds i8, ptr %1, i64 40
  %128 = load i32, ptr %127, align 4, !tbaa !28
  %129 = icmp eq i32 %128, 1
  %130 = load ptr, ptr %0, align 8, !tbaa !19
  %131 = getelementptr inbounds i8, ptr %130, i64 12
  %132 = load volatile i32, ptr %131, align 4, !tbaa !29
  br i1 %129, label %133, label %135

133:                                              ; preds = %126
  %134 = or i32 %132, 33554432
  store volatile i32 %134, ptr %131, align 4, !tbaa !29
  br label %150

135:                                              ; preds = %126
  %136 = and i32 %132, -33554433
  store volatile i32 %136, ptr %131, align 4, !tbaa !29
  br label %150

137:                                              ; preds = %122
  %138 = getelementptr inbounds i8, ptr %1, i64 40
  %139 = load i32, ptr %138, align 4, !tbaa !28
  %140 = icmp eq i32 %139, 1
  br i1 %140, label %141, label %145

141:                                              ; preds = %137
  %142 = getelementptr inbounds i8, ptr %0, i64 100
  %143 = load volatile i32, ptr %142, align 4, !tbaa !32
  %144 = or i32 %143, 32
  store volatile i32 %144, ptr %142, align 4, !tbaa !32
  br label %150

145:                                              ; preds = %137
  %146 = load ptr, ptr %0, align 8, !tbaa !19
  %147 = getelementptr inbounds i8, ptr %146, i64 12
  %148 = load volatile i32, ptr %147, align 4, !tbaa !29
  %149 = and i32 %148, -33554433
  store volatile i32 %149, ptr %147, align 4, !tbaa !29
  br label %150

150:                                              ; preds = %141, %145, %133, %135
  %.0182 = phi i32 [ 0, %133 ], [ 0, %135 ], [ 1, %141 ], [ 0, %145 ]
  %151 = getelementptr inbounds i8, ptr %1, i64 56
  %152 = load i32, ptr %151, align 4, !tbaa !33
  %153 = icmp eq i32 %152, 1
  %154 = load ptr, ptr %0, align 8, !tbaa !19
  %155 = getelementptr inbounds i8, ptr %154, i64 16
  %156 = load volatile i32, ptr %155, align 4, !tbaa !34
  br i1 %153, label %157, label %167

157:                                              ; preds = %150
  %158 = and i32 %156, -67043811
  %159 = getelementptr inbounds i8, ptr %1, i64 60
  %160 = load i32, ptr %159, align 4, !tbaa !35
  %161 = shl i32 %160, 16
  %162 = add i32 %161, -65534
  %163 = getelementptr inbounds i8, ptr %1, i64 64
  %164 = load i32, ptr %163, align 4, !tbaa !36
  %165 = or i32 %164, %158
  %166 = or i32 %165, %162
  br label %169

167:                                              ; preds = %150
  %168 = and i32 %156, -3
  br label %169

169:                                              ; preds = %167, %157
  %.sink = phi i32 [ %168, %167 ], [ %166, %157 ]
  store volatile i32 %.sink, ptr %155, align 4, !tbaa !34
  %170 = load i32, ptr %1, align 4, !tbaa !21
  %171 = getelementptr inbounds i8, ptr %1, i64 8
  %172 = load i32, ptr %171, align 4, !tbaa !37
  tail call void @LL_ADC_SetChannelSamplingTime(ptr noundef nonnull %154, i32 noundef %170, i32 noundef %172)
  %173 = load volatile i32, ptr inttoptr (i64 1543507968 to ptr), align 4096, !tbaa !38
  %174 = and i32 %173, -268435456
  %175 = icmp eq i32 %174, 268435456
  br i1 %175, label %176, label %185

176:                                              ; preds = %169
  %177 = getelementptr inbounds i8, ptr %1, i64 20
  %178 = load i32, ptr %177, align 4, !tbaa !40
  %179 = load ptr, ptr %0, align 8, !tbaa !19
  %180 = getelementptr inbounds i8, ptr %179, i64 12
  %181 = load volatile i32, ptr %180, align 4, !tbaa !29
  %182 = lshr i32 %181, 1
  %183 = and i32 %182, 14
  %184 = shl i32 %178, %183
  br label %201

185:                                              ; preds = %169
  %186 = load ptr, ptr %0, align 8, !tbaa !19
  %187 = getelementptr inbounds i8, ptr %186, i64 12
  %188 = load volatile i32, ptr %187, align 4, !tbaa !29
  %189 = and i32 %188, 16
  %190 = icmp eq i32 %189, 0
  %191 = getelementptr inbounds i8, ptr %1, i64 20
  %192 = load i32, ptr %191, align 4, !tbaa !40
  %193 = load volatile i32, ptr %187, align 4, !tbaa !29
  %194 = lshr i32 %193, 1
  br i1 %190, label %195, label %198

195:                                              ; preds = %185
  %196 = and i32 %194, 14
  %197 = shl i32 %192, %196
  br label %201

198:                                              ; preds = %185
  %199 = and i32 %194, 8
  %200 = shl i32 %192, %199
  br label %201

201:                                              ; preds = %195, %198, %176
  %202 = phi ptr [ %179, %176 ], [ %186, %195 ], [ %186, %198 ]
  %203 = phi i32 [ %184, %176 ], [ %197, %195 ], [ %200, %198 ]
  %204 = getelementptr inbounds i8, ptr %1, i64 16
  %205 = load i32, ptr %204, align 4, !tbaa !41
  %.not194 = icmp eq i32 %205, 4
  br i1 %.not194, label %214, label %206

206:                                              ; preds = %201
  %207 = load i32, ptr %1, align 4, !tbaa !21
  tail call void @LL_ADC_SetOffset(ptr noundef nonnull %202, i32 noundef %205, i32 noundef %207, i32 noundef %203)
  %208 = load ptr, ptr %0, align 8, !tbaa !19
  %209 = load i32, ptr %204, align 4, !tbaa !41
  %210 = getelementptr inbounds i8, ptr %1, i64 28
  %211 = load i32, ptr %210, align 4, !tbaa !42
  %212 = icmp eq i32 %211, 1
  %213 = select i1 %212, i32 -2147483648, i32 0
  tail call void @LL_ADC_SetOffsetSignedSaturation(ptr noundef %208, i32 noundef %209, i32 noundef %213)
  br label %341

214:                                              ; preds = %201
  %215 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef nonnull %202, i32 noundef 0)
  %216 = and i32 %215, 1048575
  %217 = icmp eq i32 %216, 0
  %218 = load ptr, ptr %0, align 8, !tbaa !19
  %219 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef %218, i32 noundef 0)
  br i1 %217, label %220, label %223

220:                                              ; preds = %214
  %221 = lshr i32 %219, 26
  %222 = and i32 %221, 31
  br label %226

223:                                              ; preds = %214
  %224 = tail call i32 @__RBIT(i32 noundef %219)
  %225 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %224, i1 true)
  br label %226

226:                                              ; preds = %223, %220
  %.in = phi i32 [ %222, %220 ], [ %225, %223 ]
  %227 = zext nneg i32 %.in to i64
  %228 = load i32, ptr %1, align 4, !tbaa !21
  %229 = zext i32 %228 to i64
  %230 = and i64 %229, 1048575
  %231 = icmp eq i64 %230, 0
  br i1 %231, label %232, label %235

232:                                              ; preds = %226
  %233 = lshr i64 %229, 26
  %234 = and i64 %233, 31
  br label %239

235:                                              ; preds = %226
  %236 = tail call i32 @__RBIT(i32 noundef %228)
  %237 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %236, i1 true)
  %238 = zext nneg i32 %237 to i64
  br label %239

239:                                              ; preds = %235, %232
  %240 = phi i64 [ %234, %232 ], [ %238, %235 ]
  %241 = icmp eq i64 %240, %227
  br i1 %241, label %242, label %245

242:                                              ; preds = %239
  %243 = load ptr, ptr %0, align 8, !tbaa !19
  %244 = load i32, ptr %1, align 4, !tbaa !21
  tail call void @LL_ADC_SetOffset(ptr noundef %243, i32 noundef 0, i32 noundef %244, i32 noundef 0)
  br label %245

245:                                              ; preds = %242, %239
  %246 = load ptr, ptr %0, align 8, !tbaa !19
  %247 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef %246, i32 noundef 1)
  %248 = and i32 %247, 1048575
  %249 = icmp eq i32 %248, 0
  %250 = load ptr, ptr %0, align 8, !tbaa !19
  %251 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef %250, i32 noundef 1)
  br i1 %249, label %252, label %255

252:                                              ; preds = %245
  %253 = lshr i32 %251, 26
  %254 = and i32 %253, 31
  br label %258

255:                                              ; preds = %245
  %256 = tail call i32 @__RBIT(i32 noundef %251)
  %257 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %256, i1 true)
  br label %258

258:                                              ; preds = %255, %252
  %.in195 = phi i32 [ %254, %252 ], [ %257, %255 ]
  %259 = zext nneg i32 %.in195 to i64
  %260 = load i32, ptr %1, align 4, !tbaa !21
  %261 = zext i32 %260 to i64
  %262 = and i64 %261, 1048575
  %263 = icmp eq i64 %262, 0
  br i1 %263, label %264, label %267

264:                                              ; preds = %258
  %265 = lshr i64 %261, 26
  %266 = and i64 %265, 31
  br label %271

267:                                              ; preds = %258
  %268 = tail call i32 @__RBIT(i32 noundef %260)
  %269 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %268, i1 true)
  %270 = zext nneg i32 %269 to i64
  br label %271

271:                                              ; preds = %267, %264
  %272 = phi i64 [ %266, %264 ], [ %270, %267 ]
  %273 = icmp eq i64 %272, %259
  br i1 %273, label %274, label %277

274:                                              ; preds = %271
  %275 = load ptr, ptr %0, align 8, !tbaa !19
  %276 = load i32, ptr %1, align 4, !tbaa !21
  tail call void @LL_ADC_SetOffset(ptr noundef %275, i32 noundef 1, i32 noundef %276, i32 noundef 0)
  br label %277

277:                                              ; preds = %274, %271
  %278 = load ptr, ptr %0, align 8, !tbaa !19
  %279 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef %278, i32 noundef 2)
  %280 = and i32 %279, 1048575
  %281 = icmp eq i32 %280, 0
  %282 = load ptr, ptr %0, align 8, !tbaa !19
  %283 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef %282, i32 noundef 2)
  br i1 %281, label %284, label %287

284:                                              ; preds = %277
  %285 = lshr i32 %283, 26
  %286 = and i32 %285, 31
  br label %290

287:                                              ; preds = %277
  %288 = tail call i32 @__RBIT(i32 noundef %283)
  %289 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %288, i1 true)
  br label %290

290:                                              ; preds = %287, %284
  %.in196 = phi i32 [ %286, %284 ], [ %289, %287 ]
  %291 = zext nneg i32 %.in196 to i64
  %292 = load i32, ptr %1, align 4, !tbaa !21
  %293 = zext i32 %292 to i64
  %294 = and i64 %293, 1048575
  %295 = icmp eq i64 %294, 0
  br i1 %295, label %296, label %299

296:                                              ; preds = %290
  %297 = lshr i64 %293, 26
  %298 = and i64 %297, 31
  br label %303

299:                                              ; preds = %290
  %300 = tail call i32 @__RBIT(i32 noundef %292)
  %301 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %300, i1 true)
  %302 = zext nneg i32 %301 to i64
  br label %303

303:                                              ; preds = %299, %296
  %304 = phi i64 [ %298, %296 ], [ %302, %299 ]
  %305 = icmp eq i64 %304, %291
  br i1 %305, label %306, label %309

306:                                              ; preds = %303
  %307 = load ptr, ptr %0, align 8, !tbaa !19
  %308 = load i32, ptr %1, align 4, !tbaa !21
  tail call void @LL_ADC_SetOffset(ptr noundef %307, i32 noundef 3, i32 noundef %308, i32 noundef 0)
  br label %309

309:                                              ; preds = %306, %303
  %310 = load ptr, ptr %0, align 8, !tbaa !19
  %311 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef %310, i32 noundef 3)
  %312 = and i32 %311, 1048575
  %313 = icmp eq i32 %312, 0
  %314 = load ptr, ptr %0, align 8, !tbaa !19
  %315 = tail call i32 @LL_ADC_GetOffsetChannel(ptr noundef %314, i32 noundef 3)
  br i1 %313, label %316, label %319

316:                                              ; preds = %309
  %317 = lshr i32 %315, 26
  %318 = and i32 %317, 31
  br label %322

319:                                              ; preds = %309
  %320 = tail call i32 @__RBIT(i32 noundef %315)
  %321 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %320, i1 true)
  br label %322

322:                                              ; preds = %319, %316
  %.in197 = phi i32 [ %318, %316 ], [ %321, %319 ]
  %323 = zext nneg i32 %.in197 to i64
  %324 = load i32, ptr %1, align 4, !tbaa !21
  %325 = zext i32 %324 to i64
  %326 = and i64 %325, 1048575
  %327 = icmp eq i64 %326, 0
  br i1 %327, label %328, label %331

328:                                              ; preds = %322
  %329 = lshr i64 %325, 26
  %330 = and i64 %329, 31
  br label %335

331:                                              ; preds = %322
  %332 = tail call i32 @__RBIT(i32 noundef %324)
  %333 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %332, i1 true)
  %334 = zext nneg i32 %333 to i64
  br label %335

335:                                              ; preds = %331, %328
  %336 = phi i64 [ %330, %328 ], [ %334, %331 ]
  %337 = icmp eq i64 %336, %323
  br i1 %337, label %338, label %341

338:                                              ; preds = %335
  %339 = load ptr, ptr %0, align 8, !tbaa !19
  %340 = load i32, ptr %1, align 4, !tbaa !21
  tail call void @LL_ADC_SetOffset(ptr noundef %339, i32 noundef 3, i32 noundef %340, i32 noundef 0)
  br label %341

341:                                              ; preds = %206, %338, %335, %111
  %.1183 = phi i32 [ %.0182, %206 ], [ %.0182, %338 ], [ %.0182, %335 ], [ 0, %111 ]
  %342 = load ptr, ptr %0, align 8, !tbaa !19
  %343 = tail call i32 @LL_ADC_IsEnabled(ptr noundef %342)
  %344 = icmp eq i32 %343, 0
  br i1 %344, label %345, label %.loopexit

345:                                              ; preds = %341
  %346 = load ptr, ptr %0, align 8, !tbaa !19
  %347 = load i32, ptr %1, align 4, !tbaa !21
  %348 = load i32, ptr %4, align 4, !tbaa !43
  tail call void @LL_ADC_SetChannelSingleDiff(ptr noundef %346, i32 noundef %347, i32 noundef %348)
  %349 = load i32, ptr %4, align 4, !tbaa !43
  %350 = icmp eq i32 %349, 1207894016
  br i1 %350, label %351, label %457

351:                                              ; preds = %345
  %352 = load ptr, ptr %0, align 8, !tbaa !19
  %353 = load i32, ptr %1, align 4, !tbaa !21
  %354 = zext i32 %353 to i64
  %355 = and i64 %354, 1048575
  %356 = icmp eq i64 %355, 0
  br i1 %356, label %357, label %359

357:                                              ; preds = %351
  %358 = lshr i64 %354, 26
  br label %363

359:                                              ; preds = %351
  %360 = tail call i32 @__RBIT(i32 noundef %353)
  %361 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %360, i1 true)
  %362 = zext nneg i32 %361 to i64
  br label %363

363:                                              ; preds = %359, %357
  %364 = phi i64 [ %358, %357 ], [ %362, %359 ]
  %365 = add nuw nsw i64 %364, 1
  %366 = and i64 %365, 30
  %367 = icmp ult i64 %366, 10
  %368 = load i32, ptr %1, align 4, !tbaa !21
  %369 = and i32 %368, 1048575
  %370 = icmp eq i32 %369, 0
  br i1 %367, label %371, label %411

371:                                              ; preds = %363
  br i1 %370, label %372, label %375

372:                                              ; preds = %371
  %373 = lshr i32 %368, 26
  %374 = and i32 %373, 31
  br label %378

375:                                              ; preds = %371
  %376 = tail call i32 @__RBIT(i32 noundef %368)
  %377 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %376, i1 true)
  %.pre216 = load i32, ptr %1, align 4, !tbaa !21
  br label %378

378:                                              ; preds = %375, %372
  %379 = phi i32 [ %368, %372 ], [ %.pre216, %375 ]
  %380 = phi i32 [ %374, %372 ], [ %377, %375 ]
  %381 = shl nuw nsw i32 %380, 26
  %382 = add nuw i32 %381, 67108864
  %383 = and i32 %382, 2080374784
  %384 = and i32 %379, 1048575
  %385 = icmp eq i32 %384, 0
  br i1 %385, label %386, label %388

386:                                              ; preds = %378
  %387 = lshr i32 %379, 26
  br label %391

388:                                              ; preds = %378
  %389 = tail call i32 @__RBIT(i32 noundef %379)
  %390 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %389, i1 true)
  %.pre217 = load i32, ptr %1, align 4, !tbaa !21
  br label %391

391:                                              ; preds = %388, %386
  %392 = phi i32 [ %379, %386 ], [ %.pre217, %388 ]
  %393 = phi i32 [ %387, %386 ], [ %390, %388 ]
  %394 = add nuw nsw i32 %393, 1
  %395 = and i32 %394, 31
  %396 = shl nuw i32 1, %395
  %397 = or i32 %396, %383
  %398 = and i32 %392, 1048575
  %399 = icmp eq i32 %398, 0
  br i1 %399, label %400, label %402

400:                                              ; preds = %391
  %401 = lshr i32 %392, 26
  br label %405

402:                                              ; preds = %391
  %403 = tail call i32 @__RBIT(i32 noundef %392)
  %404 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %403, i1 true)
  br label %405

405:                                              ; preds = %402, %400
  %406 = phi i32 [ %401, %400 ], [ %404, %402 ]
  %407 = add nuw nsw i32 %406, 1
  %408 = and i32 %407, 31
  %409 = mul nuw nsw i32 %408, 3145728
  %410 = or i32 %397, %409
  br label %453

411:                                              ; preds = %363
  br i1 %370, label %412, label %415

412:                                              ; preds = %411
  %413 = lshr i32 %368, 26
  %414 = and i32 %413, 31
  br label %418

415:                                              ; preds = %411
  %416 = tail call i32 @__RBIT(i32 noundef %368)
  %417 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %416, i1 true)
  %.pre214 = load i32, ptr %1, align 4, !tbaa !21
  br label %418

418:                                              ; preds = %415, %412
  %419 = phi i32 [ %368, %412 ], [ %.pre214, %415 ]
  %420 = phi i32 [ %414, %412 ], [ %417, %415 ]
  %421 = shl nuw nsw i32 %420, 26
  %422 = add nuw i32 %421, 67108864
  %423 = and i32 %422, 2080374784
  %424 = and i32 %419, 1048575
  %425 = icmp eq i32 %424, 0
  br i1 %425, label %426, label %428

426:                                              ; preds = %418
  %427 = lshr i32 %419, 26
  br label %431

428:                                              ; preds = %418
  %429 = tail call i32 @__RBIT(i32 noundef %419)
  %430 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %429, i1 true)
  %.pre215 = load i32, ptr %1, align 4, !tbaa !21
  br label %431

431:                                              ; preds = %428, %426
  %432 = phi i32 [ %419, %426 ], [ %.pre215, %428 ]
  %433 = phi i32 [ %427, %426 ], [ %430, %428 ]
  %434 = add nuw nsw i32 %433, 1
  %435 = and i32 %434, 31
  %436 = shl nuw i32 1, %435
  %437 = and i32 %432, 1048575
  %438 = icmp eq i32 %437, 0
  br i1 %438, label %439, label %441

439:                                              ; preds = %431
  %440 = lshr i32 %432, 26
  br label %444

441:                                              ; preds = %431
  %442 = tail call i32 @__RBIT(i32 noundef %432)
  %443 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %442, i1 true)
  br label %444

444:                                              ; preds = %441, %439
  %445 = phi i32 [ %440, %439 ], [ %443, %441 ]
  %446 = add nuw nsw i32 %445, 1
  %447 = and i32 %446, 31
  %448 = mul nuw nsw i32 %447, 3145728
  %449 = add nsw i32 %448, -31457280
  %450 = or i32 %423, %436
  %451 = or i32 %450, %449
  %452 = or i32 %451, 33554432
  br label %453

453:                                              ; preds = %444, %405
  %454 = phi i32 [ %410, %405 ], [ %452, %444 ]
  %455 = getelementptr inbounds i8, ptr %1, i64 8
  %456 = load i32, ptr %455, align 4, !tbaa !37
  tail call void @LL_ADC_SetChannelSamplingTime(ptr noundef %352, i32 noundef %454, i32 noundef %456)
  br label %457

457:                                              ; preds = %453, %345
  %458 = load i32, ptr %1, align 4, !tbaa !21
  %.not198 = icmp sgt i32 %458, -1
  br i1 %.not198, label %.loopexit, label %459

459:                                              ; preds = %457
  %460 = load ptr, ptr %0, align 8, !tbaa !19
  %magicptr = ptrtoint ptr %460 to i64
  switch i64 %magicptr, label %465 [
    i64 1073881344, label %461
    i64 1073881088, label %461
  ]

461:                                              ; preds = %459, %459
  %462 = tail call i32 @LL_ADC_IsEnabled(ptr noundef nonnull inttoptr (i64 1073881088 to ptr))
  %463 = tail call i32 @LL_ADC_IsEnabled(ptr noundef nonnull inttoptr (i64 1073881344 to ptr))
  %464 = or i32 %463, %462
  br label %467

465:                                              ; preds = %459
  %466 = tail call i32 @LL_ADC_IsEnabled(ptr noundef nonnull inttoptr (i64 1476550656 to ptr))
  br label %467

467:                                              ; preds = %465, %461
  %468 = phi i32 [ %464, %461 ], [ %466, %465 ]
  %469 = icmp eq i32 %468, 0
  br i1 %469, label %470, label %507

470:                                              ; preds = %467
  %471 = load ptr, ptr %0, align 8, !tbaa !19
  %472 = icmp eq ptr %471, inttoptr (i64 1073881088 to ptr)
  %473 = icmp eq ptr %471, inttoptr (i64 1073881344 to ptr)
  %spec.select200 = or i1 %472, %473
  %474 = select i1 %spec.select200, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %475 = tail call i32 @LL_ADC_GetCommonPathInternalCh(ptr noundef nonnull %474)
  %476 = load i32, ptr %1, align 4, !tbaa !21
  %477 = icmp eq i32 %476, -880541696
  %478 = and i32 %475, 8388608
  %479 = icmp eq i32 %478, 0
  %or.cond202 = select i1 %477, i1 %479, i1 false
  br i1 %or.cond202, label %480, label %489

480:                                              ; preds = %470
  %481 = load ptr, ptr %0, align 8, !tbaa !19
  %482 = icmp eq ptr %481, inttoptr (i64 1476550656 to ptr)
  br i1 %482, label %483, label %.loopexit

483:                                              ; preds = %480
  %484 = or disjoint i32 %475, 8388608
  tail call void @LL_ADC_SetCommonPathInternalCh(ptr noundef nonnull inttoptr (i64 1476551424 to ptr), i32 noundef %484)
  %485 = load i32, ptr @SystemCoreClock, align 4, !tbaa !5
  %486 = udiv i32 %485, 200000
  %narrow = shl nuw nsw i32 %486, 1
  %487 = add nuw nsw i32 %narrow, 2
  store volatile i32 %487, ptr %3, align 4, !tbaa !5
  %.0..0..0..0.207 = load volatile i32, ptr %3, align 4, !tbaa !5
  %.not199208 = icmp eq i32 %.0..0..0..0.207, 0
  br i1 %.not199208, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %483, %.lr.ph
  %.0..0..0..0.7 = load volatile i32, ptr %3, align 4, !tbaa !5
  %488 = add i32 %.0..0..0..0.7, -1
  store volatile i32 %488, ptr %3, align 4, !tbaa !5
  %.0..0..0..0. = load volatile i32, ptr %3, align 4, !tbaa !5
  %.not199 = icmp eq i32 %.0..0..0..0., 0
  br i1 %.not199, label %.loopexit, label %.lr.ph, !llvm.loop !44

489:                                              ; preds = %470
  %490 = icmp eq i32 %476, -950927360
  %491 = and i32 %475, 16777216
  %492 = icmp eq i32 %491, 0
  %or.cond204 = select i1 %490, i1 %492, i1 false
  br i1 %or.cond204, label %493, label %498

493:                                              ; preds = %489
  %494 = load ptr, ptr %0, align 8, !tbaa !19
  %495 = icmp eq ptr %494, inttoptr (i64 1476550656 to ptr)
  br i1 %495, label %496, label %.loopexit

496:                                              ; preds = %493
  %497 = or disjoint i32 %475, 16777216
  tail call void @LL_ADC_SetCommonPathInternalCh(ptr noundef nonnull inttoptr (i64 1476551424 to ptr), i32 noundef %497)
  br label %.loopexit

498:                                              ; preds = %489
  %499 = icmp eq i32 %476, -810024960
  %500 = and i32 %475, 4194304
  %501 = icmp eq i32 %500, 0
  %or.cond206 = select i1 %499, i1 %501, i1 false
  br i1 %or.cond206, label %502, label %.loopexit

502:                                              ; preds = %498
  %503 = load ptr, ptr %0, align 8, !tbaa !19
  %504 = icmp eq ptr %503, inttoptr (i64 1476550656 to ptr)
  br i1 %504, label %505, label %.loopexit

505:                                              ; preds = %502
  %506 = or disjoint i32 %475, 4194304
  tail call void @LL_ADC_SetCommonPathInternalCh(ptr noundef nonnull inttoptr (i64 1476551424 to ptr), i32 noundef %506)
  br label %.loopexit

507:                                              ; preds = %467
  %508 = getelementptr inbounds i8, ptr %0, i64 100
  %509 = load volatile i32, ptr %508, align 4, !tbaa !32
  %510 = or i32 %509, 32
  store volatile i32 %510, ptr %508, align 4, !tbaa !32
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph, %483, %341, %507, %496, %493, %498, %502, %505, %480, %457
  %.2 = phi i32 [ %.1183, %480 ], [ %.1183, %496 ], [ %.1183, %493 ], [ %.1183, %505 ], [ %.1183, %502 ], [ %.1183, %498 ], [ 1, %507 ], [ %.1183, %457 ], [ %.1183, %341 ], [ %.1183, %483 ], [ %.1183, %.lr.ph ]
  store i32 0, ptr %5, align 8, !tbaa !9
  br label %511

511:                                              ; preds = %2, %.loopexit
  %.0181 = phi i32 [ %.2, %.loopexit ], [ 2, %2 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3)
  ret i32 %.0181
}

; Function Attrs: alwaysinline nounwind uwtable
declare hidden i32 @__RBIT(i32 noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.ctlz.i32(i32, i1 immarg) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetChannelSamplingTime(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetOffset(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetOffsetSignedSaturation(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_GetOffsetChannel(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetChannelSingleDiff(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_GetCommonPathInternalCh(ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @LL_ADC_SetCommonPathInternalCh(ptr noundef, i32 noundef) local_unnamed_addr #1

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint 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 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 = { alwaysinline 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 #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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 96}
!10 = !{!"", !11, i64 0, !12, i64 8, !11, i64 88, !6, i64 96, !6, i64 100, !6, i64 104, !14, i64 108}
!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, !6, i64 48, !6, i64 52, !6, i64 56, !13, i64 60}
!13 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12}
!14 = !{!"", !6, i64 0, !6, i64 4}
!15 = !{!10, !6, i64 16}
!16 = !{!17, !6, i64 32}
!17 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !14, i64 60}
!18 = !{!17, !6, i64 4}
!19 = !{!10, !11, i64 0}
!20 = !{!17, !6, i64 48}
!21 = !{!17, !6, i64 0}
!22 = !{!17, !6, i64 52}
!23 = !{!24, !6, i64 76}
!24 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !7, i64 80, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !7, i64 112, !6, i64 128, !6, i64 132, !6, i64 136, !6, i64 140, !7, i64 144, !6, i64 160, !6, i64 164, !6, i64 168, !6, i64 172, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188, !6, i64 192, !6, i64 196, !6, i64 200}
!25 = !{!10, !6, i64 108}
!26 = !{!10, !6, i64 112}
!27 = !{!24, !6, i64 28}
!28 = !{!17, !6, i64 40}
!29 = !{!24, !6, i64 12}
!30 = !{!17, !6, i64 44}
!31 = !{!17, !6, i64 36}
!32 = !{!10, !6, i64 100}
!33 = !{!17, !6, i64 56}
!34 = !{!24, !6, i64 16}
!35 = !{!17, !6, i64 60}
!36 = !{!17, !6, i64 64}
!37 = !{!17, !6, i64 8}
!38 = !{!39, !6, i64 0}
!39 = !{!"", !6, i64 0, !6, i64 4, !7, i64 8, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84}
!40 = !{!17, !6, i64 20}
!41 = !{!17, !6, i64 16}
!42 = !{!17, !6, i64 28}
!43 = !{!17, !6, i64 12}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass