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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.PLL1_ClocksTypeDef = type { i32, i32, i32 }
%struct.PLL2_ClocksTypeDef = type { i32, i32, i32 }
%struct.PLL3_ClocksTypeDef = type { i32, i32, i32 }
%struct.RCC_TypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [9 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32] }

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @HAL_RCCEx_GetPeriphCLKFreq(i32 noundef %0) #1 {
  %2 = alloca i32, align 4
  %3 = alloca %struct.PLL1_ClocksTypeDef, align 4
  %4 = alloca %struct.PLL2_ClocksTypeDef, align 4
  %5 = alloca %struct.PLL3_ClocksTypeDef, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  store i32 %0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 12, ptr %3) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %4) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr %5) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  %10 = load i32, ptr %2, align 4, !tbaa !5
  %11 = icmp eq i32 %10, 256
  br i1 %11, label %12, label %96

12:                                               ; preds = %1
  %13 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 20), align 4, !tbaa !9
  %14 = zext i32 %13 to i64
  %15 = and i64 %14, 7
  %16 = trunc i64 %15 to i32
  store i32 %16, ptr %7, align 4, !tbaa !5
  %17 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %17, label %94 [
    i32 0, label %18
    i32 1, label %28
    i32 2, label %38
    i32 4, label %48
    i32 3, label %93
  ]

18:                                               ; preds = %12
  %19 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %20 = zext i32 %19 to i64
  %21 = and i64 %20, 33554432
  %22 = icmp eq i64 %21, 33554432
  br i1 %22, label %23, label %26

23:                                               ; preds = %18
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %24 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %25 = load i32, ptr %24, align 4, !tbaa !12
  store i32 %25, ptr %6, align 4, !tbaa !5
  br label %27

26:                                               ; preds = %18
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %27

27:                                               ; preds = %26, %23
  br label %95

28:                                               ; preds = %12
  %29 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %30 = zext i32 %29 to i64
  %31 = and i64 %30, 134217728
  %32 = icmp eq i64 %31, 134217728
  br i1 %32, label %33, label %36

33:                                               ; preds = %28
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %34 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 0
  %35 = load i32, ptr %34, align 4, !tbaa !14
  store i32 %35, ptr %6, align 4, !tbaa !5
  br label %37

36:                                               ; preds = %28
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %37

37:                                               ; preds = %36, %33
  br label %95

38:                                               ; preds = %12
  %39 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %40 = zext i32 %39 to i64
  %41 = and i64 %40, 536870912
  %42 = icmp eq i64 %41, 536870912
  br i1 %42, label %43, label %46

43:                                               ; preds = %38
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %44 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 0
  %45 = load i32, ptr %44, align 4, !tbaa !14
  store i32 %45, ptr %6, align 4, !tbaa !5
  br label %47

46:                                               ; preds = %38
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %47

47:                                               ; preds = %46, %43
  br label %95

48:                                               ; preds = %12
  %49 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !15
  %50 = zext i32 %49 to i64
  %51 = and i64 %50, 805306368
  %52 = trunc i64 %51 to i32
  store i32 %52, ptr %8, align 4, !tbaa !5
  %53 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %54 = zext i32 %53 to i64
  %55 = and i64 %54, 4
  %56 = icmp eq i64 %55, 4
  br i1 %56, label %57, label %69

57:                                               ; preds = %48
  %58 = load i32, ptr %8, align 4, !tbaa !5
  %59 = icmp eq i32 %58, 0
  br i1 %59, label %60, label %69

60:                                               ; preds = %57
  %61 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %62 = zext i32 %61 to i64
  %63 = and i64 %62, 24
  %64 = trunc i64 %63 to i32
  %65 = lshr i32 %64, 3
  %66 = zext i32 %65 to i64
  %67 = lshr i64 64000000, %66
  %68 = trunc i64 %67 to i32
  store i32 %68, ptr %6, align 4, !tbaa !5
  br label %92

69:                                               ; preds = %57, %48
  %70 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %71 = zext i32 %70 to i64
  %72 = and i64 %71, 256
  %73 = icmp eq i64 %72, 256
  br i1 %73, label %74, label %79

74:                                               ; preds = %69
  %75 = load i32, ptr %8, align 4, !tbaa !5
  %76 = zext i32 %75 to i64
  %77 = icmp eq i64 %76, 268435456
  br i1 %77, label %78, label %79

78:                                               ; preds = %74
  store i32 4000000, ptr %6, align 4, !tbaa !5
  br label %91

79:                                               ; preds = %74, %69
  %80 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %81 = zext i32 %80 to i64
  %82 = and i64 %81, 131072
  %83 = icmp eq i64 %82, 131072
  br i1 %83, label %84, label %89

84:                                               ; preds = %79
  %85 = load i32, ptr %8, align 4, !tbaa !5
  %86 = zext i32 %85 to i64
  %87 = icmp eq i64 %86, 536870912
  br i1 %87, label %88, label %89

88:                                               ; preds = %84
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %90

89:                                               ; preds = %84, %79
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %90

90:                                               ; preds = %89, %88
  br label %91

91:                                               ; preds = %90, %78
  br label %92

92:                                               ; preds = %91, %60
  br label %95

93:                                               ; preds = %12
  store i32 12288000, ptr %6, align 4, !tbaa !5
  br label %95

94:                                               ; preds = %12
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %95

95:                                               ; preds = %94, %93, %92, %47, %37, %27
  br label %664

96:                                               ; preds = %1
  %97 = load i32, ptr %2, align 4, !tbaa !5
  %98 = icmp eq i32 %97, 512
  br i1 %98, label %99, label %183

99:                                               ; preds = %96
  %100 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 20), align 4, !tbaa !9
  %101 = zext i32 %100 to i64
  %102 = and i64 %101, 448
  %103 = trunc i64 %102 to i32
  store i32 %103, ptr %7, align 4, !tbaa !5
  %104 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %104, label %181 [
    i32 0, label %105
    i32 64, label %115
    i32 128, label %125
    i32 256, label %135
    i32 192, label %180
  ]

105:                                              ; preds = %99
  %106 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %107 = zext i32 %106 to i64
  %108 = and i64 %107, 33554432
  %109 = icmp eq i64 %108, 33554432
  br i1 %109, label %110, label %113

110:                                              ; preds = %105
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %111 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %112 = load i32, ptr %111, align 4, !tbaa !12
  store i32 %112, ptr %6, align 4, !tbaa !5
  br label %114

113:                                              ; preds = %105
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %114

114:                                              ; preds = %113, %110
  br label %182

115:                                              ; preds = %99
  %116 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %117 = zext i32 %116 to i64
  %118 = and i64 %117, 134217728
  %119 = icmp eq i64 %118, 134217728
  br i1 %119, label %120, label %123

120:                                              ; preds = %115
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %121 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 0
  %122 = load i32, ptr %121, align 4, !tbaa !14
  store i32 %122, ptr %6, align 4, !tbaa !5
  br label %124

123:                                              ; preds = %115
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %124

124:                                              ; preds = %123, %120
  br label %182

125:                                              ; preds = %99
  %126 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %127 = zext i32 %126 to i64
  %128 = and i64 %127, 536870912
  %129 = icmp eq i64 %128, 536870912
  br i1 %129, label %130, label %133

130:                                              ; preds = %125
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %131 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 0
  %132 = load i32, ptr %131, align 4, !tbaa !14
  store i32 %132, ptr %6, align 4, !tbaa !5
  br label %134

133:                                              ; preds = %125
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %134

134:                                              ; preds = %133, %130
  br label %182

