; LLVM IR from reazon-research/OpenArm :: control/canfd_control/Drivers/STM32H7xx_HAL_Driver/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(i64 noundef %0) #1 {
  %2 = alloca i64, align 8
  %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 i64 %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 12, ptr %3) #3
  call void @llvm.lifetime.start.p0(i64 12, ptr %4) #3
  call void @llvm.lifetime.start.p0(i64 12, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %10 = load i64, ptr %2, align 8, !tbaa !5
  %11 = icmp eq i64 %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 !12
  %17 = load i32, ptr %7, align 4, !tbaa !12
  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 !13
  %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 !14
  store i32 %25, ptr %6, align 4, !tbaa !12
  br label %27

26:                                               ; preds = %18
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %35, ptr %6, align 4, !tbaa !12
  br label %37

36:                                               ; preds = %28
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %45, ptr %6, align 4, !tbaa !12
  br label %47

46:                                               ; preds = %38
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !17
  %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 !12
  %53 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !13
  %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 !12
  br label %92

69:                                               ; preds = %57, %48
  %70 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %91

79:                                               ; preds = %74, %69
  %80 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %90

89:                                               ; preds = %84, %79
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !12
  br label %95

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

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

96:                                               ; preds = %1
  %97 = load i64, ptr %2, align 8, !tbaa !5
  %98 = icmp eq i64 %97, 1024
  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 22), align 4, !tbaa !18
  %101 = zext i32 %100 to i64
  %102 = and i64 %101, 14680064
  %103 = trunc i64 %102 to i32
  store i32 %103, ptr %7, align 4, !tbaa !12
  %104 = load i32, ptr %7, align 4, !tbaa !12
  switch i32 %104, label %181 [
    i32 0, label %105
    i32 2097152, label %115
    i32 4194304, label %125
    i32 8388608, label %135
    i32 6291456, label %180
  ]

105:                                              ; preds = %99
  %106 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !14
  store i32 %112, ptr %6, align 4, !tbaa !12
  br label %114

113:                                              ; preds = %105
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %122, ptr %6, align 4, !tbaa !12
  br label %124

123:                                              ; preds = %115
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %132, ptr %6, align 4, !tbaa !12
  br label %134

133:                                              ; preds = %125
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !17
  %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 !12
  %140 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !13
  %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 !12
  br label %179

156:                                              ; preds = %144, %135
  %157 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %178

166:                                              ; preds = %161, %156
  %167 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %177

176:                                              ; preds = %171, %166
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !12
  br label %182

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

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

183:                                              ; preds = %96
  %184 = load i64, ptr %2, align 8, !tbaa !5
  %185 = icmp eq i64 %184, 2048
  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 !18
  %188 = zext i32 %187 to i64
  %189 = and i64 %188, 117440512
  %190 = trunc i64 %189 to i32
  store i32 %190, ptr %7, align 4, !tbaa !12
  %191 = load i32, ptr %7, align 4, !tbaa !12
  switch i32 %191, label %268 [
    i32 0, label %192
    i32 16777216, label %202
    i32 33554432, label %212
    i32 67108864, label %222
    i32 50331648, label %267
  ]

192:                                              ; preds = %186
  %193 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !14
  store i32 %199, ptr %6, align 4, !tbaa !12
  br label %201

200:                                              ; preds = %192
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %209, ptr %6, align 4, !tbaa !12
  br label %211

210:                                              ; preds = %202
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %219, ptr %6, align 4, !tbaa !12
  br label %221

220:                                              ; preds = %212
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !17
  %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 !12
  %227 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !13
  %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 !12
  br label %266

243:                                              ; preds = %231, %222
  %244 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %265

253:                                              ; preds = %248, %243
  %254 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %264

263:                                              ; preds = %258, %253
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !12
  br label %269

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

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

270:                                              ; preds = %183
  %271 = load i64, ptr %2, align 8, !tbaa !5
  %272 = icmp eq i64 %271, 4096
  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 20), align 4, !tbaa !9
  %275 = zext i32 %274 to i64
  %276 = and i64 %275, 28672
  %277 = trunc i64 %276 to i32
  store i32 %277, ptr %9, align 4, !tbaa !12
  %278 = load i32, ptr %9, align 4, !tbaa !12
  switch i32 %278, label %355 [
    i32 0, label %279
    i32 4096, label %289
    i32 8192, label %299
    i32 16384, label %309
    i32 12288, label %354
  ]

279:                                              ; preds = %273
  %280 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !14
  store i32 %286, ptr %6, align 4, !tbaa !12
  br label %288

