; LLVM IR from IOsonata/IOsonata :: ARM/Nordic/nRF52/nRF52840/exemples/BoschAppBoard/src (bmi323)

; 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.bmi3_sens_config = type { i8, %union.bmi3_sens_config_types }
%union.bmi3_sens_config_types = type { %struct.bmi3_step_counter_config }
%struct.bmi3_step_counter_config = type { i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16 }
%struct.bmi3_any_motion_config = type { i16, i16, i8, i16, i16 }
%struct.bmi3_no_motion_config = type { i16, i16, i8, i16, i16 }
%struct.bmi3_tap_detector_config = type { i8, i8, i8, i8, i16, i8, i8, i8, i8, i8 }
%struct.bmi3_sig_motion_config = type { i16, i16, i8, i16, i8 }
%struct.bmi3_orientation_config = type { i8, i8, i8, i8, i8, i8, i8 }

@any_motion_param_set = external hidden global [3 x [5 x i16]], align 16
@no_motion_param_set = external hidden global [3 x [5 x i16]], align 16
@tap_param_set = external hidden global [3 x [10 x i16]], align 16
@step_counter_param_set = external hidden global [3 x [22 x i16]], align 16
@sig_motion_param_set = external hidden global [3 x [5 x i16]], align 16
@orientation_param_set = external hidden global [3 x [7 x i16]], align 16

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

; Function Attrs: nounwind uwtable
define dso_local signext i8 @bmi323_context_switch_selection(i8 noundef zeroext %0, ptr noundef %1) #1 {
  %3 = alloca i8, align 1
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca [6 x %struct.bmi3_sens_config], align 16
  %7 = alloca i8, align 1
  store i8 %0, ptr %3, align 1, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #2
  call void @llvm.lifetime.start.p0(i64 276, ptr %6) #2
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #2
  store i8 0, ptr %7, align 1, !tbaa !5
  %8 = load i8, ptr %3, align 1, !tbaa !5
  %9 = zext i8 %8 to i32
  %10 = icmp slt i32 %9, 3
  br i1 %10, label %11, label %641