135:                                              ; preds = %99
  %136 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !15
  %137 = zext i32 %136 to i64
  %138 = and i64 %137, 805306368
  %139 = trunc i64 %138 to i32
  store i32 %139, ptr %8, align 4, !tbaa !5
  %140 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %141 = zext i32 %140 to i64
  %142 = and i64 %141, 4
  %143 = icmp eq i64 %142, 4
  br i1 %143, label %144, label %156

144:                                              ; preds = %135
  %145 = load i32, ptr %8, align 4, !tbaa !5
  %146 = icmp eq i32 %145, 0
  br i1 %146, label %147, label %156

147:                                              ; preds = %144
  %148 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %149 = zext i32 %148 to i64
  %150 = and i64 %149, 24
  %151 = trunc i64 %150 to i32
  %152 = lshr i32 %151, 3
  %153 = zext i32 %152 to i64
  %154 = lshr i64 64000000, %153
  %155 = trunc i64 %154 to i32
  store i32 %155, ptr %6, align 4, !tbaa !5
  br label %179

156:                                              ; preds = %144, %135
  %157 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %158 = zext i32 %157 to i64
  %159 = and i64 %158, 256
  %160 = icmp eq i64 %159, 256
  br i1 %160, label %161, label %166

161:                                              ; preds = %156
  %162 = load i32, ptr %8, align 4, !tbaa !5
  %163 = zext i32 %162 to i64
  %164 = icmp eq i64 %163, 268435456
  br i1 %164, label %165, label %166

165:                                              ; preds = %161
  store i32 4000000, ptr %6, align 4, !tbaa !5
  br label %178

166:                                              ; preds = %161, %156
  %167 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %168 = zext i32 %167 to i64
  %169 = and i64 %168, 131072
  %170 = icmp eq i64 %169, 131072
  br i1 %170, label %171, label %176

171:                                              ; preds = %166
  %172 = load i32, ptr %8, align 4, !tbaa !5
  %173 = zext i32 %172 to i64
  %174 = icmp eq i64 %173, 536870912
  br i1 %174, label %175, label %176

175:                                              ; preds = %171
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %177

176:                                              ; preds = %171, %166
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %177

177:                                              ; preds = %176, %175
  br label %178

178:                                              ; preds = %177, %165
  br label %179

179:                                              ; preds = %178, %147
  br label %182

180:                                              ; preds = %99
  store i32 12288000, ptr %6, align 4, !tbaa !5
  br label %182

181:                                              ; preds = %99
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %182

182:                                              ; preds = %181, %180, %179, %134, %124, %114
  br label %663

183:                                              ; preds = %96
  %184 = load i32, ptr %2, align 4, !tbaa !5
  %185 = icmp eq i32 %184, 1024
  br i1 %185, label %186, label %270

186:                                              ; preds = %183
  %187 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !16
  %188 = zext i32 %187 to i64
  %189 = and i64 %188, 14680064
  %190 = trunc i64 %189 to i32
  store i32 %190, ptr %7, align 4, !tbaa !5
  %191 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %191, label %268 [
    i32 0, label %192
    i32 2097152, label %202
    i32 4194304, label %212
    i32 8388608, label %222
    i32 6291456, label %267
  ]

192:                                              ; preds = %186
  %193 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %194 = zext i32 %193 to i64
  %195 = and i64 %194, 33554432
  %196 = icmp eq i64 %195, 33554432
  br i1 %196, label %197, label %200

197:                                              ; preds = %192
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %198 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %199 = load i32, ptr %198, align 4, !tbaa !12
  store i32 %199, ptr %6, align 4, !tbaa !5
  br label %201

200:                                              ; preds = %192
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %201

201:                                              ; preds = %200, %197
  br label %269

202:                                              ; preds = %186
  %203 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %204 = zext i32 %203 to i64
  %205 = and i64 %204, 134217728
  %206 = icmp eq i64 %205, 134217728
  br i1 %206, label %207, label %210

207:                                              ; preds = %202
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %208 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 0
  %209 = load i32, ptr %208, align 4, !tbaa !14
  store i32 %209, ptr %6, align 4, !tbaa !5
  br label %211

210:                                              ; preds = %202
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %211

211:                                              ; preds = %210, %207
  br label %269

212:                                              ; preds = %186
  %213 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %214 = zext i32 %213 to i64
  %215 = and i64 %214, 536870912
  %216 = icmp eq i64 %215, 536870912
  br i1 %216, label %217, label %220

217:                                              ; preds = %212
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %218 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 0
  %219 = load i32, ptr %218, align 4, !tbaa !14
  store i32 %219, ptr %6, align 4, !tbaa !5
  br label %221

220:                                              ; preds = %212
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %221

221:                                              ; preds = %220, %217
  br label %269

222:                                              ; preds = %186
  %223 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !15
  %224 = zext i32 %223 to i64
  %225 = and i64 %224, 805306368
  %226 = trunc i64 %225 to i32
  store i32 %226, ptr %8, align 4, !tbaa !5
  %227 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %228 = zext i32 %227 to i64
  %229 = and i64 %228, 4
  %230 = icmp eq i64 %229, 4
  br i1 %230, label %231, label %243

231:                                              ; preds = %222
  %232 = load i32, ptr %8, align 4, !tbaa !5
  %233 = icmp eq i32 %232, 0
  br i1 %233, label %234, label %243

234:                                              ; preds = %231
  %235 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %236 = zext i32 %235 to i64
  %237 = and i64 %236, 24
  %238 = trunc i64 %237 to i32
  %239 = lshr i32 %238, 3
  %240 = zext i32 %239 to i64
  %241 = lshr i64 64000000, %240
  %242 = trunc i64 %241 to i32
  store i32 %242, ptr %6, align 4, !tbaa !5
  br label %266

243:                                              ; preds = %231, %222
  %244 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %245 = zext i32 %244 to i64
  %246 = and i64 %245, 256
  %247 = icmp eq i64 %246, 256
  br i1 %247, label %248, label %253

248:                                              ; preds = %243
  %249 = load i32, ptr %8, align 4, !tbaa !5
  %250 = zext i32 %249 to i64
  %251 = icmp eq i64 %250, 268435456
  br i1 %251, label %252, label %253

252:                                              ; preds = %248
  store i32 4000000, ptr %6, align 4, !tbaa !5
  br label %265

253:                                              ; preds = %248, %243
  %254 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %255 = zext i32 %254 to i64
  %256 = and i64 %255, 131072
  %257 = icmp eq i64 %256, 131072
  br i1 %257, label %258, label %263

258:                                              ; preds = %253
  %259 = load i32, ptr %8, align 4, !tbaa !5
  %260 = zext i32 %259 to i64
  %261 = icmp eq i64 %260, 536870912
  br i1 %261, label %262, label %263

262:                                              ; preds = %258
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %264

263:                                              ; preds = %258, %253
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %264

264:                                              ; preds = %263, %262
  br label %265

265:                                              ; preds = %264, %252
  br label %266

266:                                              ; preds = %265, %234
  br label %269

267:                                              ; preds = %186
  store i32 12288000, ptr %6, align 4, !tbaa !5
  br label %269

268:                                              ; preds = %186
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %269

269:                                              ; preds = %268, %267, %266, %221, %211, %201
  br label %662

270:                                              ; preds = %183
  %271 = load i32, ptr %2, align 4, !tbaa !5
  %272 = icmp eq i32 %271, 2048
  br i1 %272, label %273, label %357

273:                                              ; preds = %270
  %274 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !16
  %275 = zext i32 %274 to i64
  %276 = and i64 %275, 117440512
  %277 = trunc i64 %276 to i32
  store i32 %277, ptr %7, align 4, !tbaa !5
  %278 = load i32, ptr %7, align 4, !tbaa !5
  switch i32 %278, label %355 [
    i32 0, label %279
    i32 16777216, label %289
    i32 33554432, label %299
    i32 67108864, label %309
    i32 50331648, label %354
  ]

279:                                              ; preds = %273
  %280 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %281 = zext i32 %280 to i64
  %282 = and i64 %281, 33554432
  %283 = icmp eq i64 %282, 33554432
  br i1 %283, label %284, label %287

284:                                              ; preds = %279
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %285 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %286 = load i32, ptr %285, align 4, !tbaa !12
  store i32 %286, ptr %6, align 4, !tbaa !5
  br label %288

287:                                              ; preds = %279
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %288

288:                                              ; preds = %287, %284
  br label %356

289:                                              ; preds = %273
  %290 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %291 = zext i32 %290 to i64
  %292 = and i64 %291, 134217728
  %293 = icmp eq i64 %292, 134217728
  br i1 %293, label %294, label %297

294:                                              ; preds = %289
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %295 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 0
  %296 = load i32, ptr %295, align 4, !tbaa !14
  store i32 %296, ptr %6, align 4, !tbaa !5
  br label %298

297:                                              ; preds = %289
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %298

298:                                              ; preds = %297, %294
  br label %356

299:                                              ; preds = %273
  %300 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %301 = zext i32 %300 to i64
  %302 = and i64 %301, 536870912
  %303 = icmp eq i64 %302, 536870912
  br i1 %303, label %304, label %307

304:                                              ; preds = %299
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %305 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 0
  %306 = load i32, ptr %305, align 4, !tbaa !14
  store i32 %306, ptr %6, align 4, !tbaa !5
  br label %308

307:                                              ; preds = %299
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %308

308:                                              ; preds = %307, %304
  br label %356

309:                                              ; preds = %273
  %310 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !15
  %311 = zext i32 %310 to i64
  %312 = and i64 %311, 805306368
  %313 = trunc i64 %312 to i32
  store i32 %313, ptr %8, align 4, !tbaa !5
  %314 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %315 = zext i32 %314 to i64
  %316 = and i64 %315, 4
  %317 = icmp eq i64 %316, 4
  br i1 %317, label %318, label %330

318:                                              ; preds = %309
  %319 = load i32, ptr %8, align 4, !tbaa !5
  %320 = icmp eq i32 %319, 0
  br i1 %320, label %321, label %330

321:                                              ; preds = %318
  %322 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %323 = zext i32 %322 to i64
  %324 = and i64 %323, 24
  %325 = trunc i64 %324 to i32
  %326 = lshr i32 %325, 3
  %327 = zext i32 %326 to i64
  %328 = lshr i64 64000000, %327
  %329 = trunc i64 %328 to i32
  store i32 %329, ptr %6, align 4, !tbaa !5
  br label %353

330:                                              ; preds = %318, %309
  %331 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %332 = zext i32 %331 to i64
  %333 = and i64 %332, 256
  %334 = icmp eq i64 %333, 256
  br i1 %334, label %335, label %340

335:                                              ; preds = %330
  %336 = load i32, ptr %8, align 4, !tbaa !5
  %337 = zext i32 %336 to i64
  %338 = icmp eq i64 %337, 268435456
  br i1 %338, label %339, label %340

339:                                              ; preds = %335
  store i32 4000000, ptr %6, align 4, !tbaa !5
  br label %352

340:                                              ; preds = %335, %330
  %341 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %342 = zext i32 %341 to i64
  %343 = and i64 %342, 131072
  %344 = icmp eq i64 %343, 131072
  br i1 %344, label %345, label %350

345:                                              ; preds = %340
  %346 = load i32, ptr %8, align 4, !tbaa !5
  %347 = zext i32 %346 to i64
  %348 = icmp eq i64 %347, 536870912
  br i1 %348, label %349, label %350

349:                                              ; preds = %345
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %351

350:                                              ; preds = %345, %340
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %351

351:                                              ; preds = %350, %349
  br label %352

352:                                              ; preds = %351, %339
  br label %353

353:                                              ; preds = %352, %321
  br label %356

354:                                              ; preds = %273
  store i32 12288000, ptr %6, align 4, !tbaa !5
  br label %356

355:                                              ; preds = %273
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %356

356:                                              ; preds = %355, %354, %353, %308, %298, %288
  br label %661

357:                                              ; preds = %270
  %358 = load i32, ptr %2, align 4, !tbaa !5
  %359 = icmp eq i32 %358, 4096
  br i1 %359, label %360, label %444

360:                                              ; preds = %357
  %361 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 20), align 4, !tbaa !9
  %362 = zext i32 %361 to i64
  %363 = and i64 %362, 28672
  %364 = trunc i64 %363 to i32
  store i32 %364, ptr %9, align 4, !tbaa !5
  %365 = load i32, ptr %9, align 4, !tbaa !5
  switch i32 %365, label %442 [
    i32 0, label %366
    i32 4096, label %376
    i32 8192, label %386
    i32 16384, label %396
    i32 12288, label %441
  ]

366:                                              ; preds = %360
  %367 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %368 = zext i32 %367 to i64
  %369 = and i64 %368, 33554432
  %370 = icmp eq i64 %369, 33554432
  br i1 %370, label %371, label %374

371:                                              ; preds = %366
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %372 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %373 = load i32, ptr %372, align 4, !tbaa !12
  store i32 %373, ptr %6, align 4, !tbaa !5
  br label %375

374:                                              ; preds = %366
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %375

375:                                              ; preds = %374, %371
  br label %443

376:                                              ; preds = %360
  %377 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %378 = zext i32 %377 to i64
  %379 = and i64 %378, 134217728
  %380 = icmp eq i64 %379, 134217728
  br i1 %380, label %381, label %384

381:                                              ; preds = %376
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %382 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 0
  %383 = load i32, ptr %382, align 4, !tbaa !14
  store i32 %383, ptr %6, align 4, !tbaa !5
  br label %385

384:                                              ; preds = %376
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %385

385:                                              ; preds = %384, %381
  br label %443

386:                                              ; preds = %360
  %387 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %388 = zext i32 %387 to i64
  %389 = and i64 %388, 536870912
  %390 = icmp eq i64 %389, 536870912
  br i1 %390, label %391, label %394

391:                                              ; preds = %386
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %392 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 0
  %393 = load i32, ptr %392, align 4, !tbaa !14
  store i32 %393, ptr %6, align 4, !tbaa !5
  br label %395

394:                                              ; preds = %386
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %395

395:                                              ; preds = %394, %391
  br label %443

396:                                              ; preds = %360
  %397 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !15
  %398 = zext i32 %397 to i64
  %399 = and i64 %398, 805306368
  %400 = trunc i64 %399 to i32
  store i32 %400, ptr %8, align 4, !tbaa !5
  %401 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %402 = zext i32 %401 to i64
  %403 = and i64 %402, 4
  %404 = icmp eq i64 %403, 4
  br i1 %404, label %405, label %417

405:                                              ; preds = %396
  %406 = load i32, ptr %8, align 4, !tbaa !5
  %407 = icmp eq i32 %406, 0
  br i1 %407, label %408, label %417

408:                                              ; preds = %405
  %409 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %410 = zext i32 %409 to i64
  %411 = and i64 %410, 24
  %412 = trunc i64 %411 to i32
  %413 = lshr i32 %412, 3
  %414 = zext i32 %413 to i64
  %415 = lshr i64 64000000, %414
  %416 = trunc i64 %415 to i32
  store i32 %416, ptr %6, align 4, !tbaa !5
  br label %440

417:                                              ; preds = %405, %396
  %418 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %419 = zext i32 %418 to i64
  %420 = and i64 %419, 256
  %421 = icmp eq i64 %420, 256
  br i1 %421, label %422, label %427

422:                                              ; preds = %417
  %423 = load i32, ptr %8, align 4, !tbaa !5
  %424 = zext i32 %423 to i64
  %425 = icmp eq i64 %424, 268435456
  br i1 %425, label %426, label %427

426:                                              ; preds = %422
  store i32 4000000, ptr %6, align 4, !tbaa !5
  br label %439

427:                                              ; preds = %422, %417
  %428 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %429 = zext i32 %428 to i64
  %430 = and i64 %429, 131072
  %431 = icmp eq i64 %430, 131072
  br i1 %431, label %432, label %437

432:                                              ; preds = %427
  %433 = load i32, ptr %8, align 4, !tbaa !5
  %434 = zext i32 %433 to i64
  %435 = icmp eq i64 %434, 536870912
  br i1 %435, label %436, label %437

436:                                              ; preds = %432
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %438

437:                                              ; preds = %432, %427
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %438

438:                                              ; preds = %437, %436
  br label %439

439:                                              ; preds = %438, %426
  br label %440

440:                                              ; preds = %439, %408
  br label %443

441:                                              ; preds = %360
  store i32 12288000, ptr %6, align 4, !tbaa !5
  br label %443

442:                                              ; preds = %360
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %443

443:                                              ; preds = %442, %441, %440, %395, %385, %375
  br label %660

444:                                              ; preds = %357
  %445 = load i32, ptr %2, align 4, !tbaa !5
  %446 = icmp eq i32 %445, 524288
  br i1 %446, label %447, label %520

447:                                              ; preds = %444
  %448 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !16
  %449 = zext i32 %448 to i64
  %450 = and i64 %449, 196608
  %451 = trunc i64 %450 to i32
  store i32 %451, ptr %9, align 4, !tbaa !5
  %452 = load i32, ptr %9, align 4, !tbaa !5
  switch i32 %452, label %518 [
    i32 0, label %453
    i32 65536, label %463
    i32 131072, label %473
  ]

453:                                              ; preds = %447
  %454 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %455 = zext i32 %454 to i64
  %456 = and i64 %455, 134217728
  %457 = icmp eq i64 %456, 134217728
  br i1 %457, label %458, label %461

458:                                              ; preds = %453
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %459 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 0
  %460 = load i32, ptr %459, align 4, !tbaa !14
  store i32 %460, ptr %6, align 4, !tbaa !5
  br label %462

461:                                              ; preds = %453
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %462

462:                                              ; preds = %461, %458
  br label %519

463:                                              ; preds = %447
  %464 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %465 = zext i32 %464 to i64
  %466 = and i64 %465, 536870912
  %467 = icmp eq i64 %466, 536870912
  br i1 %467, label %468, label %471

468:                                              ; preds = %463
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %469 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 2
  %470 = load i32, ptr %469, align 4, !tbaa !17
  store i32 %470, ptr %6, align 4, !tbaa !5
  br label %472

471:                                              ; preds = %463
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %472

472:                                              ; preds = %471, %468
  br label %519

473:                                              ; preds = %447
  %474 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !15
  %475 = zext i32 %474 to i64
  %476 = and i64 %475, 805306368
  %477 = trunc i64 %476 to i32
  store i32 %477, ptr %8, align 4, !tbaa !5
  %478 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %479 = zext i32 %478 to i64
  %480 = and i64 %479, 4
  %481 = icmp eq i64 %480, 4
  br i1 %481, label %482, label %494

482:                                              ; preds = %473
  %483 = load i32, ptr %8, align 4, !tbaa !5
  %484 = icmp eq i32 %483, 0
  br i1 %484, label %485, label %494

485:                                              ; preds = %482
  %486 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %487 = zext i32 %486 to i64
  %488 = and i64 %487, 24
  %489 = trunc i64 %488 to i32
  %490 = lshr i32 %489, 3
  %491 = zext i32 %490 to i64
  %492 = lshr i64 64000000, %491
  %493 = trunc i64 %492 to i32
  store i32 %493, ptr %6, align 4, !tbaa !5
  br label %517

494:                                              ; preds = %482, %473
  %495 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %496 = zext i32 %495 to i64
  %497 = and i64 %496, 256
  %498 = icmp eq i64 %497, 256
  br i1 %498, label %499, label %504

499:                                              ; preds = %494
  %500 = load i32, ptr %8, align 4, !tbaa !5
  %501 = zext i32 %500 to i64
  %502 = icmp eq i64 %501, 268435456
  br i1 %502, label %503, label %504

503:                                              ; preds = %499
  store i32 4000000, ptr %6, align 4, !tbaa !5
  br label %516

504:                                              ; preds = %499, %494
  %505 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %506 = zext i32 %505 to i64
  %507 = and i64 %506, 131072
  %508 = icmp eq i64 %507, 131072
  br i1 %508, label %509, label %514

509:                                              ; preds = %504
  %510 = load i32, ptr %8, align 4, !tbaa !5
  %511 = zext i32 %510 to i64
  %512 = icmp eq i64 %511, 536870912
  br i1 %512, label %513, label %514

513:                                              ; preds = %509
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %515

514:                                              ; preds = %509, %504
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %515

515:                                              ; preds = %514, %513
  br label %516

516:                                              ; preds = %515, %503
  br label %517

517:                                              ; preds = %516, %485
  br label %519

518:                                              ; preds = %447
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %519

519:                                              ; preds = %518, %517, %472, %462
  br label %659

520:                                              ; preds = %444
  %521 = load i32, ptr %2, align 4, !tbaa !5
  %522 = icmp eq i32 %521, 65536
  br i1 %522, label %523, label %551

523:                                              ; preds = %520
  %524 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !15
  %525 = zext i32 %524 to i64
  %526 = and i64 %525, 65536
  %527 = trunc i64 %526 to i32
  store i32 %527, ptr %9, align 4, !tbaa !5
  %528 = load i32, ptr %9, align 4, !tbaa !5
  switch i32 %528, label %549 [
    i32 0, label %529
    i32 65536, label %539
  ]

529:                                              ; preds = %523
  %530 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %531 = zext i32 %530 to i64
  %532 = and i64 %531, 33554432
  %533 = icmp eq i64 %532, 33554432
  br i1 %533, label %534, label %537

534:                                              ; preds = %529
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %535 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %536 = load i32, ptr %535, align 4, !tbaa !12
  store i32 %536, ptr %6, align 4, !tbaa !5
  br label %538

537:                                              ; preds = %529
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %538

538:                                              ; preds = %537, %534
  br label %550

539:                                              ; preds = %523
  %540 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %541 = zext i32 %540 to i64
  %542 = and i64 %541, 134217728
  %543 = icmp eq i64 %542, 134217728
  br i1 %543, label %544, label %547

544:                                              ; preds = %539
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %545 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 2
  %546 = load i32, ptr %545, align 4, !tbaa !17
  store i32 %546, ptr %6, align 4, !tbaa !5
  br label %548

547:                                              ; preds = %539
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %548

548:                                              ; preds = %547, %544
  br label %550

549:                                              ; preds = %523
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %550

550:                                              ; preds = %549, %548, %538
  br label %658

551:                                              ; preds = %520
  %552 = load i32, ptr %2, align 4, !tbaa !5
  %553 = icmp eq i32 %552, 16384
  br i1 %553, label %554, label %616

554:                                              ; preds = %551
  %555 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !16
  %556 = zext i32 %555 to i64
  %557 = and i64 %556, 1879048192
  %558 = trunc i64 %557 to i32
  store i32 %558, ptr %9, align 4, !tbaa !5
  %559 = load i32, ptr %9, align 4, !tbaa !5
  switch i32 %559, label %614 [
    i32 0, label %560
    i32 268435456, label %562
    i32 536870912, label %572
    i32 805306368, label %582
    i32 1073741824, label %598
    i32 1342177280, label %606
  ]

560:                                              ; preds = %554
  %561 = call i32 @HAL_RCCEx_GetD3PCLK1Freq()
  store i32 %561, ptr %6, align 4, !tbaa !5
  br label %615

562:                                              ; preds = %554
  %563 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %564 = zext i32 %563 to i64
  %565 = and i64 %564, 134217728
  %566 = icmp eq i64 %565, 134217728
  br i1 %566, label %567, label %570

567:                                              ; preds = %562
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %568 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 1
  %569 = load i32, ptr %568, align 4, !tbaa !12
  store i32 %569, ptr %6, align 4, !tbaa !5
  br label %571

570:                                              ; preds = %562
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %571

571:                                              ; preds = %570, %567
  br label %615

572:                                              ; preds = %554
  %573 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %574 = zext i32 %573 to i64
  %575 = and i64 %574, 536870912
  %576 = icmp eq i64 %575, 536870912
  br i1 %576, label %577, label %580

577:                                              ; preds = %572
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %578 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 1
  %579 = load i32, ptr %578, align 4, !tbaa !12
  store i32 %579, ptr %6, align 4, !tbaa !5
  br label %581

580:                                              ; preds = %572
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %581

581:                                              ; preds = %580, %577
  br label %615

582:                                              ; preds = %554
  %583 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %584 = zext i32 %583 to i64
  %585 = and i64 %584, 4
  %586 = icmp eq i64 %585, 4
  br i1 %586, label %587, label %596

587:                                              ; preds = %582
  %588 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %589 = zext i32 %588 to i64
  %590 = and i64 %589, 24
  %591 = trunc i64 %590 to i32
  %592 = lshr i32 %591, 3
  %593 = zext i32 %592 to i64
  %594 = lshr i64 64000000, %593
  %595 = trunc i64 %594 to i32
  store i32 %595, ptr %6, align 4, !tbaa !5
  br label %597

596:                                              ; preds = %582
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %597

597:                                              ; preds = %596, %587
  br label %615

598:                                              ; preds = %554
  %599 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %600 = zext i32 %599 to i64
  %601 = and i64 %600, 256
  %602 = icmp eq i64 %601, 256
  br i1 %602, label %603, label %604

603:                                              ; preds = %598
  store i32 4000000, ptr %6, align 4, !tbaa !5
  br label %605

604:                                              ; preds = %598
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %605

605:                                              ; preds = %604, %603
  br label %615

606:                                              ; preds = %554
  %607 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %608 = zext i32 %607 to i64
  %609 = and i64 %608, 131072
  %610 = icmp eq i64 %609, 131072
  br i1 %610, label %611, label %612

611:                                              ; preds = %606
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %613

612:                                              ; preds = %606
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %613

613:                                              ; preds = %612, %611
  br label %615

614:                                              ; preds = %554
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %615

615:                                              ; preds = %614, %613, %605, %597, %581, %571, %560
  br label %657

616:                                              ; preds = %551
  %617 = load i32, ptr %2, align 4, !tbaa !5
  %618 = icmp eq i32 %617, 32768
  br i1 %618, label %619, label %655

619:                                              ; preds = %616
  %620 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 20), align 4, !tbaa !9
  %621 = zext i32 %620 to i64
  %622 = and i64 %621, 805306368
  %623 = trunc i64 %622 to i32
  store i32 %623, ptr %9, align 4, !tbaa !5
  %624 = load i32, ptr %9, align 4, !tbaa !5
  switch i32 %624, label %653 [
    i32 0, label %625
    i32 268435456, label %633
    i32 536870912, label %643
  ]

625:                                              ; preds = %619
  %626 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %627 = zext i32 %626 to i64
  %628 = and i64 %627, 131072
  %629 = icmp eq i64 %628, 131072
  br i1 %629, label %630, label %631

630:                                              ; preds = %625
  store i32 24000000, ptr %6, align 4, !tbaa !5
  br label %632

631:                                              ; preds = %625
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %632

632:                                              ; preds = %631, %630
  br label %654

633:                                              ; preds = %619
  %634 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %635 = zext i32 %634 to i64
  %636 = and i64 %635, 33554432
  %637 = icmp eq i64 %636, 33554432
  br i1 %637, label %638, label %641

638:                                              ; preds = %633
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %639 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %640 = load i32, ptr %639, align 4, !tbaa !12
  store i32 %640, ptr %6, align 4, !tbaa !5
  br label %642

641:                                              ; preds = %633
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %642

642:                                              ; preds = %641, %638
  br label %654

643:                                              ; preds = %619
  %644 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !11
  %645 = zext i32 %644 to i64
  %646 = and i64 %645, 134217728
  %647 = icmp eq i64 %646, 134217728
  br i1 %647, label %648, label %651

648:                                              ; preds = %643
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %649 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 1
  %650 = load i32, ptr %649, align 4, !tbaa !12
  store i32 %650, ptr %6, align 4, !tbaa !5
  br label %652

651:                                              ; preds = %643
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %652

652:                                              ; preds = %651, %648
  br label %654

653:                                              ; preds = %619
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %654

654:                                              ; preds = %653, %652, %642, %632
  br label %656

655:                                              ; preds = %616
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %656

656:                                              ; preds = %655, %654
  br label %657

657:                                              ; preds = %656, %615
  br label %658

658:                                              ; preds = %657, %550
  br label %659

659:                                              ; preds = %658, %519
  br label %660

660:                                              ; preds = %659, %443
  br label %661

661:                                              ; preds = %660, %356
  br label %662

662:                                              ; preds = %661, %269
  br label %663

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

664:                                              ; preds = %663, %95
  %665 = load i32, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %5) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %4) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr %3) #2
  ret i32 %665
}

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @HAL_RCCEx_GetD3PCLK1Freq() #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 80}
!10 = !{!"", !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, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !6, i64 112, !6, i64 116, !6, i64 120, !6, i64 124, !6, i64 128, !6, i64 132, !6, i64 136, !6, i64 140, !6, i64 144, !6, i64 148, !6, i64 152, !6, i64 156, !6, i64 160, !6, i64 164, !6, i64 168, !7, i64 172, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !6, i64 224, !6, i64 228, !6, i64 232, !6, i64 236, !6, i64 240, !6, i64 244, !6, i64 248, !6, i64 252, !6, i64 256, !6, i64 260, !6, i64 264, !6, i64 268, !6, i64 272, !6, i64 276, !6, i64 280, !6, i64 284, !7, i64 288}
!11 = !{!10, !6, i64 0}
!12 = !{!13, !6, i64 4}
!13 = !{!"", !6, i64 0, !6, i64 4, !6, i64 8}
!14 = !{!13, !6, i64 0}
!15 = !{!10, !6, i64 76}
!16 = !{!10, !6, i64 88}
!17 = !{!13, !6, i64 8}


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

%struct.PLL1_ClocksTypeDef = type { i32, i32, i32 }
%struct.PLL2_ClocksTypeDef = type { i32, i32, i32 }
%struct.PLL3_ClocksTypeDef = type { i32, i32, i32 }

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @HAL_RCCEx_GetPeriphCLKFreq(i32 noundef %0) local_unnamed_addr #1 {
  %2 = alloca %struct.PLL1_ClocksTypeDef, align 4
  %3 = alloca %struct.PLL2_ClocksTypeDef, align 4
  %4 = alloca %struct.PLL3_ClocksTypeDef, align 4
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %2) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #2
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #2
  switch i32 %0, label %315 [
    i32 256, label %5
    i32 512, label %46
    i32 1024, label %88
    i32 2048, label %130
    i32 4096, label %172
    i32 524288, label %214
    i32 65536, label %250
    i32 16384, label %264
    i32 32768, label %296
  ]

5:                                                ; preds = %1
  %6 = load volatile i32, ptr inttoptr (i64 1476543568 to ptr), align 16, !tbaa !5
  %7 = and i32 %6, 7
  switch i32 %7, label %45 [
    i32 0, label %8
    i32 1, label %14
    i32 2, label %19
    i32 4, label %24
    i32 3, label %315
  ]

8:                                                ; preds = %5
  %9 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %10 = and i32 %9, 33554432
  %.not110 = icmp eq i32 %10, 0
  br i1 %.not110, label %315, label %11

11:                                               ; preds = %8
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %12 = getelementptr inbounds i8, ptr %2, i64 4
  %13 = load i32, ptr %12, align 4, !tbaa !11
  br label %315

14:                                               ; preds = %5
  %15 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %16 = and i32 %15, 134217728
  %.not109 = icmp eq i32 %16, 0
  br i1 %.not109, label %315, label %17

17:                                               ; preds = %14
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %18 = load i32, ptr %3, align 4, !tbaa !13
  br label %315

19:                                               ; preds = %5
  %20 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %21 = and i32 %20, 536870912
  %.not108 = icmp eq i32 %21, 0
  br i1 %.not108, label %315, label %22

22:                                               ; preds = %19
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %23 = load i32, ptr %4, align 4, !tbaa !13
  br label %315

24:                                               ; preds = %5
  %25 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %26 = and i32 %25, 805306368
  %27 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %28 = and i32 %27, 4
  %29 = icmp ne i32 %28, 0
  %30 = icmp eq i32 %26, 0
  %or.cond = select i1 %29, i1 %30, i1 false
  %31 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %or.cond, label %32, label %36

32:                                               ; preds = %24
  %33 = lshr i32 %31, 3
  %34 = and i32 %33, 3
  %35 = lshr exact i32 64000000, %34
  br label %315

36:                                               ; preds = %24
  %37 = and i32 %31, 256
  %38 = icmp ne i32 %37, 0
  %39 = icmp eq i32 %26, 268435456
  %or.cond4 = select i1 %38, i1 %39, i1 false
  br i1 %or.cond4, label %315, label %40

40:                                               ; preds = %36
  %41 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %42 = and i32 %41, 131072
  %43 = icmp ne i32 %42, 0
  %44 = icmp eq i32 %26, 536870912
  %or.cond7 = select i1 %43, i1 %44, i1 false
  %. = select i1 %or.cond7, i32 24000000, i32 0
  br label %315

45:                                               ; preds = %5
  br label %315

46:                                               ; preds = %1
  %47 = load volatile i32, ptr inttoptr (i64 1476543568 to ptr), align 16, !tbaa !5
  %48 = lshr i32 %47, 6
  %49 = and i32 %48, 7
  switch i32 %49, label %87 [
    i32 0, label %50
    i32 1, label %56
    i32 2, label %61
    i32 4, label %66
    i32 3, label %315
  ]

50:                                               ; preds = %46
  %51 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %52 = and i32 %51, 33554432
  %.not107 = icmp eq i32 %52, 0
  br i1 %.not107, label %315, label %53

53:                                               ; preds = %50
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %54 = getelementptr inbounds i8, ptr %2, i64 4
  %55 = load i32, ptr %54, align 4, !tbaa !11
  br label %315

56:                                               ; preds = %46
  %57 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %58 = and i32 %57, 134217728
  %.not106 = icmp eq i32 %58, 0
  br i1 %.not106, label %315, label %59

59:                                               ; preds = %56
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %60 = load i32, ptr %3, align 4, !tbaa !13
  br label %315

61:                                               ; preds = %46
  %62 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %63 = and i32 %62, 536870912
  %.not105 = icmp eq i32 %63, 0
  br i1 %.not105, label %315, label %64

64:                                               ; preds = %61
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %65 = load i32, ptr %4, align 4, !tbaa !13
  br label %315

66:                                               ; preds = %46
  %67 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %68 = and i32 %67, 805306368
  %69 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %70 = and i32 %69, 4
  %71 = icmp ne i32 %70, 0
  %72 = icmp eq i32 %68, 0
  %or.cond9 = select i1 %71, i1 %72, i1 false
  %73 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %or.cond9, label %74, label %78

74:                                               ; preds = %66
  %75 = lshr i32 %73, 3
  %76 = and i32 %75, 3
  %77 = lshr exact i32 64000000, %76
  br label %315

78:                                               ; preds = %66
  %79 = and i32 %73, 256
  %80 = icmp ne i32 %79, 0
  %81 = icmp eq i32 %68, 268435456
  %or.cond12 = select i1 %80, i1 %81, i1 false
  br i1 %or.cond12, label %315, label %82

82:                                               ; preds = %78
  %83 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %84 = and i32 %83, 131072
  %85 = icmp ne i32 %84, 0
  %86 = icmp eq i32 %68, 536870912
  %or.cond15 = select i1 %85, i1 %86, i1 false
  %.111 = select i1 %or.cond15, i32 24000000, i32 0
  br label %315

87:                                               ; preds = %46
  br label %315

88:                                               ; preds = %1
  %89 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %90 = lshr i32 %89, 21
  %91 = and i32 %90, 7
  switch i32 %91, label %129 [
    i32 0, label %92
    i32 1, label %98
    i32 2, label %103
    i32 4, label %108
    i32 3, label %315
  ]

92:                                               ; preds = %88
  %93 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %94 = and i32 %93, 33554432
  %.not104 = icmp eq i32 %94, 0
  br i1 %.not104, label %315, label %95

95:                                               ; preds = %92
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %96 = getelementptr inbounds i8, ptr %2, i64 4
  %97 = load i32, ptr %96, align 4, !tbaa !11
  br label %315

98:                                               ; preds = %88
  %99 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %100 = and i32 %99, 134217728
  %.not103 = icmp eq i32 %100, 0
  br i1 %.not103, label %315, label %101

101:                                              ; preds = %98
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %102 = load i32, ptr %3, align 4, !tbaa !13
  br label %315

103:                                              ; preds = %88
  %104 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %105 = and i32 %104, 536870912
  %.not102 = icmp eq i32 %105, 0
  br i1 %.not102, label %315, label %106

106:                                              ; preds = %103
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %107 = load i32, ptr %4, align 4, !tbaa !13
  br label %315

108:                                              ; preds = %88
  %109 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %110 = and i32 %109, 805306368
  %111 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %112 = and i32 %111, 4
  %113 = icmp ne i32 %112, 0
  %114 = icmp eq i32 %110, 0
  %or.cond17 = select i1 %113, i1 %114, i1 false
  %115 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %or.cond17, label %116, label %120

116:                                              ; preds = %108
  %117 = lshr i32 %115, 3
  %118 = and i32 %117, 3
  %119 = lshr exact i32 64000000, %118
  br label %315

120:                                              ; preds = %108
  %121 = and i32 %115, 256
  %122 = icmp ne i32 %121, 0
  %123 = icmp eq i32 %110, 268435456
  %or.cond20 = select i1 %122, i1 %123, i1 false
  br i1 %or.cond20, label %315, label %124

124:                                              ; preds = %120
  %125 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %126 = and i32 %125, 131072
  %127 = icmp ne i32 %126, 0
  %128 = icmp eq i32 %110, 536870912
  %or.cond23 = select i1 %127, i1 %128, i1 false
  %.112 = select i1 %or.cond23, i32 24000000, i32 0
  br label %315

129:                                              ; preds = %88
  br label %315

130:                                              ; preds = %1
  %131 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %132 = lshr i32 %131, 24
  %133 = and i32 %132, 7
  switch i32 %133, label %171 [
    i32 0, label %134
    i32 1, label %140
    i32 2, label %145
    i32 4, label %150
    i32 3, label %315
  ]

134:                                              ; preds = %130
  %135 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %136 = and i32 %135, 33554432
  %.not101 = icmp eq i32 %136, 0
  br i1 %.not101, label %315, label %137

137:                                              ; preds = %134
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %138 = getelementptr inbounds i8, ptr %2, i64 4
  %139 = load i32, ptr %138, align 4, !tbaa !11
  br label %315

140:                                              ; preds = %130
  %141 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %142 = and i32 %141, 134217728
  %.not100 = icmp eq i32 %142, 0
  br i1 %.not100, label %315, label %143

143:                                              ; preds = %140
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %144 = load i32, ptr %3, align 4, !tbaa !13
  br label %315

145:                                              ; preds = %130
  %146 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %147 = and i32 %146, 536870912
  %.not99 = icmp eq i32 %147, 0
  br i1 %.not99, label %315, label %148

148:                                              ; preds = %145
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %149 = load i32, ptr %4, align 4, !tbaa !13
  br label %315

150:                                              ; preds = %130
  %151 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %152 = and i32 %151, 805306368
  %153 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %154 = and i32 %153, 4
  %155 = icmp ne i32 %154, 0
  %156 = icmp eq i32 %152, 0
  %or.cond25 = select i1 %155, i1 %156, i1 false
  %157 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %or.cond25, label %158, label %162

158:                                              ; preds = %150
  %159 = lshr i32 %157, 3
  %160 = and i32 %159, 3
  %161 = lshr exact i32 64000000, %160
  br label %315

162:                                              ; preds = %150
  %163 = and i32 %157, 256
  %164 = icmp ne i32 %163, 0
  %165 = icmp eq i32 %152, 268435456
  %or.cond28 = select i1 %164, i1 %165, i1 false
  br i1 %or.cond28, label %315, label %166

166:                                              ; preds = %162
  %167 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %168 = and i32 %167, 131072
  %169 = icmp ne i32 %168, 0
  %170 = icmp eq i32 %152, 536870912
  %or.cond31 = select i1 %169, i1 %170, i1 false
  %.113 = select i1 %or.cond31, i32 24000000, i32 0
  br label %315

171:                                              ; preds = %130
  br label %315

172:                                              ; preds = %1
  %173 = load volatile i32, ptr inttoptr (i64 1476543568 to ptr), align 16, !tbaa !5
  %174 = lshr i32 %173, 12
  %175 = and i32 %174, 7
  switch i32 %175, label %213 [
    i32 0, label %176
    i32 1, label %182
    i32 2, label %187
    i32 4, label %192
    i32 3, label %315
  ]

176:                                              ; preds = %172
  %177 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %178 = and i32 %177, 33554432
  %.not98 = icmp eq i32 %178, 0
  br i1 %.not98, label %315, label %179

179:                                              ; preds = %176
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %180 = getelementptr inbounds i8, ptr %2, i64 4
  %181 = load i32, ptr %180, align 4, !tbaa !11
  br label %315

182:                                              ; preds = %172
  %183 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %184 = and i32 %183, 134217728
  %.not97 = icmp eq i32 %184, 0
  br i1 %.not97, label %315, label %185

185:                                              ; preds = %182
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %186 = load i32, ptr %3, align 4, !tbaa !13
  br label %315

187:                                              ; preds = %172
  %188 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %189 = and i32 %188, 536870912
  %.not96 = icmp eq i32 %189, 0
  br i1 %.not96, label %315, label %190

190:                                              ; preds = %187
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %191 = load i32, ptr %4, align 4, !tbaa !13
  br label %315

192:                                              ; preds = %172
  %193 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %194 = and i32 %193, 805306368
  %195 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %196 = and i32 %195, 4
  %197 = icmp ne i32 %196, 0
  %198 = icmp eq i32 %194, 0
  %or.cond33 = select i1 %197, i1 %198, i1 false
  %199 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %or.cond33, label %200, label %204

200:                                              ; preds = %192
  %201 = lshr i32 %199, 3
  %202 = and i32 %201, 3
  %203 = lshr exact i32 64000000, %202
  br label %315

204:                                              ; preds = %192
  %205 = and i32 %199, 256
  %206 = icmp ne i32 %205, 0
  %207 = icmp eq i32 %194, 268435456
  %or.cond36 = select i1 %206, i1 %207, i1 false
  br i1 %or.cond36, label %315, label %208

208:                                              ; preds = %204
  %209 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %210 = and i32 %209, 131072
  %211 = icmp ne i32 %210, 0
  %212 = icmp eq i32 %194, 536870912
  %or.cond39 = select i1 %211, i1 %212, i1 false
  %.114 = select i1 %or.cond39, i32 24000000, i32 0
  br label %315

213:                                              ; preds = %172
  br label %315

214:                                              ; preds = %1
  %215 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %216 = lshr i32 %215, 16
  %217 = and i32 %216, 3
  switch i32 %217, label %default.unreachable [
    i32 0, label %218
    i32 1, label %223
    i32 2, label %229
    i32 3, label %315
  ]

218:                                              ; preds = %214
  %219 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %220 = and i32 %219, 134217728
  %.not95 = icmp eq i32 %220, 0
  br i1 %.not95, label %315, label %221

221:                                              ; preds = %218
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %222 = load i32, ptr %3, align 4, !tbaa !13
  br label %315

223:                                              ; preds = %214
  %224 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %225 = and i32 %224, 536870912
  %.not94 = icmp eq i32 %225, 0
  br i1 %.not94, label %315, label %226

226:                                              ; preds = %223
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %227 = getelementptr inbounds i8, ptr %4, i64 8
  %228 = load i32, ptr %227, align 4, !tbaa !16
  br label %315

229:                                              ; preds = %214
  %230 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %231 = and i32 %230, 805306368
  %232 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %233 = and i32 %232, 4
  %234 = icmp ne i32 %233, 0
  %235 = icmp eq i32 %231, 0
  %or.cond41 = select i1 %234, i1 %235, i1 false
  %236 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %or.cond41, label %237, label %241

237:                                              ; preds = %229
  %238 = lshr i32 %236, 3
  %239 = and i32 %238, 3
  %240 = lshr exact i32 64000000, %239
  br label %315

241:                                              ; preds = %229
  %242 = and i32 %236, 256
  %243 = icmp ne i32 %242, 0
  %244 = icmp eq i32 %231, 268435456
  %or.cond44 = select i1 %243, i1 %244, i1 false
  br i1 %or.cond44, label %315, label %245

245:                                              ; preds = %241
  %246 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %247 = and i32 %246, 131072
  %248 = icmp ne i32 %247, 0
  %249 = icmp eq i32 %231, 536870912
  %or.cond47 = select i1 %248, i1 %249, i1 false
  %.115 = select i1 %or.cond47, i32 24000000, i32 0
  br label %315

default.unreachable:                              ; preds = %296, %214
  unreachable

250:                                              ; preds = %1
  %251 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %252 = and i32 %251, 65536
  %switch = icmp eq i32 %252, 0
  %253 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %switch, label %254, label %259

254:                                              ; preds = %250
  %255 = and i32 %253, 33554432
  %.not93 = icmp eq i32 %255, 0
  br i1 %.not93, label %315, label %256

256:                                              ; preds = %254
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %257 = getelementptr inbounds i8, ptr %2, i64 4
  %258 = load i32, ptr %257, align 4, !tbaa !11
  br label %315

259:                                              ; preds = %250
  %260 = and i32 %253, 134217728
  %.not92 = icmp eq i32 %260, 0
  br i1 %.not92, label %315, label %261

261:                                              ; preds = %259
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %262 = getelementptr inbounds i8, ptr %3, i64 8
  %263 = load i32, ptr %262, align 4, !tbaa !16
  br label %315

264:                                              ; preds = %1
  %265 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %266 = lshr i32 %265, 28
  %267 = and i32 %266, 7
  switch i32 %267, label %315 [
    i32 0, label %268
    i32 1, label %270
    i32 2, label %276
    i32 3, label %282
    i32 4, label %290
    i32 5, label %293
  ]

268:                                              ; preds = %264
  %269 = tail call i32 @HAL_RCCEx_GetD3PCLK1Freq()
  br label %315

270:                                              ; preds = %264
  %271 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %272 = and i32 %271, 134217728
  %.not91 = icmp eq i32 %272, 0
  br i1 %.not91, label %315, label %273

273:                                              ; preds = %270
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %274 = getelementptr inbounds i8, ptr %3, i64 4
  %275 = load i32, ptr %274, align 4, !tbaa !11
  br label %315

276:                                              ; preds = %264
  %277 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %278 = and i32 %277, 536870912
  %.not90 = icmp eq i32 %278, 0
  br i1 %.not90, label %315, label %279

279:                                              ; preds = %276
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %280 = getelementptr inbounds i8, ptr %4, i64 4
  %281 = load i32, ptr %280, align 4, !tbaa !11
  br label %315

282:                                              ; preds = %264
  %283 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %284 = and i32 %283, 4
  %.not89 = icmp eq i32 %284, 0
  br i1 %.not89, label %315, label %285

285:                                              ; preds = %282
  %286 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %287 = lshr i32 %286, 3
  %288 = and i32 %287, 3
  %289 = lshr exact i32 64000000, %288
  br label %315

290:                                              ; preds = %264
  %291 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %292 = and i32 %291, 256
  %.not88 = icmp eq i32 %292, 0
  %.118 = select i1 %.not88, i32 0, i32 4000000
  br label %315

293:                                              ; preds = %264
  %294 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %295 = and i32 %294, 131072
  %.not87 = icmp eq i32 %295, 0
  %.119 = select i1 %.not87, i32 0, i32 24000000
  br label %315

296:                                              ; preds = %1
  %297 = load volatile i32, ptr inttoptr (i64 1476543568 to ptr), align 16, !tbaa !5
  %298 = lshr i32 %297, 28
  %299 = and i32 %298, 3
  switch i32 %299, label %default.unreachable [
    i32 0, label %300
    i32 1, label %303
    i32 2, label %309
    i32 3, label %315
  ]

300:                                              ; preds = %296
  %301 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %302 = and i32 %301, 131072
  %.not86 = icmp eq i32 %302, 0
  %.121 = select i1 %.not86, i32 0, i32 24000000
  br label %315

303:                                              ; preds = %296
  %304 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %305 = and i32 %304, 33554432
  %.not85 = icmp eq i32 %305, 0
  br i1 %.not85, label %315, label %306

306:                                              ; preds = %303
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %307 = getelementptr inbounds i8, ptr %2, i64 4
  %308 = load i32, ptr %307, align 4, !tbaa !11
  br label %315

309:                                              ; preds = %296
  %310 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %311 = and i32 %310, 134217728
  %.not = icmp eq i32 %311, 0
  br i1 %.not, label %315, label %312

312:                                              ; preds = %309
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %313 = getelementptr inbounds i8, ptr %3, i64 4
  %314 = load i32, ptr %313, align 4, !tbaa !11
  br label %315

315:                                              ; preds = %1, %296, %309, %303, %300, %264, %293, %290, %282, %276, %270, %259, %254, %214, %245, %241, %223, %218, %172, %208, %204, %187, %182, %176, %130, %166, %162, %145, %140, %134, %88, %124, %120, %103, %98, %92, %46, %82, %78, %61, %56, %50, %5, %40, %36, %19, %14, %8, %74, %64, %59, %53, %87, %158, %148, %143, %137, %171, %237, %226, %221, %285, %279, %273, %268, %306, %312, %256, %261, %213, %179, %185, %190, %200, %129, %95, %101, %106, %116, %45, %11, %17, %22, %32
  %.0 = phi i32 [ 0, %45 ], [ %35, %32 ], [ %23, %22 ], [ %18, %17 ], [ %13, %11 ], [ 0, %87 ], [ %77, %74 ], [ %65, %64 ], [ %60, %59 ], [ %55, %53 ], [ 0, %129 ], [ %119, %116 ], [ %107, %106 ], [ %102, %101 ], [ %97, %95 ], [ 0, %171 ], [ %161, %158 ], [ %149, %148 ], [ %144, %143 ], [ %139, %137 ], [ 0, %213 ], [ %203, %200 ], [ %191, %190 ], [ %186, %185 ], [ %181, %179 ], [ %240, %237 ], [ %228, %226 ], [ %222, %221 ], [ %263, %261 ], [ %258, %256 ], [ %289, %285 ], [ %281, %279 ], [ %275, %273 ], [ %269, %268 ], [ %314, %312 ], [ %308, %306 ], [ 0, %8 ], [ 0, %14 ], [ 0, %19 ], [ 4000000, %36 ], [ %., %40 ], [ 12288000, %5 ], [ 0, %50 ], [ 0, %56 ], [ 0, %61 ], [ 4000000, %78 ], [ %.111, %82 ], [ 12288000, %46 ], [ 0, %92 ], [ 0, %98 ], [ 0, %103 ], [ 4000000, %120 ], [ %.112, %124 ], [ 12288000, %88 ], [ 0, %134 ], [ 0, %140 ], [ 0, %145 ], [ 4000000, %162 ], [ %.113, %166 ], [ 12288000, %130 ], [ 0, %176 ], [ 0, %182 ], [ 0, %187 ], [ 4000000, %204 ], [ %.114, %208 ], [ 12288000, %172 ], [ 0, %218 ], [ 0, %223 ], [ 4000000, %241 ], [ %.115, %245 ], [ 0, %214 ], [ 0, %254 ], [ 0, %259 ], [ 0, %270 ], [ 0, %276 ], [ 0, %282 ], [ %.118, %290 ], [ %.119, %293 ], [ 0, %264 ], [ %.121, %300 ], [ 0, %303 ], [ 0, %309 ], [ 0, %296 ], [ 0, %1 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #2
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %2) #2
  ret i32 %.0
}

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @HAL_RCCEx_GetD3PCLK1Freq() local_unnamed_addr #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 80}
!6 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !8, i64 172, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !7, i64 256, !7, i64 260, !7, i64 264, !7, i64 268, !7, i64 272, !7, i64 276, !7, i64 280, !7, i64 284, !8, i64 288}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 0}
!11 = !{!12, !7, i64 4}
!12 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8}
!13 = !{!12, !7, i64 0}
!14 = !{!6, !7, i64 76}
!15 = !{!6, !7, i64 88}
!16 = !{!12, !7, i64 8}


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