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

; 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.LPTIM_HandleTypeDef = type { ptr, %struct.LPTIM_InitTypeDef, i32, i32, i32 }
%struct.LPTIM_InitTypeDef = type { %struct.LPTIM_ClockConfigTypeDef, %struct.LPTIM_ULPClockConfigTypeDef, %struct.LPTIM_TriggerConfigTypeDef, i32, i32, i32, i32, i32 }
%struct.LPTIM_ClockConfigTypeDef = type { i32, i32 }
%struct.LPTIM_ULPClockConfigTypeDef = type { i32, i32 }
%struct.LPTIM_TriggerConfigTypeDef = 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] }
%struct.LPTIM_TypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, 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 void @LPTIM_Disable(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  store i32 0, ptr %3, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  call void @__disable_irq()
  %11 = load ptr, ptr %2, align 8, !tbaa !5
  %12 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %11, i32 0, i32 0
  %13 = load ptr, ptr %12, align 8, !tbaa !11
  %14 = ptrtoint ptr %13 to i32
  switch i32 %14, label %40 [
    i32 1073751040, label %15
    i32 1476404224, label %20
    i32 1476405248, label %25
    i32 1476406272, label %30
    i32 1476407296, label %35
  ]

15:                                               ; preds = %1
  %16 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 21), align 4, !tbaa !16
  %17 = zext i32 %16 to i64
  %18 = and i64 %17, 1879048192
  %19 = trunc i64 %18 to i32
  store i32 %19, ptr %3, align 4, !tbaa !9
  br label %41

20:                                               ; preds = %1
  %21 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %22 = zext i32 %21 to i64
  %23 = and i64 %22, 7168
  %24 = trunc i64 %23 to i32
  store i32 %24, ptr %3, align 4, !tbaa !9
  br label %41

25:                                               ; preds = %1
  %26 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %27 = zext i32 %26 to i64
  %28 = and i64 %27, 57344
  %29 = trunc i64 %28 to i32
  store i32 %29, ptr %3, align 4, !tbaa !9
  br label %41

30:                                               ; preds = %1
  %31 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %32 = zext i32 %31 to i64
  %33 = and i64 %32, 57344
  %34 = trunc i64 %33 to i32
  store i32 %34, ptr %3, align 4, !tbaa !9
  br label %41

35:                                               ; preds = %1
  %36 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %37 = zext i32 %36 to i64
  %38 = and i64 %37, 57344
  %39 = trunc i64 %38 to i32
  store i32 %39, ptr %3, align 4, !tbaa !9
  br label %41

40:                                               ; preds = %1
  br label %41

41:                                               ; preds = %40, %35, %30, %25, %20, %15
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %42, i32 0, i32 0
  %44 = load ptr, ptr %43, align 8, !tbaa !11
  %45 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %44, i32 0, i32 2
  %46 = load volatile i32, ptr %45, align 4, !tbaa !19
  store i32 %46, ptr %4, align 4, !tbaa !9
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %47, i32 0, i32 0
  %49 = load ptr, ptr %48, align 8, !tbaa !11
  %50 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %49, i32 0, i32 3
  %51 = load volatile i32, ptr %50, align 4, !tbaa !21
  store i32 %51, ptr %5, align 4, !tbaa !9
  %52 = load ptr, ptr %2, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %52, i32 0, i32 0
  %54 = load ptr, ptr %53, align 8, !tbaa !11
  %55 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %54, i32 0, i32 5
  %56 = load volatile i32, ptr %55, align 4, !tbaa !22
  store i32 %56, ptr %6, align 4, !tbaa !9
  %57 = load ptr, ptr %2, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %57, i32 0, i32 0
  %59 = load ptr, ptr %58, align 8, !tbaa !11
  %60 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %59, i32 0, i32 6
  %61 = load volatile i32, ptr %60, align 4, !tbaa !23
  store i32 %61, ptr %7, align 4, !tbaa !9
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %62, i32 0, i32 0
  %64 = load ptr, ptr %63, align 8, !tbaa !11
  %65 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %64, i32 0, i32 9
  %66 = load volatile i32, ptr %65, align 4, !tbaa !24
  store i32 %66, ptr %8, align 4, !tbaa !9
  %67 = load ptr, ptr %2, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %67, i32 0, i32 0
  %69 = load ptr, ptr %68, align 8, !tbaa !11
  %70 = ptrtoint ptr %69 to i32
  switch i32 %70, label %116 [
    i32 1073751040, label %71
    i32 1476404224, label %80
    i32 1476405248, label %89
    i32 1476406272, label %98
    i32 1476407296, label %107
  ]

71:                                               ; preds = %41
  %72 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 36), align 4, !tbaa !25
  %73 = zext i32 %72 to i64
  %74 = or i64 %73, 512
  %75 = trunc i64 %74 to i32
  store volatile i32 %75, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 36), align 4, !tbaa !25
  %76 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 36), align 4, !tbaa !25
  %77 = zext i32 %76 to i64
  %78 = and i64 %77, -513
  %79 = trunc i64 %78 to i32
  store volatile i32 %79, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 36), align 4, !tbaa !25
  br label %117

80:                                               ; preds = %41
  %81 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %82 = zext i32 %81 to i64
  %83 = or i64 %82, 512
  %84 = trunc i64 %83 to i32
  store volatile i32 %84, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %85 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %86 = zext i32 %85 to i64
  %87 = and i64 %86, -513
  %88 = trunc i64 %87 to i32
  store volatile i32 %88, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  br label %117

89:                                               ; preds = %41
  %90 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %91 = zext i32 %90 to i64
  %92 = or i64 %91, 1024
  %93 = trunc i64 %92 to i32
  store volatile i32 %93, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %94 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %95 = zext i32 %94 to i64
  %96 = and i64 %95, -1025
  %97 = trunc i64 %96 to i32
  store volatile i32 %97, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  br label %117

98:                                               ; preds = %41
  %99 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %100 = zext i32 %99 to i64
  %101 = or i64 %100, 2048
  %102 = trunc i64 %101 to i32
  store volatile i32 %102, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %103 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %104 = zext i32 %103 to i64
  %105 = and i64 %104, -2049
  %106 = trunc i64 %105 to i32
  store volatile i32 %106, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  br label %117

107:                                              ; preds = %41
  %108 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %109 = zext i32 %108 to i64
  %110 = or i64 %109, 4096
  %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 39), align 4, !tbaa !26
  %112 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  %113 = zext i32 %112 to i64
  %114 = and i64 %113, -4097
  %115 = trunc i64 %114 to i32
  store volatile i32 %115, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 39), align 4, !tbaa !26
  br label %117

116:                                              ; preds = %41
  br label %117

117:                                              ; preds = %116, %107, %98, %89, %80, %71
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %118 = load i32, ptr %6, align 4, !tbaa !9
  %119 = zext i32 %118 to i64
  %120 = icmp ne i64 %119, 0
  br i1 %120, label %125, label %121

121:                                              ; preds = %117
  %122 = load i32, ptr %7, align 4, !tbaa !9
  %123 = zext i32 %122 to i64
  %124 = icmp ne i64 %123, 0
  br i1 %124, label %125, label %294

125:                                              ; preds = %121, %117
  %126 = load ptr, ptr %2, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %126, i32 0, i32 0
  %128 = load ptr, ptr %127, align 8, !tbaa !11
  %129 = ptrtoint ptr %128 to i32
  switch i32 %129, label %160 [
    i32 1073751040, label %130
    i32 1476404224, label %136
    i32 1476405248, label %142
    i32 1476406272, label %148
    i32 1476407296, label %154
  ]

130:                                              ; preds = %125
  %131 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 21), align 4, !tbaa !16
  %132 = zext i32 %131 to i64
  %133 = and i64 %132, -1879048193
  %134 = or i64 %133, 0
  %135 = trunc i64 %134 to i32
  store volatile i32 %135, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 21), align 4, !tbaa !16
  br label %161

136:                                              ; preds = %125
  %137 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %138 = zext i32 %137 to i64
  %139 = and i64 %138, -7169
  %140 = or i64 %139, 0
  %141 = trunc i64 %140 to i32
  store volatile i32 %141, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %161

142:                                              ; preds = %125
  %143 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %144 = zext i32 %143 to i64
  %145 = and i64 %144, -57345
  %146 = or i64 %145, 0
  %147 = trunc i64 %146 to i32
  store volatile i32 %147, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %161

148:                                              ; preds = %125
  %149 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %150 = zext i32 %149 to i64
  %151 = and i64 %150, -57345
  %152 = or i64 %151, 0
  %153 = trunc i64 %152 to i32
  store volatile i32 %153, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %161

154:                                              ; preds = %125
  %155 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %156 = zext i32 %155 to i64
  %157 = and i64 %156, -57345
  %158 = or i64 %157, 0
  %159 = trunc i64 %158 to i32
  store volatile i32 %159, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %161

160:                                              ; preds = %125
  br label %161

161:                                              ; preds = %160, %154, %148, %142, %136, %130
  %162 = load i32, ptr %6, align 4, !tbaa !9
  %163 = zext i32 %162 to i64
  %164 = icmp ne i64 %163, 0
  br i1 %164, label %165, label %204

165:                                              ; preds = %161
  %166 = load ptr, ptr %2, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %166, i32 0, i32 0
  %168 = load ptr, ptr %167, align 8, !tbaa !11
  %169 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %168, i32 0, i32 4
  %170 = load volatile i32, ptr %169, align 4, !tbaa !27
  %171 = zext i32 %170 to i64
  %172 = or i64 %171, 1
  %173 = trunc i64 %172 to i32
  store volatile i32 %173, ptr %169, align 4, !tbaa !27
  %174 = load i32, ptr %6, align 4, !tbaa !9
  %175 = load ptr, ptr %2, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %175, i32 0, i32 0
  %177 = load ptr, ptr %176, align 8, !tbaa !11
  %178 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %177, i32 0, i32 5
  store volatile i32 %174, ptr %178, align 4, !tbaa !22
  %179 = call i32 @HAL_GetTick()
  store i32 %179, ptr %9, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %197, %165
  %181 = call i32 @HAL_GetTick()
  %182 = load i32, ptr %9, align 4, !tbaa !9
  %183 = sub i32 %181, %182
  store i32 %183, ptr %10, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %180
  %185 = load ptr, ptr %2, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %185, i32 0, i32 0
  %187 = load ptr, ptr %186, align 8, !tbaa !11
  %188 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %187, i32 0, i32 0
  %189 = load volatile i32, ptr %188, align 4, !tbaa !28
  %190 = zext i32 %189 to i64
  %191 = and i64 %190, 8
  %192 = icmp eq i64 %191, 8
  br i1 %192, label %197, label %193

193:                                              ; preds = %184
  %194 = load i32, ptr %10, align 4, !tbaa !9
  %195 = zext i32 %194 to i64
  %196 = icmp ule i64 %195, 1000
  br label %197

197:                                              ; preds = %193, %184
  %198 = phi i1 [ false, %184 ], [ %196, %193 ]
  br i1 %198, label %180, label %199, !llvm.loop !29

199:                                              ; preds = %197
  %200 = load ptr, ptr %2, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %200, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !11
  %203 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %202, i32 0, i32 1
  store volatile i32 8, ptr %203, align 4, !tbaa !31
  br label %204

204:                                              ; preds = %199, %161
  %205 = load i32, ptr %7, align 4, !tbaa !9
  %206 = zext i32 %205 to i64
  %207 = icmp ne i64 %206, 0
  br i1 %207, label %208, label %247

208:                                              ; preds = %204
  %209 = load ptr, ptr %2, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %209, i32 0, i32 0
  %211 = load ptr, ptr %210, align 8, !tbaa !11
  %212 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %211, i32 0, i32 4
  %213 = load volatile i32, ptr %212, align 4, !tbaa !27
  %214 = zext i32 %213 to i64
  %215 = or i64 %214, 1
  %216 = trunc i64 %215 to i32
  store volatile i32 %216, ptr %212, align 4, !tbaa !27
  %217 = load i32, ptr %7, align 4, !tbaa !9
  %218 = load ptr, ptr %2, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %218, i32 0, i32 0
  %220 = load ptr, ptr %219, align 8, !tbaa !11
  %221 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %220, i32 0, i32 6
  store volatile i32 %217, ptr %221, align 4, !tbaa !23
  %222 = call i32 @HAL_GetTick()
  store i32 %222, ptr %9, align 4, !tbaa !9
  br label %223

223:                                              ; preds = %240, %208
  %224 = call i32 @HAL_GetTick()
  %225 = load i32, ptr %9, align 4, !tbaa !9
  %226 = sub i32 %224, %225
  store i32 %226, ptr %10, align 4, !tbaa !9
  br label %227

227:                                              ; preds = %223
  %228 = load ptr, ptr %2, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %228, i32 0, i32 0
  %230 = load ptr, ptr %229, align 8, !tbaa !11
  %231 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %230, i32 0, i32 0
  %232 = load volatile i32, ptr %231, align 4, !tbaa !28
  %233 = zext i32 %232 to i64
  %234 = and i64 %233, 16
  %235 = icmp eq i64 %234, 16
  br i1 %235, label %240, label %236

236:                                              ; preds = %227
  %237 = load i32, ptr %10, align 4, !tbaa !9
  %238 = zext i32 %237 to i64
  %239 = icmp ule i64 %238, 1000
  br label %240

240:                                              ; preds = %236, %227
  %241 = phi i1 [ false, %227 ], [ %239, %236 ]
  br i1 %241, label %223, label %242, !llvm.loop !32

242:                                              ; preds = %240
  %243 = load ptr, ptr %2, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %243, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !11
  %246 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %245, i32 0, i32 1
  store volatile i32 16, ptr %246, align 4, !tbaa !31
  br label %247

247:                                              ; preds = %242, %204
  %248 = load ptr, ptr %2, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %248, i32 0, i32 0
  %250 = load ptr, ptr %249, align 8, !tbaa !11
  %251 = ptrtoint ptr %250 to i32
  switch i32 %251, label %292 [
    i32 1073751040, label %252
    i32 1476404224, label %260
    i32 1476405248, label %268
    i32 1476406272, label %276
    i32 1476407296, label %284
  ]

252:                                              ; preds = %247
  %253 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 21), align 4, !tbaa !16
  %254 = zext i32 %253 to i64
  %255 = and i64 %254, -1879048193
  %256 = load i32, ptr %3, align 4, !tbaa !9
  %257 = zext i32 %256 to i64
  %258 = or i64 %255, %257
  %259 = trunc i64 %258 to i32
  store volatile i32 %259, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 21), align 4, !tbaa !16
  br label %293

260:                                              ; preds = %247
  %261 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %262 = zext i32 %261 to i64
  %263 = and i64 %262, -7169
  %264 = load i32, ptr %3, align 4, !tbaa !9
  %265 = zext i32 %264 to i64
  %266 = or i64 %263, %265
  %267 = trunc i64 %266 to i32
  store volatile i32 %267, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %293

268:                                              ; preds = %247
  %269 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %270 = zext i32 %269 to i64
  %271 = and i64 %270, -57345
  %272 = load i32, ptr %3, align 4, !tbaa !9
  %273 = zext i32 %272 to i64
  %274 = or i64 %271, %273
  %275 = trunc i64 %274 to i32
  store volatile i32 %275, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %293

276:                                              ; preds = %247
  %277 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %278 = zext i32 %277 to i64
  %279 = and i64 %278, -57345
  %280 = load i32, ptr %3, align 4, !tbaa !9
  %281 = zext i32 %280 to i64
  %282 = or i64 %279, %281
  %283 = trunc i64 %282 to i32
  store volatile i32 %283, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %293

284:                                              ; preds = %247
  %285 = load volatile i32, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  %286 = zext i32 %285 to i64
  %287 = and i64 %286, -57345
  %288 = load i32, ptr %3, align 4, !tbaa !9
  %289 = zext i32 %288 to i64
  %290 = or i64 %287, %289
  %291 = trunc i64 %290 to i32
  store volatile i32 %291, ptr getelementptr inbounds (%struct.RCC_TypeDef, ptr inttoptr (i64 1476543488 to ptr), i32 0, i32 22), align 4, !tbaa !18
  br label %293

292:                                              ; preds = %247
  br label %293

293:                                              ; preds = %292, %284, %276, %268, %260, %252
  br label %294

294:                                              ; preds = %293, %121
  %295 = load ptr, ptr %2, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %295, i32 0, i32 0
  %297 = load ptr, ptr %296, align 8, !tbaa !11
  %298 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %297, i32 0, i32 4
  %299 = load volatile i32, ptr %298, align 4, !tbaa !27
  %300 = zext i32 %299 to i64
  %301 = and i64 %300, -2
  %302 = trunc i64 %301 to i32
  store volatile i32 %302, ptr %298, align 4, !tbaa !27
  %303 = load i32, ptr %4, align 4, !tbaa !9
  %304 = load ptr, ptr %2, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %304, i32 0, i32 0
  %306 = load ptr, ptr %305, align 8, !tbaa !11
  %307 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %306, i32 0, i32 2
  store volatile i32 %303, ptr %307, align 4, !tbaa !19
  %308 = load i32, ptr %5, align 4, !tbaa !9
  %309 = load ptr, ptr %2, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %309, i32 0, i32 0
  %311 = load ptr, ptr %310, align 8, !tbaa !11
  %312 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %311, i32 0, i32 3
  store volatile i32 %308, ptr %312, align 4, !tbaa !21
  %313 = load i32, ptr %8, align 4, !tbaa !9
  %314 = load ptr, ptr %2, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.LPTIM_HandleTypeDef, ptr %314, i32 0, i32 0
  %316 = load ptr, ptr %315, align 8, !tbaa !11
  %317 = getelementptr inbounds %struct.LPTIM_TypeDef, ptr %316, i32 0, i32 9
  store volatile i32 %313, ptr %317, align 4, !tbaa !24
  call void @__enable_irq()
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  ret void
}

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @__disable_irq() #2

declare i32 @HAL_GetTick() #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @__enable_irq() #2

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 = { alwaysinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !6, i64 0}
!12 = !{!"", !6, i64 0, !13, i64 8, !10, i64 56, !10, i64 60, !10, i64 64}
!13 = !{!"", !14, i64 0, !14, i64 8, !15, i64 16, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44}
!14 = !{!"", !10, i64 0, !10, i64 4}
!15 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8}
!16 = !{!17, !10, i64 84}
!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 = !{!17, !10, i64 88}
!19 = !{!20, !10, i64 8}
!20 = !{!"", !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}
!21 = !{!20, !10, i64 12}
!22 = !{!20, !10, i64 20}
!23 = !{!20, !10, i64 24}
!24 = !{!20, !10, i64 36}
!25 = !{!17, !10, i64 144}
!26 = !{!17, !10, i64 156}
!27 = !{!20, !10, i64 16}
!28 = !{!20, !10, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!20, !10, i64 4}
!32 = distinct !{!32, !30}


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

; Function Attrs: nounwind uwtable
define dso_local void @LPTIM_Disable(ptr nocapture noundef readonly %0) local_unnamed_addr #0 {
  tail call void @__disable_irq()
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = ptrtoint ptr %2 to i64
  %4 = trunc i64 %3 to i32
  switch i32 %4, label %85 [
    i32 1073751040, label %.thread
    i32 1476404224, label %.thread44
    i32 1476405248, label %.thread47
    i32 1476406272, label %.thread50
    i32 1476407296, label %.thread53
  ]

.thread:                                          ; preds = %1
  %5 = load volatile i32, ptr inttoptr (i64 1476543572 to ptr), align 4, !tbaa !14
  %6 = and i32 %5, 1879048192
  %7 = getelementptr inbounds i8, ptr %2, i64 8
  %8 = load volatile i32, ptr %7, align 4, !tbaa !16
  %9 = getelementptr inbounds i8, ptr %2, i64 12
  %10 = load volatile i32, ptr %9, align 4, !tbaa !18
  %11 = getelementptr inbounds i8, ptr %2, i64 20
  %12 = load volatile i32, ptr %11, align 4, !tbaa !19
  %13 = getelementptr inbounds i8, ptr %2, i64 24
  %14 = load volatile i32, ptr %13, align 4, !tbaa !20
  %15 = getelementptr inbounds i8, ptr %2, i64 36
  %16 = load volatile i32, ptr %15, align 4, !tbaa !21
  %17 = load volatile i32, ptr inttoptr (i64 1476543632 to ptr), align 16, !tbaa !22
  %18 = or i32 %17, 512
  store volatile i32 %18, ptr inttoptr (i64 1476543632 to ptr), align 16, !tbaa !22
  %19 = load volatile i32, ptr inttoptr (i64 1476543632 to ptr), align 16, !tbaa !22
  %20 = and i32 %19, -513
  store volatile i32 %20, ptr inttoptr (i64 1476543632 to ptr), align 16, !tbaa !22
  br label %96

.thread44:                                        ; preds = %1
  %21 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !23
  %22 = and i32 %21, 7168
  %23 = getelementptr inbounds i8, ptr %2, i64 8
  %24 = load volatile i32, ptr %23, align 4, !tbaa !16
  %25 = getelementptr inbounds i8, ptr %2, i64 12
  %26 = load volatile i32, ptr %25, align 4, !tbaa !18
  %27 = getelementptr inbounds i8, ptr %2, i64 20
  %28 = load volatile i32, ptr %27, align 4, !tbaa !19
  %29 = getelementptr inbounds i8, ptr %2, i64 24
  %30 = load volatile i32, ptr %29, align 4, !tbaa !20
  %31 = getelementptr inbounds i8, ptr %2, i64 36
  %32 = load volatile i32, ptr %31, align 4, !tbaa !21
  %33 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %34 = or i32 %33, 512
  store volatile i32 %34, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %35 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %36 = and i32 %35, -513
  store volatile i32 %36, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  br label %96

.thread47:                                        ; preds = %1
  %37 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !23
  %38 = and i32 %37, 57344
  %39 = getelementptr inbounds i8, ptr %2, i64 8
  %40 = load volatile i32, ptr %39, align 4, !tbaa !16
  %41 = getelementptr inbounds i8, ptr %2, i64 12
  %42 = load volatile i32, ptr %41, align 4, !tbaa !18
  %43 = getelementptr inbounds i8, ptr %2, i64 20
  %44 = load volatile i32, ptr %43, align 4, !tbaa !19
  %45 = getelementptr inbounds i8, ptr %2, i64 24
  %46 = load volatile i32, ptr %45, align 4, !tbaa !20
  %47 = getelementptr inbounds i8, ptr %2, i64 36
  %48 = load volatile i32, ptr %47, align 4, !tbaa !21
  %49 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %50 = or i32 %49, 1024
  store volatile i32 %50, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %51 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %52 = and i32 %51, -1025
  store volatile i32 %52, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  br label %96

.thread50:                                        ; preds = %1
  %53 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !23
  %54 = and i32 %53, 57344
  %55 = getelementptr inbounds i8, ptr %2, i64 8
  %56 = load volatile i32, ptr %55, align 4, !tbaa !16
  %57 = getelementptr inbounds i8, ptr %2, i64 12
  %58 = load volatile i32, ptr %57, align 4, !tbaa !18
  %59 = getelementptr inbounds i8, ptr %2, i64 20
  %60 = load volatile i32, ptr %59, align 4, !tbaa !19
  %61 = getelementptr inbounds i8, ptr %2, i64 24
  %62 = load volatile i32, ptr %61, align 4, !tbaa !20
  %63 = getelementptr inbounds i8, ptr %2, i64 36
  %64 = load volatile i32, ptr %63, align 4, !tbaa !21
  %65 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %66 = or i32 %65, 2048
  store volatile i32 %66, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %67 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %68 = and i32 %67, -2049
  store volatile i32 %68, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  br label %96

.thread53:                                        ; preds = %1
  %69 = load volatile i32, ptr inttoptr (i64 1476543576 to ptr), align 8, !tbaa !23
  %70 = and i32 %69, 57344
  %71 = getelementptr inbounds i8, ptr %2, i64 8
  %72 = load volatile i32, ptr %71, align 4, !tbaa !16
  %73 = getelementptr inbounds i8, ptr %2, i64 12
  %74 = load volatile i32, ptr %73, align 4, !tbaa !18
  %75 = getelementptr inbounds i8, ptr %2, i64 20
  %76 = load volatile i32, ptr %75, align 4, !tbaa !19
  %77 = getelementptr inbounds i8, ptr %2, i64 24
  %78 = load volatile i32, ptr %77, align 4, !tbaa !20
  %79 = getelementptr inbounds i8, ptr %2, i64 36
  %80 = load volatile i32, ptr %79, align 4, !tbaa !21
  %81 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %82 = or i32 %81, 4096
  store volatile i32 %82, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %83 = load volatile i32, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  %84 = and i32 %83, -4097
  store volatile i32 %84, ptr inttoptr (i64 1476543644 to ptr), align 4, !tbaa !24
  br label %96

85:                                               ; preds = %1
  %86 = getelementptr inbounds i8, ptr %2, i64 8
  %87 = load volatile i32, ptr %86, align 4, !tbaa !16
  %88 = getelementptr inbounds i8, ptr %2, i64 12
  %89 = load volatile i32, ptr %88, align 4, !tbaa !18
  %90 = getelementptr inbounds i8, ptr %2, i64 20
  %91 = load volatile i32, ptr %90, align 4, !tbaa !19
  %92 = getelementptr inbounds i8, ptr %2, i64 24
  %93 = load volatile i32, ptr %92, align 4, !tbaa !20
  %94 = getelementptr inbounds i8, ptr %2, i64 36
  %95 = load volatile i32, ptr %94, align 4, !tbaa !21
  br label %96

96:                                               ; preds = %85, %.thread53, %.thread50, %.thread47, %.thread44, %.thread
  %97 = phi i32 [ %95, %85 ], [ %80, %.thread53 ], [ %64, %.thread50 ], [ %48, %.thread47 ], [ %32, %.thread44 ], [ %16, %.thread ]
  %98 = phi i32 [ %93, %85 ], [ %78, %.thread53 ], [ %62, %.thread50 ], [ %46, %.thread47 ], [ %30, %.thread44 ], [ %14, %.thread ]
  %99 = phi i32 [ %91, %85 ], [ %76, %.thread53 ], [ %60, %.thread50 ], [ %44, %.thread47 ], [ %28, %.thread44 ], [ %12, %.thread ]
  %100 = phi ptr [ %90, %85 ], [ %75, %.thread53 ], [ %59, %.thread50 ], [ %43, %.thread47 ], [ %27, %.thread44 ], [ %11, %.thread ]
  %101 = phi i32 [ %89, %85 ], [ %74, %.thread53 ], [ %58, %.thread50 ], [ %42, %.thread47 ], [ %26, %.thread44 ], [ %10, %.thread ]
  %102 = phi i32 [ %87, %85 ], [ %72, %.thread53 ], [ %56, %.thread50 ], [ %40, %.thread47 ], [ %24, %.thread44 ], [ %8, %.thread ]
  %.043 = phi i32 [ 0, %85 ], [ %70, %.thread53 ], [ %54, %.thread50 ], [ %38, %.thread47 ], [ %22, %.thread44 ], [ %6, %.thread ]
  %103 = icmp ne i32 %99, 0
  %104 = icmp ne i32 %98, 0
  %or.cond = select i1 %103, i1 true, i1 %104
  br i1 %or.cond, label %105, label %157

105:                                              ; preds = %96
  switch i32 %4, label %112 [
    i32 1073751040, label %.sink.split
    i32 1476404224, label %106
    i32 1476405248, label %107
    i32 1476406272, label %108
    i32 1476407296, label %109
  ]

106:                                              ; preds = %105
  br label %.sink.split

107:                                              ; preds = %105
  br label %.sink.split

108:                                              ; preds = %105
  br label %.sink.split

109:                                              ; preds = %105
  br label %.sink.split

.sink.split:                                      ; preds = %105, %106, %107, %108, %109
  %.sink = phi ptr [ inttoptr (i64 1476543576 to ptr), %109 ], [ inttoptr (i64 1476543576 to ptr), %108 ], [ inttoptr (i64 1476543576 to ptr), %107 ], [ inttoptr (i64 1476543576 to ptr), %106 ], [ inttoptr (i64 1476543572 to ptr), %105 ]
  %.sink61 = phi i32 [ -57345, %109 ], [ -57345, %108 ], [ -57345, %107 ], [ -7169, %106 ], [ -1879048193, %105 ]
  %110 = load volatile i32, ptr %.sink, align 4, !tbaa !25
  %111 = and i32 %110, %.sink61
  store volatile i32 %111, ptr %.sink, align 4, !tbaa !25
  br label %112

112:                                              ; preds = %.sink.split, %105
  br i1 %103, label %113, label %128

113:                                              ; preds = %112
  %114 = getelementptr inbounds i8, ptr %2, i64 16
  %115 = load volatile i32, ptr %114, align 4, !tbaa !26
  %116 = or i32 %115, 1
  store volatile i32 %116, ptr %114, align 4, !tbaa !26
  store volatile i32 %99, ptr %100, align 4, !tbaa !19
  %117 = tail call i32 @HAL_GetTick() #3
  br label %118

118:                                              ; preds = %118, %113
  %119 = tail call i32 @HAL_GetTick() #3
  %120 = sub i32 %119, %117
  %121 = load ptr, ptr %0, align 8, !tbaa !5
  %122 = load volatile i32, ptr %121, align 4, !tbaa !27
  %123 = and i32 %122, 8
  %.not = icmp eq i32 %123, 0
  %124 = icmp ult i32 %120, 1001
  %125 = select i1 %.not, i1 %124, i1 false
  br i1 %125, label %118, label %126, !llvm.loop !28

126:                                              ; preds = %118
  %127 = getelementptr inbounds i8, ptr %121, i64 4
  store volatile i32 8, ptr %127, align 4, !tbaa !30
  br label %128

128:                                              ; preds = %126, %112
  %129 = phi ptr [ %121, %126 ], [ %2, %112 ]
  br i1 %104, label %130, label %146

130:                                              ; preds = %128
  %131 = getelementptr inbounds i8, ptr %129, i64 16
  %132 = load volatile i32, ptr %131, align 4, !tbaa !26
  %133 = or i32 %132, 1
  store volatile i32 %133, ptr %131, align 4, !tbaa !26
  %134 = getelementptr inbounds i8, ptr %129, i64 24
  store volatile i32 %98, ptr %134, align 4, !tbaa !20
  %135 = tail call i32 @HAL_GetTick() #3
  br label %136

136:                                              ; preds = %136, %130
  %137 = tail call i32 @HAL_GetTick() #3
  %138 = sub i32 %137, %135
  %139 = load ptr, ptr %0, align 8, !tbaa !5
  %140 = load volatile i32, ptr %139, align 4, !tbaa !27
  %141 = and i32 %140, 16
  %.not40 = icmp eq i32 %141, 0
  %142 = icmp ult i32 %138, 1001
  %143 = select i1 %.not40, i1 %142, i1 false
  br i1 %143, label %136, label %144, !llvm.loop !31

144:                                              ; preds = %136
  %145 = getelementptr inbounds i8, ptr %139, i64 4
  store volatile i32 16, ptr %145, align 4, !tbaa !30
  br label %146

146:                                              ; preds = %144, %128
  %147 = phi ptr [ %139, %144 ], [ %129, %128 ]
  %148 = ptrtoint ptr %147 to i64
  %149 = trunc i64 %148 to i32
  switch i32 %149, label %157 [
    i32 1073751040, label %.sink.split62
    i32 1476404224, label %150
    i32 1476405248, label %151
    i32 1476406272, label %152
    i32 1476407296, label %153
  ]

150:                                              ; preds = %146
  br label %.sink.split62

151:                                              ; preds = %146
  br label %.sink.split62

152:                                              ; preds = %146
  br label %.sink.split62

153:                                              ; preds = %146
  br label %.sink.split62

.sink.split62:                                    ; preds = %146, %153, %152, %151, %150
  %.sink68 = phi ptr [ inttoptr (i64 1476543576 to ptr), %150 ], [ inttoptr (i64 1476543576 to ptr), %151 ], [ inttoptr (i64 1476543576 to ptr), %152 ], [ inttoptr (i64 1476543576 to ptr), %153 ], [ inttoptr (i64 1476543572 to ptr), %146 ]
  %.sink67 = phi i32 [ -7169, %150 ], [ -57345, %151 ], [ -57345, %152 ], [ -57345, %153 ], [ -1879048193, %146 ]
  %154 = load volatile i32, ptr %.sink68, align 4, !tbaa !25
  %155 = and i32 %154, %.sink67
  %156 = or i32 %155, %.043
  store volatile i32 %156, ptr %.sink68, align 4, !tbaa !25
  br label %157

157:                                              ; preds = %.sink.split62, %146, %96
  %158 = phi ptr [ %147, %146 ], [ %2, %96 ], [ %147, %.sink.split62 ]
  %159 = getelementptr inbounds i8, ptr %158, i64 16
  %160 = load volatile i32, ptr %159, align 4, !tbaa !26
  %161 = and i32 %160, -2
  store volatile i32 %161, ptr %159, align 4, !tbaa !26
  %162 = getelementptr inbounds i8, ptr %158, i64 8
  store volatile i32 %102, ptr %162, align 4, !tbaa !16
  %163 = getelementptr inbounds i8, ptr %158, i64 12
  store volatile i32 %101, ptr %163, align 4, !tbaa !18
  %164 = getelementptr inbounds i8, ptr %158, i64 36
  store volatile i32 %97, ptr %164, align 4, !tbaa !21
  tail call void @__enable_irq()
  ret void
}

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @__disable_irq() local_unnamed_addr #1

declare i32 @HAL_GetTick() local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @__enable_irq() local_unnamed_addr #1

attributes #0 = { 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 #1 = { alwaysinline nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 0}
!6 = !{!"", !7, i64 0, !10, i64 8, !12, i64 56, !12, i64 60, !12, i64 64}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !11, i64 8, !13, i64 16, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44}
!11 = !{!"", !12, i64 0, !12, i64 4}
!12 = !{!"int", !8, i64 0}
!13 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8}
!14 = !{!15, !12, i64 84}
!15 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !12, i64 96, !12, i64 100, !12, i64 104, !12, i64 108, !12, i64 112, !12, i64 116, !12, i64 120, !12, i64 124, !12, i64 128, !12, i64 132, !12, i64 136, !12, i64 140, !12, i64 144, !12, i64 148, !12, i64 152, !12, i64 156, !12, i64 160, !12, i64 164, !12, i64 168, !8, i64 172, !12, i64 208, !12, i64 212, !12, i64 216, !12, i64 220, !12, i64 224, !12, i64 228, !12, i64 232, !12, i64 236, !12, i64 240, !12, i64 244, !12, i64 248, !12, i64 252, !12, i64 256, !12, i64 260, !12, i64 264, !12, i64 268, !12, i64 272, !12, i64 276, !12, i64 280, !12, i64 284, !8, i64 288}
!16 = !{!17, !12, i64 8}
!17 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36}
!18 = !{!17, !12, i64 12}
!19 = !{!17, !12, i64 20}
!20 = !{!17, !12, i64 24}
!21 = !{!17, !12, i64 36}
!22 = !{!15, !12, i64 144}
!23 = !{!15, !12, i64 88}
!24 = !{!15, !12, i64 156}
!25 = !{!12, !12, i64 0}
!26 = !{!17, !12, i64 16}
!27 = !{!17, !12, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!17, !12, i64 4}
!31 = distinct !{!31, !29}


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