; LLVM IR from Overload-Technologies/Overload :: Dependencies/soloud/src/audiosource/tedsid/sid.ll (ZN8SIDsound5writeEjh)

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

%class.SIDsound = type <{ ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], [3 x %"class.SIDsound::SIDVoice"], i8, [3 x i8], i32, i8, [7 x i8], [2048 x double], i32, i32, i32, i32, i32, i8, [3 x i8], i32, i8, [3 x i8], i32, [4 x i8] }>
%"class.SIDsound::SIDVoice" = type { i32, i32, ptr, ptr, i32, i32, i32, i32, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, 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: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8SIDsound12setResonanceEv(ptr noundef nonnull align 8 dereferenceable(16796)) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8SIDsound5writeEjh(ptr noundef nonnull align 8 dereferenceable(16796) %0, i32 noundef %1, i8 noundef zeroext %2) #2 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  store i8 %2, ptr %6, align 1, !tbaa !11
  %10 = load ptr, ptr %4, align 8
  %11 = load i8, ptr %6, align 1, !tbaa !11
  %12 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 23
  store i8 %11, ptr %12, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %13 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 11
  %14 = load i32, ptr %5, align 4, !tbaa !9
  %15 = udiv i32 %14, 7
  %16 = zext i32 %15 to i64
  %17 = getelementptr inbounds [3 x %"class.SIDsound::SIDVoice"], ptr %13, i64 0, i64 %16
  store ptr %17, ptr %7, align 8, !tbaa !5
  %18 = load i32, ptr %5, align 4, !tbaa !9
  switch i32 %18, label %377 [
    i32 0, label %19
    i32 7, label %19
    i32 14, label %19
    i32 1, label %48
    i32 8, label %48
    i32 15, label %48
    i32 2, label %78
    i32 9, label %78
    i32 16, label %78
    i32 3, label %90
    i32 10, label %90
    i32 17, label %90
    i32 4, label %104
    i32 11, label %104
    i32 18, label %104
    i32 5, label %237
    i32 12, label %237
    i32 19, label %237
    i32 6, label %271
    i32 13, label %271
    i32 20, label %271
    i32 21, label %294
    i32 22, label %312
    i32 23, label %321
    i32 24, label %345
    i32 30, label %362
    i32 31, label %377
  ]

19:                                               ; preds = %3, %3, %3
  %20 = load ptr, ptr %7, align 8, !tbaa !5
  %21 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %20, i32 0, i32 8
  %22 = load i16, ptr %21, align 8, !tbaa !15
  %23 = zext i16 %22 to i32
  %24 = and i32 %23, 65280
  %25 = load i8, ptr %6, align 1, !tbaa !11
  %26 = zext i8 %25 to i32
  %27 = or i32 %24, %26
  %28 = trunc i32 %27 to i16
  %29 = load ptr, ptr %7, align 8, !tbaa !5
  %30 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %29, i32 0, i32 8
  store i16 %28, ptr %30, align 8, !tbaa !15
  %31 = load ptr, ptr %7, align 8, !tbaa !5
  %32 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %31, i32 0, i32 8
  %33 = load i16, ptr %32, align 8, !tbaa !15
  %34 = uitofp i16 %33 to double
  %35 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 2
  %36 = load i32, ptr %35, align 4, !tbaa !18
  %37 = uitofp i32 %36 to double
  %38 = fmul double %34, %37
  %39 = fmul double %38, 1.600000e+01
  %40 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 28
  %41 = load i32, ptr %40, align 8, !tbaa !19
  %42 = uitofp i32 %41 to double
  %43 = fdiv double %39, %42
  %44 = fadd double %43, 5.000000e-01
  %45 = fptoui double %44 to i32
  %46 = load ptr, ptr %7, align 8, !tbaa !5
  %47 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %46, i32 0, i32 6
  store i32 %45, ptr %47, align 8, !tbaa !20
  br label %377

48:                                               ; preds = %3, %3, %3
  %49 = load ptr, ptr %7, align 8, !tbaa !5
  %50 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %49, i32 0, i32 8
  %51 = load i16, ptr %50, align 8, !tbaa !15
  %52 = zext i16 %51 to i32
  %53 = and i32 %52, 255
  %54 = load i8, ptr %6, align 1, !tbaa !11
  %55 = zext i8 %54 to i32
  %56 = shl i32 %55, 8
  %57 = or i32 %53, %56
  %58 = trunc i32 %57 to i16
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %59, i32 0, i32 8
  store i16 %58, ptr %60, align 8, !tbaa !15
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  %62 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %61, i32 0, i32 8
  %63 = load i16, ptr %62, align 8, !tbaa !15
  %64 = uitofp i16 %63 to double
  %65 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 2
  %66 = load i32, ptr %65, align 4, !tbaa !18
  %67 = uitofp i32 %66 to double
  %68 = fmul double %64, %67
  %69 = fmul double %68, 1.600000e+01
  %70 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 28
  %71 = load i32, ptr %70, align 8, !tbaa !19
  %72 = uitofp i32 %71 to double
  %73 = fdiv double %69, %72
  %74 = fadd double %73, 5.000000e-01
  %75 = fptoui double %74 to i32
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  %77 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %76, i32 0, i32 6
  store i32 %75, ptr %77, align 8, !tbaa !20
  br label %377

78:                                               ; preds = %3, %3, %3
  %79 = load ptr, ptr %7, align 8, !tbaa !5
  %80 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %79, i32 0, i32 9
  %81 = load i16, ptr %80, align 2, !tbaa !21
  %82 = zext i16 %81 to i32
  %83 = and i32 %82, 3840
  %84 = load i8, ptr %6, align 1, !tbaa !11
  %85 = zext i8 %84 to i32
  %86 = or i32 %83, %85
  %87 = trunc i32 %86 to i16
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %88, i32 0, i32 9
  store i16 %87, ptr %89, align 2, !tbaa !21
  br label %377

90:                                               ; preds = %3, %3, %3
  %91 = load ptr, ptr %7, align 8, !tbaa !5
  %92 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %91, i32 0, i32 9
  %93 = load i16, ptr %92, align 2, !tbaa !21
  %94 = zext i16 %93 to i32
  %95 = and i32 %94, 255
  %96 = load i8, ptr %6, align 1, !tbaa !11
  %97 = zext i8 %96 to i32
  %98 = and i32 %97, 15
  %99 = shl i32 %98, 8
  %100 = or i32 %95, %99
  %101 = trunc i32 %100 to i16
  %102 = load ptr, ptr %7, align 8, !tbaa !5
  %103 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %102, i32 0, i32 9
  store i16 %101, ptr %103, align 2, !tbaa !21
  br label %377

104:                                              ; preds = %3, %3, %3
  %105 = load i8, ptr %6, align 1, !tbaa !11
  %106 = zext i8 %105 to i32
  %107 = and i32 %106, 1
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %108, i32 0, i32 18
  %110 = load i32, ptr %109, align 4, !tbaa !22
  %111 = trunc i32 %110 to i8
  %112 = zext i8 %111 to i32
  %113 = icmp ne i32 %107, %112
  br i1 %113, label %114, label %141

114:                                              ; preds = %104
  %115 = load i8, ptr %6, align 1, !tbaa !11
  %116 = zext i8 %115 to i32
  %117 = and i32 %116, 1
  %118 = icmp ne i32 %117, 0
  br i1 %118, label %119, label %127

119:                                              ; preds = %114
  %120 = load ptr, ptr %7, align 8, !tbaa !5
  %121 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %120, i32 0, i32 1
  store i32 1, ptr %121, align 4, !tbaa !23
  %122 = load ptr, ptr %7, align 8, !tbaa !5
  %123 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %122, i32 0, i32 10
  %124 = load i32, ptr %123, align 4, !tbaa !24
  %125 = load ptr, ptr %7, align 8, !tbaa !5
  %126 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %125, i32 0, i32 17
  store i32 %124, ptr %126, align 8, !tbaa !25
  br label %135

127:                                              ; preds = %114
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %128, i32 0, i32 1
  store i32 3, ptr %129, align 4, !tbaa !23
  %130 = load ptr, ptr %7, align 8, !tbaa !5
  %131 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %130, i32 0, i32 13
  %132 = load i32, ptr %131, align 8, !tbaa !26
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %133, i32 0, i32 17
  store i32 %132, ptr %134, align 8, !tbaa !25
  br label %135

135:                                              ; preds = %127, %119
  %136 = load i8, ptr %6, align 1, !tbaa !11
  %137 = zext i8 %136 to i32
  %138 = and i32 %137, 1
  %139 = load ptr, ptr %7, align 8, !tbaa !5
  %140 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %139, i32 0, i32 18
  store i32 %138, ptr %140, align 4, !tbaa !22
  br label %141

141:                                              ; preds = %135, %104
  %142 = load i8, ptr %6, align 1, !tbaa !11
  %143 = zext i8 %142 to i32
  %144 = and i32 %143, 2
  %145 = load ptr, ptr %7, align 8, !tbaa !5
  %146 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %145, i32 0, i32 2
  %147 = load ptr, ptr %146, align 8, !tbaa !27
  %148 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %147, i32 0, i32 24
  store i32 %144, ptr %148, align 4, !tbaa !28
  %149 = load i8, ptr %6, align 1, !tbaa !11
  %150 = zext i8 %149 to i32
  %151 = and i32 %150, 4
  %152 = load ptr, ptr %7, align 8, !tbaa !5
  %153 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %152, i32 0, i32 19
  store i32 %151, ptr %153, align 8, !tbaa !29
  %154 = load i8, ptr %6, align 1, !tbaa !11
  %155 = zext i8 %154 to i32
  %156 = and i32 %155, 8
  %157 = icmp ne i32 %156, 0
  br i1 %157, label %158, label %183

158:                                              ; preds = %141
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  %160 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %159, i32 0, i32 20
  %161 = load i32, ptr %160, align 4, !tbaa !30
  %162 = icmp ne i32 %161, 0
  br i1 %162, label %183, label %163

163:                                              ; preds = %158
  %164 = load ptr, ptr %7, align 8, !tbaa !5
  %165 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %164, i32 0, i32 4
  store i32 0, ptr %165, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  %166 = load ptr, ptr %7, align 8, !tbaa !5
  %167 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %166, i32 0, i32 7
  %168 = load i32, ptr %167, align 4, !tbaa !32
  %169 = lshr i32 %168, 19
  %170 = and i32 %169, 1
  store i32 %170, ptr %8, align 4, !tbaa !9
  %171 = load ptr, ptr %7, align 8, !tbaa !5
  %172 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %171, i32 0, i32 7
  %173 = load i32, ptr %172, align 4, !tbaa !32
  %174 = and i32 %173, 8388605
  %175 = load i32, ptr %8, align 4, !tbaa !9
  %176 = xor i32 %175, 1
  %177 = shl i32 %176, 1
  %178 = or i32 %174, %177
  %179 = load ptr, ptr %7, align 8, !tbaa !5
  %180 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %179, i32 0, i32 7
  store i32 %178, ptr %180, align 4, !tbaa !32
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %181, i32 0, i32 20
  store i32 4095, ptr %182, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  br label %220

183:                                              ; preds = %158, %141
  %184 = load ptr, ptr %7, align 8, !tbaa !5
  %185 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %184, i32 0, i32 20
  %186 = load i32, ptr %185, align 4, !tbaa !30
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %219

188:                                              ; preds = %183
  %189 = load i8, ptr %6, align 1, !tbaa !11
  %190 = zext i8 %189 to i32
  %191 = and i32 %190, 8
  %192 = icmp ne i32 %191, 0
  br i1 %192, label %219, label %193

193:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %194 = load ptr, ptr %7, align 8, !tbaa !5
  %195 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %194, i32 0, i32 7
  %196 = load i32, ptr %195, align 4, !tbaa !32
  %197 = lshr i32 %196, 22
  %198 = load ptr, ptr %7, align 8, !tbaa !5
  %199 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %198, i32 0, i32 7
  %200 = load i32, ptr %199, align 4, !tbaa !32
  %201 = lshr i32 %200, 17
  %202 = xor i32 %197, %201
  %203 = and i32 %202, 1
  store i32 %203, ptr %9, align 4, !tbaa !9
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %204, i32 0, i32 7
  %206 = load i32, ptr %205, align 4, !tbaa !32
  %207 = shl i32 %206, 1
  store i32 %207, ptr %205, align 4, !tbaa !32
  %208 = load ptr, ptr %7, align 8, !tbaa !5
  %209 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %208, i32 0, i32 7
  %210 = load i32, ptr %209, align 4, !tbaa !32
  %211 = and i32 %210, 8388607
  store i32 %211, ptr %209, align 4, !tbaa !32
  %212 = load i32, ptr %9, align 4, !tbaa !9
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %213, i32 0, i32 7
  %215 = load i32, ptr %214, align 4, !tbaa !32
  %216 = or i32 %215, %212
  store i32 %216, ptr %214, align 4, !tbaa !32
  %217 = load ptr, ptr %7, align 8, !tbaa !5
  %218 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %217, i32 0, i32 20
  store i32 0, ptr %218, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  br label %219

219:                                              ; preds = %193, %188, %183
  br label %220

220:                                              ; preds = %219, %163
  %221 = load i8, ptr %6, align 1, !tbaa !11
  %222 = zext i8 %221 to i32
  %223 = ashr i32 %222, 4
  %224 = and i32 %223, 15
  %225 = load ptr, ptr %7, align 8, !tbaa !5
  %226 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %225, i32 0, i32 0
  store i32 %224, ptr %226, align 8, !tbaa !33
  %227 = load ptr, ptr %7, align 8, !tbaa !5
  %228 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %227, i32 0, i32 0
  %229 = load i32, ptr %228, align 8, !tbaa !33
  %230 = icmp sgt i32 %229, 8
  br i1 %230, label %231, label %236

231:                                              ; preds = %220
  %232 = load ptr, ptr %7, align 8, !tbaa !5
  %233 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %232, i32 0, i32 7
  %234 = load i32, ptr %233, align 4, !tbaa !32
  %235 = and i32 %234, 3069803
  store i32 %235, ptr %233, align 4, !tbaa !32
  br label %236

236:                                              ; preds = %231, %220
  br label %377

237:                                              ; preds = %3, %3, %3
  %238 = load i8, ptr %6, align 1, !tbaa !11
  %239 = zext i8 %238 to i32
  %240 = ashr i32 %239, 4
  %241 = load ptr, ptr %7, align 8, !tbaa !5
  %242 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %241, i32 0, i32 10
  store i32 %240, ptr %242, align 4, !tbaa !24
  %243 = load i8, ptr %6, align 1, !tbaa !11
  %244 = zext i8 %243 to i32
  %245 = and i32 %244, 15
  %246 = load ptr, ptr %7, align 8, !tbaa !5
  %247 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %246, i32 0, i32 11
  store i32 %245, ptr %247, align 8, !tbaa !34
  %248 = load ptr, ptr %7, align 8, !tbaa !5
  %249 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %248, i32 0, i32 1
  %250 = load i32, ptr %249, align 4, !tbaa !23
  %251 = icmp eq i32 %250, 1
  br i1 %251, label %252, label %258

252:                                              ; preds = %237
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %253, i32 0, i32 10
  %255 = load i32, ptr %254, align 4, !tbaa !24
  %256 = load ptr, ptr %7, align 8, !tbaa !5
  %257 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %256, i32 0, i32 17
  store i32 %255, ptr %257, align 8, !tbaa !25
  br label %270

258:                                              ; preds = %237
  %259 = load ptr, ptr %7, align 8, !tbaa !5
  %260 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %259, i32 0, i32 1
  %261 = load i32, ptr %260, align 4, !tbaa !23
  %262 = icmp eq i32 %261, 2
  br i1 %262, label %263, label %269

263:                                              ; preds = %258
  %264 = load ptr, ptr %7, align 8, !tbaa !5
  %265 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %264, i32 0, i32 11
  %266 = load i32, ptr %265, align 8, !tbaa !34
  %267 = load ptr, ptr %7, align 8, !tbaa !5
  %268 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %267, i32 0, i32 17
  store i32 %266, ptr %268, align 8, !tbaa !25
  br label %269

269:                                              ; preds = %263, %258
  br label %270

270:                                              ; preds = %269, %252
  br label %377

271:                                              ; preds = %3, %3, %3
  %272 = load i8, ptr %6, align 1, !tbaa !11
  %273 = zext i8 %272 to i32
  %274 = ashr i32 %273, 4
  %275 = mul nsw i32 %274, 17
  %276 = load ptr, ptr %7, align 8, !tbaa !5
  %277 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %276, i32 0, i32 12
  store i32 %275, ptr %277, align 4, !tbaa !35
  %278 = load i8, ptr %6, align 1, !tbaa !11
  %279 = zext i8 %278 to i32
  %280 = and i32 %279, 15
  %281 = load ptr, ptr %7, align 8, !tbaa !5
  %282 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %281, i32 0, i32 13
  store i32 %280, ptr %282, align 8, !tbaa !26
  %283 = load ptr, ptr %7, align 8, !tbaa !5
  %284 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %283, i32 0, i32 1
  %285 = load i32, ptr %284, align 4, !tbaa !23
  %286 = icmp eq i32 %285, 3
  br i1 %286, label %287, label %293

287:                                              ; preds = %271
  %288 = load ptr, ptr %7, align 8, !tbaa !5
  %289 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %288, i32 0, i32 13
  %290 = load i32, ptr %289, align 8, !tbaa !26
  %291 = load ptr, ptr %7, align 8, !tbaa !5
  %292 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %291, i32 0, i32 17
  store i32 %290, ptr %292, align 8, !tbaa !25
  br label %293

293:                                              ; preds = %287, %271
  br label %377

294:                                              ; preds = %3
  %295 = load i8, ptr %6, align 1, !tbaa !11
  %296 = zext i8 %295 to i32
  %297 = and i32 %296, 7
  %298 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 14
  %299 = load i32, ptr %298, align 4, !tbaa !36
  %300 = and i32 %299, 7
  %301 = icmp ne i32 %297, %300
  br i1 %301, label %302, label %311

302:                                              ; preds = %294
  %303 = load i8, ptr %6, align 1, !tbaa !11
  %304 = zext i8 %303 to i32
  %305 = and i32 %304, 7
  %306 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 14
  %307 = load i32, ptr %306, align 4, !tbaa !36
  %308 = and i32 %307, 2040
  %309 = or i32 %305, %308
  %310 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 14
  store i32 %309, ptr %310, align 4, !tbaa !36
  call void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796) %10)
  br label %311

311:                                              ; preds = %302, %294
  br label %377

312:                                              ; preds = %3
  %313 = load i8, ptr %6, align 1, !tbaa !11
  %314 = zext i8 %313 to i32
  %315 = shl i32 %314, 3
  %316 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 14
  %317 = load i32, ptr %316, align 4, !tbaa !36
  %318 = and i32 %317, 7
  %319 = or i32 %315, %318
  %320 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 14
  store i32 %319, ptr %320, align 4, !tbaa !36
  call void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796) %10)
  br label %377

321:                                              ; preds = %3
  %322 = load i8, ptr %6, align 1, !tbaa !11
  %323 = zext i8 %322 to i32
  %324 = and i32 %323, 1
  %325 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 11
  %326 = getelementptr inbounds [3 x %"class.SIDsound::SIDVoice"], ptr %325, i64 0, i64 0
  %327 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %326, i32 0, i32 21
  store i32 %324, ptr %327, align 8, !tbaa !37
  %328 = load i8, ptr %6, align 1, !tbaa !11
  %329 = zext i8 %328 to i32
  %330 = and i32 %329, 2
  %331 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 11
  %332 = getelementptr inbounds [3 x %"class.SIDsound::SIDVoice"], ptr %331, i64 0, i64 1
  %333 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %332, i32 0, i32 21
  store i32 %330, ptr %333, align 8, !tbaa !37
  %334 = load i8, ptr %6, align 1, !tbaa !11
  %335 = zext i8 %334 to i32
  %336 = and i32 %335, 4
  %337 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 11
  %338 = getelementptr inbounds [3 x %"class.SIDsound::SIDVoice"], ptr %337, i64 0, i64 2
  %339 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %338, i32 0, i32 21
  store i32 %336, ptr %339, align 8, !tbaa !37
  %340 = load i8, ptr %6, align 1, !tbaa !11
  %341 = zext i8 %340 to i32
  %342 = ashr i32 %341, 4
  %343 = trunc i32 %342 to i8
  %344 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 15
  store i8 %343, ptr %344, align 8, !tbaa !38
  call void @_ZN8SIDsound12setResonanceEv(ptr noundef nonnull align 8 dereferenceable(16796) %10)
  br label %377

345:                                              ; preds = %3
  %346 = load i8, ptr %6, align 1, !tbaa !11
  %347 = zext i8 %346 to i32
  %348 = and i32 %347, 15
  %349 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 1
  store i32 %348, ptr %349, align 8, !tbaa !39
  %350 = load i8, ptr %6, align 1, !tbaa !11
  %351 = zext i8 %350 to i32
  %352 = and i32 %351, 128
  %353 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 11
  %354 = getelementptr inbounds [3 x %"class.SIDsound::SIDVoice"], ptr %353, i64 0, i64 2
  %355 = getelementptr inbounds %"class.SIDsound::SIDVoice", ptr %354, i32 0, i32 22
  store i32 %352, ptr %355, align 4, !tbaa !40
  %356 = load i8, ptr %6, align 1, !tbaa !11
  %357 = zext i8 %356 to i32
  %358 = ashr i32 %357, 4
  %359 = and i32 %358, 7
  %360 = trunc i32 %359 to i8
  %361 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 12
  store i8 %360, ptr %361, align 8, !tbaa !41
  br label %377

362:                                              ; preds = %3
  %363 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 26
  %364 = load i8, ptr %363, align 4, !tbaa !42, !range !43, !noundef !44
  %365 = trunc i8 %364 to i1
  br i1 %365, label %366, label %376

366:                                              ; preds = %362
  %367 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 25
  %368 = load i32, ptr %367, align 8, !tbaa !45
  %369 = icmp eq i32 %368, 1
  br i1 %369, label %370, label %376

370:                                              ; preds = %366
  %371 = load i8, ptr %6, align 1, !tbaa !11
  %372 = zext i8 %371 to i32
  %373 = xor i32 %372, 0
  %374 = shl i32 %373, 14
  %375 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 8
  store i32 %374, ptr %375, align 4, !tbaa !46
  br label %376

376:                                              ; preds = %370, %366, %362
  br label %377

377:                                              ; preds = %376, %345, %321, %312, %311, %293, %270, %236, %90, %78, %48, %19, %3, %3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !7, i64 16780}
!13 = !{!"_ZTS8SIDsound", !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, !7, i64 48, !7, i64 360, !10, i64 364, !7, i64 368, !7, i64 376, !10, i64 16760, !10, i64 16764, !10, i64 16768, !10, i64 16772, !10, i64 16776, !7, i64 16780, !10, i64 16784, !14, i64 16788, !10, i64 16792}
!14 = !{!"bool", !7, i64 0}
!15 = !{!16, !17, i64 40}
!16 = !{!"_ZTSN8SIDsound8SIDVoiceE", !10, i64 0, !10, i64 4, !6, i64 8, !6, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !17, i64 40, !17, i64 42, !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, !14, i64 96, !10, i64 100}
!17 = !{!"short", !7, i64 0}
!18 = !{!13, !10, i64 12}
!19 = !{!13, !10, i64 16792}
!20 = !{!16, !10, i64 32}
!21 = !{!16, !17, i64 42}
!22 = !{!16, !10, i64 76}
!23 = !{!16, !10, i64 4}
!24 = !{!16, !10, i64 44}
!25 = !{!16, !10, i64 72}
!26 = !{!16, !10, i64 56}
!27 = !{!16, !6, i64 8}
!28 = !{!16, !10, i64 100}
!29 = !{!16, !10, i64 80}
!30 = !{!16, !10, i64 84}
!31 = !{!16, !10, i64 24}
!32 = !{!16, !10, i64 36}
!33 = !{!16, !10, i64 0}
!34 = !{!16, !10, i64 48}
!35 = !{!16, !10, i64 52}
!36 = !{!13, !10, i64 364}
!37 = !{!16, !10, i64 88}
!38 = !{!13, !7, i64 368}
!39 = !{!13, !10, i64 8}
!40 = !{!16, !10, i64 92}
!41 = !{!13, !7, i64 360}
!42 = !{!13, !14, i64 16788}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{!13, !10, i64 16784}
!46 = !{!13, !10, i64 36}


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

%"class.SIDsound::SIDVoice" = type { i32, i32, ptr, ptr, i32, i32, i32, i32, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32 }

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8SIDsound12setResonanceEv(ptr noundef nonnull align 8 dereferenceable(16796)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN8SIDsound5writeEjh(ptr noundef nonnull align 8 dereferenceable(16796) %0, i32 noundef %1, i8 noundef zeroext %2) local_unnamed_addr #1 align 2 {
  %4 = getelementptr inbounds i8, ptr %0, i64 16780
  store i8 %2, ptr %4, align 4, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 48
  %6 = udiv i32 %1, 7
  %7 = zext nneg i32 %6 to i64
  %8 = getelementptr inbounds [3 x %"class.SIDsound::SIDVoice"], ptr %5, i64 0, i64 %7
  switch i32 %1, label %179 [
    i32 0, label %9
    i32 7, label %9
    i32 14, label %9
    i32 1, label %28
    i32 8, label %28
    i32 15, label %28
    i32 2, label %48
    i32 9, label %48
    i32 16, label %48
    i32 3, label %54
    i32 10, label %54
    i32 17, label %54
    i32 4, label %62
    i32 11, label %62
    i32 18, label %62
    i32 5, label %109
    i32 12, label %109
    i32 19, label %109
    i32 6, label %121
    i32 13, label %121
    i32 20, label %121
    i32 21, label %133
    i32 22, label %142
    i32 23, label %149
    i32 24, label %159
    i32 30, label %168
  ]

9:                                                ; preds = %3, %3, %3
  %10 = getelementptr inbounds i8, ptr %8, i64 40
  %11 = load i16, ptr %10, align 8, !tbaa !11
  %12 = and i16 %11, -256
  %13 = zext i8 %2 to i16
  %14 = or disjoint i16 %12, %13
  store i16 %14, ptr %10, align 8, !tbaa !11
  %15 = uitofp i16 %14 to double
  %16 = getelementptr inbounds i8, ptr %0, i64 12
  %17 = load i32, ptr %16, align 4, !tbaa !15
  %18 = uitofp i32 %17 to double
  %19 = fmul double %15, %18
  %20 = fmul double %19, 1.600000e+01
  %21 = getelementptr inbounds i8, ptr %0, i64 16792
  %22 = load i32, ptr %21, align 8, !tbaa !16
  %23 = uitofp i32 %22 to double
  %24 = fdiv double %20, %23
  %25 = fadd double %24, 5.000000e-01
  %26 = fptoui double %25 to i32
  %27 = getelementptr inbounds i8, ptr %8, i64 32
  store i32 %26, ptr %27, align 8, !tbaa !17
  br label %179

28:                                               ; preds = %3, %3, %3
  %29 = getelementptr inbounds i8, ptr %8, i64 40
  %30 = load i16, ptr %29, align 8, !tbaa !11
  %31 = and i16 %30, 255
  %32 = zext i8 %2 to i16
  %33 = shl nuw i16 %32, 8
  %34 = or disjoint i16 %31, %33
  store i16 %34, ptr %29, align 8, !tbaa !11
  %35 = uitofp i16 %34 to double
  %36 = getelementptr inbounds i8, ptr %0, i64 12
  %37 = load i32, ptr %36, align 4, !tbaa !15
  %38 = uitofp i32 %37 to double
  %39 = fmul double %35, %38
  %40 = fmul double %39, 1.600000e+01
  %41 = getelementptr inbounds i8, ptr %0, i64 16792
  %42 = load i32, ptr %41, align 8, !tbaa !16
  %43 = uitofp i32 %42 to double
  %44 = fdiv double %40, %43
  %45 = fadd double %44, 5.000000e-01
  %46 = fptoui double %45 to i32
  %47 = getelementptr inbounds i8, ptr %8, i64 32
  store i32 %46, ptr %47, align 8, !tbaa !17
  br label %179

48:                                               ; preds = %3, %3, %3
  %49 = getelementptr inbounds i8, ptr %8, i64 42
  %50 = load i16, ptr %49, align 2, !tbaa !18
  %51 = and i16 %50, 3840
  %52 = zext i8 %2 to i16
  %53 = or disjoint i16 %51, %52
  store i16 %53, ptr %49, align 2, !tbaa !18
  br label %179

54:                                               ; preds = %3, %3, %3
  %55 = getelementptr inbounds i8, ptr %8, i64 42
  %56 = load i16, ptr %55, align 2, !tbaa !18
  %57 = and i16 %56, 255
  %58 = and i8 %2, 15
  %59 = zext nneg i8 %58 to i16
  %60 = shl nuw nsw i16 %59, 8
  %61 = or disjoint i16 %57, %60
  store i16 %61, ptr %55, align 2, !tbaa !18
  br label %179

62:                                               ; preds = %3, %3, %3
  %63 = zext i8 %2 to i32
  %64 = and i32 %63, 1
  %65 = getelementptr inbounds i8, ptr %8, i64 76
  %66 = load i32, ptr %65, align 4, !tbaa !19
  %67 = and i32 %66, 255
  %.not85 = icmp eq i32 %64, %67
  br i1 %.not85, label %72, label %68

68:                                               ; preds = %62
  %.not86 = icmp eq i32 %64, 0
  %. = select i1 %.not86, i64 56, i64 44
  %.98 = select i1 %.not86, i32 3, i32 1
  %69 = getelementptr inbounds i8, ptr %8, i64 %.
  %.sink = load i32, ptr %69, align 4, !tbaa !20
  %70 = getelementptr inbounds i8, ptr %8, i64 4
  store i32 %.98, ptr %70, align 4
  %71 = getelementptr inbounds i8, ptr %8, i64 72
  store i32 %.sink, ptr %71, align 8
  store i32 %64, ptr %65, align 4, !tbaa !19
  br label %72

72:                                               ; preds = %68, %62
  %73 = and i32 %63, 2
  %74 = getelementptr inbounds i8, ptr %8, i64 8
  %75 = load ptr, ptr %74, align 8, !tbaa !21
  %76 = getelementptr inbounds i8, ptr %75, i64 100
  store i32 %73, ptr %76, align 4, !tbaa !22
  %77 = and i32 %63, 4
  %78 = getelementptr inbounds i8, ptr %8, i64 80
  store i32 %77, ptr %78, align 8, !tbaa !23
  %79 = and i32 %63, 8
  %.not87.not = icmp eq i32 %79, 0
  %80 = getelementptr inbounds i8, ptr %8, i64 84
  %81 = load i32, ptr %80, align 4, !tbaa !24
  %.not89 = icmp eq i32 %81, 0
  br i1 %.not87.not, label %92, label %82

82:                                               ; preds = %72
  br i1 %.not89, label %83, label %.thread

83:                                               ; preds = %82
  %84 = getelementptr inbounds i8, ptr %8, i64 24
  store i32 0, ptr %84, align 8, !tbaa !25
  %85 = getelementptr inbounds i8, ptr %8, i64 36
  %86 = load i32, ptr %85, align 4, !tbaa !26
  %87 = and i32 %86, 8388605
  %88 = lshr i32 %86, 18
  %89 = and i32 %88, 2
  %90 = or disjoint i32 %89, %87
  %91 = xor i32 %90, 2
  store i32 %91, ptr %85, align 4, !tbaa !26
  br label %.thread.sink.split

92:                                               ; preds = %72
  br i1 %.not89, label %.thread, label %93

93:                                               ; preds = %92
  %94 = getelementptr inbounds i8, ptr %8, i64 36
  %95 = load i32, ptr %94, align 4, !tbaa !26
  %96 = lshr i32 %95, 22
  %97 = lshr i32 %95, 17
  %98 = xor i32 %96, %97
  %99 = and i32 %98, 1
  %100 = shl i32 %95, 1
  %101 = and i32 %100, 8388606
  %102 = or disjoint i32 %99, %101
  store i32 %102, ptr %94, align 4, !tbaa !26
  br label %.thread.sink.split

.thread.sink.split:                               ; preds = %83, %93
  %.sink97 = phi i32 [ 0, %93 ], [ 4095, %83 ]
  store i32 %.sink97, ptr %80, align 4, !tbaa !24
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %82, %92
  %103 = lshr i32 %63, 4
  store i32 %103, ptr %8, align 8, !tbaa !27
  %104 = icmp ugt i8 %2, -113
  br i1 %104, label %105, label %179

105:                                              ; preds = %.thread
  %106 = getelementptr inbounds i8, ptr %8, i64 36
  %107 = load i32, ptr %106, align 4, !tbaa !26
  %108 = and i32 %107, 3069803
  store i32 %108, ptr %106, align 4, !tbaa !26
  br label %179

109:                                              ; preds = %3, %3, %3
  %110 = zext i8 %2 to i32
  %111 = lshr i32 %110, 4
  %112 = getelementptr inbounds i8, ptr %8, i64 44
  store i32 %111, ptr %112, align 4, !tbaa !28
  %113 = and i32 %110, 15
  %114 = getelementptr inbounds i8, ptr %8, i64 48
  store i32 %113, ptr %114, align 8, !tbaa !29
  %115 = getelementptr inbounds i8, ptr %8, i64 4
  %116 = load i32, ptr %115, align 4, !tbaa !30
  switch i32 %116, label %179 [
    i32 1, label %117
    i32 2, label %119
  ]

117:                                              ; preds = %109
  %118 = getelementptr inbounds i8, ptr %8, i64 72
  store i32 %111, ptr %118, align 8, !tbaa !31
  br label %179

119:                                              ; preds = %109
  %120 = getelementptr inbounds i8, ptr %8, i64 72
  store i32 %113, ptr %120, align 8, !tbaa !31
  br label %179

121:                                              ; preds = %3, %3, %3
  %122 = zext i8 %2 to i32
  %123 = lshr i32 %122, 4
  %124 = mul nuw nsw i32 %123, 17
  %125 = getelementptr inbounds i8, ptr %8, i64 52
  store i32 %124, ptr %125, align 4, !tbaa !32
  %126 = and i32 %122, 15
  %127 = getelementptr inbounds i8, ptr %8, i64 56
  store i32 %126, ptr %127, align 8, !tbaa !33
  %128 = getelementptr inbounds i8, ptr %8, i64 4
  %129 = load i32, ptr %128, align 4, !tbaa !30
  %130 = icmp eq i32 %129, 3
  br i1 %130, label %131, label %179

131:                                              ; preds = %121
  %132 = getelementptr inbounds i8, ptr %8, i64 72
  store i32 %126, ptr %132, align 8, !tbaa !31
  br label %179

133:                                              ; preds = %3
  %134 = and i8 %2, 7
  %135 = zext nneg i8 %134 to i32
  %136 = getelementptr inbounds i8, ptr %0, i64 364
  %137 = load i32, ptr %136, align 4, !tbaa !34
  %138 = and i32 %137, 7
  %.not = icmp eq i32 %138, %135
  br i1 %.not, label %179, label %139

139:                                              ; preds = %133
  %140 = and i32 %137, 2040
  %141 = or disjoint i32 %140, %135
  store i32 %141, ptr %136, align 4, !tbaa !34
  tail call void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796) %0)
  br label %179

142:                                              ; preds = %3
  %143 = zext i8 %2 to i32
  %144 = shl nuw nsw i32 %143, 3
  %145 = getelementptr inbounds i8, ptr %0, i64 364
  %146 = load i32, ptr %145, align 4, !tbaa !34
  %147 = and i32 %146, 7
  %148 = or disjoint i32 %147, %144
  store i32 %148, ptr %145, align 4, !tbaa !34
  tail call void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796) %0)
  br label %179

149:                                              ; preds = %3
  %150 = zext i8 %2 to i32
  %151 = and i32 %150, 1
  %152 = getelementptr inbounds i8, ptr %0, i64 136
  store i32 %151, ptr %152, align 8, !tbaa !35
  %153 = and i32 %150, 2
  %154 = getelementptr inbounds i8, ptr %0, i64 240
  store i32 %153, ptr %154, align 8, !tbaa !35
  %155 = and i32 %150, 4
  %156 = getelementptr inbounds i8, ptr %0, i64 344
  store i32 %155, ptr %156, align 8, !tbaa !35
  %157 = lshr i8 %2, 4
  %158 = getelementptr inbounds i8, ptr %0, i64 368
  store i8 %157, ptr %158, align 8, !tbaa !36
  tail call void @_ZN8SIDsound12setResonanceEv(ptr noundef nonnull align 8 dereferenceable(16796) %0)
  br label %179

159:                                              ; preds = %3
  %160 = zext i8 %2 to i32
  %161 = and i32 %160, 15
  %162 = getelementptr inbounds i8, ptr %0, i64 8
  store i32 %161, ptr %162, align 8, !tbaa !37
  %163 = and i32 %160, 128
  %164 = getelementptr inbounds i8, ptr %0, i64 348
  store i32 %163, ptr %164, align 4, !tbaa !38
  %165 = lshr i8 %2, 4
  %166 = and i8 %165, 7
  %167 = getelementptr inbounds i8, ptr %0, i64 360
  store i8 %166, ptr %167, align 8, !tbaa !39
  br label %179

168:                                              ; preds = %3
  %169 = getelementptr inbounds i8, ptr %0, i64 16788
  %170 = load i8, ptr %169, align 4, !tbaa !40, !range !41, !noundef !42
  %171 = trunc nuw i8 %170 to i1
  %172 = getelementptr inbounds i8, ptr %0, i64 16784
  %173 = load i32, ptr %172, align 8
  %174 = icmp eq i32 %173, 1
  %or.cond = select i1 %171, i1 %174, i1 false
  br i1 %or.cond, label %175, label %179

175:                                              ; preds = %168
  %176 = zext i8 %2 to i32
  %177 = shl nuw nsw i32 %176, 14
  %178 = getelementptr inbounds i8, ptr %0, i64 36
  store i32 %177, ptr %178, align 4, !tbaa !43
  br label %179

179:                                              ; preds = %109, %168, %175, %133, %139, %121, %131, %117, %119, %.thread, %105, %159, %149, %142, %54, %48, %28, %9, %3
  ret void
}

attributes #0 = { inlinehint mustprogress 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 = { mustprogress 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, !8, i64 16780}
!6 = !{!"_ZTS8SIDsound", !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !8, i64 48, !8, i64 360, !7, i64 364, !8, i64 368, !8, i64 376, !7, i64 16760, !7, i64 16764, !7, i64 16768, !7, i64 16772, !7, i64 16776, !8, i64 16780, !7, i64 16784, !10, i64 16788, !7, i64 16792}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!12, !14, i64 40}
!12 = !{!"_ZTSN8SIDsound8SIDVoiceE", !7, i64 0, !7, i64 4, !13, i64 8, !13, i64 16, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !14, i64 40, !14, i64 42, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !10, i64 96, !7, i64 100}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"short", !8, i64 0}
!15 = !{!6, !7, i64 12}
!16 = !{!6, !7, i64 16792}
!17 = !{!12, !7, i64 32}
!18 = !{!12, !14, i64 42}
!19 = !{!12, !7, i64 76}
!20 = !{!7, !7, i64 0}
!21 = !{!12, !13, i64 8}
!22 = !{!12, !7, i64 100}
!23 = !{!12, !7, i64 80}
!24 = !{!12, !7, i64 84}
!25 = !{!12, !7, i64 24}
!26 = !{!12, !7, i64 36}
!27 = !{!12, !7, i64 0}
!28 = !{!12, !7, i64 44}
!29 = !{!12, !7, i64 48}
!30 = !{!12, !7, i64 4}
!31 = !{!12, !7, i64 72}
!32 = !{!12, !7, i64 52}
!33 = !{!12, !7, i64 56}
!34 = !{!6, !7, i64 364}
!35 = !{!12, !7, i64 88}
!36 = !{!6, !8, i64 368}
!37 = !{!6, !7, i64 8}
!38 = !{!12, !7, i64 92}
!39 = !{!6, !8, i64 360}
!40 = !{!6, !10, i64 16788}
!41 = !{i8 0, i8 2}
!42 = !{}
!43 = !{!6, !7, i64 36}


; Effective O3 passes: ConstraintEliminationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass