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

; 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.RCC_ClkInitTypeDef = type { i32, i32, i32, i32, i32, 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] }

@SystemCoreClock = external global i32, align 4
@D1CorePrescTable = external constant [16 x i8], align 16

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

declare i32 @HAL_GetTick() #1

declare i32 @HAL_InitTick(i32 noundef) #1

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

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

11:                                               ; preds = %2
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

12:                                               ; preds = %2
  %13 = load i32, ptr %5, align 4, !tbaa !9
  %14 = zext i32 %13 to i64
  %15 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %16 = zext i32 %15 to i64
  %17 = and i64 %16, 15
  %18 = icmp ugt i64 %14, %17
  br i1 %18, label %19, label %35

19:                                               ; preds = %12
  %20 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %21 = zext i32 %20 to i64
  %22 = and i64 %21, -16
  %23 = load i32, ptr %5, align 4, !tbaa !9
  %24 = zext i32 %23 to i64
  %25 = or i64 %22, %24
  %26 = trunc i64 %25 to i32
  store volatile i32 %26, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %27 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %28 = zext i32 %27 to i64
  %29 = and i64 %28, 15
  %30 = load i32, ptr %5, align 4, !tbaa !9
  %31 = zext i32 %30 to i64
  %32 = icmp ne i64 %29, %31
  br i1 %32, label %33, label %34

33:                                               ; preds = %19
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

34:                                               ; preds = %19
  br label %35

35:                                               ; preds = %34, %12
  %36 = load ptr, ptr %4, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %36, i32 0, i32 0
  %38 = load i32, ptr %37, align 4, !tbaa !13
  %39 = and i32 %38, 4
  %40 = icmp eq i32 %39, 4
  br i1 %40, label %41, label %61

41:                                               ; preds = %35
  %42 = load ptr, ptr %4, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %42, i32 0, i32 4
  %44 = load i32, ptr %43, align 4, !tbaa !15
  %45 = zext i32 %44 to i64
  %46 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %47 = zext i32 %46 to i64
  %48 = and i64 %47, 112
  %49 = icmp ugt i64 %45, %48
  br i1 %49, label %50, label %60

50:                                               ; preds = %41
  %51 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %52 = zext i32 %51 to i64
  %53 = and i64 %52, -113
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %54, i32 0, i32 4
  %56 = load i32, ptr %55, align 4, !tbaa !15
  %57 = zext i32 %56 to i64
  %58 = or i64 %53, %57
  %59 = trunc i64 %58 to i32
  store volatile i32 %59, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  br label %60

60:                                               ; preds = %50, %41
  br label %61

61:                                               ; preds = %60, %35
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %62, i32 0, i32 0
  %64 = load i32, ptr %63, align 4, !tbaa !13
  %65 = and i32 %64, 8
  %66 = icmp eq i32 %65, 8
  br i1 %66, label %67, label %87

67:                                               ; preds = %61
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %68, i32 0, i32 5
  %70 = load i32, ptr %69, align 4, !tbaa !18
  %71 = zext i32 %70 to i64
  %72 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %73 = zext i32 %72 to i64
  %74 = and i64 %73, 112
  %75 = icmp ugt i64 %71, %74
  br i1 %75, label %76, label %86

76:                                               ; preds = %67
  %77 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %78 = zext i32 %77 to i64
  %79 = and i64 %78, -113
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %80, i32 0, i32 5
  %82 = load i32, ptr %81, align 4, !tbaa !18
  %83 = zext i32 %82 to i64
  %84 = or i64 %79, %83
  %85 = trunc i64 %84 to i32
  store volatile i32 %85, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  br label %86

86:                                               ; preds = %76, %67
  br label %87

87:                                               ; preds = %86, %61
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %88, i32 0, i32 0
  %90 = load i32, ptr %89, align 4, !tbaa !13
  %91 = and i32 %90, 16
  %92 = icmp eq i32 %91, 16
  br i1 %92, label %93, label %113

93:                                               ; preds = %87
  %94 = load ptr, ptr %4, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %94, i32 0, i32 6
  %96 = load i32, ptr %95, align 4, !tbaa !20
  %97 = zext i32 %96 to i64
  %98 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %99 = zext i32 %98 to i64
  %100 = and i64 %99, 1792
  %101 = icmp ugt i64 %97, %100
  br i1 %101, label %102, label %112

102:                                              ; preds = %93
  %103 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %104 = zext i32 %103 to i64
  %105 = and i64 %104, -1793
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %106, i32 0, i32 6
  %108 = load i32, ptr %107, align 4, !tbaa !20
  %109 = zext i32 %108 to i64
  %110 = or i64 %105, %109
  %111 = trunc i64 %110 to i32
  store volatile i32 %111, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  br label %112

112:                                              ; preds = %102, %93
  br label %113

113:                                              ; preds = %112, %87
  %114 = load ptr, ptr %4, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %114, i32 0, i32 0
  %116 = load i32, ptr %115, align 4, !tbaa !13
  %117 = and i32 %116, 32
  %118 = icmp eq i32 %117, 32
  br i1 %118, label %119, label %139

119:                                              ; preds = %113
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %120, i32 0, i32 7
  %122 = load i32, ptr %121, align 4, !tbaa !21
  %123 = zext i32 %122 to i64
  %124 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 8), align 4, !tbaa !22
  %125 = zext i32 %124 to i64
  %126 = and i64 %125, 112
  %127 = icmp ugt i64 %123, %126
  br i1 %127, label %128, label %138

128:                                              ; preds = %119
  %129 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 8), align 4, !tbaa !22
  %130 = zext i32 %129 to i64
  %131 = and i64 %130, -113
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %132, i32 0, i32 7
  %134 = load i32, ptr %133, align 4, !tbaa !21
  %135 = zext i32 %134 to i64
  %136 = or i64 %131, %135
  %137 = trunc i64 %136 to i32
  store volatile i32 %137, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 8), align 4, !tbaa !22
  br label %138

138:                                              ; preds = %128, %119
  br label %139

139:                                              ; preds = %138, %113
  %140 = load ptr, ptr %4, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %140, i32 0, i32 0
  %142 = load i32, ptr %141, align 4, !tbaa !13
  %143 = and i32 %142, 2
  %144 = icmp eq i32 %143, 2
  br i1 %144, label %145, label %165

145:                                              ; preds = %139
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %146, i32 0, i32 3
  %148 = load i32, ptr %147, align 4, !tbaa !23
  %149 = zext i32 %148 to i64
  %150 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %151 = zext i32 %150 to i64
  %152 = and i64 %151, 15
  %153 = icmp ugt i64 %149, %152
  br i1 %153, label %154, label %164

154:                                              ; preds = %145
  %155 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %156 = zext i32 %155 to i64
  %157 = and i64 %156, -16
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %158, i32 0, i32 3
  %160 = load i32, ptr %159, align 4, !tbaa !23
  %161 = zext i32 %160 to i64
  %162 = or i64 %157, %161
  %163 = trunc i64 %162 to i32
  store volatile i32 %163, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  br label %164

164:                                              ; preds = %154, %145
  br label %165

165:                                              ; preds = %164, %139
  %166 = load ptr, ptr %4, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %166, i32 0, i32 0
  %168 = load i32, ptr %167, align 4, !tbaa !13
  %169 = and i32 %168, 1
  %170 = icmp eq i32 %169, 1
  br i1 %170, label %171, label %269

171:                                              ; preds = %165
  %172 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %173 = zext i32 %172 to i64
  %174 = and i64 %173, -3841
  %175 = load ptr, ptr %4, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %175, i32 0, i32 2
  %177 = load i32, ptr %176, align 4, !tbaa !24
  %178 = zext i32 %177 to i64
  %179 = or i64 %174, %178
  %180 = trunc i64 %179 to i32
  store volatile i32 %180, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %181, i32 0, i32 1
  %183 = load i32, ptr %182, align 4, !tbaa !25
  %184 = zext i32 %183 to i64
  %185 = icmp eq i64 %184, 2
  br i1 %185, label %186, label %196

186:                                              ; preds = %171
  %187 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !26
  %188 = zext i32 %187 to i64
  %189 = and i64 %188, 131072
  %190 = icmp ne i64 %189, 0
  %191 = zext i1 %190 to i64
  %192 = select i1 %190, i32 1, i32 0
  %193 = icmp eq i32 %192, 0
  br i1 %193, label %194, label %195

194:                                              ; preds = %186
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

195:                                              ; preds = %186
  br label %240

196:                                              ; preds = %171
  %197 = load ptr, ptr %4, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %197, i32 0, i32 1
  %199 = load i32, ptr %198, align 4, !tbaa !25
  %200 = zext i32 %199 to i64
  %201 = icmp eq i64 %200, 3
  br i1 %201, label %202, label %212

202:                                              ; preds = %196
  %203 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !26
  %204 = zext i32 %203 to i64
  %205 = and i64 %204, 33554432
  %206 = icmp ne i64 %205, 0
  %207 = zext i1 %206 to i64
  %208 = select i1 %206, i32 1, i32 0
  %209 = icmp eq i32 %208, 0
  br i1 %209, label %210, label %211

210:                                              ; preds = %202
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

211:                                              ; preds = %202
  br label %239

212:                                              ; preds = %196
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %213, i32 0, i32 1
  %215 = load i32, ptr %214, align 4, !tbaa !25
  %216 = zext i32 %215 to i64
  %217 = icmp eq i64 %216, 1
  br i1 %217, label %218, label %228

218:                                              ; preds = %212
  %219 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !26
  %220 = zext i32 %219 to i64
  %221 = and i64 %220, 256
  %222 = icmp ne i64 %221, 0
  %223 = zext i1 %222 to i64
  %224 = select i1 %222, i32 1, i32 0
  %225 = icmp eq i32 %224, 0
  br i1 %225, label %226, label %227

226:                                              ; preds = %218
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

227:                                              ; preds = %218
  br label %238

228:                                              ; preds = %212
  %229 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 4, !tbaa !26
  %230 = zext i32 %229 to i64
  %231 = and i64 %230, 4
  %232 = icmp ne i64 %231, 0
  %233 = zext i1 %232 to i64
  %234 = select i1 %232, i32 1, i32 0
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %237

236:                                              ; preds = %228
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

237:                                              ; preds = %228
  br label %238

238:                                              ; preds = %237, %227
  br label %239

239:                                              ; preds = %238, %211
  br label %240

240:                                              ; preds = %239, %195
  %241 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 4), align 4, !tbaa !27
  %242 = zext i32 %241 to i64
  %243 = and i64 %242, -8
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %244, i32 0, i32 1
  %246 = load i32, ptr %245, align 4, !tbaa !25
  %247 = zext i32 %246 to i64
  %248 = or i64 %243, %247
  %249 = trunc i64 %248 to i32
  store volatile i32 %249, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 4), align 4, !tbaa !27
  %250 = call i32 @HAL_GetTick()
  store i32 %250, ptr %7, align 4, !tbaa !9
  br label %251

251:                                              ; preds = %267, %240
  %252 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 4), align 4, !tbaa !27
  %253 = zext i32 %252 to i64
  %254 = and i64 %253, 56
  %255 = trunc i64 %254 to i32
  %256 = load ptr, ptr %4, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %257, align 4, !tbaa !25
  %259 = shl i32 %258, 3
  %260 = icmp ne i32 %255, %259
  br i1 %260, label %261, label %268

261:                                              ; preds = %251
  %262 = call i32 @HAL_GetTick()
  %263 = load i32, ptr %7, align 4, !tbaa !9
  %264 = sub i32 %262, %263
  %265 = icmp ugt i32 %264, 5000
  br i1 %265, label %266, label %267

266:                                              ; preds = %261
  store i32 3, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

267:                                              ; preds = %261
  br label %251, !llvm.loop !28

268:                                              ; preds = %251
  br label %269

269:                                              ; preds = %268, %165
  %270 = load ptr, ptr %4, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %270, i32 0, i32 0
  %272 = load i32, ptr %271, align 4, !tbaa !13
  %273 = and i32 %272, 2
  %274 = icmp eq i32 %273, 2
  br i1 %274, label %275, label %295

275:                                              ; preds = %269
  %276 = load ptr, ptr %4, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %276, i32 0, i32 3
  %278 = load i32, ptr %277, align 4, !tbaa !23
  %279 = zext i32 %278 to i64
  %280 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %281 = zext i32 %280 to i64
  %282 = and i64 %281, 15
  %283 = icmp ult i64 %279, %282
  br i1 %283, label %284, label %294

284:                                              ; preds = %275
  %285 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %286 = zext i32 %285 to i64
  %287 = and i64 %286, -16
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %288, i32 0, i32 3
  %290 = load i32, ptr %289, align 4, !tbaa !23
  %291 = zext i32 %290 to i64
  %292 = or i64 %287, %291
  %293 = trunc i64 %292 to i32
  store volatile i32 %293, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  br label %294

294:                                              ; preds = %284, %275
  br label %295

295:                                              ; preds = %294, %269
  %296 = load i32, ptr %5, align 4, !tbaa !9
  %297 = zext i32 %296 to i64
  %298 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %299 = zext i32 %298 to i64
  %300 = and i64 %299, 15
  %301 = icmp ult i64 %297, %300
  br i1 %301, label %302, label %318

302:                                              ; preds = %295
  %303 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %304 = zext i32 %303 to i64
  %305 = and i64 %304, -16
  %306 = load i32, ptr %5, align 4, !tbaa !9
  %307 = zext i32 %306 to i64
  %308 = or i64 %305, %307
  %309 = trunc i64 %308 to i32
  store volatile i32 %309, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %310 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 4, !tbaa !11
  %311 = zext i32 %310 to i64
  %312 = and i64 %311, 15
  %313 = load i32, ptr %5, align 4, !tbaa !9
  %314 = zext i32 %313 to i64
  %315 = icmp ne i64 %312, %314
  br i1 %315, label %316, label %317

316:                                              ; preds = %302
  store i32 1, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

317:                                              ; preds = %302
  br label %318

318:                                              ; preds = %317, %295
  %319 = load ptr, ptr %4, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %319, i32 0, i32 0
  %321 = load i32, ptr %320, align 4, !tbaa !13
  %322 = and i32 %321, 4
  %323 = icmp eq i32 %322, 4
  br i1 %323, label %324, label %344

324:                                              ; preds = %318
  %325 = load ptr, ptr %4, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %325, i32 0, i32 4
  %327 = load i32, ptr %326, align 4, !tbaa !15
  %328 = zext i32 %327 to i64
  %329 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %330 = zext i32 %329 to i64
  %331 = and i64 %330, 112
  %332 = icmp ult i64 %328, %331
  br i1 %332, label %333, label %343

333:                                              ; preds = %324
  %334 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %335 = zext i32 %334 to i64
  %336 = and i64 %335, -113
  %337 = load ptr, ptr %4, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %337, i32 0, i32 4
  %339 = load i32, ptr %338, align 4, !tbaa !15
  %340 = zext i32 %339 to i64
  %341 = or i64 %336, %340
  %342 = trunc i64 %341 to i32
  store volatile i32 %342, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  br label %343

343:                                              ; preds = %333, %324
  br label %344

344:                                              ; preds = %343, %318
  %345 = load ptr, ptr %4, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %345, i32 0, i32 0
  %347 = load i32, ptr %346, align 4, !tbaa !13
  %348 = and i32 %347, 8
  %349 = icmp eq i32 %348, 8
  br i1 %349, label %350, label %370

350:                                              ; preds = %344
  %351 = load ptr, ptr %4, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %351, i32 0, i32 5
  %353 = load i32, ptr %352, align 4, !tbaa !18
  %354 = zext i32 %353 to i64
  %355 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %356 = zext i32 %355 to i64
  %357 = and i64 %356, 112
  %358 = icmp ult i64 %354, %357
  br i1 %358, label %359, label %369

359:                                              ; preds = %350
  %360 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %361 = zext i32 %360 to i64
  %362 = and i64 %361, -113
  %363 = load ptr, ptr %4, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %363, i32 0, i32 5
  %365 = load i32, ptr %364, align 4, !tbaa !18
  %366 = zext i32 %365 to i64
  %367 = or i64 %362, %366
  %368 = trunc i64 %367 to i32
  store volatile i32 %368, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  br label %369

369:                                              ; preds = %359, %350
  br label %370

370:                                              ; preds = %369, %344
  %371 = load ptr, ptr %4, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %371, i32 0, i32 0
  %373 = load i32, ptr %372, align 4, !tbaa !13
  %374 = and i32 %373, 16
  %375 = icmp eq i32 %374, 16
  br i1 %375, label %376, label %396

376:                                              ; preds = %370
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %377, i32 0, i32 6
  %379 = load i32, ptr %378, align 4, !tbaa !20
  %380 = zext i32 %379 to i64
  %381 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %382 = zext i32 %381 to i64
  %383 = and i64 %382, 1792
  %384 = icmp ult i64 %380, %383
  br i1 %384, label %385, label %395

385:                                              ; preds = %376
  %386 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  %387 = zext i32 %386 to i64
  %388 = and i64 %387, -1793
  %389 = load ptr, ptr %4, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %389, i32 0, i32 6
  %391 = load i32, ptr %390, align 4, !tbaa !20
  %392 = zext i32 %391 to i64
  %393 = or i64 %388, %392
  %394 = trunc i64 %393 to i32
  store volatile i32 %394, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 7), align 4, !tbaa !19
  br label %395

395:                                              ; preds = %385, %376
  br label %396

396:                                              ; preds = %395, %370
  %397 = load ptr, ptr %4, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %397, i32 0, i32 0
  %399 = load i32, ptr %398, align 4, !tbaa !13
  %400 = and i32 %399, 32
  %401 = icmp eq i32 %400, 32
  br i1 %401, label %402, label %422

402:                                              ; preds = %396
  %403 = load ptr, ptr %4, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %403, i32 0, i32 7
  %405 = load i32, ptr %404, align 4, !tbaa !21
  %406 = zext i32 %405 to i64
  %407 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 8), align 4, !tbaa !22
  %408 = zext i32 %407 to i64
  %409 = and i64 %408, 112
  %410 = icmp ult i64 %406, %409
  br i1 %410, label %411, label %421

411:                                              ; preds = %402
  %412 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 8), align 4, !tbaa !22
  %413 = zext i32 %412 to i64
  %414 = and i64 %413, -113
  %415 = load ptr, ptr %4, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.RCC_ClkInitTypeDef, ptr %415, i32 0, i32 7
  %417 = load i32, ptr %416, align 4, !tbaa !21
  %418 = zext i32 %417 to i64
  %419 = or i64 %414, %418
  %420 = trunc i64 %419 to i32
  store volatile i32 %420, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 8), align 4, !tbaa !22
  br label %421

421:                                              ; preds = %411, %402
  br label %422

422:                                              ; preds = %421, %396
  %423 = call i32 @HAL_RCC_GetSysClockFreq()
  %424 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 6), align 4, !tbaa !16
  %425 = zext i32 %424 to i64
  %426 = and i64 %425, 3840
  %427 = lshr i64 %426, 8
  %428 = getelementptr inbounds [16 x i8], ptr @D1CorePrescTable, i64 0, i64 %427
  %429 = load i8, ptr %428, align 1, !tbaa !30
  %430 = zext i8 %429 to i32
  %431 = and i32 %430, 31
  %432 = lshr i32 %423, %431
  store i32 %432, ptr @SystemCoreClock, align 4, !tbaa !9
  %433 = call i32 @HAL_InitTick(i32 noundef 14)
  store i32 %433, ptr %6, align 4, !tbaa !9
  %434 = load i32, ptr %6, align 4, !tbaa !9
  store i32 %434, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %435

435:                                              ; preds = %422, %316, %266, %236, %226, %210, %194, %33, %11
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  %436 = load i32, ptr %3, align 4
  ret i32 %436
}

; Function Attrs: nounwind uwtable
declare dso_local i32 @HAL_RCC_GetSysClockFreq() #2

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

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

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


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

@SystemCoreClock = external local_unnamed_addr global i32, align 4
@D1CorePrescTable = external local_unnamed_addr constant [16 x i8], align 16

declare i32 @HAL_GetTick() local_unnamed_addr #0

declare i32 @HAL_InitTick(i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local i32 @HAL_RCC_ClockConfig(ptr noundef readonly %0, i32 noundef %1) local_unnamed_addr #1 {
  %3 = icmp eq ptr %0, null
  br i1 %3, label %.loopexit66, label %4

4:                                                ; preds = %2
  %5 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %6 = and i32 %5, 15
  %7 = icmp ult i32 %6, %1
  br i1 %7, label %8, label %14

8:                                                ; preds = %4
  %9 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %10 = and i32 %9, -16
  %11 = or i32 %10, %1
  store volatile i32 %11, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %12 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %13 = and i32 %12, 15
  %.not = icmp eq i32 %13, %1
  br i1 %.not, label %14, label %.loopexit66

14:                                               ; preds = %8, %4
  %15 = load i32, ptr %0, align 4, !tbaa !10
  %16 = and i32 %15, 4
  %.not49 = icmp eq i32 %16, 0
  br i1 %.not49, label %27, label %17

17:                                               ; preds = %14
  %18 = getelementptr inbounds i8, ptr %0, i64 16
  %19 = load i32, ptr %18, align 4, !tbaa !12
  %20 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %21 = and i32 %20, 112
  %22 = icmp ugt i32 %19, %21
  br i1 %22, label %23, label %27

23:                                               ; preds = %17
  %24 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %25 = and i32 %24, -113
  %26 = or i32 %25, %19
  store volatile i32 %26, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  br label %27

27:                                               ; preds = %17, %23, %14
  %28 = and i32 %15, 8
  %.not50 = icmp eq i32 %28, 0
  br i1 %.not50, label %39, label %29

29:                                               ; preds = %27
  %30 = getelementptr inbounds i8, ptr %0, i64 20
  %31 = load i32, ptr %30, align 4, !tbaa !15
  %32 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %33 = and i32 %32, 112
  %34 = icmp ugt i32 %31, %33
  br i1 %34, label %35, label %39

35:                                               ; preds = %29
  %36 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %37 = and i32 %36, -113
  %38 = or i32 %37, %31
  store volatile i32 %38, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  br label %39

39:                                               ; preds = %29, %35, %27
  %40 = and i32 %15, 16
  %.not51 = icmp eq i32 %40, 0
  br i1 %.not51, label %51, label %41

41:                                               ; preds = %39
  %42 = getelementptr inbounds i8, ptr %0, i64 24
  %43 = load i32, ptr %42, align 4, !tbaa !17
  %44 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %45 = and i32 %44, 1792
  %46 = icmp ugt i32 %43, %45
  br i1 %46, label %47, label %51

47:                                               ; preds = %41
  %48 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %49 = and i32 %48, -1793
  %50 = or i32 %49, %43
  store volatile i32 %50, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  br label %51

51:                                               ; preds = %41, %47, %39
  %52 = and i32 %15, 32
  %.not52 = icmp eq i32 %52, 0
  br i1 %.not52, label %63, label %53

53:                                               ; preds = %51
  %54 = getelementptr inbounds i8, ptr %0, i64 28
  %55 = load i32, ptr %54, align 4, !tbaa !18
  %56 = load volatile i32, ptr inttoptr (i64 1476543520 to ptr), align 32, !tbaa !19
  %57 = and i32 %56, 112
  %58 = icmp ugt i32 %55, %57
  br i1 %58, label %59, label %63

59:                                               ; preds = %53
  %60 = load volatile i32, ptr inttoptr (i64 1476543520 to ptr), align 32, !tbaa !19
  %61 = and i32 %60, -113
  %62 = or i32 %61, %55
  store volatile i32 %62, ptr inttoptr (i64 1476543520 to ptr), align 32, !tbaa !19
  br label %63

63:                                               ; preds = %53, %59, %51
  %64 = and i32 %15, 2
  %.not53 = icmp eq i32 %64, 0
  br i1 %.not53, label %75, label %65

65:                                               ; preds = %63
  %66 = getelementptr inbounds i8, ptr %0, i64 12
  %67 = load i32, ptr %66, align 4, !tbaa !20
  %68 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %69 = and i32 %68, 15
  %70 = icmp ugt i32 %67, %69
  br i1 %70, label %71, label %75

71:                                               ; preds = %65
  %72 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %73 = and i32 %72, -16
  %74 = or i32 %73, %67
  store volatile i32 %74, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  br label %75

75:                                               ; preds = %65, %71, %63
  %76 = and i32 %15, 1
  %.not54 = icmp eq i32 %76, 0
  br i1 %.not54, label %.loopexit, label %77

77:                                               ; preds = %75
  %78 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %79 = and i32 %78, -3841
  %80 = getelementptr inbounds i8, ptr %0, i64 8
  %81 = load i32, ptr %80, align 4, !tbaa !21
  %82 = or i32 %79, %81
  store volatile i32 %82, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %83 = getelementptr inbounds i8, ptr %0, i64 4
  %84 = load i32, ptr %83, align 4, !tbaa !22
  %85 = load volatile i32, ptr inttoptr (i64 1476543488 to ptr), align 1024, !tbaa !23
  switch i32 %84, label %95 [
    i32 2, label %86
    i32 3, label %89
    i32 1, label %92
  ]

86:                                               ; preds = %77
  %87 = and i32 %85, 131072
  %88 = icmp eq i32 %87, 0
  br i1 %88, label %.loopexit66, label %98

89:                                               ; preds = %77
  %90 = and i32 %85, 33554432
  %91 = icmp eq i32 %90, 0
  br i1 %91, label %.loopexit66, label %98

92:                                               ; preds = %77
  %93 = and i32 %85, 256
  %94 = icmp eq i32 %93, 0
  br i1 %94, label %.loopexit66, label %98

95:                                               ; preds = %77
  %96 = and i32 %85, 4
  %97 = icmp eq i32 %96, 0
  br i1 %97, label %.loopexit66, label %98

98:                                               ; preds = %89, %95, %92, %86
  %99 = load volatile i32, ptr inttoptr (i64 1476543504 to ptr), align 16, !tbaa !24
  %100 = and i32 %99, -8
  %101 = or i32 %100, %84
  store volatile i32 %101, ptr inttoptr (i64 1476543504 to ptr), align 16, !tbaa !24
  %102 = tail call i32 @HAL_GetTick() #2
  br label %103

103:                                              ; preds = %108, %98
  %104 = load volatile i32, ptr inttoptr (i64 1476543504 to ptr), align 16, !tbaa !24
  %105 = and i32 %104, 56
  %106 = load i32, ptr %83, align 4, !tbaa !22
  %107 = shl i32 %106, 3
  %.not59 = icmp eq i32 %105, %107
  br i1 %.not59, label %.loopexit.loopexit, label %108

108:                                              ; preds = %103
  %109 = tail call i32 @HAL_GetTick() #2
  %110 = sub i32 %109, %102
  %111 = icmp ugt i32 %110, 5000
  br i1 %111, label %.loopexit66, label %103, !llvm.loop !25

.loopexit.loopexit:                               ; preds = %103
  %.pre = load i32, ptr %0, align 4, !tbaa !10
  %.pre67 = and i32 %.pre, 2
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %75
  %.pre-phi = phi i32 [ %.pre67, %.loopexit.loopexit ], [ %64, %75 ]
  %112 = phi i32 [ %.pre, %.loopexit.loopexit ], [ %15, %75 ]
  %.not60 = icmp eq i32 %.pre-phi, 0
  br i1 %.not60, label %123, label %113

113:                                              ; preds = %.loopexit
  %114 = getelementptr inbounds i8, ptr %0, i64 12
  %115 = load i32, ptr %114, align 4, !tbaa !20
  %116 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %117 = and i32 %116, 15
  %118 = icmp ult i32 %115, %117
  br i1 %118, label %119, label %123

119:                                              ; preds = %113
  %120 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %121 = and i32 %120, -16
  %122 = or i32 %121, %115
  store volatile i32 %122, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  br label %123

123:                                              ; preds = %113, %119, %.loopexit
  %124 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %125 = and i32 %124, 15
  %126 = icmp ugt i32 %125, %1
  br i1 %126, label %127, label %133

127:                                              ; preds = %123
  %128 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %129 = and i32 %128, -16
  %130 = or i32 %129, %1
  store volatile i32 %130, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %131 = load volatile i32, ptr inttoptr (i64 1375739904 to ptr), align 8192, !tbaa !5
  %132 = and i32 %131, 15
  %.not61 = icmp eq i32 %132, %1
  br i1 %.not61, label %133, label %.loopexit66

133:                                              ; preds = %127, %123
  %134 = and i32 %112, 4
  %.not62 = icmp eq i32 %134, 0
  br i1 %.not62, label %145, label %135

135:                                              ; preds = %133
  %136 = getelementptr inbounds i8, ptr %0, i64 16
  %137 = load i32, ptr %136, align 4, !tbaa !12
  %138 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %139 = and i32 %138, 112
  %140 = icmp ult i32 %137, %139
  br i1 %140, label %141, label %145

141:                                              ; preds = %135
  %142 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %143 = and i32 %142, -113
  %144 = or i32 %143, %137
  store volatile i32 %144, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  br label %145

145:                                              ; preds = %135, %141, %133
  %146 = and i32 %112, 8
  %.not63 = icmp eq i32 %146, 0
  br i1 %.not63, label %157, label %147

147:                                              ; preds = %145
  %148 = getelementptr inbounds i8, ptr %0, i64 20
  %149 = load i32, ptr %148, align 4, !tbaa !15
  %150 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %151 = and i32 %150, 112
  %152 = icmp ult i32 %149, %151
  br i1 %152, label %153, label %157

153:                                              ; preds = %147
  %154 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %155 = and i32 %154, -113
  %156 = or i32 %155, %149
  store volatile i32 %156, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  br label %157

157:                                              ; preds = %147, %153, %145
  %158 = and i32 %112, 16
  %.not64 = icmp eq i32 %158, 0
  br i1 %.not64, label %169, label %159

159:                                              ; preds = %157
  %160 = getelementptr inbounds i8, ptr %0, i64 24
  %161 = load i32, ptr %160, align 4, !tbaa !17
  %162 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %163 = and i32 %162, 1792
  %164 = icmp ult i32 %161, %163
  br i1 %164, label %165, label %169

165:                                              ; preds = %159
  %166 = load volatile i32, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  %167 = and i32 %166, -1793
  %168 = or i32 %167, %161
  store volatile i32 %168, ptr inttoptr (i64 1476543516 to ptr), align 4, !tbaa !16
  br label %169

169:                                              ; preds = %159, %165, %157
  %170 = and i32 %112, 32
  %.not65 = icmp eq i32 %170, 0
  br i1 %.not65, label %181, label %171

171:                                              ; preds = %169
  %172 = getelementptr inbounds i8, ptr %0, i64 28
  %173 = load i32, ptr %172, align 4, !tbaa !18
  %174 = load volatile i32, ptr inttoptr (i64 1476543520 to ptr), align 32, !tbaa !19
  %175 = and i32 %174, 112
  %176 = icmp ult i32 %173, %175
  br i1 %176, label %177, label %181

177:                                              ; preds = %171
  %178 = load volatile i32, ptr inttoptr (i64 1476543520 to ptr), align 32, !tbaa !19
  %179 = and i32 %178, -113
  %180 = or i32 %179, %173
  store volatile i32 %180, ptr inttoptr (i64 1476543520 to ptr), align 32, !tbaa !19
  br label %181

181:                                              ; preds = %171, %177, %169
  %182 = tail call i32 @HAL_RCC_GetSysClockFreq()
  %183 = load volatile i32, ptr inttoptr (i64 1476543512 to ptr), align 8, !tbaa !13
  %184 = lshr i32 %183, 8
  %185 = and i32 %184, 15
  %186 = zext nneg i32 %185 to i64
  %187 = getelementptr inbounds [16 x i8], ptr @D1CorePrescTable, i64 0, i64 %186
  %188 = load i8, ptr %187, align 1, !tbaa !27
  %189 = and i8 %188, 31
  %190 = zext nneg i8 %189 to i32
  %191 = lshr i32 %182, %190
  store i32 %191, ptr @SystemCoreClock, align 4, !tbaa !28
  %192 = tail call i32 @HAL_InitTick(i32 noundef 14) #2
  br label %.loopexit66

.loopexit66:                                      ; preds = %108, %127, %95, %92, %89, %86, %8, %2, %181
  %.0 = phi i32 [ %192, %181 ], [ 1, %2 ], [ 1, %8 ], [ 1, %86 ], [ 1, %89 ], [ 1, %92 ], [ 1, %95 ], [ 1, %127 ], [ 3, %108 ]
  ret i32 %.0
}

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!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, !8, i64 72, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !8, i64 100, !7, i64 260, !7, i64 264, !7, i64 268, !7, i64 272, !7, i64 276, !8, i64 280, !7, i64 296, !7, i64 300, !7, i64 304, !7, i64 308, !7, i64 312, !7, i64 316, !8, i64 320, !7, i64 336, !7, i64 340, !7, i64 344, !7, i64 348, !7, i64 352}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !7, i64 0}
!11 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!12 = !{!11, !7, i64 16}
!13 = !{!14, !7, i64 24}
!14 = !{!"", !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}
!15 = !{!11, !7, i64 20}
!16 = !{!14, !7, i64 28}
!17 = !{!11, !7, i64 24}
!18 = !{!11, !7, i64 28}
!19 = !{!14, !7, i64 32}
!20 = !{!11, !7, i64 12}
!21 = !{!11, !7, i64 8}
!22 = !{!11, !7, i64 4}
!23 = !{!14, !7, i64 0}
!24 = !{!14, !7, i64 16}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!8, !8, i64 0}
!28 = !{!7, !7, i64 0}


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