11:                                               ; preds = %2
  %12 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 0
  %13 = getelementptr inbounds %struct.bmi3_sens_config, ptr %12, i32 0, i32 0
  store i8 3, ptr %13, align 16, !tbaa !10
  %14 = load i8, ptr %3, align 1, !tbaa !5
  %15 = zext i8 %14 to i64
  %16 = getelementptr inbounds [3 x [5 x i16]], ptr @any_motion_param_set, i64 0, i64 %15
  %17 = load i8, ptr %7, align 1, !tbaa !5
  %18 = add i8 %17, 1
  store i8 %18, ptr %7, align 1, !tbaa !5
  %19 = zext i8 %17 to i64
  %20 = getelementptr inbounds [5 x i16], ptr %16, i64 0, i64 %19
  %21 = load i16, ptr %20, align 2, !tbaa !12
  %22 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 0
  %23 = getelementptr inbounds %struct.bmi3_sens_config, ptr %22, i32 0, i32 1
  %24 = getelementptr inbounds %struct.bmi3_any_motion_config, ptr %23, i32 0, i32 1
  store i16 %21, ptr %24, align 2, !tbaa !5
  %25 = load i8, ptr %3, align 1, !tbaa !5
  %26 = zext i8 %25 to i64
  %27 = getelementptr inbounds [3 x [5 x i16]], ptr @any_motion_param_set, i64 0, i64 %26
  %28 = load i8, ptr %7, align 1, !tbaa !5
  %29 = add i8 %28, 1
  store i8 %29, ptr %7, align 1, !tbaa !5
  %30 = zext i8 %28 to i64
  %31 = getelementptr inbounds [5 x i16], ptr %27, i64 0, i64 %30
  %32 = load i16, ptr %31, align 2, !tbaa !12
  %33 = trunc i16 %32 to i8
  %34 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 0
  %35 = getelementptr inbounds %struct.bmi3_sens_config, ptr %34, i32 0, i32 1
  %36 = getelementptr inbounds %struct.bmi3_any_motion_config, ptr %35, i32 0, i32 2
  store i8 %33, ptr %36, align 2, !tbaa !5
  %37 = load i8, ptr %3, align 1, !tbaa !5
  %38 = zext i8 %37 to i64
  %39 = getelementptr inbounds [3 x [5 x i16]], ptr @any_motion_param_set, i64 0, i64 %38
  %40 = load i8, ptr %7, align 1, !tbaa !5
  %41 = add i8 %40, 1
  store i8 %41, ptr %7, align 1, !tbaa !5
  %42 = zext i8 %40 to i64
  %43 = getelementptr inbounds [5 x i16], ptr %39, i64 0, i64 %42
  %44 = load i16, ptr %43, align 2, !tbaa !12
  %45 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 0
  %46 = getelementptr inbounds %struct.bmi3_sens_config, ptr %45, i32 0, i32 1
  %47 = getelementptr inbounds %struct.bmi3_any_motion_config, ptr %46, i32 0, i32 3
  store i16 %44, ptr %47, align 2, !tbaa !5
  %48 = load i8, ptr %3, align 1, !tbaa !5
  %49 = zext i8 %48 to i64
  %50 = getelementptr inbounds [3 x [5 x i16]], ptr @any_motion_param_set, i64 0, i64 %49
  %51 = load i8, ptr %7, align 1, !tbaa !5
  %52 = add i8 %51, 1
  store i8 %52, ptr %7, align 1, !tbaa !5
  %53 = zext i8 %51 to i64
  %54 = getelementptr inbounds [5 x i16], ptr %50, i64 0, i64 %53
  %55 = load i16, ptr %54, align 2, !tbaa !12
  %56 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 0
  %57 = getelementptr inbounds %struct.bmi3_sens_config, ptr %56, i32 0, i32 1
  %58 = getelementptr inbounds %struct.bmi3_any_motion_config, ptr %57, i32 0, i32 0
  store i16 %55, ptr %58, align 2, !tbaa !5
  %59 = load i8, ptr %3, align 1, !tbaa !5
  %60 = zext i8 %59 to i64
  %61 = getelementptr inbounds [3 x [5 x i16]], ptr @any_motion_param_set, i64 0, i64 %60
  %62 = load i8, ptr %7, align 1, !tbaa !5
  %63 = add i8 %62, 1
  store i8 %63, ptr %7, align 1, !tbaa !5
  %64 = zext i8 %62 to i64
  %65 = getelementptr inbounds [5 x i16], ptr %61, i64 0, i64 %64
  %66 = load i16, ptr %65, align 2, !tbaa !12
  %67 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 0
  %68 = getelementptr inbounds %struct.bmi3_sens_config, ptr %67, i32 0, i32 1
  %69 = getelementptr inbounds %struct.bmi3_any_motion_config, ptr %68, i32 0, i32 4
  store i16 %66, ptr %69, align 2, !tbaa !5
  store i8 0, ptr %7, align 1, !tbaa !5
  %70 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 1
  %71 = getelementptr inbounds %struct.bmi3_sens_config, ptr %70, i32 0, i32 0
  store i8 4, ptr %71, align 2, !tbaa !10
  %72 = load i8, ptr %3, align 1, !tbaa !5
  %73 = zext i8 %72 to i64
  %74 = getelementptr inbounds [3 x [5 x i16]], ptr @no_motion_param_set, i64 0, i64 %73
  %75 = load i8, ptr %7, align 1, !tbaa !5
  %76 = add i8 %75, 1
  store i8 %76, ptr %7, align 1, !tbaa !5
  %77 = zext i8 %75 to i64
  %78 = getelementptr inbounds [5 x i16], ptr %74, i64 0, i64 %77
  %79 = load i16, ptr %78, align 2, !tbaa !12
  %80 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 1
  %81 = getelementptr inbounds %struct.bmi3_sens_config, ptr %80, i32 0, i32 1
  %82 = getelementptr inbounds %struct.bmi3_no_motion_config, ptr %81, i32 0, i32 1
  store i16 %79, ptr %82, align 2, !tbaa !5
  %83 = load i8, ptr %3, align 1, !tbaa !5
  %84 = zext i8 %83 to i64
  %85 = getelementptr inbounds [3 x [5 x i16]], ptr @no_motion_param_set, i64 0, i64 %84
  %86 = load i8, ptr %7, align 1, !tbaa !5
  %87 = add i8 %86, 1
  store i8 %87, ptr %7, align 1, !tbaa !5
  %88 = zext i8 %86 to i64
  %89 = getelementptr inbounds [5 x i16], ptr %85, i64 0, i64 %88
  %90 = load i16, ptr %89, align 2, !tbaa !12
  %91 = trunc i16 %90 to i8
  %92 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 1
  %93 = getelementptr inbounds %struct.bmi3_sens_config, ptr %92, i32 0, i32 1
  %94 = getelementptr inbounds %struct.bmi3_no_motion_config, ptr %93, i32 0, i32 2
  store i8 %91, ptr %94, align 2, !tbaa !5
  %95 = load i8, ptr %3, align 1, !tbaa !5
  %96 = zext i8 %95 to i64
  %97 = getelementptr inbounds [3 x [5 x i16]], ptr @no_motion_param_set, i64 0, i64 %96
  %98 = load i8, ptr %7, align 1, !tbaa !5
  %99 = add i8 %98, 1
  store i8 %99, ptr %7, align 1, !tbaa !5
  %100 = zext i8 %98 to i64
  %101 = getelementptr inbounds [5 x i16], ptr %97, i64 0, i64 %100
  %102 = load i16, ptr %101, align 2, !tbaa !12
  %103 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 1
  %104 = getelementptr inbounds %struct.bmi3_sens_config, ptr %103, i32 0, i32 1
  %105 = getelementptr inbounds %struct.bmi3_no_motion_config, ptr %104, i32 0, i32 3
  store i16 %102, ptr %105, align 2, !tbaa !5
  %106 = load i8, ptr %3, align 1, !tbaa !5
  %107 = zext i8 %106 to i64
  %108 = getelementptr inbounds [3 x [5 x i16]], ptr @no_motion_param_set, i64 0, i64 %107
  %109 = load i8, ptr %7, align 1, !tbaa !5
  %110 = add i8 %109, 1
  store i8 %110, ptr %7, align 1, !tbaa !5
  %111 = zext i8 %109 to i64
  %112 = getelementptr inbounds [5 x i16], ptr %108, i64 0, i64 %111
  %113 = load i16, ptr %112, align 2, !tbaa !12
  %114 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 1
  %115 = getelementptr inbounds %struct.bmi3_sens_config, ptr %114, i32 0, i32 1
  %116 = getelementptr inbounds %struct.bmi3_no_motion_config, ptr %115, i32 0, i32 0
  store i16 %113, ptr %116, align 2, !tbaa !5
  %117 = load i8, ptr %3, align 1, !tbaa !5
  %118 = zext i8 %117 to i64
  %119 = getelementptr inbounds [3 x [5 x i16]], ptr @no_motion_param_set, i64 0, i64 %118
  %120 = load i8, ptr %7, align 1, !tbaa !5
  %121 = add i8 %120, 1
  store i8 %121, ptr %7, align 1, !tbaa !5
  %122 = zext i8 %120 to i64
  %123 = getelementptr inbounds [5 x i16], ptr %119, i64 0, i64 %122
  %124 = load i16, ptr %123, align 2, !tbaa !12
  %125 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 1
  %126 = getelementptr inbounds %struct.bmi3_sens_config, ptr %125, i32 0, i32 1
  %127 = getelementptr inbounds %struct.bmi3_no_motion_config, ptr %126, i32 0, i32 4
  store i16 %124, ptr %127, align 2, !tbaa !5
  store i8 0, ptr %7, align 1, !tbaa !5
  %128 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %129 = getelementptr inbounds %struct.bmi3_sens_config, ptr %128, i32 0, i32 0
  store i8 9, ptr %129, align 4, !tbaa !10
  %130 = load i8, ptr %3, align 1, !tbaa !5
  %131 = zext i8 %130 to i64
  %132 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %131
  %133 = load i8, ptr %7, align 1, !tbaa !5
  %134 = add i8 %133, 1
  store i8 %134, ptr %7, align 1, !tbaa !5
  %135 = zext i8 %133 to i64
  %136 = getelementptr inbounds [10 x i16], ptr %132, i64 0, i64 %135
  %137 = load i16, ptr %136, align 2, !tbaa !12
  %138 = trunc i16 %137 to i8
  %139 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %140 = getelementptr inbounds %struct.bmi3_sens_config, ptr %139, i32 0, i32 1
  %141 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %140, i32 0, i32 0
  store i8 %138, ptr %141, align 2, !tbaa !5
  %142 = load i8, ptr %3, align 1, !tbaa !5
  %143 = zext i8 %142 to i64
  %144 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %143
  %145 = load i8, ptr %7, align 1, !tbaa !5
  %146 = add i8 %145, 1
  store i8 %146, ptr %7, align 1, !tbaa !5
  %147 = zext i8 %145 to i64
  %148 = getelementptr inbounds [10 x i16], ptr %144, i64 0, i64 %147
  %149 = load i16, ptr %148, align 2, !tbaa !12
  %150 = trunc i16 %149 to i8
  %151 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %152 = getelementptr inbounds %struct.bmi3_sens_config, ptr %151, i32 0, i32 1
  %153 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %152, i32 0, i32 1
  store i8 %150, ptr %153, align 1, !tbaa !5
  %154 = load i8, ptr %3, align 1, !tbaa !5
  %155 = zext i8 %154 to i64
  %156 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %155
  %157 = load i8, ptr %7, align 1, !tbaa !5
  %158 = add i8 %157, 1
  store i8 %158, ptr %7, align 1, !tbaa !5
  %159 = zext i8 %157 to i64
  %160 = getelementptr inbounds [10 x i16], ptr %156, i64 0, i64 %159
  %161 = load i16, ptr %160, align 2, !tbaa !12
  %162 = trunc i16 %161 to i8
  %163 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %164 = getelementptr inbounds %struct.bmi3_sens_config, ptr %163, i32 0, i32 1
  %165 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %164, i32 0, i32 2
  store i8 %162, ptr %165, align 2, !tbaa !5
  %166 = load i8, ptr %3, align 1, !tbaa !5
  %167 = zext i8 %166 to i64
  %168 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %167
  %169 = load i8, ptr %7, align 1, !tbaa !5
  %170 = add i8 %169, 1
  store i8 %170, ptr %7, align 1, !tbaa !5
  %171 = zext i8 %169 to i64
  %172 = getelementptr inbounds [10 x i16], ptr %168, i64 0, i64 %171
  %173 = load i16, ptr %172, align 2, !tbaa !12
  %174 = trunc i16 %173 to i8
  %175 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %176 = getelementptr inbounds %struct.bmi3_sens_config, ptr %175, i32 0, i32 1
  %177 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %176, i32 0, i32 3
  store i8 %174, ptr %177, align 1, !tbaa !5
  %178 = load i8, ptr %3, align 1, !tbaa !5
  %179 = zext i8 %178 to i64
  %180 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %179
  %181 = load i8, ptr %7, align 1, !tbaa !5
  %182 = add i8 %181, 1
  store i8 %182, ptr %7, align 1, !tbaa !5
  %183 = zext i8 %181 to i64
  %184 = getelementptr inbounds [10 x i16], ptr %180, i64 0, i64 %183
  %185 = load i16, ptr %184, align 2, !tbaa !12
  %186 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %187 = getelementptr inbounds %struct.bmi3_sens_config, ptr %186, i32 0, i32 1
  %188 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %187, i32 0, i32 4
  store i16 %185, ptr %188, align 2, !tbaa !5
  %189 = load i8, ptr %3, align 1, !tbaa !5
  %190 = zext i8 %189 to i64
  %191 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %190
  %192 = load i8, ptr %7, align 1, !tbaa !5
  %193 = add i8 %192, 1
  store i8 %193, ptr %7, align 1, !tbaa !5
  %194 = zext i8 %192 to i64
  %195 = getelementptr inbounds [10 x i16], ptr %191, i64 0, i64 %194
  %196 = load i16, ptr %195, align 2, !tbaa !12
  %197 = trunc i16 %196 to i8
  %198 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %199 = getelementptr inbounds %struct.bmi3_sens_config, ptr %198, i32 0, i32 1
  %200 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %199, i32 0, i32 5
  store i8 %197, ptr %200, align 2, !tbaa !5
  %201 = load i8, ptr %3, align 1, !tbaa !5
  %202 = zext i8 %201 to i64
  %203 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %202
  %204 = load i8, ptr %7, align 1, !tbaa !5
  %205 = add i8 %204, 1
  store i8 %205, ptr %7, align 1, !tbaa !5
  %206 = zext i8 %204 to i64
  %207 = getelementptr inbounds [10 x i16], ptr %203, i64 0, i64 %206
  %208 = load i16, ptr %207, align 2, !tbaa !12
  %209 = trunc i16 %208 to i8
  %210 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %211 = getelementptr inbounds %struct.bmi3_sens_config, ptr %210, i32 0, i32 1
  %212 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %211, i32 0, i32 6
  store i8 %209, ptr %212, align 1, !tbaa !5
  %213 = load i8, ptr %3, align 1, !tbaa !5
  %214 = zext i8 %213 to i64
  %215 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %214
  %216 = load i8, ptr %7, align 1, !tbaa !5
  %217 = add i8 %216, 1
  store i8 %217, ptr %7, align 1, !tbaa !5
  %218 = zext i8 %216 to i64
  %219 = getelementptr inbounds [10 x i16], ptr %215, i64 0, i64 %218
  %220 = load i16, ptr %219, align 2, !tbaa !12
  %221 = trunc i16 %220 to i8
  %222 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %223 = getelementptr inbounds %struct.bmi3_sens_config, ptr %222, i32 0, i32 1
  %224 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %223, i32 0, i32 7
  store i8 %221, ptr %224, align 2, !tbaa !5
  %225 = load i8, ptr %3, align 1, !tbaa !5
  %226 = zext i8 %225 to i64
  %227 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %226
  %228 = load i8, ptr %7, align 1, !tbaa !5
  %229 = add i8 %228, 1
  store i8 %229, ptr %7, align 1, !tbaa !5
  %230 = zext i8 %228 to i64
  %231 = getelementptr inbounds [10 x i16], ptr %227, i64 0, i64 %230
  %232 = load i16, ptr %231, align 2, !tbaa !12
  %233 = trunc i16 %232 to i8
  %234 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %235 = getelementptr inbounds %struct.bmi3_sens_config, ptr %234, i32 0, i32 1
  %236 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %235, i32 0, i32 8
  store i8 %233, ptr %236, align 1, !tbaa !5
  %237 = load i8, ptr %3, align 1, !tbaa !5
  %238 = zext i8 %237 to i64
  %239 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %238
  %240 = load i8, ptr %7, align 1, !tbaa !5
  %241 = add i8 %240, 1
  store i8 %241, ptr %7, align 1, !tbaa !5
  %242 = zext i8 %240 to i64
  %243 = getelementptr inbounds [10 x i16], ptr %239, i64 0, i64 %242
  %244 = load i16, ptr %243, align 2, !tbaa !12
  %245 = trunc i16 %244 to i8
  %246 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 2
  %247 = getelementptr inbounds %struct.bmi3_sens_config, ptr %246, i32 0, i32 1
  %248 = getelementptr inbounds %struct.bmi3_tap_detector_config, ptr %247, i32 0, i32 9
  store i8 %245, ptr %248, align 2, !tbaa !5
  store i8 0, ptr %7, align 1, !tbaa !5
  %249 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %250 = getelementptr inbounds %struct.bmi3_sens_config, ptr %249, i32 0, i32 0
  store i8 5, ptr %250, align 2, !tbaa !10
  %251 = load i8, ptr %3, align 1, !tbaa !5
  %252 = zext i8 %251 to i64
  %253 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %252
  %254 = load i8, ptr %7, align 1, !tbaa !5
  %255 = add i8 %254, 1
  store i8 %255, ptr %7, align 1, !tbaa !5
  %256 = zext i8 %254 to i64
  %257 = getelementptr inbounds [22 x i16], ptr %253, i64 0, i64 %256
  %258 = load i16, ptr %257, align 2, !tbaa !12
  %259 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %260 = getelementptr inbounds %struct.bmi3_sens_config, ptr %259, i32 0, i32 1
  %261 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %260, i32 0, i32 0
  store i16 %258, ptr %261, align 2, !tbaa !5
  %262 = load i8, ptr %3, align 1, !tbaa !5
  %263 = zext i8 %262 to i64
  %264 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %263
  %265 = load i8, ptr %7, align 1, !tbaa !5
  %266 = add i8 %265, 1
  store i8 %266, ptr %7, align 1, !tbaa !5
  %267 = zext i8 %265 to i64
  %268 = getelementptr inbounds [22 x i16], ptr %264, i64 0, i64 %267
  %269 = load i16, ptr %268, align 2, !tbaa !12
  %270 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %271 = getelementptr inbounds %struct.bmi3_sens_config, ptr %270, i32 0, i32 1
  %272 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %271, i32 0, i32 1
  store i16 %269, ptr %272, align 2, !tbaa !5
  %273 = load i8, ptr %3, align 1, !tbaa !5
  %274 = zext i8 %273 to i64
  %275 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %274
  %276 = load i8, ptr %7, align 1, !tbaa !5
  %277 = add i8 %276, 1
  store i8 %277, ptr %7, align 1, !tbaa !5
  %278 = zext i8 %276 to i64
  %279 = getelementptr inbounds [22 x i16], ptr %275, i64 0, i64 %278
  %280 = load i16, ptr %279, align 2, !tbaa !12
  %281 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %282 = getelementptr inbounds %struct.bmi3_sens_config, ptr %281, i32 0, i32 1
  %283 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %282, i32 0, i32 2
  store i16 %280, ptr %283, align 2, !tbaa !5
  %284 = load i8, ptr %3, align 1, !tbaa !5
  %285 = zext i8 %284 to i64
  %286 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %285
  %287 = load i8, ptr %7, align 1, !tbaa !5
  %288 = add i8 %287, 1
  store i8 %288, ptr %7, align 1, !tbaa !5
  %289 = zext i8 %287 to i64
  %290 = getelementptr inbounds [22 x i16], ptr %286, i64 0, i64 %289
  %291 = load i16, ptr %290, align 2, !tbaa !12
  %292 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %293 = getelementptr inbounds %struct.bmi3_sens_config, ptr %292, i32 0, i32 1
  %294 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %293, i32 0, i32 3
  store i16 %291, ptr %294, align 2, !tbaa !5
  %295 = load i8, ptr %3, align 1, !tbaa !5
  %296 = zext i8 %295 to i64
  %297 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %296
  %298 = load i8, ptr %7, align 1, !tbaa !5
  %299 = add i8 %298, 1
  store i8 %299, ptr %7, align 1, !tbaa !5
  %300 = zext i8 %298 to i64
  %301 = getelementptr inbounds [22 x i16], ptr %297, i64 0, i64 %300
  %302 = load i16, ptr %301, align 2, !tbaa !12
  %303 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %304 = getelementptr inbounds %struct.bmi3_sens_config, ptr %303, i32 0, i32 1
  %305 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %304, i32 0, i32 4
  store i16 %302, ptr %305, align 2, !tbaa !5
  %306 = load i8, ptr %3, align 1, !tbaa !5
  %307 = zext i8 %306 to i64
  %308 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %307
  %309 = load i8, ptr %7, align 1, !tbaa !5
  %310 = add i8 %309, 1
  store i8 %310, ptr %7, align 1, !tbaa !5
  %311 = zext i8 %309 to i64
  %312 = getelementptr inbounds [22 x i16], ptr %308, i64 0, i64 %311
  %313 = load i16, ptr %312, align 2, !tbaa !12
  %314 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %315 = getelementptr inbounds %struct.bmi3_sens_config, ptr %314, i32 0, i32 1
  %316 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %315, i32 0, i32 5
  store i16 %313, ptr %316, align 2, !tbaa !5
  %317 = load i8, ptr %3, align 1, !tbaa !5
  %318 = zext i8 %317 to i64
  %319 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %318
  %320 = load i8, ptr %7, align 1, !tbaa !5
  %321 = add i8 %320, 1
  store i8 %321, ptr %7, align 1, !tbaa !5
  %322 = zext i8 %320 to i64
  %323 = getelementptr inbounds [22 x i16], ptr %319, i64 0, i64 %322
  %324 = load i16, ptr %323, align 2, !tbaa !12
  %325 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %326 = getelementptr inbounds %struct.bmi3_sens_config, ptr %325, i32 0, i32 1
  %327 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %326, i32 0, i32 6
  store i16 %324, ptr %327, align 2, !tbaa !5
  %328 = load i8, ptr %3, align 1, !tbaa !5
  %329 = zext i8 %328 to i64
  %330 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %329
  %331 = load i8, ptr %7, align 1, !tbaa !5
  %332 = add i8 %331, 1
  store i8 %332, ptr %7, align 1, !tbaa !5
  %333 = zext i8 %331 to i64
  %334 = getelementptr inbounds [22 x i16], ptr %330, i64 0, i64 %333
  %335 = load i16, ptr %334, align 2, !tbaa !12
  %336 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %337 = getelementptr inbounds %struct.bmi3_sens_config, ptr %336, i32 0, i32 1
  %338 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %337, i32 0, i32 7
  store i16 %335, ptr %338, align 2, !tbaa !5
  %339 = load i8, ptr %3, align 1, !tbaa !5
  %340 = zext i8 %339 to i64
  %341 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %340
  %342 = load i8, ptr %7, align 1, !tbaa !5
  %343 = add i8 %342, 1
  store i8 %343, ptr %7, align 1, !tbaa !5
  %344 = zext i8 %342 to i64
  %345 = getelementptr inbounds [22 x i16], ptr %341, i64 0, i64 %344
  %346 = load i16, ptr %345, align 2, !tbaa !12
  %347 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %348 = getelementptr inbounds %struct.bmi3_sens_config, ptr %347, i32 0, i32 1
  %349 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %348, i32 0, i32 8
  store i16 %346, ptr %349, align 2, !tbaa !5
  %350 = load i8, ptr %3, align 1, !tbaa !5
  %351 = zext i8 %350 to i64
  %352 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %351
  %353 = load i8, ptr %7, align 1, !tbaa !5
  %354 = add i8 %353, 1
  store i8 %354, ptr %7, align 1, !tbaa !5
  %355 = zext i8 %353 to i64
  %356 = getelementptr inbounds [22 x i16], ptr %352, i64 0, i64 %355
  %357 = load i16, ptr %356, align 2, !tbaa !12
  %358 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %359 = getelementptr inbounds %struct.bmi3_sens_config, ptr %358, i32 0, i32 1
  %360 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %359, i32 0, i32 9
  store i16 %357, ptr %360, align 2, !tbaa !5
  %361 = load i8, ptr %3, align 1, !tbaa !5
  %362 = zext i8 %361 to i64
  %363 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %362
  %364 = load i8, ptr %7, align 1, !tbaa !5
  %365 = add i8 %364, 1
  store i8 %365, ptr %7, align 1, !tbaa !5
  %366 = zext i8 %364 to i64
  %367 = getelementptr inbounds [22 x i16], ptr %363, i64 0, i64 %366
  %368 = load i16, ptr %367, align 2, !tbaa !12
  %369 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %370 = getelementptr inbounds %struct.bmi3_sens_config, ptr %369, i32 0, i32 1
  %371 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %370, i32 0, i32 10
  store i16 %368, ptr %371, align 2, !tbaa !5
  %372 = load i8, ptr %3, align 1, !tbaa !5
  %373 = zext i8 %372 to i64
  %374 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %373
  %375 = load i8, ptr %7, align 1, !tbaa !5
  %376 = add i8 %375, 1
  store i8 %376, ptr %7, align 1, !tbaa !5
  %377 = zext i8 %375 to i64
  %378 = getelementptr inbounds [22 x i16], ptr %374, i64 0, i64 %377
  %379 = load i16, ptr %378, align 2, !tbaa !12
  %380 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %381 = getelementptr inbounds %struct.bmi3_sens_config, ptr %380, i32 0, i32 1
  %382 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %381, i32 0, i32 11
  store i16 %379, ptr %382, align 2, !tbaa !5
  %383 = load i8, ptr %3, align 1, !tbaa !5
  %384 = zext i8 %383 to i64
  %385 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %384
  %386 = load i8, ptr %7, align 1, !tbaa !5
  %387 = add i8 %386, 1
  store i8 %387, ptr %7, align 1, !tbaa !5
  %388 = zext i8 %386 to i64
  %389 = getelementptr inbounds [22 x i16], ptr %385, i64 0, i64 %388
  %390 = load i16, ptr %389, align 2, !tbaa !12
  %391 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %392 = getelementptr inbounds %struct.bmi3_sens_config, ptr %391, i32 0, i32 1
  %393 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %392, i32 0, i32 12
  store i16 %390, ptr %393, align 2, !tbaa !5
  %394 = load i8, ptr %3, align 1, !tbaa !5
  %395 = zext i8 %394 to i64
  %396 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %395
  %397 = load i8, ptr %7, align 1, !tbaa !5
  %398 = add i8 %397, 1
  store i8 %398, ptr %7, align 1, !tbaa !5
  %399 = zext i8 %397 to i64
  %400 = getelementptr inbounds [22 x i16], ptr %396, i64 0, i64 %399
  %401 = load i16, ptr %400, align 2, !tbaa !12
  %402 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %403 = getelementptr inbounds %struct.bmi3_sens_config, ptr %402, i32 0, i32 1
  %404 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %403, i32 0, i32 13
  store i16 %401, ptr %404, align 2, !tbaa !5
  %405 = load i8, ptr %3, align 1, !tbaa !5
  %406 = zext i8 %405 to i64
  %407 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %406
  %408 = load i8, ptr %7, align 1, !tbaa !5
  %409 = add i8 %408, 1
  store i8 %409, ptr %7, align 1, !tbaa !5
  %410 = zext i8 %408 to i64
  %411 = getelementptr inbounds [22 x i16], ptr %407, i64 0, i64 %410
  %412 = load i16, ptr %411, align 2, !tbaa !12
  %413 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %414 = getelementptr inbounds %struct.bmi3_sens_config, ptr %413, i32 0, i32 1
  %415 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %414, i32 0, i32 14
  store i16 %412, ptr %415, align 2, !tbaa !5
  %416 = load i8, ptr %3, align 1, !tbaa !5
  %417 = zext i8 %416 to i64
  %418 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %417
  %419 = load i8, ptr %7, align 1, !tbaa !5
  %420 = add i8 %419, 1
  store i8 %420, ptr %7, align 1, !tbaa !5
  %421 = zext i8 %419 to i64
  %422 = getelementptr inbounds [22 x i16], ptr %418, i64 0, i64 %421
  %423 = load i16, ptr %422, align 2, !tbaa !12
  %424 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %425 = getelementptr inbounds %struct.bmi3_sens_config, ptr %424, i32 0, i32 1
  %426 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %425, i32 0, i32 15
  store i16 %423, ptr %426, align 2, !tbaa !5
  %427 = load i8, ptr %3, align 1, !tbaa !5
  %428 = zext i8 %427 to i64
  %429 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %428
  %430 = load i8, ptr %7, align 1, !tbaa !5
  %431 = add i8 %430, 1
  store i8 %431, ptr %7, align 1, !tbaa !5
  %432 = zext i8 %430 to i64
  %433 = getelementptr inbounds [22 x i16], ptr %429, i64 0, i64 %432
  %434 = load i16, ptr %433, align 2, !tbaa !12
  %435 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %436 = getelementptr inbounds %struct.bmi3_sens_config, ptr %435, i32 0, i32 1
  %437 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %436, i32 0, i32 16
  store i16 %434, ptr %437, align 2, !tbaa !5
  %438 = load i8, ptr %3, align 1, !tbaa !5
  %439 = zext i8 %438 to i64
  %440 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %439
  %441 = load i8, ptr %7, align 1, !tbaa !5
  %442 = add i8 %441, 1
  store i8 %442, ptr %7, align 1, !tbaa !5
  %443 = zext i8 %441 to i64
  %444 = getelementptr inbounds [22 x i16], ptr %440, i64 0, i64 %443
  %445 = load i16, ptr %444, align 2, !tbaa !12
  %446 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %447 = getelementptr inbounds %struct.bmi3_sens_config, ptr %446, i32 0, i32 1
  %448 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %447, i32 0, i32 17
  store i16 %445, ptr %448, align 2, !tbaa !5
  %449 = load i8, ptr %3, align 1, !tbaa !5
  %450 = zext i8 %449 to i64
  %451 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %450
  %452 = load i8, ptr %7, align 1, !tbaa !5
  %453 = add i8 %452, 1
  store i8 %453, ptr %7, align 1, !tbaa !5
  %454 = zext i8 %452 to i64
  %455 = getelementptr inbounds [22 x i16], ptr %451, i64 0, i64 %454
  %456 = load i16, ptr %455, align 2, !tbaa !12
  %457 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %458 = getelementptr inbounds %struct.bmi3_sens_config, ptr %457, i32 0, i32 1
  %459 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %458, i32 0, i32 18
  store i16 %456, ptr %459, align 2, !tbaa !5
  %460 = load i8, ptr %3, align 1, !tbaa !5
  %461 = zext i8 %460 to i64
  %462 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %461
  %463 = load i8, ptr %7, align 1, !tbaa !5
  %464 = add i8 %463, 1
  store i8 %464, ptr %7, align 1, !tbaa !5
  %465 = zext i8 %463 to i64
  %466 = getelementptr inbounds [22 x i16], ptr %462, i64 0, i64 %465
  %467 = load i16, ptr %466, align 2, !tbaa !12
  %468 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %469 = getelementptr inbounds %struct.bmi3_sens_config, ptr %468, i32 0, i32 1
  %470 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %469, i32 0, i32 19
  store i16 %467, ptr %470, align 2, !tbaa !5
  %471 = load i8, ptr %3, align 1, !tbaa !5
  %472 = zext i8 %471 to i64
  %473 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %472
  %474 = load i8, ptr %7, align 1, !tbaa !5
  %475 = add i8 %474, 1
  store i8 %475, ptr %7, align 1, !tbaa !5
  %476 = zext i8 %474 to i64
  %477 = getelementptr inbounds [22 x i16], ptr %473, i64 0, i64 %476
  %478 = load i16, ptr %477, align 2, !tbaa !12
  %479 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %480 = getelementptr inbounds %struct.bmi3_sens_config, ptr %479, i32 0, i32 1
  %481 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %480, i32 0, i32 20
  store i16 %478, ptr %481, align 2, !tbaa !5
  %482 = load i8, ptr %3, align 1, !tbaa !5
  %483 = zext i8 %482 to i64
  %484 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %483
  %485 = load i8, ptr %7, align 1, !tbaa !5
  %486 = add i8 %485, 1
  store i8 %486, ptr %7, align 1, !tbaa !5
  %487 = zext i8 %485 to i64
  %488 = getelementptr inbounds [22 x i16], ptr %484, i64 0, i64 %487
  %489 = load i16, ptr %488, align 2, !tbaa !12
  %490 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 3
  %491 = getelementptr inbounds %struct.bmi3_sens_config, ptr %490, i32 0, i32 1
  %492 = getelementptr inbounds %struct.bmi3_step_counter_config, ptr %491, i32 0, i32 21
  store i16 %489, ptr %492, align 2, !tbaa !5
  store i8 0, ptr %7, align 1, !tbaa !5
  %493 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 4
  %494 = getelementptr inbounds %struct.bmi3_sens_config, ptr %493, i32 0, i32 0
  store i8 2, ptr %494, align 8, !tbaa !10
  %495 = load i8, ptr %3, align 1, !tbaa !5
  %496 = zext i8 %495 to i64
  %497 = getelementptr inbounds [3 x [5 x i16]], ptr @sig_motion_param_set, i64 0, i64 %496
  %498 = load i8, ptr %7, align 1, !tbaa !5
  %499 = add i8 %498, 1
  store i8 %499, ptr %7, align 1, !tbaa !5
  %500 = zext i8 %498 to i64
  %501 = getelementptr inbounds [5 x i16], ptr %497, i64 0, i64 %500
  %502 = load i16, ptr %501, align 2, !tbaa !12
  %503 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 4
  %504 = getelementptr inbounds %struct.bmi3_sens_config, ptr %503, i32 0, i32 1
  %505 = getelementptr inbounds %struct.bmi3_sig_motion_config, ptr %504, i32 0, i32 0
  store i16 %502, ptr %505, align 2, !tbaa !5
  %506 = load i8, ptr %3, align 1, !tbaa !5
  %507 = zext i8 %506 to i64
  %508 = getelementptr inbounds [3 x [5 x i16]], ptr @sig_motion_param_set, i64 0, i64 %507
  %509 = load i8, ptr %7, align 1, !tbaa !5
  %510 = add i8 %509, 1
  store i8 %510, ptr %7, align 1, !tbaa !5
  %511 = zext i8 %509 to i64
  %512 = getelementptr inbounds [5 x i16], ptr %508, i64 0, i64 %511
  %513 = load i16, ptr %512, align 2, !tbaa !12
  %514 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 4
  %515 = getelementptr inbounds %struct.bmi3_sens_config, ptr %514, i32 0, i32 1
  %516 = getelementptr inbounds %struct.bmi3_sig_motion_config, ptr %515, i32 0, i32 1
  store i16 %513, ptr %516, align 2, !tbaa !5
  %517 = load i8, ptr %3, align 1, !tbaa !5
  %518 = zext i8 %517 to i64
  %519 = getelementptr inbounds [3 x [5 x i16]], ptr @sig_motion_param_set, i64 0, i64 %518
  %520 = load i8, ptr %7, align 1, !tbaa !5
  %521 = add i8 %520, 1
  store i8 %521, ptr %7, align 1, !tbaa !5
  %522 = zext i8 %520 to i64
  %523 = getelementptr inbounds [5 x i16], ptr %519, i64 0, i64 %522
  %524 = load i16, ptr %523, align 2, !tbaa !12
  %525 = trunc i16 %524 to i8
  %526 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 4
  %527 = getelementptr inbounds %struct.bmi3_sens_config, ptr %526, i32 0, i32 1
  %528 = getelementptr inbounds %struct.bmi3_sig_motion_config, ptr %527, i32 0, i32 2
  store i8 %525, ptr %528, align 2, !tbaa !5
  %529 = load i8, ptr %3, align 1, !tbaa !5
  %530 = zext i8 %529 to i64
  %531 = getelementptr inbounds [3 x [5 x i16]], ptr @sig_motion_param_set, i64 0, i64 %530
  %532 = load i8, ptr %7, align 1, !tbaa !5
  %533 = add i8 %532, 1
  store i8 %533, ptr %7, align 1, !tbaa !5
  %534 = zext i8 %532 to i64
  %535 = getelementptr inbounds [5 x i16], ptr %531, i64 0, i64 %534
  %536 = load i16, ptr %535, align 2, !tbaa !12
  %537 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 4
  %538 = getelementptr inbounds %struct.bmi3_sens_config, ptr %537, i32 0, i32 1
  %539 = getelementptr inbounds %struct.bmi3_sig_motion_config, ptr %538, i32 0, i32 3
  store i16 %536, ptr %539, align 2, !tbaa !5
  %540 = load i8, ptr %3, align 1, !tbaa !5
  %541 = zext i8 %540 to i64
  %542 = getelementptr inbounds [3 x [5 x i16]], ptr @sig_motion_param_set, i64 0, i64 %541
  %543 = load i8, ptr %7, align 1, !tbaa !5
  %544 = add i8 %543, 1
  store i8 %544, ptr %7, align 1, !tbaa !5
  %545 = zext i8 %543 to i64
  %546 = getelementptr inbounds [5 x i16], ptr %542, i64 0, i64 %545
  %547 = load i16, ptr %546, align 2, !tbaa !12
  %548 = trunc i16 %547 to i8
  %549 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 4
  %550 = getelementptr inbounds %struct.bmi3_sens_config, ptr %549, i32 0, i32 1
  %551 = getelementptr inbounds %struct.bmi3_sig_motion_config, ptr %550, i32 0, i32 4
  store i8 %548, ptr %551, align 2, !tbaa !5
  store i8 0, ptr %7, align 1, !tbaa !5
  %552 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %553 = getelementptr inbounds %struct.bmi3_sens_config, ptr %552, i32 0, i32 0
  store i8 7, ptr %553, align 2, !tbaa !10
  %554 = load i8, ptr %3, align 1, !tbaa !5
  %555 = zext i8 %554 to i64
  %556 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %555
  %557 = load i8, ptr %7, align 1, !tbaa !5
  %558 = add i8 %557, 1
  store i8 %558, ptr %7, align 1, !tbaa !5
  %559 = zext i8 %557 to i64
  %560 = getelementptr inbounds [7 x i16], ptr %556, i64 0, i64 %559
  %561 = load i16, ptr %560, align 2, !tbaa !12
  %562 = trunc i16 %561 to i8
  %563 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %564 = getelementptr inbounds %struct.bmi3_sens_config, ptr %563, i32 0, i32 1
  %565 = getelementptr inbounds %struct.bmi3_orientation_config, ptr %564, i32 0, i32 0
  store i8 %562, ptr %565, align 2, !tbaa !5
  %566 = load i8, ptr %3, align 1, !tbaa !5
  %567 = zext i8 %566 to i64
  %568 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %567
  %569 = load i8, ptr %7, align 1, !tbaa !5
  %570 = add i8 %569, 1
  store i8 %570, ptr %7, align 1, !tbaa !5
  %571 = zext i8 %569 to i64
  %572 = getelementptr inbounds [7 x i16], ptr %568, i64 0, i64 %571
  %573 = load i16, ptr %572, align 2, !tbaa !12
  %574 = trunc i16 %573 to i8
  %575 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %576 = getelementptr inbounds %struct.bmi3_sens_config, ptr %575, i32 0, i32 1
  %577 = getelementptr inbounds %struct.bmi3_orientation_config, ptr %576, i32 0, i32 1
  store i8 %574, ptr %577, align 1, !tbaa !5
  %578 = load i8, ptr %3, align 1, !tbaa !5
  %579 = zext i8 %578 to i64
  %580 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %579
  %581 = load i8, ptr %7, align 1, !tbaa !5
  %582 = add i8 %581, 1
  store i8 %582, ptr %7, align 1, !tbaa !5
  %583 = zext i8 %581 to i64
  %584 = getelementptr inbounds [7 x i16], ptr %580, i64 0, i64 %583
  %585 = load i16, ptr %584, align 2, !tbaa !12
  %586 = trunc i16 %585 to i8
  %587 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %588 = getelementptr inbounds %struct.bmi3_sens_config, ptr %587, i32 0, i32 1
  %589 = getelementptr inbounds %struct.bmi3_orientation_config, ptr %588, i32 0, i32 2
  store i8 %586, ptr %589, align 2, !tbaa !5
  %590 = load i8, ptr %3, align 1, !tbaa !5
  %591 = zext i8 %590 to i64
  %592 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %591
  %593 = load i8, ptr %7, align 1, !tbaa !5
  %594 = add i8 %593, 1
  store i8 %594, ptr %7, align 1, !tbaa !5
  %595 = zext i8 %593 to i64
  %596 = getelementptr inbounds [7 x i16], ptr %592, i64 0, i64 %595
  %597 = load i16, ptr %596, align 2, !tbaa !12
  %598 = trunc i16 %597 to i8
  %599 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %600 = getelementptr inbounds %struct.bmi3_sens_config, ptr %599, i32 0, i32 1
  %601 = getelementptr inbounds %struct.bmi3_orientation_config, ptr %600, i32 0, i32 3
  store i8 %598, ptr %601, align 1, !tbaa !5
  %602 = load i8, ptr %3, align 1, !tbaa !5
  %603 = zext i8 %602 to i64
  %604 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %603
  %605 = load i8, ptr %7, align 1, !tbaa !5
  %606 = add i8 %605, 1
  store i8 %606, ptr %7, align 1, !tbaa !5
  %607 = zext i8 %605 to i64
  %608 = getelementptr inbounds [7 x i16], ptr %604, i64 0, i64 %607
  %609 = load i16, ptr %608, align 2, !tbaa !12
  %610 = trunc i16 %609 to i8
  %611 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %612 = getelementptr inbounds %struct.bmi3_sens_config, ptr %611, i32 0, i32 1
  %613 = getelementptr inbounds %struct.bmi3_orientation_config, ptr %612, i32 0, i32 4
  store i8 %610, ptr %613, align 2, !tbaa !5
  %614 = load i8, ptr %3, align 1, !tbaa !5
  %615 = zext i8 %614 to i64
  %616 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %615
  %617 = load i8, ptr %7, align 1, !tbaa !5
  %618 = add i8 %617, 1
  store i8 %618, ptr %7, align 1, !tbaa !5
  %619 = zext i8 %617 to i64
  %620 = getelementptr inbounds [7 x i16], ptr %616, i64 0, i64 %619
  %621 = load i16, ptr %620, align 2, !tbaa !12
  %622 = trunc i16 %621 to i8
  %623 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %624 = getelementptr inbounds %struct.bmi3_sens_config, ptr %623, i32 0, i32 1
  %625 = getelementptr inbounds %struct.bmi3_orientation_config, ptr %624, i32 0, i32 6
  store i8 %622, ptr %625, align 2, !tbaa !5
  %626 = load i8, ptr %3, align 1, !tbaa !5
  %627 = zext i8 %626 to i64
  %628 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %627
  %629 = load i8, ptr %7, align 1, !tbaa !5
  %630 = add i8 %629, 1
  store i8 %630, ptr %7, align 1, !tbaa !5
  %631 = zext i8 %629 to i64
  %632 = getelementptr inbounds [7 x i16], ptr %628, i64 0, i64 %631
  %633 = load i16, ptr %632, align 2, !tbaa !12
  %634 = trunc i16 %633 to i8
  %635 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 5
  %636 = getelementptr inbounds %struct.bmi3_sens_config, ptr %635, i32 0, i32 1
  %637 = getelementptr inbounds %struct.bmi3_orientation_config, ptr %636, i32 0, i32 5
  store i8 %634, ptr %637, align 1, !tbaa !5
  %638 = getelementptr inbounds [6 x %struct.bmi3_sens_config], ptr %6, i64 0, i64 0
  %639 = load ptr, ptr %4, align 8, !tbaa !8
  %640 = call signext i8 @bmi323_set_sensor_config(ptr noundef %638, i8 noundef zeroext 6, ptr noundef %639)
  store i8 %640, ptr %5, align 1, !tbaa !5
  br label %642

641:                                              ; preds = %2
  store i8 -13, ptr %5, align 1, !tbaa !5
  br label %642

642:                                              ; preds = %641, %11
  %643 = load i8, ptr %5, align 1, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 276, ptr %6) #2
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #2
  ret i8 %643
}

; 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
declare dso_local signext i8 @bmi323_set_sensor_config(ptr noundef, i8 noundef zeroext, ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"any pointer", !6, i64 0}
!10 = !{!11, !6, i64 0}
!11 = !{!"bmi3_sens_config", !6, i64 0, !6, i64 2}
!12 = !{!13, !13, i64 0}
!13 = !{!"short", !6, 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"

%struct.bmi3_sens_config = type { i8, %union.bmi3_sens_config_types }
%union.bmi3_sens_config_types = type { %struct.bmi3_step_counter_config }
%struct.bmi3_step_counter_config = type { i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16 }

@any_motion_param_set = external hidden local_unnamed_addr global [3 x [5 x i16]], align 16
@no_motion_param_set = external hidden local_unnamed_addr global [3 x [5 x i16]], align 16
@tap_param_set = external hidden local_unnamed_addr global [3 x [10 x i16]], align 16
@step_counter_param_set = external hidden local_unnamed_addr global [3 x [22 x i16]], align 16
@sig_motion_param_set = external hidden local_unnamed_addr global [3 x [5 x i16]], align 16
@orientation_param_set = external hidden local_unnamed_addr global [3 x [7 x i16]], align 16

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

; Function Attrs: nounwind uwtable
define dso_local signext i8 @bmi323_context_switch_selection(i8 noundef zeroext %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = alloca [6 x %struct.bmi3_sens_config], align 16
  call void @llvm.lifetime.start.p0(i64 276, ptr nonnull %3) #2
  %4 = icmp ult i8 %0, 3
  br i1 %4, label %5, label %102

5:                                                ; preds = %2
  store i8 3, ptr %3, align 16, !tbaa !5
  %6 = zext nneg i8 %0 to i64
  %7 = getelementptr inbounds [3 x [5 x i16]], ptr @any_motion_param_set, i64 0, i64 %6
  %8 = load i16, ptr %7, align 2, !tbaa !9
  %9 = getelementptr inbounds i8, ptr %3, i64 2
  %10 = getelementptr inbounds i8, ptr %3, i64 4
  store i16 %8, ptr %10, align 4, !tbaa !11
  %11 = getelementptr inbounds i8, ptr %7, i64 2
  %12 = load i16, ptr %11, align 2, !tbaa !9
  %13 = trunc i16 %12 to i8
  %14 = getelementptr inbounds i8, ptr %3, i64 6
  store i8 %13, ptr %14, align 2, !tbaa !11
  %15 = getelementptr inbounds i8, ptr %7, i64 4
  %16 = load i16, ptr %15, align 2, !tbaa !9
  %17 = getelementptr inbounds i8, ptr %3, i64 8
  store i16 %16, ptr %17, align 8, !tbaa !11
  %18 = getelementptr inbounds i8, ptr %7, i64 6
  %19 = load i16, ptr %18, align 2, !tbaa !9
  store i16 %19, ptr %9, align 2, !tbaa !11
  %20 = getelementptr inbounds i8, ptr %7, i64 8
  %21 = load i16, ptr %20, align 2, !tbaa !9
  %22 = getelementptr inbounds i8, ptr %3, i64 10
  store i16 %21, ptr %22, align 2, !tbaa !11
  %23 = getelementptr inbounds i8, ptr %3, i64 46
  store i8 4, ptr %23, align 2, !tbaa !5
  %24 = getelementptr inbounds [3 x [5 x i16]], ptr @no_motion_param_set, i64 0, i64 %6
  %25 = load i16, ptr %24, align 2, !tbaa !9
  %26 = getelementptr inbounds i8, ptr %3, i64 48
  %27 = getelementptr inbounds i8, ptr %3, i64 50
  store i16 %25, ptr %27, align 2, !tbaa !11
  %28 = getelementptr inbounds i8, ptr %24, i64 2
  %29 = load i16, ptr %28, align 2, !tbaa !9
  %30 = trunc i16 %29 to i8
  %31 = getelementptr inbounds i8, ptr %3, i64 52
  store i8 %30, ptr %31, align 4, !tbaa !11
  %32 = getelementptr inbounds i8, ptr %24, i64 4
  %33 = load i16, ptr %32, align 2, !tbaa !9
  %34 = getelementptr inbounds i8, ptr %3, i64 54
  store i16 %33, ptr %34, align 2, !tbaa !11
  %35 = getelementptr inbounds i8, ptr %24, i64 6
  %36 = load i16, ptr %35, align 2, !tbaa !9
  store i16 %36, ptr %26, align 16, !tbaa !11
  %37 = getelementptr inbounds i8, ptr %24, i64 8
  %38 = load i16, ptr %37, align 2, !tbaa !9
  %39 = getelementptr inbounds i8, ptr %3, i64 56
  store i16 %38, ptr %39, align 8, !tbaa !11
  %40 = getelementptr inbounds i8, ptr %3, i64 92
  store i8 9, ptr %40, align 4, !tbaa !5
  %41 = getelementptr inbounds [3 x [10 x i16]], ptr @tap_param_set, i64 0, i64 %6
  %42 = getelementptr inbounds i8, ptr %3, i64 94
  %43 = load <4 x i16>, ptr %41, align 4, !tbaa !9
  %44 = trunc <4 x i16> %43 to <4 x i8>
  store <4 x i8> %44, ptr %42, align 2, !tbaa !11
  %45 = getelementptr inbounds i8, ptr %41, i64 8
  %46 = load i16, ptr %45, align 4, !tbaa !9
  %47 = getelementptr inbounds i8, ptr %3, i64 98
  store i16 %46, ptr %47, align 2, !tbaa !11
  %48 = getelementptr inbounds i8, ptr %41, i64 10
  %49 = getelementptr inbounds i8, ptr %3, i64 100
  %50 = load <4 x i16>, ptr %48, align 2, !tbaa !9
  %51 = trunc <4 x i16> %50 to <4 x i8>
  store <4 x i8> %51, ptr %49, align 4, !tbaa !11
  %52 = getelementptr inbounds i8, ptr %41, i64 18
  %53 = load i16, ptr %52, align 2, !tbaa !9
  %54 = trunc i16 %53 to i8
  %55 = getelementptr inbounds i8, ptr %3, i64 104
  store i8 %54, ptr %55, align 8, !tbaa !11
  %56 = getelementptr inbounds i8, ptr %3, i64 138
  store i8 5, ptr %56, align 2, !tbaa !5
  %57 = getelementptr inbounds [3 x [22 x i16]], ptr @step_counter_param_set, i64 0, i64 %6
  %58 = getelementptr inbounds i8, ptr %3, i64 140
  %59 = load <8 x i16>, ptr %57, align 4, !tbaa !9
  store <8 x i16> %59, ptr %58, align 4, !tbaa !11
  %60 = getelementptr inbounds i8, ptr %57, i64 16
  %61 = getelementptr inbounds i8, ptr %3, i64 156
  %62 = load <8 x i16>, ptr %60, align 4, !tbaa !9
  store <8 x i16> %62, ptr %61, align 4, !tbaa !11
  %63 = getelementptr inbounds i8, ptr %57, i64 32
  %64 = getelementptr inbounds i8, ptr %3, i64 172
  %65 = load <4 x i16>, ptr %63, align 4, !tbaa !9
  store <4 x i16> %65, ptr %64, align 4, !tbaa !11
  %66 = getelementptr inbounds i8, ptr %57, i64 40
  %67 = getelementptr inbounds i8, ptr %3, i64 180
  %68 = load <2 x i16>, ptr %66, align 4, !tbaa !9
  store <2 x i16> %68, ptr %67, align 4, !tbaa !11
  %69 = getelementptr inbounds i8, ptr %3, i64 184
  store i8 2, ptr %69, align 8, !tbaa !5
  %70 = getelementptr inbounds [3 x [5 x i16]], ptr @sig_motion_param_set, i64 0, i64 %6
  %71 = getelementptr inbounds i8, ptr %3, i64 186
  %72 = load <2 x i16>, ptr %70, align 2, !tbaa !9
  store <2 x i16> %72, ptr %71, align 2, !tbaa !11
  %73 = getelementptr inbounds i8, ptr %70, i64 4
  %74 = load i16, ptr %73, align 2, !tbaa !9
  %75 = trunc i16 %74 to i8
  %76 = getelementptr inbounds i8, ptr %3, i64 190
  store i8 %75, ptr %76, align 2, !tbaa !11
  %77 = getelementptr inbounds i8, ptr %70, i64 6
  %78 = load i16, ptr %77, align 2, !tbaa !9
  %79 = getelementptr inbounds i8, ptr %3, i64 192
  store i16 %78, ptr %79, align 16, !tbaa !11
  %80 = getelementptr inbounds i8, ptr %70, i64 8
  %81 = load i16, ptr %80, align 2, !tbaa !9
  %82 = trunc i16 %81 to i8
  %83 = getelementptr inbounds i8, ptr %3, i64 194
  store i8 %82, ptr %83, align 2, !tbaa !11
  %84 = getelementptr inbounds i8, ptr %3, i64 230
  store i8 7, ptr %84, align 2, !tbaa !5
  %85 = getelementptr inbounds [3 x [7 x i16]], ptr @orientation_param_set, i64 0, i64 %6
  %86 = getelementptr inbounds i8, ptr %3, i64 232
  %87 = load <4 x i16>, ptr %85, align 2, !tbaa !9
  %88 = trunc <4 x i16> %87 to <4 x i8>
  store <4 x i8> %88, ptr %86, align 8, !tbaa !11
  %89 = getelementptr inbounds i8, ptr %85, i64 8
  %90 = load i16, ptr %89, align 2, !tbaa !9
  %91 = trunc i16 %90 to i8
  %92 = getelementptr inbounds i8, ptr %3, i64 236
  store i8 %91, ptr %92, align 4, !tbaa !11
  %93 = getelementptr inbounds i8, ptr %85, i64 10
  %94 = load i16, ptr %93, align 2, !tbaa !9
  %95 = trunc i16 %94 to i8
  %96 = getelementptr inbounds i8, ptr %3, i64 238
  store i8 %95, ptr %96, align 2, !tbaa !11
  %97 = getelementptr inbounds i8, ptr %85, i64 12
  %98 = load i16, ptr %97, align 2, !tbaa !9
  %99 = trunc i16 %98 to i8
  %100 = getelementptr inbounds i8, ptr %3, i64 237
  store i8 %99, ptr %100, align 1, !tbaa !11
  %101 = call signext i8 @bmi323_set_sensor_config(ptr noundef nonnull %3, i8 noundef zeroext 6, ptr noundef %1)
  br label %102

102:                                              ; preds = %2, %5
  %.0 = phi i8 [ %101, %5 ], [ -13, %2 ]
  call void @llvm.lifetime.end.p0(i64 276, ptr nonnull %3) #2
  ret i8 %.0
}

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

; Function Attrs: nounwind uwtable
declare dso_local signext i8 @bmi323_set_sensor_config(ptr noundef, i8 noundef zeroext, ptr noundef) local_unnamed_addr #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"bmi3_sens_config", !7, i64 0, !7, i64 2}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!7, !7, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass