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

; 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.HRTIM_HandleTypeDef = type { ptr, %struct.HRTIM_InitTypeDef, [6 x %struct.HRTIM_TimerParamTypeDef], i32, i32, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.HRTIM_InitTypeDef = type { i32, i32, i32, i32, i32 }
%struct.HRTIM_TimerParamTypeDef = type { i32, i32, i32, i32, i32, i32, i32 }
%struct.HRTIM_TypeDef = type { %struct.HRTIM_Master_TypeDef, [5 x %struct.HRTIM_Timerx_TypeDef], [32 x i32], %struct.HRTIM_Common_TypeDef }
%struct.HRTIM_Master_TypeDef = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [20 x i32] }
%struct.HRTIM_Timerx_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, [5 x i32] }
%struct.HRTIM_Common_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 }
%struct.HRTIM_TimerEventFilteringCfgTypeDef = type { i32, i32 }

; Function Attrs: nounwind uwtable
define dso_local i32 @HAL_HRTIM_TimerEventFilteringConfig(ptr noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %3) #0 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store i32 %2, ptr %8, align 4, !tbaa !9
  store ptr %3, ptr %9, align 8, !tbaa !5
  %10 = load ptr, ptr %6, align 8, !tbaa !5
  %11 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %10, i32 0, i32 4
  %12 = load volatile i32, ptr %11, align 8, !tbaa !11
  %13 = icmp eq i32 %12, 2
  br i1 %13, label %14, label %15

14:                                               ; preds = %4
  store i32 2, ptr %5, align 4
  br label %375

15:                                               ; preds = %4
  br label %16

16:                                               ; preds = %15
  %17 = load ptr, ptr %6, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %17, i32 0, i32 3
  %19 = load i32, ptr %18, align 4, !tbaa !14
  %20 = icmp eq i32 %19, 1
  br i1 %20, label %21, label %22

21:                                               ; preds = %16
  store i32 2, ptr %5, align 4
  br label %375

22:                                               ; preds = %16
  %23 = load ptr, ptr %6, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %23, i32 0, i32 3
  store i32 1, ptr %24, align 4, !tbaa !14
  br label %25

25:                                               ; preds = %22
  br label %26

26:                                               ; preds = %25
  %27 = load ptr, ptr %6, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %27, i32 0, i32 4
  store volatile i32 2, ptr %28, align 8, !tbaa !11
  %29 = load i32, ptr %8, align 4, !tbaa !9
  switch i32 %29, label %355 [
    i32 0, label %30
    i32 1, label %47
    i32 2, label %77
    i32 3, label %108
    i32 4, label %139
    i32 5, label %170
    i32 6, label %201
    i32 7, label %231
    i32 8, label %262
    i32 9, label %293
    i32 10, label %324
  ]

30:                                               ; preds = %26
  %31 = load ptr, ptr %6, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %31, i32 0, i32 0
  %33 = load ptr, ptr %32, align 8, !tbaa !15
  %34 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %33, i32 0, i32 1
  %35 = load i32, ptr %7, align 4, !tbaa !9
  %36 = zext i32 %35 to i64
  %37 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %34, i64 0, i64 %36
  %38 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %37, i32 0, i32 19
  store volatile i32 0, ptr %38, align 4, !tbaa !16
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %39, i32 0, i32 0
  %41 = load ptr, ptr %40, align 8, !tbaa !15
  %42 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %41, i32 0, i32 1
  %43 = load i32, ptr %7, align 4, !tbaa !9
  %44 = zext i32 %43 to i64
  %45 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %42, i64 0, i64 %44
  %46 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %45, i32 0, i32 20
  store volatile i32 0, ptr %46, align 4, !tbaa !18
  br label %362

47:                                               ; preds = %26
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %48, i32 0, i32 0
  %50 = load ptr, ptr %49, align 8, !tbaa !15
  %51 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %50, i32 0, i32 1
  %52 = load i32, ptr %7, align 4, !tbaa !9
  %53 = zext i32 %52 to i64
  %54 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %51, i64 0, i64 %53
  %55 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %54, i32 0, i32 19
  %56 = load volatile i32, ptr %55, align 4, !tbaa !16
  %57 = zext i32 %56 to i64
  %58 = and i64 %57, -32
  %59 = load ptr, ptr %9, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %59, i32 0, i32 0
  %61 = load i32, ptr %60, align 4, !tbaa !19
  %62 = load ptr, ptr %9, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %62, i32 0, i32 1
  %64 = load i32, ptr %63, align 4, !tbaa !21
  %65 = or i32 %61, %64
  %66 = zext i32 %65 to i64
  %67 = or i64 %58, %66
  %68 = trunc i64 %67 to i32
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %69, i32 0, i32 0
  %71 = load ptr, ptr %70, align 8, !tbaa !15
  %72 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %71, i32 0, i32 1
  %73 = load i32, ptr %7, align 4, !tbaa !9
  %74 = zext i32 %73 to i64
  %75 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %72, i64 0, i64 %74
  %76 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %75, i32 0, i32 19
  store volatile i32 %68, ptr %76, align 4, !tbaa !16
  br label %362

77:                                               ; preds = %26
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %78, i32 0, i32 0
  %80 = load ptr, ptr %79, align 8, !tbaa !15
  %81 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %7, align 4, !tbaa !9
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %81, i64 0, i64 %83
  %85 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %84, i32 0, i32 19
  %86 = load volatile i32, ptr %85, align 4, !tbaa !16
  %87 = zext i32 %86 to i64
  %88 = and i64 %87, -1985
  %89 = load ptr, ptr %9, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %89, i32 0, i32 0
  %91 = load i32, ptr %90, align 4, !tbaa !19
  %92 = load ptr, ptr %9, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %92, i32 0, i32 1
  %94 = load i32, ptr %93, align 4, !tbaa !21
  %95 = or i32 %91, %94
  %96 = shl i32 %95, 6
  %97 = zext i32 %96 to i64
  %98 = or i64 %88, %97
  %99 = trunc i64 %98 to i32
  %100 = load ptr, ptr %6, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %100, i32 0, i32 0
  %102 = load ptr, ptr %101, align 8, !tbaa !15
  %103 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %102, i32 0, i32 1
  %104 = load i32, ptr %7, align 4, !tbaa !9
  %105 = zext i32 %104 to i64
  %106 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %103, i64 0, i64 %105
  %107 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %106, i32 0, i32 19
  store volatile i32 %99, ptr %107, align 4, !tbaa !16
  br label %362

108:                                              ; preds = %26
  %109 = load ptr, ptr %6, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %109, i32 0, i32 0
  %111 = load ptr, ptr %110, align 8, !tbaa !15
  %112 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %111, i32 0, i32 1
  %113 = load i32, ptr %7, align 4, !tbaa !9
  %114 = zext i32 %113 to i64
  %115 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %112, i64 0, i64 %114
  %116 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %115, i32 0, i32 19
  %117 = load volatile i32, ptr %116, align 4, !tbaa !16
  %118 = zext i32 %117 to i64
  %119 = and i64 %118, -126977
  %120 = load ptr, ptr %9, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %120, i32 0, i32 0
  %122 = load i32, ptr %121, align 4, !tbaa !19
  %123 = load ptr, ptr %9, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %123, i32 0, i32 1
  %125 = load i32, ptr %124, align 4, !tbaa !21
  %126 = or i32 %122, %125
  %127 = shl i32 %126, 12
  %128 = zext i32 %127 to i64
  %129 = or i64 %119, %128
  %130 = trunc i64 %129 to i32
  %131 = load ptr, ptr %6, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %131, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !15
  %134 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %133, i32 0, i32 1
  %135 = load i32, ptr %7, align 4, !tbaa !9
  %136 = zext i32 %135 to i64
  %137 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %134, i64 0, i64 %136
  %138 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %137, i32 0, i32 19
  store volatile i32 %130, ptr %138, align 4, !tbaa !16
  br label %362

139:                                              ; preds = %26
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %141, align 8, !tbaa !15
  %143 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %142, i32 0, i32 1
  %144 = load i32, ptr %7, align 4, !tbaa !9
  %145 = zext i32 %144 to i64
  %146 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %143, i64 0, i64 %145
  %147 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %146, i32 0, i32 19
  %148 = load volatile i32, ptr %147, align 4, !tbaa !16
  %149 = zext i32 %148 to i64
  %150 = and i64 %149, -8126465
  %151 = load ptr, ptr %9, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %151, i32 0, i32 0
  %153 = load i32, ptr %152, align 4, !tbaa !19
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %154, i32 0, i32 1
  %156 = load i32, ptr %155, align 4, !tbaa !21
  %157 = or i32 %153, %156
  %158 = shl i32 %157, 18
  %159 = zext i32 %158 to i64
  %160 = or i64 %150, %159
  %161 = trunc i64 %160 to i32
  %162 = load ptr, ptr %6, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %162, i32 0, i32 0
  %164 = load ptr, ptr %163, align 8, !tbaa !15
  %165 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %164, i32 0, i32 1
  %166 = load i32, ptr %7, align 4, !tbaa !9
  %167 = zext i32 %166 to i64
  %168 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %165, i64 0, i64 %167
  %169 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %168, i32 0, i32 19
  store volatile i32 %161, ptr %169, align 4, !tbaa !16
  br label %362

170:                                              ; preds = %26
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %171, i32 0, i32 0
  %173 = load ptr, ptr %172, align 8, !tbaa !15
  %174 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %173, i32 0, i32 1
  %175 = load i32, ptr %7, align 4, !tbaa !9
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %174, i64 0, i64 %176
  %178 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %177, i32 0, i32 19
  %179 = load volatile i32, ptr %178, align 4, !tbaa !16
  %180 = zext i32 %179 to i64
  %181 = and i64 %180, -520093697
  %182 = load ptr, ptr %9, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %182, i32 0, i32 0
  %184 = load i32, ptr %183, align 4, !tbaa !19
  %185 = load ptr, ptr %9, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %185, i32 0, i32 1
  %187 = load i32, ptr %186, align 4, !tbaa !21
  %188 = or i32 %184, %187
  %189 = shl i32 %188, 24
  %190 = zext i32 %189 to i64
  %191 = or i64 %181, %190
  %192 = trunc i64 %191 to i32
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %193, i32 0, i32 0
  %195 = load ptr, ptr %194, align 8, !tbaa !15
  %196 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %195, i32 0, i32 1
  %197 = load i32, ptr %7, align 4, !tbaa !9
  %198 = zext i32 %197 to i64
  %199 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %196, i64 0, i64 %198
  %200 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %199, i32 0, i32 19
  store volatile i32 %192, ptr %200, align 4, !tbaa !16
  br label %362

201:                                              ; preds = %26
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %202, i32 0, i32 0
  %204 = load ptr, ptr %203, align 8, !tbaa !15
  %205 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %204, i32 0, i32 1
  %206 = load i32, ptr %7, align 4, !tbaa !9
  %207 = zext i32 %206 to i64
  %208 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %205, i64 0, i64 %207
  %209 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %208, i32 0, i32 20
  %210 = load volatile i32, ptr %209, align 4, !tbaa !18
  %211 = zext i32 %210 to i64
  %212 = and i64 %211, -32
  %213 = load ptr, ptr %9, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %213, i32 0, i32 0
  %215 = load i32, ptr %214, align 4, !tbaa !19
  %216 = load ptr, ptr %9, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %216, i32 0, i32 1
  %218 = load i32, ptr %217, align 4, !tbaa !21
  %219 = or i32 %215, %218
  %220 = zext i32 %219 to i64
  %221 = or i64 %212, %220
  %222 = trunc i64 %221 to i32
  %223 = load ptr, ptr %6, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %223, i32 0, i32 0
  %225 = load ptr, ptr %224, align 8, !tbaa !15
  %226 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %225, i32 0, i32 1
  %227 = load i32, ptr %7, align 4, !tbaa !9
  %228 = zext i32 %227 to i64
  %229 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %226, i64 0, i64 %228
  %230 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %229, i32 0, i32 20
  store volatile i32 %222, ptr %230, align 4, !tbaa !18
  br label %362

231:                                              ; preds = %26
  %232 = load ptr, ptr %6, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %232, i32 0, i32 0
  %234 = load ptr, ptr %233, align 8, !tbaa !15
  %235 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %234, i32 0, i32 1
  %236 = load i32, ptr %7, align 4, !tbaa !9
  %237 = zext i32 %236 to i64
  %238 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %235, i64 0, i64 %237
  %239 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %238, i32 0, i32 20
  %240 = load volatile i32, ptr %239, align 4, !tbaa !18
  %241 = zext i32 %240 to i64
  %242 = and i64 %241, -1985
  %243 = load ptr, ptr %9, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %243, i32 0, i32 0
  %245 = load i32, ptr %244, align 4, !tbaa !19
  %246 = load ptr, ptr %9, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %246, i32 0, i32 1
  %248 = load i32, ptr %247, align 4, !tbaa !21
  %249 = or i32 %245, %248
  %250 = shl i32 %249, 6
  %251 = zext i32 %250 to i64
  %252 = or i64 %242, %251
  %253 = trunc i64 %252 to i32
  %254 = load ptr, ptr %6, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %254, i32 0, i32 0
  %256 = load ptr, ptr %255, align 8, !tbaa !15
  %257 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %7, align 4, !tbaa !9
  %259 = zext i32 %258 to i64
  %260 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %257, i64 0, i64 %259
  %261 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %260, i32 0, i32 20
  store volatile i32 %253, ptr %261, align 4, !tbaa !18
  br label %362

262:                                              ; preds = %26
  %263 = load ptr, ptr %6, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %263, i32 0, i32 0
  %265 = load ptr, ptr %264, align 8, !tbaa !15
  %266 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %265, i32 0, i32 1
  %267 = load i32, ptr %7, align 4, !tbaa !9
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %266, i64 0, i64 %268
  %270 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %269, i32 0, i32 20
  %271 = load volatile i32, ptr %270, align 4, !tbaa !18
  %272 = zext i32 %271 to i64
  %273 = and i64 %272, -126977
  %274 = load ptr, ptr %9, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %274, i32 0, i32 0
  %276 = load i32, ptr %275, align 4, !tbaa !19
  %277 = load ptr, ptr %9, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %277, i32 0, i32 1
  %279 = load i32, ptr %278, align 4, !tbaa !21
  %280 = or i32 %276, %279
  %281 = shl i32 %280, 12
  %282 = zext i32 %281 to i64
  %283 = or i64 %273, %282
  %284 = trunc i64 %283 to i32
  %285 = load ptr, ptr %6, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %285, i32 0, i32 0
  %287 = load ptr, ptr %286, align 8, !tbaa !15
  %288 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %287, i32 0, i32 1
  %289 = load i32, ptr %7, align 4, !tbaa !9
  %290 = zext i32 %289 to i64
  %291 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %288, i64 0, i64 %290
  %292 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %291, i32 0, i32 20
  store volatile i32 %284, ptr %292, align 4, !tbaa !18
  br label %362

293:                                              ; preds = %26
  %294 = load ptr, ptr %6, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %294, i32 0, i32 0
  %296 = load ptr, ptr %295, align 8, !tbaa !15
  %297 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %296, i32 0, i32 1
  %298 = load i32, ptr %7, align 4, !tbaa !9
  %299 = zext i32 %298 to i64
  %300 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %297, i64 0, i64 %299
  %301 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %300, i32 0, i32 20
  %302 = load volatile i32, ptr %301, align 4, !tbaa !18
  %303 = zext i32 %302 to i64
  %304 = and i64 %303, -8126465
  %305 = load ptr, ptr %9, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %305, i32 0, i32 0
  %307 = load i32, ptr %306, align 4, !tbaa !19
  %308 = load ptr, ptr %9, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %308, i32 0, i32 1
  %310 = load i32, ptr %309, align 4, !tbaa !21
  %311 = or i32 %307, %310
  %312 = shl i32 %311, 18
  %313 = zext i32 %312 to i64
  %314 = or i64 %304, %313
  %315 = trunc i64 %314 to i32
  %316 = load ptr, ptr %6, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %316, i32 0, i32 0
  %318 = load ptr, ptr %317, align 8, !tbaa !15
  %319 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %318, i32 0, i32 1
  %320 = load i32, ptr %7, align 4, !tbaa !9
  %321 = zext i32 %320 to i64
  %322 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %319, i64 0, i64 %321
  %323 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %322, i32 0, i32 20
  store volatile i32 %315, ptr %323, align 4, !tbaa !18
  br label %362

324:                                              ; preds = %26
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %325, i32 0, i32 0
  %327 = load ptr, ptr %326, align 8, !tbaa !15
  %328 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %327, i32 0, i32 1
  %329 = load i32, ptr %7, align 4, !tbaa !9
  %330 = zext i32 %329 to i64
  %331 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %328, i64 0, i64 %330
  %332 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %331, i32 0, i32 20
  %333 = load volatile i32, ptr %332, align 4, !tbaa !18
  %334 = zext i32 %333 to i64
  %335 = and i64 %334, -520093697
  %336 = load ptr, ptr %9, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %336, i32 0, i32 0
  %338 = load i32, ptr %337, align 4, !tbaa !19
  %339 = load ptr, ptr %9, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.HRTIM_TimerEventFilteringCfgTypeDef, ptr %339, i32 0, i32 1
  %341 = load i32, ptr %340, align 4, !tbaa !21
  %342 = or i32 %338, %341
  %343 = shl i32 %342, 24
  %344 = zext i32 %343 to i64
  %345 = or i64 %335, %344
  %346 = trunc i64 %345 to i32
  %347 = load ptr, ptr %6, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %347, i32 0, i32 0
  %349 = load ptr, ptr %348, align 8, !tbaa !15
  %350 = getelementptr inbounds %struct.HRTIM_TypeDef, ptr %349, i32 0, i32 1
  %351 = load i32, ptr %7, align 4, !tbaa !9
  %352 = zext i32 %351 to i64
  %353 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %350, i64 0, i64 %352
  %354 = getelementptr inbounds %struct.HRTIM_Timerx_TypeDef, ptr %353, i32 0, i32 20
  store volatile i32 %346, ptr %354, align 4, !tbaa !18
  br label %362

355:                                              ; preds = %26
  %356 = load ptr, ptr %6, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %356, i32 0, i32 4
  store volatile i32 7, ptr %357, align 8, !tbaa !11
  br label %358

358:                                              ; preds = %355
  %359 = load ptr, ptr %6, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %359, i32 0, i32 3
  store i32 0, ptr %360, align 4, !tbaa !14
  br label %361

361:                                              ; preds = %358
  br label %362

362:                                              ; preds = %361, %324, %293, %262, %231, %201, %170, %139, %108, %77, %47, %30
  %363 = load ptr, ptr %6, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %363, i32 0, i32 4
  %365 = load volatile i32, ptr %364, align 8, !tbaa !11
  %366 = icmp eq i32 %365, 7
  br i1 %366, label %367, label %368

367:                                              ; preds = %362
  store i32 1, ptr %5, align 4
  br label %375

368:                                              ; preds = %362
  %369 = load ptr, ptr %6, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %369, i32 0, i32 4
  store volatile i32 1, ptr %370, align 8, !tbaa !11
  br label %371

371:                                              ; preds = %368
  %372 = load ptr, ptr %6, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.HRTIM_HandleTypeDef, ptr %372, i32 0, i32 3
  store i32 0, ptr %373, align 4, !tbaa !14
  br label %374

374:                                              ; preds = %371
  store i32 0, ptr %5, align 4
  br label %375

375:                                              ; preds = %374, %367, %21, %14
  %376 = load i32, ptr %5, align 4
  ret i32 %376
}

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

!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 200}
!12 = !{!"", !6, i64 0, !13, i64 8, !7, i64 28, !10, i64 196, !10, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248}
!13 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16}
!14 = !{!12, !10, i64 196}
!15 = !{!12, !6, i64 0}
!16 = !{!17, !10, i64 76}
!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, !7, i64 108}
!18 = !{!17, !10, i64 80}
!19 = !{!20, !10, i64 0}
!20 = !{!"", !10, i64 0, !10, i64 4}
!21 = !{!20, !10, i64 4}


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

%struct.HRTIM_Timerx_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, [5 x i32] }

; Function Attrs: nofree norecurse nounwind uwtable
define dso_local range(i32 0, 3) i32 @HAL_HRTIM_TimerEventFilteringConfig(ptr noundef %0, i32 noundef %1, i32 noundef %2, ptr nocapture noundef readonly %3) local_unnamed_addr #0 {
  %5 = getelementptr inbounds i8, ptr %0, i64 200
  %6 = load volatile i32, ptr %5, align 8, !tbaa !5
  %7 = icmp eq i32 %6, 2
  br i1 %7, label %152, label %8

8:                                                ; preds = %4
  %9 = getelementptr inbounds i8, ptr %0, i64 196
  %10 = load i32, ptr %9, align 4, !tbaa !12
  %11 = icmp eq i32 %10, 1
  br i1 %11, label %152, label %12

12:                                               ; preds = %8
  store i32 1, ptr %9, align 4, !tbaa !12
  store volatile i32 2, ptr %5, align 8, !tbaa !5
  switch i32 %2, label %147 [
    i32 0, label %13
    i32 1, label %19
    i32 2, label %31
    i32 3, label %44
    i32 4, label %57
    i32 5, label %70
    i32 6, label %83
    i32 7, label %95
    i32 8, label %108
    i32 9, label %121
    i32 10, label %134
  ]

13:                                               ; preds = %12
  %14 = load ptr, ptr %0, align 8, !tbaa !13
  %15 = getelementptr inbounds i8, ptr %14, i64 128
  %16 = zext i32 %1 to i64
  %17 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %15, i64 0, i64 %16, i32 19
  store volatile i32 0, ptr %17, align 4, !tbaa !14
  %18 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %15, i64 0, i64 %16, i32 20
  store volatile i32 0, ptr %18, align 4, !tbaa !16
  br label %148

19:                                               ; preds = %12
  %20 = load ptr, ptr %0, align 8, !tbaa !13
  %21 = getelementptr inbounds i8, ptr %20, i64 128
  %22 = zext i32 %1 to i64
  %23 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %21, i64 0, i64 %22, i32 19
  %24 = load volatile i32, ptr %23, align 4, !tbaa !14
  %25 = and i32 %24, -32
  %26 = load i32, ptr %3, align 4, !tbaa !17
  %27 = getelementptr inbounds i8, ptr %3, i64 4
  %28 = load i32, ptr %27, align 4, !tbaa !19
  %29 = or i32 %25, %26
  %30 = or i32 %29, %28
  store volatile i32 %30, ptr %23, align 4, !tbaa !14
  br label %148

31:                                               ; preds = %12
  %32 = load ptr, ptr %0, align 8, !tbaa !13
  %33 = getelementptr inbounds i8, ptr %32, i64 128
  %34 = zext i32 %1 to i64
  %35 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %33, i64 0, i64 %34, i32 19
  %36 = load volatile i32, ptr %35, align 4, !tbaa !14
  %37 = and i32 %36, -1985
  %38 = load i32, ptr %3, align 4, !tbaa !17
  %39 = getelementptr inbounds i8, ptr %3, i64 4
  %40 = load i32, ptr %39, align 4, !tbaa !19
  %41 = or i32 %40, %38
  %42 = shl i32 %41, 6
  %43 = or i32 %42, %37
  store volatile i32 %43, ptr %35, align 4, !tbaa !14
  br label %148

44:                                               ; preds = %12
  %45 = load ptr, ptr %0, align 8, !tbaa !13
  %46 = getelementptr inbounds i8, ptr %45, i64 128
  %47 = zext i32 %1 to i64
  %48 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %46, i64 0, i64 %47, i32 19
  %49 = load volatile i32, ptr %48, align 4, !tbaa !14
  %50 = and i32 %49, -126977
  %51 = load i32, ptr %3, align 4, !tbaa !17
  %52 = getelementptr inbounds i8, ptr %3, i64 4
  %53 = load i32, ptr %52, align 4, !tbaa !19
  %54 = or i32 %53, %51
  %55 = shl i32 %54, 12
  %56 = or i32 %55, %50
  store volatile i32 %56, ptr %48, align 4, !tbaa !14
  br label %148

57:                                               ; preds = %12
  %58 = load ptr, ptr %0, align 8, !tbaa !13
  %59 = getelementptr inbounds i8, ptr %58, i64 128
  %60 = zext i32 %1 to i64
  %61 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %59, i64 0, i64 %60, i32 19
  %62 = load volatile i32, ptr %61, align 4, !tbaa !14
  %63 = and i32 %62, -8126465
  %64 = load i32, ptr %3, align 4, !tbaa !17
  %65 = getelementptr inbounds i8, ptr %3, i64 4
  %66 = load i32, ptr %65, align 4, !tbaa !19
  %67 = or i32 %66, %64
  %68 = shl i32 %67, 18
  %69 = or i32 %68, %63
  store volatile i32 %69, ptr %61, align 4, !tbaa !14
  br label %148

70:                                               ; preds = %12
  %71 = load ptr, ptr %0, align 8, !tbaa !13
  %72 = getelementptr inbounds i8, ptr %71, i64 128
  %73 = zext i32 %1 to i64
  %74 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %72, i64 0, i64 %73, i32 19
  %75 = load volatile i32, ptr %74, align 4, !tbaa !14
  %76 = and i32 %75, -520093697
  %77 = load i32, ptr %3, align 4, !tbaa !17
  %78 = getelementptr inbounds i8, ptr %3, i64 4
  %79 = load i32, ptr %78, align 4, !tbaa !19
  %80 = or i32 %79, %77
  %81 = shl i32 %80, 24
  %82 = or i32 %81, %76
  store volatile i32 %82, ptr %74, align 4, !tbaa !14
  br label %148

83:                                               ; preds = %12
  %84 = load ptr, ptr %0, align 8, !tbaa !13
  %85 = getelementptr inbounds i8, ptr %84, i64 128
  %86 = zext i32 %1 to i64
  %87 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %85, i64 0, i64 %86, i32 20
  %88 = load volatile i32, ptr %87, align 4, !tbaa !16
  %89 = and i32 %88, -32
  %90 = load i32, ptr %3, align 4, !tbaa !17
  %91 = getelementptr inbounds i8, ptr %3, i64 4
  %92 = load i32, ptr %91, align 4, !tbaa !19
  %93 = or i32 %89, %90
  %94 = or i32 %93, %92
  store volatile i32 %94, ptr %87, align 4, !tbaa !16
  br label %148

95:                                               ; preds = %12
  %96 = load ptr, ptr %0, align 8, !tbaa !13
  %97 = getelementptr inbounds i8, ptr %96, i64 128
  %98 = zext i32 %1 to i64
  %99 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %97, i64 0, i64 %98, i32 20
  %100 = load volatile i32, ptr %99, align 4, !tbaa !16
  %101 = and i32 %100, -1985
  %102 = load i32, ptr %3, align 4, !tbaa !17
  %103 = getelementptr inbounds i8, ptr %3, i64 4
  %104 = load i32, ptr %103, align 4, !tbaa !19
  %105 = or i32 %104, %102
  %106 = shl i32 %105, 6
  %107 = or i32 %106, %101
  store volatile i32 %107, ptr %99, align 4, !tbaa !16
  br label %148

108:                                              ; preds = %12
  %109 = load ptr, ptr %0, align 8, !tbaa !13
  %110 = getelementptr inbounds i8, ptr %109, i64 128
  %111 = zext i32 %1 to i64
  %112 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %110, i64 0, i64 %111, i32 20
  %113 = load volatile i32, ptr %112, align 4, !tbaa !16
  %114 = and i32 %113, -126977
  %115 = load i32, ptr %3, align 4, !tbaa !17
  %116 = getelementptr inbounds i8, ptr %3, i64 4
  %117 = load i32, ptr %116, align 4, !tbaa !19
  %118 = or i32 %117, %115
  %119 = shl i32 %118, 12
  %120 = or i32 %119, %114
  store volatile i32 %120, ptr %112, align 4, !tbaa !16
  br label %148

121:                                              ; preds = %12
  %122 = load ptr, ptr %0, align 8, !tbaa !13
  %123 = getelementptr inbounds i8, ptr %122, i64 128
  %124 = zext i32 %1 to i64
  %125 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %123, i64 0, i64 %124, i32 20
  %126 = load volatile i32, ptr %125, align 4, !tbaa !16
  %127 = and i32 %126, -8126465
  %128 = load i32, ptr %3, align 4, !tbaa !17
  %129 = getelementptr inbounds i8, ptr %3, i64 4
  %130 = load i32, ptr %129, align 4, !tbaa !19
  %131 = or i32 %130, %128
  %132 = shl i32 %131, 18
  %133 = or i32 %132, %127
  store volatile i32 %133, ptr %125, align 4, !tbaa !16
  br label %148

134:                                              ; preds = %12
  %135 = load ptr, ptr %0, align 8, !tbaa !13
  %136 = getelementptr inbounds i8, ptr %135, i64 128
  %137 = zext i32 %1 to i64
  %138 = getelementptr inbounds [5 x %struct.HRTIM_Timerx_TypeDef], ptr %136, i64 0, i64 %137, i32 20
  %139 = load volatile i32, ptr %138, align 4, !tbaa !16
  %140 = and i32 %139, -520093697
  %141 = load i32, ptr %3, align 4, !tbaa !17
  %142 = getelementptr inbounds i8, ptr %3, i64 4
  %143 = load i32, ptr %142, align 4, !tbaa !19
  %144 = or i32 %143, %141
  %145 = shl i32 %144, 24
  %146 = or i32 %145, %140
  store volatile i32 %146, ptr %138, align 4, !tbaa !16
  br label %148

147:                                              ; preds = %12
  store volatile i32 7, ptr %5, align 8, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %148

148:                                              ; preds = %147, %134, %121, %108, %95, %83, %70, %57, %44, %31, %19, %13
  %149 = load volatile i32, ptr %5, align 8, !tbaa !5
  %150 = icmp eq i32 %149, 7
  br i1 %150, label %152, label %151

151:                                              ; preds = %148
  store volatile i32 1, ptr %5, align 8, !tbaa !5
  store i32 0, ptr %9, align 4, !tbaa !12
  br label %152

152:                                              ; preds = %148, %8, %4, %151
  %.0 = phi i32 [ 0, %151 ], [ 2, %4 ], [ 2, %8 ], [ 1, %148 ]
  ret i32 %.0
}

attributes #0 = { nofree norecurse 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" }

!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, !11, i64 200}
!6 = !{!"", !7, i64 0, !10, i64 8, !8, i64 28, !11, i64 196, !11, i64 200, !7, i64 208, !7, i64 216, !7, i64 224, !7, i64 232, !7, i64 240, !7, i64 248}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !11, i64 196}
!13 = !{!6, !7, i64 0}
!14 = !{!15, !11, i64 76}
!15 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !8, i64 108}
!16 = !{!15, !11, i64 80}
!17 = !{!18, !11, i64 0}
!18 = !{!"", !11, i64 0, !11, i64 4}
!19 = !{!18, !11, i64 4}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass