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

; 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, 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_REG_IsConversionOngoing(ptr noundef) #1

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_IsEnabled(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 %1181

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 9
  %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 13
  %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 13
  %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 14
  %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 9
  %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 13
  %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 9
  %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 13
  %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 14
  %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 9
  %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 %338

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 %278

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 = zext i32 %276 to i64
  br label %278

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

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

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

337:                                              ; preds = %318, %294
  br label %338

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

350:                                              ; preds = %338
  %351 = load i32, ptr %10, align 4, !tbaa !9
  %352 = zext i32 %351 to i64
  %353 = icmp eq i64 %352, 0
  br i1 %353, label %354, label %779

354:                                              ; preds = %350
  %355 = load ptr, ptr %5, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %355, i32 0, i32 13
  %357 = load i32, ptr %356, align 4, !tbaa !23
  %358 = zext i32 %357 to i64
  %359 = icmp eq i64 %358, 0
  br i1 %359, label %366, label %360

360:                                              ; preds = %354
  %361 = load ptr, ptr %5, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %361, i32 0, i32 14
  %363 = load i32, ptr %362, align 4, !tbaa !25
  %364 = zext i32 %363 to i64
  %365 = icmp eq i64 %364, 0
  br i1 %365, label %366, label %390

366:                                              ; preds = %360, %354
  %367 = load ptr, ptr %5, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %367, i32 0, i32 11
  %369 = load i32, ptr %368, align 4, !tbaa !31
  %370 = icmp eq i32 %369, 1
  br i1 %370, label %371, label %380

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

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

389:                                              ; preds = %380, %371
  br label %412

390:                                              ; preds = %360
  %391 = load ptr, ptr %5, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %391, i32 0, i32 11
  %393 = load i32, ptr %392, align 4, !tbaa !31
  %394 = icmp eq i32 %393, 1
  br i1 %394, label %395, label %402

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

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

411:                                              ; preds = %402, %395
  br label %412

412:                                              ; preds = %411, %389
  %413 = load ptr, ptr %5, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %413, i32 0, i32 15
  %415 = load i32, ptr %414, align 4, !tbaa !36
  %416 = icmp eq i32 %415, 1
  br i1 %416, label %417, label %443

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

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

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

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

481:                                              ; preds = %452
  %482 = load ptr, ptr %4, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %482, i32 0, i32 0
  %484 = load ptr, ptr %483, align 8, !tbaa !19
  %485 = getelementptr inbounds %struct.ADC_TypeDef, ptr %484, i32 0, i32 3
  %486 = load volatile i32, ptr %485, align 4, !tbaa !32
  %487 = zext i32 %486 to i64
  %488 = and i64 %487, 16
  %489 = icmp eq i64 %488, 0
  br i1 %489, label %490, label %505

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

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

520:                                              ; preds = %505, %490
  %521 = phi i32 [ %504, %490 ], [ %519, %505 ]
  br label %522

522:                                              ; preds = %520, %466
  %523 = phi i32 [ %480, %466 ], [ %521, %520 ]
  store i32 %523, ptr %7, align 4, !tbaa !9
  %524 = load ptr, ptr %5, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %524, i32 0, i32 4
  %526 = load i32, ptr %525, align 4, !tbaa !44
  %527 = zext i32 %526 to i64
  %528 = icmp ne i64 %527, 4
  br i1 %528, label %529, label %553

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

553:                                              ; preds = %522
  %554 = load ptr, ptr %4, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %554, i32 0, i32 0
  %556 = load ptr, ptr %555, align 8, !tbaa !19
  %557 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %556, i32 noundef 0)
  %558 = zext i32 %557 to i64
  %559 = and i64 %558, 1048575
  %560 = icmp eq i64 %559, 0
  br i1 %560, label %561, label %569

561:                                              ; preds = %553
  %562 = load ptr, ptr %4, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %562, i32 0, i32 0
  %564 = load ptr, ptr %563, align 8, !tbaa !19
  %565 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %564, i32 noundef 0)
  %566 = zext i32 %565 to i64
  %567 = and i64 %566, 2080374784
  %568 = lshr i64 %567, 26
  br label %577

569:                                              ; preds = %553
  %570 = load ptr, ptr %4, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %570, i32 0, i32 0
  %572 = load ptr, ptr %571, align 8, !tbaa !19
  %573 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %572, i32 noundef 0)
  %574 = call i32 @__RBIT(i32 noundef %573)
  %575 = call i32 @llvm.ctlz.i32(i32 %574, i1 true)
  %576 = zext i32 %575 to i64
  br label %577

577:                                              ; preds = %569, %561
  %578 = phi i64 [ %568, %561 ], [ %576, %569 ]
  %579 = load ptr, ptr %5, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %579, i32 0, i32 0
  %581 = load i32, ptr %580, align 4, !tbaa !24
  %582 = zext i32 %581 to i64
  %583 = and i64 %582, 1048575
  %584 = icmp eq i64 %583, 0
  br i1 %584, label %585, label %592

585:                                              ; preds = %577
  %586 = load ptr, ptr %5, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %586, i32 0, i32 0
  %588 = load i32, ptr %587, align 4, !tbaa !24
  %589 = zext i32 %588 to i64
  %590 = and i64 %589, 2080374784
  %591 = lshr i64 %590, 26
  br label %599

592:                                              ; preds = %577
  %593 = load ptr, ptr %5, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %593, i32 0, i32 0
  %595 = load i32, ptr %594, align 4, !tbaa !24
  %596 = call i32 @__RBIT(i32 noundef %595)
  %597 = call i32 @llvm.ctlz.i32(i32 %596, i1 true)
  %598 = zext i32 %597 to i64
  br label %599

599:                                              ; preds = %592, %585
  %600 = phi i64 [ %591, %585 ], [ %598, %592 ]
  %601 = icmp eq i64 %578, %600
  br i1 %601, label %602, label %609

602:                                              ; preds = %599
  %603 = load ptr, ptr %4, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %603, i32 0, i32 0
  %605 = load ptr, ptr %604, align 8, !tbaa !19
  %606 = load ptr, ptr %5, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %606, i32 0, i32 0
  %608 = load i32, ptr %607, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %605, i32 noundef 0, i32 noundef %608, i32 noundef 0)
  br label %609

609:                                              ; preds = %602, %599
  %610 = load ptr, ptr %4, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %610, i32 0, i32 0
  %612 = load ptr, ptr %611, align 8, !tbaa !19
  %613 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %612, i32 noundef 1)
  %614 = zext i32 %613 to i64
  %615 = and i64 %614, 1048575
  %616 = icmp eq i64 %615, 0
  br i1 %616, label %617, label %625

617:                                              ; preds = %609
  %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, 2080374784
  %624 = lshr i64 %623, 26
  br label %633

625:                                              ; preds = %609
  %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 = call i32 @__RBIT(i32 noundef %629)
  %631 = call i32 @llvm.ctlz.i32(i32 %630, i1 true)
  %632 = zext i32 %631 to i64
  br label %633

633:                                              ; preds = %625, %617
  %634 = phi i64 [ %624, %617 ], [ %632, %625 ]
  %635 = load ptr, ptr %5, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %635, i32 0, i32 0
  %637 = load i32, ptr %636, align 4, !tbaa !24
  %638 = zext i32 %637 to i64
  %639 = and i64 %638, 1048575
  %640 = icmp eq i64 %639, 0
  br i1 %640, label %641, label %648

641:                                              ; preds = %633
  %642 = load ptr, ptr %5, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %642, i32 0, i32 0
  %644 = load i32, ptr %643, align 4, !tbaa !24
  %645 = zext i32 %644 to i64
  %646 = and i64 %645, 2080374784
  %647 = lshr i64 %646, 26
  br label %655

648:                                              ; preds = %633
  %649 = load ptr, ptr %5, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %649, i32 0, i32 0
  %651 = load i32, ptr %650, align 4, !tbaa !24
  %652 = call i32 @__RBIT(i32 noundef %651)
  %653 = call i32 @llvm.ctlz.i32(i32 %652, i1 true)
  %654 = zext i32 %653 to i64
  br label %655

655:                                              ; preds = %648, %641
  %656 = phi i64 [ %647, %641 ], [ %654, %648 ]
  %657 = icmp eq i64 %634, %656
  br i1 %657, label %658, label %665

658:                                              ; preds = %655
  %659 = load ptr, ptr %4, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %659, i32 0, i32 0
  %661 = load ptr, ptr %660, align 8, !tbaa !19
  %662 = load ptr, ptr %5, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %662, i32 0, i32 0
  %664 = load i32, ptr %663, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %661, i32 noundef 1, i32 noundef %664, i32 noundef 0)
  br label %665

665:                                              ; preds = %658, %655
  %666 = load ptr, ptr %4, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %666, i32 0, i32 0
  %668 = load ptr, ptr %667, align 8, !tbaa !19
  %669 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %668, i32 noundef 2)
  %670 = zext i32 %669 to i64
  %671 = and i64 %670, 1048575
  %672 = icmp eq i64 %671, 0
  br i1 %672, label %673, label %681

673:                                              ; preds = %665
  %674 = load ptr, ptr %4, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %674, i32 0, i32 0
  %676 = load ptr, ptr %675, align 8, !tbaa !19
  %677 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %676, i32 noundef 2)
  %678 = zext i32 %677 to i64
  %679 = and i64 %678, 2080374784
  %680 = lshr i64 %679, 26
  br label %689

681:                                              ; preds = %665
  %682 = load ptr, ptr %4, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %682, i32 0, i32 0
  %684 = load ptr, ptr %683, align 8, !tbaa !19
  %685 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %684, i32 noundef 2)
  %686 = call i32 @__RBIT(i32 noundef %685)
  %687 = call i32 @llvm.ctlz.i32(i32 %686, i1 true)
  %688 = zext i32 %687 to i64
  br label %689

689:                                              ; preds = %681, %673
  %690 = phi i64 [ %680, %673 ], [ %688, %681 ]
  %691 = load ptr, ptr %5, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %691, i32 0, i32 0
  %693 = load i32, ptr %692, align 4, !tbaa !24
  %694 = zext i32 %693 to i64
  %695 = and i64 %694, 1048575
  %696 = icmp eq i64 %695, 0
  br i1 %696, label %697, label %704

697:                                              ; preds = %689
  %698 = load ptr, ptr %5, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %698, i32 0, i32 0
  %700 = load i32, ptr %699, align 4, !tbaa !24
  %701 = zext i32 %700 to i64
  %702 = and i64 %701, 2080374784
  %703 = lshr i64 %702, 26
  br label %711

704:                                              ; preds = %689
  %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 = call i32 @__RBIT(i32 noundef %707)
  %709 = call i32 @llvm.ctlz.i32(i32 %708, i1 true)
  %710 = zext i32 %709 to i64
  br label %711

711:                                              ; preds = %704, %697
  %712 = phi i64 [ %703, %697 ], [ %710, %704 ]
  %713 = icmp eq i64 %690, %712
  br i1 %713, label %714, label %721

714:                                              ; preds = %711
  %715 = load ptr, ptr %4, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %715, i32 0, i32 0
  %717 = load ptr, ptr %716, align 8, !tbaa !19
  %718 = load ptr, ptr %5, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %718, i32 0, i32 0
  %720 = load i32, ptr %719, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %717, i32 noundef 3, i32 noundef %720, i32 noundef 0)
  br label %721

721:                                              ; preds = %714, %711
  %722 = load ptr, ptr %4, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %722, i32 0, i32 0
  %724 = load ptr, ptr %723, align 8, !tbaa !19
  %725 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %724, i32 noundef 3)
  %726 = zext i32 %725 to i64
  %727 = and i64 %726, 1048575
  %728 = icmp eq i64 %727, 0
  br i1 %728, label %729, label %737

729:                                              ; preds = %721
  %730 = load ptr, ptr %4, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %730, i32 0, i32 0
  %732 = load ptr, ptr %731, align 8, !tbaa !19
  %733 = call i32 @LL_ADC_GetOffsetChannel(ptr noundef %732, i32 noundef 3)
  %734 = zext i32 %733 to i64
  %735 = and i64 %734, 2080374784
  %736 = lshr i64 %735, 26
  br label %745

737:                                              ; preds = %721
  %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 = call i32 @__RBIT(i32 noundef %741)
  %743 = call i32 @llvm.ctlz.i32(i32 %742, i1 true)
  %744 = zext i32 %743 to i64
  br label %745

745:                                              ; preds = %737, %729
  %746 = phi i64 [ %736, %729 ], [ %744, %737 ]
  %747 = load ptr, ptr %5, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %747, i32 0, i32 0
  %749 = load i32, ptr %748, align 4, !tbaa !24
  %750 = zext i32 %749 to i64
  %751 = and i64 %750, 1048575
  %752 = icmp eq i64 %751, 0
  br i1 %752, label %753, label %760

753:                                              ; preds = %745
  %754 = load ptr, ptr %5, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %754, i32 0, i32 0
  %756 = load i32, ptr %755, align 4, !tbaa !24
  %757 = zext i32 %756 to i64
  %758 = and i64 %757, 2080374784
  %759 = lshr i64 %758, 26
  br label %767

760:                                              ; preds = %745
  %761 = load ptr, ptr %5, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %761, i32 0, i32 0
  %763 = load i32, ptr %762, align 4, !tbaa !24
  %764 = call i32 @__RBIT(i32 noundef %763)
  %765 = call i32 @llvm.ctlz.i32(i32 %764, i1 true)
  %766 = zext i32 %765 to i64
  br label %767

767:                                              ; preds = %760, %753
  %768 = phi i64 [ %759, %753 ], [ %766, %760 ]
  %769 = icmp eq i64 %746, %768
  br i1 %769, label %770, label %777

770:                                              ; preds = %767
  %771 = load ptr, ptr %4, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %771, i32 0, i32 0
  %773 = load ptr, ptr %772, align 8, !tbaa !19
  %774 = load ptr, ptr %5, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %774, i32 0, i32 0
  %776 = load i32, ptr %775, align 4, !tbaa !24
  call void @LL_ADC_SetOffset(ptr noundef %773, i32 noundef 3, i32 noundef %776, i32 noundef 0)
  br label %777

777:                                              ; preds = %770, %767
  br label %778

778:                                              ; preds = %777, %529
  br label %779

779:                                              ; preds = %778, %350, %338
  %780 = load ptr, ptr %4, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %780, i32 0, i32 0
  %782 = load ptr, ptr %781, align 8, !tbaa !19
  %783 = call i32 @LL_ADC_IsEnabled(ptr noundef %782)
  %784 = zext i32 %783 to i64
  %785 = icmp eq i64 %784, 0
  br i1 %785, label %786, label %1174

786:                                              ; preds = %779
  %787 = load ptr, ptr %4, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %787, i32 0, i32 0
  %789 = load ptr, ptr %788, align 8, !tbaa !19
  %790 = load ptr, ptr %5, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %790, i32 0, i32 0
  %792 = load i32, ptr %791, align 4, !tbaa !24
  %793 = load ptr, ptr %5, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %793, i32 0, i32 3
  %795 = load i32, ptr %794, align 4, !tbaa !17
  call void @LL_ADC_SetChannelSingleDiff(ptr noundef %789, i32 noundef %792, i32 noundef %795)
  %796 = load ptr, ptr %5, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %796, i32 0, i32 3
  %798 = load i32, ptr %797, align 4, !tbaa !17
  %799 = zext i32 %798 to i64
  %800 = icmp eq i64 %799, 1207894016
  br i1 %800, label %801, label %997

801:                                              ; preds = %786
  %802 = load ptr, ptr %4, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %802, i32 0, i32 0
  %804 = load ptr, ptr %803, align 8, !tbaa !19
  %805 = load ptr, ptr %5, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %805, i32 0, i32 0
  %807 = load i32, ptr %806, align 4, !tbaa !24
  %808 = zext i32 %807 to i64
  %809 = and i64 %808, 1048575
  %810 = icmp eq i64 %809, 0
  br i1 %810, label %811, label %818

811:                                              ; preds = %801
  %812 = load ptr, ptr %5, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %812, i32 0, i32 0
  %814 = load i32, ptr %813, align 4, !tbaa !24
  %815 = zext i32 %814 to i64
  %816 = and i64 %815, 2080374784
  %817 = lshr i64 %816, 26
  br label %825

818:                                              ; preds = %801
  %819 = load ptr, ptr %5, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %819, i32 0, i32 0
  %821 = load i32, ptr %820, align 4, !tbaa !24
  %822 = call i32 @__RBIT(i32 noundef %821)
  %823 = call i32 @llvm.ctlz.i32(i32 %822, i1 true)
  %824 = zext i32 %823 to i64
  br label %825

825:                                              ; preds = %818, %811
  %826 = phi i64 [ %817, %811 ], [ %824, %818 ]
  %827 = add i64 %826, 1
  %828 = and i64 %827, 31
  %829 = icmp ule i64 %828, 9
  br i1 %829, label %830, label %910

830:                                              ; preds = %825
  %831 = load ptr, ptr %5, align 8, !tbaa !5
  %832 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %831, i32 0, i32 0
  %833 = load i32, ptr %832, align 4, !tbaa !24
  %834 = zext i32 %833 to i64
  %835 = and i64 %834, 1048575
  %836 = icmp eq i64 %835, 0
  br i1 %836, label %837, label %844

837:                                              ; preds = %830
  %838 = load ptr, ptr %5, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %838, i32 0, i32 0
  %840 = load i32, ptr %839, align 4, !tbaa !24
  %841 = zext i32 %840 to i64
  %842 = and i64 %841, 2080374784
  %843 = lshr i64 %842, 26
  br label %851

844:                                              ; preds = %830
  %845 = load ptr, ptr %5, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %845, i32 0, i32 0
  %847 = load i32, ptr %846, align 4, !tbaa !24
  %848 = call i32 @__RBIT(i32 noundef %847)
  %849 = call i32 @llvm.ctlz.i32(i32 %848, i1 true)
  %850 = zext i32 %849 to i64
  br label %851

851:                                              ; preds = %844, %837
  %852 = phi i64 [ %843, %837 ], [ %850, %844 ]
  %853 = add i64 %852, 1
  %854 = and i64 %853, 31
  %855 = shl i64 %854, 26
  %856 = load ptr, ptr %5, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %856, i32 0, i32 0
  %858 = load i32, ptr %857, align 4, !tbaa !24
  %859 = zext i32 %858 to i64
  %860 = and i64 %859, 1048575
  %861 = icmp eq i64 %860, 0
  br i1 %861, label %862, label %869

862:                                              ; preds = %851
  %863 = load ptr, ptr %5, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %863, i32 0, i32 0
  %865 = load i32, ptr %864, align 4, !tbaa !24
  %866 = zext i32 %865 to i64
  %867 = and i64 %866, 2080374784
  %868 = lshr i64 %867, 26
  br label %876

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

876:                                              ; preds = %869, %862
  %877 = phi i64 [ %868, %862 ], [ %875, %869 ]
  %878 = add i64 %877, 1
  %879 = and i64 %878, 31
  %880 = shl i64 1, %879
  %881 = or i64 %855, %880
  %882 = load ptr, ptr %5, align 8, !tbaa !5
  %883 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %882, i32 0, i32 0
  %884 = load i32, ptr %883, align 4, !tbaa !24
  %885 = zext i32 %884 to i64
  %886 = and i64 %885, 1048575
  %887 = icmp eq i64 %886, 0
  br i1 %887, label %888, label %895

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

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

902:                                              ; preds = %895, %888
  %903 = phi i64 [ %894, %888 ], [ %901, %895 ]
  %904 = add i64 %903, 1
  %905 = and i64 %904, 31
  %906 = mul i64 3, %905
  %907 = shl i64 %906, 20
  %908 = or i64 0, %907
  %909 = or i64 %881, %908
  br label %991

910:                                              ; preds = %825
  %911 = load ptr, ptr %5, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %911, i32 0, i32 0
  %913 = load i32, ptr %912, align 4, !tbaa !24
  %914 = zext i32 %913 to i64
  %915 = and i64 %914, 1048575
  %916 = icmp eq i64 %915, 0
  br i1 %916, label %917, label %924

917:                                              ; preds = %910
  %918 = load ptr, ptr %5, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %918, i32 0, i32 0
  %920 = load i32, ptr %919, align 4, !tbaa !24
  %921 = zext i32 %920 to i64
  %922 = and i64 %921, 2080374784
  %923 = lshr i64 %922, 26
  br label %931

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

931:                                              ; preds = %924, %917
  %932 = phi i64 [ %923, %917 ], [ %930, %924 ]
  %933 = add i64 %932, 1
  %934 = and i64 %933, 31
  %935 = shl i64 %934, 26
  %936 = load ptr, ptr %5, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %936, i32 0, i32 0
  %938 = load i32, ptr %937, align 4, !tbaa !24
  %939 = zext i32 %938 to i64
  %940 = and i64 %939, 1048575
  %941 = icmp eq i64 %940, 0
  br i1 %941, label %942, label %949

942:                                              ; preds = %931
  %943 = load ptr, ptr %5, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %943, i32 0, i32 0
  %945 = load i32, ptr %944, align 4, !tbaa !24
  %946 = zext i32 %945 to i64
  %947 = and i64 %946, 2080374784
  %948 = lshr i64 %947, 26
  br label %956

949:                                              ; preds = %931
  %950 = load ptr, ptr %5, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %950, i32 0, i32 0
  %952 = load i32, ptr %951, align 4, !tbaa !24
  %953 = call i32 @__RBIT(i32 noundef %952)
  %954 = call i32 @llvm.ctlz.i32(i32 %953, i1 true)
  %955 = zext i32 %954 to i64
  br label %956

956:                                              ; preds = %949, %942
  %957 = phi i64 [ %948, %942 ], [ %955, %949 ]
  %958 = add i64 %957, 1
  %959 = and i64 %958, 31
  %960 = shl i64 1, %959
  %961 = or i64 %935, %960
  %962 = load ptr, ptr %5, align 8, !tbaa !5
  %963 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %962, i32 0, i32 0
  %964 = load i32, ptr %963, align 4, !tbaa !24
  %965 = zext i32 %964 to i64
  %966 = and i64 %965, 1048575
  %967 = icmp eq i64 %966, 0
  br i1 %967, label %968, label %975

968:                                              ; preds = %956
  %969 = load ptr, ptr %5, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %969, i32 0, i32 0
  %971 = load i32, ptr %970, align 4, !tbaa !24
  %972 = zext i32 %971 to i64
  %973 = and i64 %972, 2080374784
  %974 = lshr i64 %973, 26
  br label %982

975:                                              ; preds = %956
  %976 = load ptr, ptr %5, align 8, !tbaa !5
  %977 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %976, i32 0, i32 0
  %978 = load i32, ptr %977, align 4, !tbaa !24
  %979 = call i32 @__RBIT(i32 noundef %978)
  %980 = call i32 @llvm.ctlz.i32(i32 %979, i1 true)
  %981 = zext i32 %980 to i64
  br label %982

982:                                              ; preds = %975, %968
  %983 = phi i64 [ %974, %968 ], [ %981, %975 ]
  %984 = add i64 %983, 1
  %985 = and i64 %984, 31
  %986 = sub i64 %985, 10
  %987 = mul i64 3, %986
  %988 = shl i64 %987, 20
  %989 = or i64 33554432, %988
  %990 = or i64 %961, %989
  br label %991

991:                                              ; preds = %982, %902
  %992 = phi i64 [ %909, %902 ], [ %990, %982 ]
  %993 = trunc i64 %992 to i32
  %994 = load ptr, ptr %5, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %994, i32 0, i32 2
  %996 = load i32, ptr %995, align 4, !tbaa !40
  call void @LL_ADC_SetChannelSamplingTime(ptr noundef %804, i32 noundef %993, i32 noundef %996)
  br label %997

997:                                              ; preds = %991, %786
  %998 = load ptr, ptr %5, align 8, !tbaa !5
  %999 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %998, i32 0, i32 0
  %1000 = load i32, ptr %999, align 4, !tbaa !24
  %1001 = zext i32 %1000 to i64
  %1002 = and i64 %1001, 2147483648
  %1003 = icmp ne i64 %1002, 0
  br i1 %1003, label %1004, label %1173

1004:                                             ; preds = %997
  %1005 = load ptr, ptr %4, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1005, i32 0, i32 0
  %1007 = load ptr, ptr %1006, align 8, !tbaa !19
  %1008 = icmp eq ptr %1007, inttoptr (i64 1073881088 to ptr)
  br i1 %1008, label %1014, label %1009

1009:                                             ; preds = %1004
  %1010 = load ptr, ptr %4, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1010, i32 0, i32 0
  %1012 = load ptr, ptr %1011, align 8, !tbaa !19
  %1013 = icmp eq ptr %1012, inttoptr (i64 1073881344 to ptr)
  br label %1014

1014:                                             ; preds = %1009, %1004
  %1015 = phi i1 [ true, %1004 ], [ %1013, %1009 ]
  %1016 = zext i1 %1015 to i64
  %1017 = select i1 %1015, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1018 = icmp eq ptr %1017, inttoptr (i64 1073881856 to ptr)
  br i1 %1018, label %1019, label %1023

1019:                                             ; preds = %1014
  %1020 = call i32 @LL_ADC_IsEnabled(ptr noundef inttoptr (i64 1073881088 to ptr))
  %1021 = call i32 @LL_ADC_IsEnabled(ptr noundef inttoptr (i64 1073881344 to ptr))
  %1022 = or i32 %1020, %1021
  br label %1025

1023:                                             ; preds = %1014
  %1024 = call i32 @LL_ADC_IsEnabled(ptr noundef inttoptr (i64 1476550656 to ptr))
  br label %1025

1025:                                             ; preds = %1023, %1019
  %1026 = phi i32 [ %1022, %1019 ], [ %1024, %1023 ]
  %1027 = zext i32 %1026 to i64
  %1028 = icmp eq i64 %1027, 0
  br i1 %1028, label %1029, label %1165

1029:                                             ; preds = %1025
  %1030 = load ptr, ptr %4, align 8, !tbaa !5
  %1031 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1030, i32 0, i32 0
  %1032 = load ptr, ptr %1031, align 8, !tbaa !19
  %1033 = icmp eq ptr %1032, inttoptr (i64 1073881088 to ptr)
  br i1 %1033, label %1039, label %1034

1034:                                             ; preds = %1029
  %1035 = load ptr, ptr %4, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1035, i32 0, i32 0
  %1037 = load ptr, ptr %1036, align 8, !tbaa !19
  %1038 = icmp eq ptr %1037, inttoptr (i64 1073881344 to ptr)
  br label %1039

1039:                                             ; preds = %1034, %1029
  %1040 = phi i1 [ true, %1029 ], [ %1038, %1034 ]
  %1041 = zext i1 %1040 to i64
  %1042 = select i1 %1040, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1043 = call i32 @LL_ADC_GetCommonPathInternalCh(ptr noundef %1042)
  store i32 %1043, ptr %8, align 4, !tbaa !9
  %1044 = load ptr, ptr %5, align 8, !tbaa !5
  %1045 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1044, i32 0, i32 0
  %1046 = load i32, ptr %1045, align 4, !tbaa !24
  %1047 = zext i32 %1046 to i64
  %1048 = icmp eq i64 %1047, 3414425600
  br i1 %1048, label %1049, label %1091

1049:                                             ; preds = %1039
  %1050 = load i32, ptr %8, align 4, !tbaa !9
  %1051 = zext i32 %1050 to i64
  %1052 = and i64 %1051, 8388608
  %1053 = icmp eq i64 %1052, 0
  br i1 %1053, label %1054, label %1091

1054:                                             ; preds = %1049
  %1055 = load ptr, ptr %4, align 8, !tbaa !5
  %1056 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1055, i32 0, i32 0
  %1057 = load ptr, ptr %1056, align 8, !tbaa !19
  %1058 = icmp eq ptr %1057, inttoptr (i64 1476550656 to ptr)
  br i1 %1058, label %1059, label %1090

1059:                                             ; preds = %1054
  %1060 = load ptr, ptr %4, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1060, i32 0, i32 0
  %1062 = load ptr, ptr %1061, align 8, !tbaa !19
  %1063 = icmp eq ptr %1062, inttoptr (i64 1073881088 to ptr)
  br i1 %1063, label %1069, label %1064

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

1069:                                             ; preds = %1064, %1059
  %1070 = phi i1 [ true, %1059 ], [ %1068, %1064 ]
  %1071 = zext i1 %1070 to i64
  %1072 = select i1 %1070, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1073 = load i32, ptr %8, align 4, !tbaa !9
  %1074 = zext i32 %1073 to i64
  %1075 = or i64 8388608, %1074
  %1076 = trunc i64 %1075 to i32
  call void @LL_ADC_SetCommonPathInternalCh(ptr noundef %1072, i32 noundef %1076)
  %1077 = load i32, ptr @SystemCoreClock, align 4, !tbaa !9
  %1078 = zext i32 %1077 to i64
  %1079 = udiv i64 %1078, 200000
  %1080 = mul i64 2, %1079
  %1081 = trunc i64 %1080 to i32
  store volatile i32 %1081, ptr %11, align 4, !tbaa !9
  br label %1082

1082:                                             ; preds = %1086, %1069
  %1083 = load volatile i32, ptr %11, align 4, !tbaa !9
  %1084 = zext i32 %1083 to i64
  %1085 = icmp ne i64 %1084, 0
  br i1 %1085, label %1086, label %1089

1086:                                             ; preds = %1082
  %1087 = load volatile i32, ptr %11, align 4, !tbaa !9
  %1088 = add i32 %1087, -1
  store volatile i32 %1088, ptr %11, align 4, !tbaa !9
  br label %1082, !llvm.loop !46

1089:                                             ; preds = %1082
  br label %1090

1090:                                             ; preds = %1089, %1054
  br label %1164

1091:                                             ; preds = %1049, %1039
  %1092 = load ptr, ptr %5, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.ADC_InjectionConfTypeDef, ptr %1092, i32 0, i32 0
  %1094 = load i32, ptr %1093, align 4, !tbaa !24
  %1095 = zext i32 %1094 to i64
  %1096 = icmp eq i64 %1095, 3344039936
  br i1 %1096, label %1097, label %1126

1097:                                             ; preds = %1091
  %1098 = load i32, ptr %8, align 4, !tbaa !9
  %1099 = zext i32 %1098 to i64
  %1100 = and i64 %1099, 16777216
  %1101 = icmp eq i64 %1100, 0
  br i1 %1101, label %1102, label %1126

1102:                                             ; preds = %1097
  %1103 = load ptr, ptr %4, align 8, !tbaa !5
  %1104 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1103, i32 0, i32 0
  %1105 = load ptr, ptr %1104, align 8, !tbaa !19
  %1106 = icmp eq ptr %1105, inttoptr (i64 1476550656 to ptr)
  br i1 %1106, label %1107, label %1125

1107:                                             ; preds = %1102
  %1108 = load ptr, ptr %4, align 8, !tbaa !5
  %1109 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1108, i32 0, i32 0
  %1110 = load ptr, ptr %1109, align 8, !tbaa !19
  %1111 = icmp eq ptr %1110, inttoptr (i64 1073881088 to ptr)
  br i1 %1111, label %1117, label %1112

1112:                                             ; preds = %1107
  %1113 = load ptr, ptr %4, align 8, !tbaa !5
  %1114 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1113, i32 0, i32 0
  %1115 = load ptr, ptr %1114, align 8, !tbaa !19
  %1116 = icmp eq ptr %1115, inttoptr (i64 1073881344 to ptr)
  br label %1117

1117:                                             ; preds = %1112, %1107
  %1118 = phi i1 [ true, %1107 ], [ %1116, %1112 ]
  %1119 = zext i1 %1118 to i64
  %1120 = select i1 %1118, ptr inttoptr (i64 1073881856 to ptr), ptr inttoptr (i64 1476551424 to ptr)
  %1121 = load i32, ptr %8, align 4, !tbaa !9
  %1122 = zext i32 %1121 to i64
  %1123 = or i64 16777216, %1122
  %1124 = trunc i64 %1123 to i32
  call void @LL_ADC_SetCommonPathInternalCh(ptr noundef %1120, i32 noundef %1124)
  br label %1125

1125:                                             ; preds = %1117, %1102
  br label %1163

1126:                                             ; preds = %1097, %1091
  %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, 3484942336
  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, 4194304
  %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 4194304, %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 %1162

1161:                                             ; preds = %1132, %1126
  br label %1162

1162:                                             ; preds = %1161, %1160
  br label %1163

1163:                                             ; preds = %1162, %1125
  br label %1164

1164:                                             ; preds = %1163, %1090
  br label %1172

1165:                                             ; preds = %1025
  %1166 = load ptr, ptr %4, align 8, !tbaa !5
  %1167 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1166, i32 0, i32 4
  %1168 = load volatile i32, ptr %1167, align 4, !tbaa !35
  %1169 = zext i32 %1168 to i64
  %1170 = or i64 %1169, 32
  %1171 = trunc i64 %1170 to i32
  store volatile i32 %1171, ptr %1167, align 4, !tbaa !35
  store i32 1, ptr %6, align 4, !tbaa !9
  br label %1172

1172:                                             ; preds = %1165, %1164
  br label %1173

1173:                                             ; preds = %1172, %997
  br label %1174

1174:                                             ; preds = %1173, %779
  br label %1175

1175:                                             ; preds = %1174
  %1176 = load ptr, ptr %4, align 8, !tbaa !5
  %1177 = getelementptr inbounds %struct.ADC_HandleTypeDef, ptr %1176, i32 0, i32 3
  store i32 0, ptr %1177, align 8, !tbaa !20
  br label %1178

1178:                                             ; preds = %1175
  br label %1179

1179:                                             ; preds = %1178
  %1180 = load i32, ptr %6, align 4, !tbaa !9
  store i32 %1180, ptr %3, align 4
  store i32 1, ptr %13, align 4
  br label %1181

1181:                                             ; preds = %1179, %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
  %1182 = load i32, ptr %3, align 4
  ret i32 %1182
}

; 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, !10, i64 60, !15, i64 64}
!19 = !{!12, !6, i64 0}
!20 = !{!12, !10, i64 96}
!21 = !{!18, !10, i64 36}
!22 = !{!18, !10, i64 4}
!23 = !{!18, !10, i64 52}
!24 = !{!18, !10, i64 0}
!25 = !{!18, !10, i64 56}
!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 44}
!32 = !{!27, !10, i64 12}
!33 = !{!18, !10, i64 48}
!34 = !{!18, !10, i64 40}
!35 = !{!12, !10, i64 100}
!36 = !{!18, !10, i64 60}
!37 = !{!27, !10, i64 16}
!38 = !{!18, !10, i64 64}
!39 = !{!18, !10, i64 68}
!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_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: inlinehint nounwind uwtable
declare hidden i32 @LL_ADC_IsEnabled(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 %510, 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 36
  %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 52
  %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 56
  %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 52
  %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 56
  %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 44
  %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 48
  %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 40
  %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 %340

118:                                              ; preds = %111
  %119 = getelementptr inbounds i8, ptr %1, i64 52
  %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 56
  %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 44
  %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 44
  %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 60
  %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 %166

157:                                              ; preds = %150
  %158 = and i32 %156, -67043811
  %159 = getelementptr inbounds i8, ptr %1, i64 64
  %160 = load i32, ptr %159, align 4, !tbaa !35
  %161 = getelementptr inbounds i8, ptr %1, i64 68
  %162 = load i32, ptr %161, align 4, !tbaa !36
  %163 = or i32 %160, %158
  %164 = or i32 %163, %162
  %165 = or i32 %164, 2
  br label %168

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

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

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

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

194:                                              ; preds = %184
  %195 = and i32 %193, 14
  %196 = shl i32 %191, %195
  br label %200

197:                                              ; preds = %184
  %198 = and i32 %193, 8
  %199 = shl i32 %191, %198
  br label %200

200:                                              ; preds = %194, %197, %175
  %201 = phi ptr [ %178, %175 ], [ %185, %194 ], [ %185, %197 ]
  %202 = phi i32 [ %183, %175 ], [ %196, %194 ], [ %199, %197 ]
  %203 = getelementptr inbounds i8, ptr %1, i64 16
  %204 = load i32, ptr %203, align 4, !tbaa !41
  %.not194 = icmp eq i32 %204, 4
  br i1 %.not194, label %213, label %205

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

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

219:                                              ; preds = %213
  %220 = lshr i32 %218, 26
  %221 = and i32 %220, 31
  br label %225

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

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

231:                                              ; preds = %225
  %232 = lshr i64 %228, 26
  %233 = and i64 %232, 31
  br label %238

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

238:                                              ; preds = %234, %231
  %239 = phi i64 [ %233, %231 ], [ %237, %234 ]
  %240 = icmp eq i64 %239, %226
  br i1 %240, label %241, label %244

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

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

251:                                              ; preds = %244
  %252 = lshr i32 %250, 26
  %253 = and i32 %252, 31
  br label %257

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

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

263:                                              ; preds = %257
  %264 = lshr i64 %260, 26
  %265 = and i64 %264, 31
  br label %270

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

270:                                              ; preds = %266, %263
  %271 = phi i64 [ %265, %263 ], [ %269, %266 ]
  %272 = icmp eq i64 %271, %258
  br i1 %272, label %273, label %276

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

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

283:                                              ; preds = %276
  %284 = lshr i32 %282, 26
  %285 = and i32 %284, 31
  br label %289

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

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

295:                                              ; preds = %289
  %296 = lshr i64 %292, 26
  %297 = and i64 %296, 31
  br label %302

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

302:                                              ; preds = %298, %295
  %303 = phi i64 [ %297, %295 ], [ %301, %298 ]
  %304 = icmp eq i64 %303, %290
  br i1 %304, label %305, label %308

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

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

315:                                              ; preds = %308
  %316 = lshr i32 %314, 26
  %317 = and i32 %316, 31
  br label %321

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

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

327:                                              ; preds = %321
  %328 = lshr i64 %324, 26
  %329 = and i64 %328, 31
  br label %334

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

334:                                              ; preds = %330, %327
  %335 = phi i64 [ %329, %327 ], [ %333, %330 ]
  %336 = icmp eq i64 %335, %322
  br i1 %336, label %337, label %340

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

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

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

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

356:                                              ; preds = %350
  %357 = lshr i64 %353, 26
  br label %362

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

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

370:                                              ; preds = %362
  br i1 %369, label %371, label %374

371:                                              ; preds = %370
  %372 = lshr i32 %367, 26
  %373 = and i32 %372, 31
  br label %377

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

377:                                              ; preds = %374, %371
  %378 = phi i32 [ %367, %371 ], [ %.pre216, %374 ]
  %379 = phi i32 [ %373, %371 ], [ %376, %374 ]
  %380 = shl nuw nsw i32 %379, 26
  %381 = add nuw i32 %380, 67108864
  %382 = and i32 %381, 2080374784
  %383 = and i32 %378, 1048575
  %384 = icmp eq i32 %383, 0
  br i1 %384, label %385, label %387

385:                                              ; preds = %377
  %386 = lshr i32 %378, 26
  br label %390

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

390:                                              ; preds = %387, %385
  %391 = phi i32 [ %378, %385 ], [ %.pre217, %387 ]
  %392 = phi i32 [ %386, %385 ], [ %389, %387 ]
  %393 = add nuw nsw i32 %392, 1
  %394 = and i32 %393, 31
  %395 = shl nuw i32 1, %394
  %396 = or i32 %395, %382
  %397 = and i32 %391, 1048575
  %398 = icmp eq i32 %397, 0
  br i1 %398, label %399, label %401

399:                                              ; preds = %390
  %400 = lshr i32 %391, 26
  br label %404

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

404:                                              ; preds = %401, %399
  %405 = phi i32 [ %400, %399 ], [ %403, %401 ]
  %406 = add nuw nsw i32 %405, 1
  %407 = and i32 %406, 31
  %408 = mul nuw nsw i32 %407, 3145728
  %409 = or i32 %396, %408
  br label %452

410:                                              ; preds = %362
  br i1 %369, label %411, label %414

411:                                              ; preds = %410
  %412 = lshr i32 %367, 26
  %413 = and i32 %412, 31
  br label %417

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

417:                                              ; preds = %414, %411
  %418 = phi i32 [ %367, %411 ], [ %.pre214, %414 ]
  %419 = phi i32 [ %413, %411 ], [ %416, %414 ]
  %420 = shl nuw nsw i32 %419, 26
  %421 = add nuw i32 %420, 67108864
  %422 = and i32 %421, 2080374784
  %423 = and i32 %418, 1048575
  %424 = icmp eq i32 %423, 0
  br i1 %424, label %425, label %427

425:                                              ; preds = %417
  %426 = lshr i32 %418, 26
  br label %430

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

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

438:                                              ; preds = %430
  %439 = lshr i32 %431, 26
  br label %443

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

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

452:                                              ; preds = %443, %404
  %453 = phi i32 [ %409, %404 ], [ %451, %443 ]
  %454 = getelementptr inbounds i8, ptr %1, i64 8
  %455 = load i32, ptr %454, align 4, !tbaa !37
  tail call void @LL_ADC_SetChannelSamplingTime(ptr noundef %351, i32 noundef %453, i32 noundef %455)
  br label %456

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

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

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

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

466:                                              ; preds = %464, %460
  %467 = phi i32 [ %463, %460 ], [ %465, %464 ]
  %468 = icmp eq i32 %467, 0
  br i1 %468, label %469, label %506

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

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

482:                                              ; preds = %479
  %483 = or disjoint i32 %474, 8388608
  tail call void @LL_ADC_SetCommonPathInternalCh(ptr noundef nonnull inttoptr (i64 1476551424 to ptr), i32 noundef %483)
  %484 = load i32, ptr @SystemCoreClock, align 4, !tbaa !5
  %485 = udiv i32 %484, 200000
  %486 = shl nuw nsw i32 %485, 1
  store volatile i32 %486, 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 = %482, %.lr.ph
  %.0..0..0..0.7 = load volatile i32, ptr %3, align 4, !tbaa !5
  %487 = add i32 %.0..0..0..0.7, -1
  store volatile i32 %487, 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

488:                                              ; preds = %469
  %489 = icmp eq i32 %475, -950927360
  %490 = and i32 %474, 16777216
  %491 = icmp eq i32 %490, 0
  %or.cond204 = select i1 %489, i1 %491, i1 false
  br i1 %or.cond204, label %492, label %497

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

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

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

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

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

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

.loopexit:                                        ; preds = %.lr.ph, %482, %340, %506, %495, %492, %497, %501, %504, %479, %456
  %.2 = phi i32 [ %.1183, %479 ], [ %.1183, %495 ], [ %.1183, %492 ], [ %.1183, %504 ], [ %.1183, %501 ], [ %.1183, %497 ], [ 1, %506 ], [ %.1183, %456 ], [ %.1183, %340 ], [ %.1183, %482 ], [ %.1183, %.lr.ph ]
  store i32 0, ptr %5, align 8, !tbaa !9
  br label %510

510:                                              ; 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 36}
!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, !6, i64 60, !14, i64 64}
!18 = !{!17, !6, i64 4}
!19 = !{!10, !11, i64 0}
!20 = !{!17, !6, i64 52}
!21 = !{!17, !6, i64 0}
!22 = !{!17, !6, i64 56}
!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 44}
!29 = !{!24, !6, i64 12}
!30 = !{!17, !6, i64 48}
!31 = !{!17, !6, i64 40}
!32 = !{!10, !6, i64 100}
!33 = !{!17, !6, i64 60}
!34 = !{!24, !6, i64 16}
!35 = !{!17, !6, i64 64}
!36 = !{!17, !6, i64 68}
!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