287:                                              ; preds = %279
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %296, ptr %6, align 4, !tbaa !12
  br label %298

297:                                              ; preds = %289
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !13
  %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 !16
  store i32 %306, ptr %6, align 4, !tbaa !12
  br label %308

307:                                              ; preds = %299
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !17
  %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 !12
  %314 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !13
  %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 !12
  br label %353

330:                                              ; preds = %318, %309
  %331 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %352

340:                                              ; preds = %335, %330
  %341 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %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 !12
  %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 !12
  br label %351

350:                                              ; preds = %345, %340
  store i32 0, ptr %6, align 4, !tbaa !12
  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 !12
  br label %356

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

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

357:                                              ; preds = %270
  %358 = load i64, ptr %2, align 8, !tbaa !5
  %359 = icmp eq i64 %358, 8192
  br i1 %359, label %360, label %422

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, 458752
  %364 = trunc i64 %363 to i32
  store i32 %364, ptr %9, align 4, !tbaa !12
  %365 = load i32, ptr %9, align 4, !tbaa !12
  switch i32 %365, label %420 [
    i32 0, label %366
    i32 65536, label %368
    i32 131072, label %378
    i32 196608, label %388
    i32 262144, label %404
    i32 327680, label %412
  ]

366:                                              ; preds = %360
  %367 = call i32 @HAL_RCC_GetPCLK1Freq()
  store i32 %367, ptr %6, align 4, !tbaa !12
  br label %421

368:                                              ; preds = %360
  %369 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %370 = zext i32 %369 to i64
  %371 = and i64 %370, 134217728
  %372 = icmp eq i64 %371, 134217728
  br i1 %372, label %373, label %376

373:                                              ; preds = %368
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %374 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 1
  %375 = load i32, ptr %374, align 4, !tbaa !14
  store i32 %375, ptr %6, align 4, !tbaa !12
  br label %377

376:                                              ; preds = %368
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %377

377:                                              ; preds = %376, %373
  br label %421

378:                                              ; preds = %360
  %379 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %380 = zext i32 %379 to i64
  %381 = and i64 %380, 536870912
  %382 = icmp eq i64 %381, 536870912
  br i1 %382, label %383, label %386

383:                                              ; preds = %378
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %384 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 1
  %385 = load i32, ptr %384, align 4, !tbaa !14
  store i32 %385, ptr %6, align 4, !tbaa !12
  br label %387

386:                                              ; preds = %378
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %387

387:                                              ; preds = %386, %383
  br label %421

388:                                              ; preds = %360
  %389 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %390 = zext i32 %389 to i64
  %391 = and i64 %390, 4
  %392 = icmp eq i64 %391, 4
  br i1 %392, label %393, label %402

393:                                              ; preds = %388
  %394 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %395 = zext i32 %394 to i64
  %396 = and i64 %395, 24
  %397 = trunc i64 %396 to i32
  %398 = lshr i32 %397, 3
  %399 = zext i32 %398 to i64
  %400 = lshr i64 64000000, %399
  %401 = trunc i64 %400 to i32
  store i32 %401, ptr %6, align 4, !tbaa !12
  br label %403

402:                                              ; preds = %388
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %403

403:                                              ; preds = %402, %393
  br label %421

404:                                              ; preds = %360
  %405 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %406 = zext i32 %405 to i64
  %407 = and i64 %406, 256
  %408 = icmp eq i64 %407, 256
  br i1 %408, label %409, label %410

409:                                              ; preds = %404
  store i32 4000000, ptr %6, align 4, !tbaa !12
  br label %411

410:                                              ; preds = %404
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %411

411:                                              ; preds = %410, %409
  br label %421

412:                                              ; preds = %360
  %413 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %414 = zext i32 %413 to i64
  %415 = and i64 %414, 131072
  %416 = icmp eq i64 %415, 131072
  br i1 %416, label %417, label %418

417:                                              ; preds = %412
  store i32 24000000, ptr %6, align 4, !tbaa !12
  br label %419

418:                                              ; preds = %412
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %419

419:                                              ; preds = %418, %417
  br label %421

420:                                              ; preds = %360
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %421

421:                                              ; preds = %420, %419, %411, %403, %387, %377, %366
  br label %638

422:                                              ; preds = %357
  %423 = load i64, ptr %2, align 8, !tbaa !5
  %424 = icmp eq i64 %423, 524288
  br i1 %424, label %425, label %498

425:                                              ; preds = %422
  %426 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %427 = zext i32 %426 to i64
  %428 = and i64 %427, 196608
  %429 = trunc i64 %428 to i32
  store i32 %429, ptr %9, align 4, !tbaa !12
  %430 = load i32, ptr %9, align 4, !tbaa !12
  switch i32 %430, label %496 [
    i32 0, label %431
    i32 65536, label %441
    i32 131072, label %451
  ]

431:                                              ; preds = %425
  %432 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %433 = zext i32 %432 to i64
  %434 = and i64 %433, 134217728
  %435 = icmp eq i64 %434, 134217728
  br i1 %435, label %436, label %439

436:                                              ; preds = %431
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %437 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 0
  %438 = load i32, ptr %437, align 4, !tbaa !16
  store i32 %438, ptr %6, align 4, !tbaa !12
  br label %440

439:                                              ; preds = %431
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %440

440:                                              ; preds = %439, %436
  br label %497

441:                                              ; preds = %425
  %442 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %443 = zext i32 %442 to i64
  %444 = and i64 %443, 536870912
  %445 = icmp eq i64 %444, 536870912
  br i1 %445, label %446, label %449

446:                                              ; preds = %441
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %447 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 2
  %448 = load i32, ptr %447, align 4, !tbaa !19
  store i32 %448, ptr %6, align 4, !tbaa !12
  br label %450

449:                                              ; preds = %441
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %450

450:                                              ; preds = %449, %446
  br label %497

451:                                              ; preds = %425
  %452 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !17
  %453 = zext i32 %452 to i64
  %454 = and i64 %453, 805306368
  %455 = trunc i64 %454 to i32
  store i32 %455, ptr %8, align 4, !tbaa !12
  %456 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %457 = zext i32 %456 to i64
  %458 = and i64 %457, 4
  %459 = icmp eq i64 %458, 4
  br i1 %459, label %460, label %472

460:                                              ; preds = %451
  %461 = load i32, ptr %8, align 4, !tbaa !12
  %462 = icmp eq i32 %461, 0
  br i1 %462, label %463, label %472

463:                                              ; preds = %460
  %464 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %465 = zext i32 %464 to i64
  %466 = and i64 %465, 24
  %467 = trunc i64 %466 to i32
  %468 = lshr i32 %467, 3
  %469 = zext i32 %468 to i64
  %470 = lshr i64 64000000, %469
  %471 = trunc i64 %470 to i32
  store i32 %471, ptr %6, align 4, !tbaa !12
  br label %495

472:                                              ; preds = %460, %451
  %473 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %474 = zext i32 %473 to i64
  %475 = and i64 %474, 256
  %476 = icmp eq i64 %475, 256
  br i1 %476, label %477, label %482

477:                                              ; preds = %472
  %478 = load i32, ptr %8, align 4, !tbaa !12
  %479 = zext i32 %478 to i64
  %480 = icmp eq i64 %479, 268435456
  br i1 %480, label %481, label %482

481:                                              ; preds = %477
  store i32 4000000, ptr %6, align 4, !tbaa !12
  br label %494

482:                                              ; preds = %477, %472
  %483 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %484 = zext i32 %483 to i64
  %485 = and i64 %484, 131072
  %486 = icmp eq i64 %485, 131072
  br i1 %486, label %487, label %492

487:                                              ; preds = %482
  %488 = load i32, ptr %8, align 4, !tbaa !12
  %489 = zext i32 %488 to i64
  %490 = icmp eq i64 %489, 536870912
  br i1 %490, label %491, label %492

491:                                              ; preds = %487
  store i32 24000000, ptr %6, align 4, !tbaa !12
  br label %493

492:                                              ; preds = %487, %482
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %493

493:                                              ; preds = %492, %491
  br label %494

494:                                              ; preds = %493, %481
  br label %495

495:                                              ; preds = %494, %463
  br label %497

496:                                              ; preds = %425
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %497

497:                                              ; preds = %496, %495, %450, %440
  br label %637

498:                                              ; preds = %422
  %499 = load i64, ptr %2, align 8, !tbaa !5
  %500 = icmp eq i64 %499, 65536
  br i1 %500, label %501, label %529

501:                                              ; preds = %498
  %502 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 19), align 4, !tbaa !17
  %503 = zext i32 %502 to i64
  %504 = and i64 %503, 65536
  %505 = trunc i64 %504 to i32
  store i32 %505, ptr %9, align 4, !tbaa !12
  %506 = load i32, ptr %9, align 4, !tbaa !12
  switch i32 %506, label %527 [
    i32 0, label %507
    i32 65536, label %517
  ]

507:                                              ; preds = %501
  %508 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %509 = zext i32 %508 to i64
  %510 = and i64 %509, 33554432
  %511 = icmp eq i64 %510, 33554432
  br i1 %511, label %512, label %515

512:                                              ; preds = %507
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %513 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %514 = load i32, ptr %513, align 4, !tbaa !14
  store i32 %514, ptr %6, align 4, !tbaa !12
  br label %516

515:                                              ; preds = %507
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %516

516:                                              ; preds = %515, %512
  br label %528

517:                                              ; preds = %501
  %518 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %519 = zext i32 %518 to i64
  %520 = and i64 %519, 134217728
  %521 = icmp eq i64 %520, 134217728
  br i1 %521, label %522, label %525

522:                                              ; preds = %517
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %523 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 2
  %524 = load i32, ptr %523, align 4, !tbaa !19
  store i32 %524, ptr %6, align 4, !tbaa !12
  br label %526

525:                                              ; preds = %517
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %526

526:                                              ; preds = %525, %522
  br label %528

527:                                              ; preds = %501
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %528

528:                                              ; preds = %527, %526, %516
  br label %636

529:                                              ; preds = %498
  %530 = load i64, ptr %2, align 8, !tbaa !5
  %531 = icmp eq i64 %530, 16384
  br i1 %531, label %532, label %594

532:                                              ; preds = %529
  %533 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %534 = zext i32 %533 to i64
  %535 = and i64 %534, 1879048192
  %536 = trunc i64 %535 to i32
  store i32 %536, ptr %9, align 4, !tbaa !12
  %537 = load i32, ptr %9, align 4, !tbaa !12
  switch i32 %537, label %592 [
    i32 0, label %538
    i32 268435456, label %540
    i32 536870912, label %550
    i32 805306368, label %560
    i32 1073741824, label %576
    i32 1342177280, label %584
  ]

538:                                              ; preds = %532
  %539 = call i32 @HAL_RCCEx_GetD3PCLK1Freq()
  store i32 %539, ptr %6, align 4, !tbaa !12
  br label %593

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

545:                                              ; preds = %540
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %546 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 1
  %547 = load i32, ptr %546, align 4, !tbaa !14
  store i32 %547, ptr %6, align 4, !tbaa !12
  br label %549

548:                                              ; preds = %540
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %549

549:                                              ; preds = %548, %545
  br label %593

550:                                              ; preds = %532
  %551 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %552 = zext i32 %551 to i64
  %553 = and i64 %552, 536870912
  %554 = icmp eq i64 %553, 536870912
  br i1 %554, label %555, label %558

555:                                              ; preds = %550
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef %5)
  %556 = getelementptr inbounds %struct.PLL3_ClocksTypeDef, ptr %5, i32 0, i32 1
  %557 = load i32, ptr %556, align 4, !tbaa !14
  store i32 %557, ptr %6, align 4, !tbaa !12
  br label %559

558:                                              ; preds = %550
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %559

559:                                              ; preds = %558, %555
  br label %593

560:                                              ; preds = %532
  %561 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %562 = zext i32 %561 to i64
  %563 = and i64 %562, 4
  %564 = icmp eq i64 %563, 4
  br i1 %564, label %565, label %574

565:                                              ; preds = %560
  %566 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %567 = zext i32 %566 to i64
  %568 = and i64 %567, 24
  %569 = trunc i64 %568 to i32
  %570 = lshr i32 %569, 3
  %571 = zext i32 %570 to i64
  %572 = lshr i64 64000000, %571
  %573 = trunc i64 %572 to i32
  store i32 %573, ptr %6, align 4, !tbaa !12
  br label %575

574:                                              ; preds = %560
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %575

575:                                              ; preds = %574, %565
  br label %593

576:                                              ; preds = %532
  %577 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %578 = zext i32 %577 to i64
  %579 = and i64 %578, 256
  %580 = icmp eq i64 %579, 256
  br i1 %580, label %581, label %582

581:                                              ; preds = %576
  store i32 4000000, ptr %6, align 4, !tbaa !12
  br label %583

582:                                              ; preds = %576
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %583

583:                                              ; preds = %582, %581
  br label %593

584:                                              ; preds = %532
  %585 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %586 = zext i32 %585 to i64
  %587 = and i64 %586, 131072
  %588 = icmp eq i64 %587, 131072
  br i1 %588, label %589, label %590

589:                                              ; preds = %584
  store i32 24000000, ptr %6, align 4, !tbaa !12
  br label %591

590:                                              ; preds = %584
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %591

591:                                              ; preds = %590, %589
  br label %593

592:                                              ; preds = %532
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %593

593:                                              ; preds = %592, %591, %583, %575, %559, %549, %538
  br label %635

594:                                              ; preds = %529
  %595 = load i64, ptr %2, align 8, !tbaa !5
  %596 = icmp eq i64 %595, 32768
  br i1 %596, label %597, label %633

597:                                              ; preds = %594
  %598 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 20), align 4, !tbaa !9
  %599 = zext i32 %598 to i64
  %600 = and i64 %599, 805306368
  %601 = trunc i64 %600 to i32
  store i32 %601, ptr %9, align 4, !tbaa !12
  %602 = load i32, ptr %9, align 4, !tbaa !12
  switch i32 %602, label %631 [
    i32 0, label %603
    i32 268435456, label %611
    i32 536870912, label %621
  ]

603:                                              ; preds = %597
  %604 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %605 = zext i32 %604 to i64
  %606 = and i64 %605, 131072
  %607 = icmp eq i64 %606, 131072
  br i1 %607, label %608, label %609

608:                                              ; preds = %603
  store i32 24000000, ptr %6, align 4, !tbaa !12
  br label %610

609:                                              ; preds = %603
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %610

610:                                              ; preds = %609, %608
  br label %632

611:                                              ; preds = %597
  %612 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %613 = zext i32 %612 to i64
  %614 = and i64 %613, 33554432
  %615 = icmp eq i64 %614, 33554432
  br i1 %615, label %616, label %619

616:                                              ; preds = %611
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef %3)
  %617 = getelementptr inbounds %struct.PLL1_ClocksTypeDef, ptr %3, i32 0, i32 1
  %618 = load i32, ptr %617, align 4, !tbaa !14
  store i32 %618, ptr %6, align 4, !tbaa !12
  br label %620

619:                                              ; preds = %611
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %620

620:                                              ; preds = %619, %616
  br label %632

621:                                              ; preds = %597
  %622 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !13
  %623 = zext i32 %622 to i64
  %624 = and i64 %623, 134217728
  %625 = icmp eq i64 %624, 134217728
  br i1 %625, label %626, label %629

626:                                              ; preds = %621
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef %4)
  %627 = getelementptr inbounds %struct.PLL2_ClocksTypeDef, ptr %4, i32 0, i32 1
  %628 = load i32, ptr %627, align 4, !tbaa !14
  store i32 %628, ptr %6, align 4, !tbaa !12
  br label %630

629:                                              ; preds = %621
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %630

630:                                              ; preds = %629, %626
  br label %632

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

632:                                              ; preds = %631, %630, %620, %610
  br label %634

633:                                              ; preds = %594
  store i32 0, ptr %6, align 4, !tbaa !12
  br label %634

634:                                              ; preds = %633, %632
  br label %635

635:                                              ; preds = %634, %593
  br label %636

636:                                              ; preds = %635, %528
  br label %637

637:                                              ; preds = %636, %497
  br label %638

638:                                              ; preds = %637, %421
  br label %639

639:                                              ; preds = %638, %356
  br label %640

640:                                              ; preds = %639, %269
  br label %641

641:                                              ; preds = %640, %182
  br label %642

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

; 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

declare i32 @HAL_RCC_GetPCLK1Freq() #2

; 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 80}
!10 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !7, i64 172, !11, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !7, i64 288}
!11 = !{!"int", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = !{!10, !11, i64 0}
!14 = !{!15, !11, i64 4}
!15 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8}
!16 = !{!15, !11, i64 0}
!17 = !{!10, !11, i64 76}
!18 = !{!10, !11, i64 88}
!19 = !{!15, !11, 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(i64 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) #3
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %3) #3
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #3
  switch i64 %0, label %305 [
    i64 256, label %5
    i64 1024, label %46
    i64 2048, label %88
    i64 4096, label %130
    i64 8192, label %172
    i64 524288, label %204
    i64 65536, label %240
    i64 16384, label %254
    i64 32768, label %286
  ]

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 %305
  ]

8:                                                ; preds = %5
  %9 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %10 = and i32 %9, 33554432
  %.not101 = icmp eq i32 %10, 0
  br i1 %.not101, label %305, 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 %305

14:                                               ; preds = %5
  %15 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %16 = and i32 %15, 134217728
  %.not100 = icmp eq i32 %16, 0
  br i1 %.not100, label %305, 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 %305

19:                                               ; preds = %5
  %20 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %21 = and i32 %20, 536870912
  %.not99 = icmp eq i32 %21, 0
  br i1 %.not99, label %305, 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 %305

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

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 %305, 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 %305

45:                                               ; preds = %5
  br label %305

46:                                               ; preds = %1
  %47 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %48 = lshr i32 %47, 21
  %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 %305
  ]

50:                                               ; preds = %46
  %51 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %52 = and i32 %51, 33554432
  %.not98 = icmp eq i32 %52, 0
  br i1 %.not98, label %305, 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 %305

56:                                               ; preds = %46
  %57 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %58 = and i32 %57, 134217728
  %.not97 = icmp eq i32 %58, 0
  br i1 %.not97, label %305, 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 %305

61:                                               ; preds = %46
  %62 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %63 = and i32 %62, 536870912
  %.not96 = icmp eq i32 %63, 0
  br i1 %.not96, label %305, 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 %305

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

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 %305, 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
  %.102 = select i1 %or.cond15, i32 24000000, i32 0
  br label %305

87:                                               ; preds = %46
  br label %305

88:                                               ; preds = %1
  %89 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %90 = lshr i32 %89, 24
  %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 %305
  ]

92:                                               ; preds = %88
  %93 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %94 = and i32 %93, 33554432
  %.not95 = icmp eq i32 %94, 0
  br i1 %.not95, label %305, 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 %305

98:                                               ; preds = %88
  %99 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %100 = and i32 %99, 134217728
  %.not94 = icmp eq i32 %100, 0
  br i1 %.not94, label %305, 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 %305

103:                                              ; preds = %88
  %104 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %105 = and i32 %104, 536870912
  %.not93 = icmp eq i32 %105, 0
  br i1 %.not93, label %305, 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 %305

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

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 %305, 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
  %.103 = select i1 %or.cond23, i32 24000000, i32 0
  br label %305

129:                                              ; preds = %88
  br label %305

130:                                              ; preds = %1
  %131 = load volatile i32, ptr inttoptr (i64 1476543568 to ptr), align 16, !tbaa !5
  %132 = lshr i32 %131, 12
  %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 %305
  ]

134:                                              ; preds = %130
  %135 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %136 = and i32 %135, 33554432
  %.not92 = icmp eq i32 %136, 0
  br i1 %.not92, label %305, 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 %305

140:                                              ; preds = %130
  %141 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %142 = and i32 %141, 134217728
  %.not91 = icmp eq i32 %142, 0
  br i1 %.not91, label %305, 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 %305

145:                                              ; preds = %130
  %146 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %147 = and i32 %146, 536870912
  %.not90 = icmp eq i32 %147, 0
  br i1 %.not90, label %305, 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 %305

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

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 %305, 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
  %.104 = select i1 %or.cond31, i32 24000000, i32 0
  br label %305

171:                                              ; preds = %130
  br label %305

172:                                              ; preds = %1
  %173 = load volatile i32, ptr inttoptr (i64 1476543568 to ptr), align 16, !tbaa !5
  %174 = lshr i32 %173, 16
  %175 = and i32 %174, 7
  switch i32 %175, label %305 [
    i32 0, label %176
    i32 1, label %178
    i32 2, label %184
    i32 3, label %190
    i32 4, label %198
    i32 5, label %201
  ]

176:                                              ; preds = %172
  %177 = tail call i32 @HAL_RCC_GetPCLK1Freq() #3
  br label %305

178:                                              ; preds = %172
  %179 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %180 = and i32 %179, 134217728
  %.not89 = icmp eq i32 %180, 0
  br i1 %.not89, label %305, label %181

181:                                              ; preds = %178
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %182 = getelementptr inbounds i8, ptr %3, i64 4
  %183 = load i32, ptr %182, align 4, !tbaa !11
  br label %305

184:                                              ; preds = %172
  %185 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %186 = and i32 %185, 536870912
  %.not88 = icmp eq i32 %186, 0
  br i1 %.not88, label %305, label %187

187:                                              ; preds = %184
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %188 = getelementptr inbounds i8, ptr %4, i64 4
  %189 = load i32, ptr %188, align 4, !tbaa !11
  br label %305

190:                                              ; preds = %172
  %191 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %192 = and i32 %191, 4
  %.not87 = icmp eq i32 %192, 0
  br i1 %.not87, label %305, label %193

193:                                              ; preds = %190
  %194 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %195 = lshr i32 %194, 3
  %196 = and i32 %195, 3
  %197 = lshr exact i32 64000000, %196
  br label %305

198:                                              ; preds = %172
  %199 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %200 = and i32 %199, 256
  %.not86 = icmp eq i32 %200, 0
  %.105 = select i1 %.not86, i32 0, i32 4000000
  br label %305

201:                                              ; preds = %172
  %202 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %203 = and i32 %202, 131072
  %.not85 = icmp eq i32 %203, 0
  %.106 = select i1 %.not85, i32 0, i32 24000000
  br label %305

204:                                              ; preds = %1
  %205 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %206 = lshr i32 %205, 16
  %207 = and i32 %206, 3
  switch i32 %207, label %default.unreachable [
    i32 0, label %208
    i32 1, label %213
    i32 2, label %219
    i32 3, label %305
  ]

208:                                              ; preds = %204
  %209 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %210 = and i32 %209, 134217728
  %.not84 = icmp eq i32 %210, 0
  br i1 %.not84, label %305, label %211

211:                                              ; preds = %208
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %212 = load i32, ptr %3, align 4, !tbaa !13
  br label %305

213:                                              ; preds = %204
  %214 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %215 = and i32 %214, 536870912
  %.not83 = icmp eq i32 %215, 0
  br i1 %.not83, label %305, label %216

216:                                              ; preds = %213
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %217 = getelementptr inbounds i8, ptr %4, i64 8
  %218 = load i32, ptr %217, align 4, !tbaa !16
  br label %305

219:                                              ; preds = %204
  %220 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %221 = and i32 %220, 805306368
  %222 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %223 = and i32 %222, 4
  %224 = icmp ne i32 %223, 0
  %225 = icmp eq i32 %221, 0
  %or.cond33 = select i1 %224, i1 %225, i1 false
  %226 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %or.cond33, label %227, label %231

227:                                              ; preds = %219
  %228 = lshr i32 %226, 3
  %229 = and i32 %228, 3
  %230 = lshr exact i32 64000000, %229
  br label %305

231:                                              ; preds = %219
  %232 = and i32 %226, 256
  %233 = icmp ne i32 %232, 0
  %234 = icmp eq i32 %221, 268435456
  %or.cond36 = select i1 %233, i1 %234, i1 false
  br i1 %or.cond36, label %305, label %235

235:                                              ; preds = %231
  %236 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %237 = and i32 %236, 131072
  %238 = icmp ne i32 %237, 0
  %239 = icmp eq i32 %221, 536870912
  %or.cond39 = select i1 %238, i1 %239, i1 false
  %.107 = select i1 %or.cond39, i32 24000000, i32 0
  br label %305

default.unreachable:                              ; preds = %286, %204
  unreachable

240:                                              ; preds = %1
  %241 = load volatile i32, ptr inttoptr (i64 1476543564 to ptr), align 4, !tbaa !14
  %242 = and i32 %241, 65536
  %switch = icmp eq i32 %242, 0
  %243 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  br i1 %switch, label %244, label %249

244:                                              ; preds = %240
  %245 = and i32 %243, 33554432
  %.not82 = icmp eq i32 %245, 0
  br i1 %.not82, label %305, label %246

246:                                              ; preds = %244
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %247 = getelementptr inbounds i8, ptr %2, i64 4
  %248 = load i32, ptr %247, align 4, !tbaa !11
  br label %305

249:                                              ; preds = %240
  %250 = and i32 %243, 134217728
  %.not81 = icmp eq i32 %250, 0
  br i1 %.not81, label %305, label %251

251:                                              ; preds = %249
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %252 = getelementptr inbounds i8, ptr %3, i64 8
  %253 = load i32, ptr %252, align 4, !tbaa !16
  br label %305

254:                                              ; preds = %1
  %255 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !15
  %256 = lshr i32 %255, 28
  %257 = and i32 %256, 7
  switch i32 %257, label %305 [
    i32 0, label %258
    i32 1, label %260
    i32 2, label %266
    i32 3, label %272
    i32 4, label %280
    i32 5, label %283
  ]

258:                                              ; preds = %254
  %259 = tail call i32 @HAL_RCCEx_GetD3PCLK1Freq()
  br label %305

260:                                              ; preds = %254
  %261 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %262 = and i32 %261, 134217728
  %.not80 = icmp eq i32 %262, 0
  br i1 %.not80, label %305, label %263

263:                                              ; preds = %260
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %264 = getelementptr inbounds i8, ptr %3, i64 4
  %265 = load i32, ptr %264, align 4, !tbaa !11
  br label %305

266:                                              ; preds = %254
  %267 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %268 = and i32 %267, 536870912
  %.not79 = icmp eq i32 %268, 0
  br i1 %.not79, label %305, label %269

269:                                              ; preds = %266
  call void @HAL_RCCEx_GetPLL3ClockFreq(ptr noundef nonnull %4)
  %270 = getelementptr inbounds i8, ptr %4, i64 4
  %271 = load i32, ptr %270, align 4, !tbaa !11
  br label %305

272:                                              ; preds = %254
  %273 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %274 = and i32 %273, 4
  %.not78 = icmp eq i32 %274, 0
  br i1 %.not78, label %305, label %275

275:                                              ; preds = %272
  %276 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %277 = lshr i32 %276, 3
  %278 = and i32 %277, 3
  %279 = lshr exact i32 64000000, %278
  br label %305

280:                                              ; preds = %254
  %281 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %282 = and i32 %281, 256
  %.not77 = icmp eq i32 %282, 0
  %.110 = select i1 %.not77, i32 0, i32 4000000
  br label %305

283:                                              ; preds = %254
  %284 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %285 = and i32 %284, 131072
  %.not76 = icmp eq i32 %285, 0
  %.111 = select i1 %.not76, i32 0, i32 24000000
  br label %305

286:                                              ; preds = %1
  %287 = load volatile i32, ptr inttoptr (i64 1476543568 to ptr), align 16, !tbaa !5
  %288 = lshr i32 %287, 28
  %289 = and i32 %288, 3
  switch i32 %289, label %default.unreachable [
    i32 0, label %290
    i32 1, label %293
    i32 2, label %299
    i32 3, label %305
  ]

290:                                              ; preds = %286
  %291 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %292 = and i32 %291, 131072
  %.not75 = icmp eq i32 %292, 0
  %.113 = select i1 %.not75, i32 0, i32 24000000
  br label %305

293:                                              ; preds = %286
  %294 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %295 = and i32 %294, 33554432
  %.not74 = icmp eq i32 %295, 0
  br i1 %.not74, label %305, label %296

296:                                              ; preds = %293
  call void @HAL_RCCEx_GetPLL1ClockFreq(ptr noundef nonnull %2)
  %297 = getelementptr inbounds i8, ptr %2, i64 4
  %298 = load i32, ptr %297, align 4, !tbaa !11
  br label %305

299:                                              ; preds = %286
  %300 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !10
  %301 = and i32 %300, 134217728
  %.not = icmp eq i32 %301, 0
  br i1 %.not, label %305, label %302

302:                                              ; preds = %299
  call void @HAL_RCCEx_GetPLL2ClockFreq(ptr noundef nonnull %3)
  %303 = getelementptr inbounds i8, ptr %3, i64 4
  %304 = load i32, ptr %303, align 4, !tbaa !11
  br label %305

305:                                              ; preds = %1, %286, %299, %293, %290, %254, %283, %280, %272, %266, %260, %249, %244, %204, %235, %231, %213, %208, %172, %201, %198, %190, %184, %178, %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, %227, %216, %211, %275, %269, %263, %258, %296, %302, %246, %251, %176, %181, %187, %193, %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 ], [ %197, %193 ], [ %189, %187 ], [ %183, %181 ], [ %177, %176 ], [ %230, %227 ], [ %218, %216 ], [ %212, %211 ], [ %253, %251 ], [ %248, %246 ], [ %279, %275 ], [ %271, %269 ], [ %265, %263 ], [ %259, %258 ], [ %304, %302 ], [ %298, %296 ], [ 0, %8 ], [ 0, %14 ], [ 0, %19 ], [ 4000000, %36 ], [ %., %40 ], [ 12288000, %5 ], [ 0, %50 ], [ 0, %56 ], [ 0, %61 ], [ 4000000, %78 ], [ %.102, %82 ], [ 12288000, %46 ], [ 0, %92 ], [ 0, %98 ], [ 0, %103 ], [ 4000000, %120 ], [ %.103, %124 ], [ 12288000, %88 ], [ 0, %134 ], [ 0, %140 ], [ 0, %145 ], [ 4000000, %162 ], [ %.104, %166 ], [ 12288000, %130 ], [ 0, %178 ], [ 0, %184 ], [ 0, %190 ], [ %.105, %198 ], [ %.106, %201 ], [ 0, %172 ], [ 0, %208 ], [ 0, %213 ], [ 4000000, %231 ], [ %.107, %235 ], [ 0, %204 ], [ 0, %244 ], [ 0, %249 ], [ 0, %260 ], [ 0, %266 ], [ 0, %272 ], [ %.110, %280 ], [ %.111, %283 ], [ 0, %254 ], [ %.113, %290 ], [ 0, %293 ], [ 0, %299 ], [ 0, %286 ], [ 0, %1 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #3
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %3) #3
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %2) #3
  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

declare i32 @HAL_RCC_GetPCLK1Freq() local_unnamed_addr #2

; 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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