; LLVM IR from Farama-Foundation/stable-retro :: cores/32x/pico/sound (sn76496)

; 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.SN76496 = type { i32, i32, [16 x i32], [8 x i32], i32, [4 x i32], i32, i32, [4 x i32], [4 x i32], [4 x i32], [1 x i32] }

@ono_sn = external hidden global %struct.SN76496, align 4

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

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

; Function Attrs: nounwind uwtable
define dso_local void @SN76496Update(ptr noundef %0, i32 noundef %1, i32 noundef %2) #1 {
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca [4 x i32], align 16
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #2
  store ptr @ono_sn, ptr %8, align 8, !tbaa !5
  br label %13

13:                                               ; preds = %364, %3
  %14 = load i32, ptr %5, align 4, !tbaa !9
  %15 = icmp sgt i32 %14, 0
  br i1 %15, label %16, label %367

16:                                               ; preds = %13
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  %17 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 3
  store i32 0, ptr %17, align 4, !tbaa !9
  %18 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 2
  store i32 0, ptr %18, align 8, !tbaa !9
  %19 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 1
  store i32 0, ptr %19, align 4, !tbaa !9
  %20 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 0
  store i32 0, ptr %20, align 16, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %21

21:                                               ; preds = %194, %16
  %22 = load i32, ptr %7, align 4, !tbaa !9
  %23 = icmp slt i32 %22, 3
  br i1 %23, label %24, label %197

24:                                               ; preds = %21
  %25 = load ptr, ptr %8, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.SN76496, ptr %25, i32 0, i32 10
  %27 = load i32, ptr %7, align 4, !tbaa !9
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds [4 x i32], ptr %26, i64 0, i64 %28
  %30 = load i32, ptr %29, align 4, !tbaa !9
  %31 = icmp ne i32 %30, 0
  br i1 %31, label %32, label %44

32:                                               ; preds = %24
  %33 = load ptr, ptr %8, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.SN76496, ptr %33, i32 0, i32 9
  %35 = load i32, ptr %7, align 4, !tbaa !9
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [4 x i32], ptr %34, i64 0, i64 %36
  %38 = load i32, ptr %37, align 4, !tbaa !9
  %39 = load i32, ptr %7, align 4, !tbaa !9
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 %40
  %42 = load i32, ptr %41, align 4, !tbaa !9
  %43 = add nsw i32 %42, %38
  store i32 %43, ptr %41, align 4, !tbaa !9
  br label %44

44:                                               ; preds = %32, %24
  %45 = load ptr, ptr %8, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.SN76496, ptr %45, i32 0, i32 9
  %47 = load i32, ptr %7, align 4, !tbaa !9
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds [4 x i32], ptr %46, i64 0, i64 %48
  %50 = load i32, ptr %49, align 4, !tbaa !9
  %51 = sub nsw i32 %50, 65536
  store i32 %51, ptr %49, align 4, !tbaa !9
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.SN76496, ptr %52, i32 0, i32 9
  %54 = load i32, ptr %7, align 4, !tbaa !9
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds [4 x i32], ptr %53, i64 0, i64 %55
  %57 = load i32, ptr %56, align 4, !tbaa !9
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.SN76496, ptr %58, i32 0, i32 8
  %60 = load i32, ptr %7, align 4, !tbaa !9
  %61 = sext i32 %60 to i64
  %62 = getelementptr inbounds [4 x i32], ptr %59, i64 0, i64 %61
  %63 = load i32, ptr %62, align 4, !tbaa !9
  %64 = mul nsw i32 -2, %63
  %65 = icmp slt i32 %57, %64
  br i1 %65, label %74, label %66

66:                                               ; preds = %44
  %67 = load ptr, ptr %8, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.SN76496, ptr %67, i32 0, i32 5
  %69 = load i32, ptr %7, align 4, !tbaa !9
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds [4 x i32], ptr %68, i64 0, i64 %70
  %72 = load i32, ptr %71, align 4, !tbaa !9
  %73 = icmp eq i32 %72, 0
  br i1 %73, label %74, label %90

74:                                               ; preds = %66, %44
  %75 = load i32, ptr %7, align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 %76
  %78 = load i32, ptr %77, align 4, !tbaa !9
  %79 = add nsw i32 %78, 32768
  store i32 %79, ptr %77, align 4, !tbaa !9
  %80 = load ptr, ptr %8, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.SN76496, ptr %80, i32 0, i32 10
  %82 = load i32, ptr %7, align 4, !tbaa !9
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds [4 x i32], ptr %81, i64 0, i64 %83
  store i32 0, ptr %84, align 4, !tbaa !9
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.SN76496, ptr %85, i32 0, i32 9
  %87 = load i32, ptr %7, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds [4 x i32], ptr %86, i64 0, i64 %88
  store i32 0, ptr %89, align 4, !tbaa !9
  br label %90

90:                                               ; preds = %74, %66
  br label %91

91:                                               ; preds = %148, %90
  %92 = load ptr, ptr %8, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.SN76496, ptr %92, i32 0, i32 9
  %94 = load i32, ptr %7, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds [4 x i32], ptr %93, i64 0, i64 %95
  %97 = load i32, ptr %96, align 4, !tbaa !9
  %98 = icmp slt i32 %97, 0
  br i1 %98, label %99, label %173

99:                                               ; preds = %91
  %100 = load ptr, ptr %8, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.SN76496, ptr %100, i32 0, i32 8
  %102 = load i32, ptr %7, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds [4 x i32], ptr %101, i64 0, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !9
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.SN76496, ptr %106, i32 0, i32 9
  %108 = load i32, ptr %7, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds [4 x i32], ptr %107, i64 0, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !9
  %112 = add nsw i32 %111, %105
  store i32 %112, ptr %110, align 4, !tbaa !9
  %113 = load ptr, ptr %8, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.SN76496, ptr %113, i32 0, i32 9
  %115 = load i32, ptr %7, align 4, !tbaa !9
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds [4 x i32], ptr %114, i64 0, i64 %116
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = icmp sge i32 %118, 0
  br i1 %119, label %120, label %148

120:                                              ; preds = %99
  %121 = load ptr, ptr %8, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.SN76496, ptr %121, i32 0, i32 10
  %123 = load i32, ptr %7, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds [4 x i32], ptr %122, i64 0, i64 %124
  %126 = load i32, ptr %125, align 4, !tbaa !9
  %127 = xor i32 %126, 1
  store i32 %127, ptr %125, align 4, !tbaa !9
  %128 = load ptr, ptr %8, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.SN76496, ptr %128, i32 0, i32 10
  %130 = load i32, ptr %7, align 4, !tbaa !9
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds [4 x i32], ptr %129, i64 0, i64 %131
  %133 = load i32, ptr %132, align 4, !tbaa !9
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %135, label %147

135:                                              ; preds = %120
  %136 = load ptr, ptr %8, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.SN76496, ptr %136, i32 0, i32 8
  %138 = load i32, ptr %7, align 4, !tbaa !9
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds [4 x i32], ptr %137, i64 0, i64 %139
  %141 = load i32, ptr %140, align 4, !tbaa !9
  %142 = load i32, ptr %7, align 4, !tbaa !9
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 %143
  %145 = load i32, ptr %144, align 4, !tbaa !9
  %146 = add nsw i32 %145, %141
  store i32 %146, ptr %144, align 4, !tbaa !9
  br label %147

147:                                              ; preds = %135, %120
  br label %173

148:                                              ; preds = %99
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.SN76496, ptr %149, i32 0, i32 8
  %151 = load i32, ptr %7, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds [4 x i32], ptr %150, i64 0, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !9
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.SN76496, ptr %155, i32 0, i32 9
  %157 = load i32, ptr %7, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [4 x i32], ptr %156, i64 0, i64 %158
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = add nsw i32 %160, %154
  store i32 %161, ptr %159, align 4, !tbaa !9
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.SN76496, ptr %162, i32 0, i32 8
  %164 = load i32, ptr %7, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds [4 x i32], ptr %163, i64 0, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !9
  %168 = load i32, ptr %7, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %172 = add nsw i32 %171, %167
  store i32 %172, ptr %170, align 4, !tbaa !9
  br label %91, !llvm.loop !11

173:                                              ; preds = %147, %91
  %174 = load ptr, ptr %8, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.SN76496, ptr %174, i32 0, i32 10
  %176 = load i32, ptr %7, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds [4 x i32], ptr %175, i64 0, i64 %177
  %179 = load i32, ptr %178, align 4, !tbaa !9
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %193

181:                                              ; preds = %173
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.SN76496, ptr %182, i32 0, i32 9
  %184 = load i32, ptr %7, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds [4 x i32], ptr %183, i64 0, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !9
  %188 = load i32, ptr %7, align 4, !tbaa !9
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 %189
  %191 = load i32, ptr %190, align 4, !tbaa !9
  %192 = sub nsw i32 %191, %187
  store i32 %192, ptr %190, align 4, !tbaa !9
  br label %193

193:                                              ; preds = %181, %173
  br label %194

194:                                              ; preds = %193
  %195 = load i32, ptr %7, align 4, !tbaa !9
  %196 = add nsw i32 %195, 1
  store i32 %196, ptr %7, align 4, !tbaa !9
  br label %21, !llvm.loop !13

197:                                              ; preds = %21
  store i32 65536, ptr %11, align 4, !tbaa !9
  %198 = load ptr, ptr %8, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.SN76496, ptr %198, i32 0, i32 10
  %200 = getelementptr inbounds [4 x i32], ptr %199, i64 0, i64 3
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = icmp ne i32 %201, 0
  br i1 %202, label %203, label %211

203:                                              ; preds = %197
  %204 = load ptr, ptr %8, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.SN76496, ptr %204, i32 0, i32 9
  %206 = getelementptr inbounds [4 x i32], ptr %205, i64 0, i64 3
  %207 = load i32, ptr %206, align 4, !tbaa !9
  %208 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 3
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = add nsw i32 %209, %207
  store i32 %210, ptr %208, align 4, !tbaa !9
  br label %211

211:                                              ; preds = %203, %197
  br label %212

212:                                              ; preds = %293, %211
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  %213 = load ptr, ptr %8, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.SN76496, ptr %213, i32 0, i32 9
  %215 = getelementptr inbounds [4 x i32], ptr %214, i64 0, i64 3
  %216 = load i32, ptr %215, align 4, !tbaa !9
  %217 = load i32, ptr %11, align 4, !tbaa !9
  %218 = icmp slt i32 %216, %217
  br i1 %218, label %219, label %224

219:                                              ; preds = %212
  %220 = load ptr, ptr %8, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.SN76496, ptr %220, i32 0, i32 9
  %222 = getelementptr inbounds [4 x i32], ptr %221, i64 0, i64 3
  %223 = load i32, ptr %222, align 4, !tbaa !9
  store i32 %223, ptr %12, align 4, !tbaa !9
  br label %226

224:                                              ; preds = %212
  %225 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %225, ptr %12, align 4, !tbaa !9
  br label %226

226:                                              ; preds = %224, %219
  %227 = load i32, ptr %12, align 4, !tbaa !9
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.SN76496, ptr %228, i32 0, i32 9
  %230 = getelementptr inbounds [4 x i32], ptr %229, i64 0, i64 3
  %231 = load i32, ptr %230, align 4, !tbaa !9
  %232 = sub nsw i32 %231, %227
  store i32 %232, ptr %230, align 4, !tbaa !9
  %233 = load ptr, ptr %8, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.SN76496, ptr %233, i32 0, i32 9
  %235 = getelementptr inbounds [4 x i32], ptr %234, i64 0, i64 3
  %236 = load i32, ptr %235, align 4, !tbaa !9
  %237 = icmp sle i32 %236, 0
  br i1 %237, label %238, label %280

238:                                              ; preds = %226
  %239 = load ptr, ptr %8, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.SN76496, ptr %239, i32 0, i32 6
  %241 = load i32, ptr %240, align 4, !tbaa !14
  %242 = and i32 %241, 1
  %243 = load ptr, ptr %8, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.SN76496, ptr %243, i32 0, i32 10
  %245 = getelementptr inbounds [4 x i32], ptr %244, i64 0, i64 3
  store i32 %242, ptr %245, align 4, !tbaa !9
  %246 = load ptr, ptr %8, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.SN76496, ptr %246, i32 0, i32 6
  %248 = load i32, ptr %247, align 4, !tbaa !14
  %249 = lshr i32 %248, 1
  store i32 %249, ptr %247, align 4, !tbaa !14
  %250 = load ptr, ptr %8, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.SN76496, ptr %250, i32 0, i32 10
  %252 = getelementptr inbounds [4 x i32], ptr %251, i64 0, i64 3
  %253 = load i32, ptr %252, align 4, !tbaa !9
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %255, label %270

255:                                              ; preds = %238
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.SN76496, ptr %256, i32 0, i32 7
  %258 = load i32, ptr %257, align 4, !tbaa !16
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.SN76496, ptr %259, i32 0, i32 6
  %261 = load i32, ptr %260, align 4, !tbaa !14
  %262 = xor i32 %261, %258
  store i32 %262, ptr %260, align 4, !tbaa !14
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.SN76496, ptr %263, i32 0, i32 8
  %265 = getelementptr inbounds [4 x i32], ptr %264, i64 0, i64 3
  %266 = load i32, ptr %265, align 4, !tbaa !9
  %267 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 3
  %268 = load i32, ptr %267, align 4, !tbaa !9
  %269 = add nsw i32 %268, %266
  store i32 %269, ptr %267, align 4, !tbaa !9
  br label %270

270:                                              ; preds = %255, %238
  %271 = load ptr, ptr %8, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.SN76496, ptr %271, i32 0, i32 8
  %273 = getelementptr inbounds [4 x i32], ptr %272, i64 0, i64 3
  %274 = load i32, ptr %273, align 4, !tbaa !9
  %275 = load ptr, ptr %8, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.SN76496, ptr %275, i32 0, i32 9
  %277 = getelementptr inbounds [4 x i32], ptr %276, i64 0, i64 3
  %278 = load i32, ptr %277, align 4, !tbaa !9
  %279 = add nsw i32 %278, %274
  store i32 %279, ptr %277, align 4, !tbaa !9
  br label %280

280:                                              ; preds = %270, %226
  %281 = load i32, ptr %12, align 4, !tbaa !9
  %282 = load i32, ptr %11, align 4, !tbaa !9
  %283 = sub nsw i32 %282, %281
  store i32 %283, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  br label %284

284:                                              ; preds = %280
  %285 = load i32, ptr %11, align 4, !tbaa !9
  %286 = icmp sgt i32 %285, 0
  br i1 %286, label %287, label %293

287:                                              ; preds = %284
  %288 = load ptr, ptr %8, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.SN76496, ptr %288, i32 0, i32 5
  %290 = getelementptr inbounds [4 x i32], ptr %289, i64 0, i64 3
  %291 = load i32, ptr %290, align 4, !tbaa !9
  %292 = icmp ne i32 %291, 0
  br label %293

293:                                              ; preds = %287, %284
  %294 = phi i1 [ false, %284 ], [ %292, %287 ]
  br i1 %294, label %212, label %295, !llvm.loop !17

295:                                              ; preds = %293
  %296 = load ptr, ptr %8, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.SN76496, ptr %296, i32 0, i32 10
  %298 = getelementptr inbounds [4 x i32], ptr %297, i64 0, i64 3
  %299 = load i32, ptr %298, align 4, !tbaa !9
  %300 = icmp ne i32 %299, 0
  br i1 %300, label %301, label %309

301:                                              ; preds = %295
  %302 = load ptr, ptr %8, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.SN76496, ptr %302, i32 0, i32 9
  %304 = getelementptr inbounds [4 x i32], ptr %303, i64 0, i64 3
  %305 = load i32, ptr %304, align 4, !tbaa !9
  %306 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 3
  %307 = load i32, ptr %306, align 4, !tbaa !9
  %308 = sub nsw i32 %307, %305
  store i32 %308, ptr %306, align 4, !tbaa !9
  br label %309

309:                                              ; preds = %301, %295
  %310 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 0
  %311 = load i32, ptr %310, align 16, !tbaa !9
  %312 = load ptr, ptr %8, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.SN76496, ptr %312, i32 0, i32 5
  %314 = getelementptr inbounds [4 x i32], ptr %313, i64 0, i64 0
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = mul nsw i32 %311, %315
  %317 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 1
  %318 = load i32, ptr %317, align 4, !tbaa !9
  %319 = load ptr, ptr %8, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.SN76496, ptr %319, i32 0, i32 5
  %321 = getelementptr inbounds [4 x i32], ptr %320, i64 0, i64 1
  %322 = load i32, ptr %321, align 4, !tbaa !9
  %323 = mul nsw i32 %318, %322
  %324 = add nsw i32 %316, %323
  %325 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 2
  %326 = load i32, ptr %325, align 8, !tbaa !9
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.SN76496, ptr %327, i32 0, i32 5
  %329 = getelementptr inbounds [4 x i32], ptr %328, i64 0, i64 2
  %330 = load i32, ptr %329, align 4, !tbaa !9
  %331 = mul nsw i32 %326, %330
  %332 = add nsw i32 %324, %331
  %333 = getelementptr inbounds [4 x i32], ptr %9, i64 0, i64 3
  %334 = load i32, ptr %333, align 4, !tbaa !9
  %335 = load ptr, ptr %8, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.SN76496, ptr %335, i32 0, i32 5
  %337 = getelementptr inbounds [4 x i32], ptr %336, i64 0, i64 3
  %338 = load i32, ptr %337, align 4, !tbaa !9
  %339 = mul nsw i32 %334, %338
  %340 = add nsw i32 %332, %339
  store i32 %340, ptr %10, align 4, !tbaa !9
  %341 = load i32, ptr %10, align 4, !tbaa !9
  %342 = icmp ugt i32 %341, 1207959552
  br i1 %342, label %343, label %344

343:                                              ; preds = %309
  store i32 1207959552, ptr %10, align 4, !tbaa !9
  br label %344

344:                                              ; preds = %343, %309
  %345 = load i32, ptr %10, align 4, !tbaa !9
  %346 = udiv i32 %345, 65536
  store i32 %346, ptr %10, align 4, !tbaa !9
  %347 = icmp ne i32 %346, 0
  br i1 %347, label %348, label %355

348:                                              ; preds = %344
  %349 = load i32, ptr %10, align 4, !tbaa !9
  %350 = load ptr, ptr %4, align 8, !tbaa !5
  %351 = load i16, ptr %350, align 2, !tbaa !18
  %352 = sext i16 %351 to i32
  %353 = add i32 %352, %349
  %354 = trunc i32 %353 to i16
  store i16 %354, ptr %350, align 2, !tbaa !18
  br label %355

355:                                              ; preds = %348, %344
  %356 = load i32, ptr %6, align 4, !tbaa !9
  %357 = icmp ne i32 %356, 0
  br i1 %357, label %358, label %361

358:                                              ; preds = %355
  %359 = load ptr, ptr %4, align 8, !tbaa !5
  %360 = getelementptr inbounds i16, ptr %359, i64 2
  store ptr %360, ptr %4, align 8, !tbaa !5
  br label %364

361:                                              ; preds = %355
  %362 = load ptr, ptr %4, align 8, !tbaa !5
  %363 = getelementptr inbounds i16, ptr %362, i32 1
  store ptr %363, ptr %4, align 8, !tbaa !5
  br label %364

364:                                              ; preds = %361, %358
  %365 = load i32, ptr %5, align 4, !tbaa !9
  %366 = add nsw i32 %365, -1
  store i32 %366, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #2
  br label %13, !llvm.loop !20

367:                                              ; preds = %13
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  ret void
}

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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !10, i64 124}
!15 = !{!"SN76496", !10, i64 0, !10, i64 4, !7, i64 8, !7, i64 72, !10, i64 104, !7, i64 108, !10, i64 124, !10, i64 128, !7, i64 132, !7, i64 148, !7, i64 164, !7, i64 180}
!16 = !{!15, !10, i64 128}
!17 = distinct !{!17, !12}
!18 = !{!19, !19, i64 0}
!19 = !{!"short", !7, i64 0}
!20 = distinct !{!20, !12}


; 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.SN76496 = type { i32, i32, [16 x i32], [8 x i32], i32, [4 x i32], i32, i32, [4 x i32], [4 x i32], [4 x i32], [1 x i32] }

@ono_sn = external hidden local_unnamed_addr global %struct.SN76496, align 4

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @SN76496Update(ptr nocapture noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = icmp sgt i32 %1, 0
  br i1 %4, label %.lr.ph116, label %._crit_edge

.lr.ph116:                                        ; preds = %3
  %.promoted112 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 124), align 4, !tbaa !5
  %5 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 108), align 4, !tbaa !10
  %6 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 112), align 4, !tbaa !10
  %7 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 116), align 4, !tbaa !10
  %.not96 = icmp eq i32 %2, 0
  %.1.v = select i1 %.not96, i64 2, i64 4
  %.pre = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 164), align 4, !tbaa !10
  %.pre143.pre = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 148), align 4, !tbaa !10
  %8 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 132), align 4, !tbaa !10
  %9 = mul nsw i32 %8, -2
  %10 = icmp eq i32 %5, 0
  %11 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 136), align 4, !tbaa !10
  %12 = mul nsw i32 %11, -2
  %13 = icmp eq i32 %6, 0
  %14 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 140), align 4, !tbaa !10
  %15 = mul nsw i32 %14, -2
  %16 = icmp eq i32 %7, 0
  %.promoted = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 168), align 4, !tbaa !10
  %.promoted194 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 152), align 4, !tbaa !10
  %.promoted197 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 172), align 4, !tbaa !10
  %.promoted198 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 156), align 4, !tbaa !10
  %.promoted201 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 176), align 4, !tbaa !10
  %.promoted202 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 160), align 4, !tbaa !10
  br label %17

17:                                               ; preds = %.lr.ph116, %139
  %.promoted.pre203 = phi i32 [ %.promoted202, %.lr.ph116 ], [ %125, %139 ]
  %18 = phi i32 [ %.promoted201, %.lr.ph116 ], [ %122, %139 ]
  %.pre152199 = phi i32 [ %.promoted198, %.lr.ph116 ], [ %.pre152200, %139 ]
  %19 = phi i32 [ %.promoted197, %.lr.ph116 ], [ %79, %139 ]
  %.pre149195 = phi i32 [ %.promoted194, %.lr.ph116 ], [ %.pre149196, %139 ]
  %20 = phi i32 [ %.promoted, %.lr.ph116 ], [ %59, %139 ]
  %.pre143 = phi i32 [ %.pre143.pre, %.lr.ph116 ], [ %.pre143156, %139 ]
  %.pr100145 = phi i32 [ %.pre, %.lr.ph116 ], [ %.pr100146, %139 ]
  %.084115 = phi ptr [ %0, %.lr.ph116 ], [ %.1, %139 ]
  %.086114 = phi i32 [ %1, %.lr.ph116 ], [ %140, %139 ]
  %21 = phi i32 [ %.promoted112, %.lr.ph116 ], [ %124, %139 ]
  %.not97 = icmp eq i32 %.pr100145, 0
  %spec.select = select i1 %.not97, i32 0, i32 %.pre143
  %22 = add nsw i32 %.pre143, -65536
  %23 = icmp slt i32 %22, %9
  %brmerge = select i1 %23, i1 true, i1 %10
  br i1 %brmerge, label %.loopexit.thread, label %25

.loopexit.thread:                                 ; preds = %17
  %24 = add nsw i32 %spec.select, 32768
  store i32 0, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 164), align 4, !tbaa !10
  br label %.thread

25:                                               ; preds = %17
  %26 = icmp slt i32 %.pre143, 65536
  br i1 %26, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %25, %34
  %.sroa.0.2 = phi i32 [ %36, %34 ], [ %spec.select, %25 ]
  %27 = phi i32 [ %35, %34 ], [ %22, %25 ]
  %28 = add nsw i32 %8, %27
  %29 = icmp sgt i32 %28, -1
  br i1 %29, label %30, label %34

30:                                               ; preds = %.lr.ph
  %31 = xor i32 %.pr100145, 1
  store i32 %31, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 164), align 4, !tbaa !10
  %.not98 = icmp eq i32 %.pr100145, 1
  br i1 %.not98, label %.thread, label %32

32:                                               ; preds = %30
  %33 = add nsw i32 %.sroa.0.2, %8
  br label %.loopexit

34:                                               ; preds = %.lr.ph
  %35 = add nsw i32 %28, %8
  %36 = add nsw i32 %.sroa.0.2, %8
  %37 = icmp slt i32 %35, 0
  br i1 %37, label %.lr.ph, label %.loopexit, !llvm.loop !11

.loopexit:                                        ; preds = %34, %25, %32
  %38 = phi i32 [ %28, %32 ], [ %22, %25 ], [ %35, %34 ]
  %.pr100 = phi i32 [ %31, %32 ], [ %.pr100145, %25 ], [ %.pr100145, %34 ]
  %.sroa.0.3 = phi i32 [ %33, %32 ], [ %spec.select, %25 ], [ %36, %34 ]
  %.not99 = icmp eq i32 %.pr100, 0
  %39 = select i1 %.not99, i32 0, i32 %38
  %spec.select207 = sub nsw i32 %.sroa.0.3, %39
  br label %.thread

.thread:                                          ; preds = %.loopexit, %.loopexit.thread, %30
  %.pre143156 = phi i32 [ %28, %30 ], [ 0, %.loopexit.thread ], [ %38, %.loopexit ]
  %.pr100146 = phi i32 [ 0, %30 ], [ 0, %.loopexit.thread ], [ %.pr100, %.loopexit ]
  %.sroa.0.4 = phi i32 [ %.sroa.0.2, %30 ], [ %24, %.loopexit.thread ], [ %spec.select207, %.loopexit ]
  %.not97.1 = icmp eq i32 %20, 0
  %spec.select208 = select i1 %.not97.1, i32 0, i32 %.pre149195
  %40 = add nsw i32 %.pre149195, -65536
  %41 = icmp slt i32 %40, %12
  %brmerge209 = select i1 %41, i1 true, i1 %13
  br i1 %brmerge209, label %.loopexit.1.thread, label %43

.loopexit.1.thread:                               ; preds = %.thread
  %42 = add nsw i32 %spec.select208, 32768
  store i32 0, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 168), align 4, !tbaa !10
  br label %.thread.1

43:                                               ; preds = %.thread
  %44 = icmp slt i32 %.pre149195, 65536
  br i1 %44, label %.lr.ph.1, label %.loopexit.1

.lr.ph.1:                                         ; preds = %43, %48
  %.sroa.14.2 = phi i32 [ %50, %48 ], [ %spec.select208, %43 ]
  %45 = phi i32 [ %49, %48 ], [ %40, %43 ]
  %46 = add nsw i32 %11, %45
  %47 = icmp sgt i32 %46, -1
  br i1 %47, label %52, label %48

48:                                               ; preds = %.lr.ph.1
  %49 = add nsw i32 %46, %11
  %50 = add nsw i32 %.sroa.14.2, %11
  %51 = icmp slt i32 %49, 0
  br i1 %51, label %.lr.ph.1, label %.loopexit.1, !llvm.loop !11

52:                                               ; preds = %.lr.ph.1
  %53 = xor i32 %20, 1
  store i32 %53, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 168), align 4, !tbaa !10
  %.not98.1 = icmp eq i32 %20, 1
  br i1 %.not98.1, label %.thread.1, label %54

54:                                               ; preds = %52
  %55 = add nsw i32 %.sroa.14.2, %11
  br label %.loopexit.1

.loopexit.1:                                      ; preds = %48, %54, %43
  %56 = phi i32 [ %53, %54 ], [ %20, %43 ], [ %20, %48 ]
  %57 = phi i32 [ %46, %54 ], [ %40, %43 ], [ %49, %48 ]
  %.sroa.14.3 = phi i32 [ %55, %54 ], [ %spec.select208, %43 ], [ %50, %48 ]
  %.not99.1 = icmp eq i32 %56, 0
  %58 = select i1 %.not99.1, i32 0, i32 %57
  %spec.select210 = sub nsw i32 %.sroa.14.3, %58
  br label %.thread.1

.thread.1:                                        ; preds = %.loopexit.1, %.loopexit.1.thread, %52
  %.pre149196 = phi i32 [ %46, %52 ], [ 0, %.loopexit.1.thread ], [ %57, %.loopexit.1 ]
  %59 = phi i32 [ %53, %52 ], [ 0, %.loopexit.1.thread ], [ %56, %.loopexit.1 ]
  %.sroa.14.4 = phi i32 [ %.sroa.14.2, %52 ], [ %42, %.loopexit.1.thread ], [ %spec.select210, %.loopexit.1 ]
  %.not97.2 = icmp eq i32 %19, 0
  %spec.select211 = select i1 %.not97.2, i32 0, i32 %.pre152199
  %60 = add nsw i32 %.pre152199, -65536
  %61 = icmp slt i32 %60, %15
  %brmerge212 = select i1 %61, i1 true, i1 %16
  br i1 %brmerge212, label %.loopexit.2.thread, label %63

.loopexit.2.thread:                               ; preds = %.thread.1
  %62 = add nsw i32 %spec.select211, 32768
  store i32 0, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 172), align 4, !tbaa !10
  br label %.thread.2

63:                                               ; preds = %.thread.1
  %64 = icmp slt i32 %.pre152199, 65536
  br i1 %64, label %.lr.ph.2, label %.loopexit.2

.lr.ph.2:                                         ; preds = %63, %68
  %.sroa.26.2 = phi i32 [ %70, %68 ], [ %spec.select211, %63 ]
  %65 = phi i32 [ %69, %68 ], [ %60, %63 ]
  %66 = add nsw i32 %14, %65
  %67 = icmp sgt i32 %66, -1
  br i1 %67, label %72, label %68

68:                                               ; preds = %.lr.ph.2
  %69 = add nsw i32 %66, %14
  %70 = add nsw i32 %.sroa.26.2, %14
  %71 = icmp slt i32 %69, 0
  br i1 %71, label %.lr.ph.2, label %.loopexit.2, !llvm.loop !11

72:                                               ; preds = %.lr.ph.2
  %73 = xor i32 %19, 1
  store i32 %73, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 172), align 4, !tbaa !10
  %.not98.2 = icmp eq i32 %19, 1
  br i1 %.not98.2, label %.thread.2, label %74

74:                                               ; preds = %72
  %75 = add nsw i32 %.sroa.26.2, %14
  br label %.loopexit.2

.loopexit.2:                                      ; preds = %68, %74, %63
  %76 = phi i32 [ %73, %74 ], [ %19, %63 ], [ %19, %68 ]
  %77 = phi i32 [ %66, %74 ], [ %60, %63 ], [ %69, %68 ]
  %.sroa.26.3 = phi i32 [ %75, %74 ], [ %spec.select211, %63 ], [ %70, %68 ]
  %.not99.2 = icmp eq i32 %76, 0
  %78 = select i1 %.not99.2, i32 0, i32 %77
  %spec.select213 = sub nsw i32 %.sroa.26.3, %78
  br label %.thread.2

.thread.2:                                        ; preds = %.loopexit.2, %.loopexit.2.thread, %72
  %.pre152200 = phi i32 [ %66, %72 ], [ 0, %.loopexit.2.thread ], [ %77, %.loopexit.2 ]
  %79 = phi i32 [ %73, %72 ], [ 0, %.loopexit.2.thread ], [ %76, %.loopexit.2 ]
  %.sroa.26.4 = phi i32 [ %.sroa.26.2, %72 ], [ %62, %.loopexit.2.thread ], [ %spec.select213, %.loopexit.2 ]
  %.not = icmp eq i32 %18, 0
  %spec.select214 = select i1 %.not, i32 0, i32 %.promoted.pre203
  %80 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 120), align 4
  %.fr = freeze i32 %80
  %.not93 = icmp eq i32 %.fr, 0
  %81 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 128), align 4
  %82 = load i32, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 144), align 4
  br i1 %.not93, label %.split.us, label %.split

.split.us:                                        ; preds = %.thread.2
  %..083.us = tail call i32 @llvm.smin.i32(i32 %.promoted.pre203, i32 65536)
  %83 = sub nsw i32 %.promoted.pre203, %..083.us
  %84 = icmp slt i32 %83, 1
  br i1 %84, label %85, label %.critedge

85:                                               ; preds = %.split.us
  %86 = and i32 %21, 1
  store i32 %86, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 176), align 4, !tbaa !10
  %87 = lshr i32 %21, 1
  store i32 %87, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 124), align 4, !tbaa !5
  %.not92.us = icmp eq i32 %86, 0
  br i1 %.not92.us, label %91, label %88

88:                                               ; preds = %85
  %89 = xor i32 %81, %87
  store i32 %89, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 124), align 4, !tbaa !5
  %90 = add nsw i32 %spec.select214, %82
  br label %91

91:                                               ; preds = %88, %85
  %92 = phi i32 [ %89, %88 ], [ %87, %85 ]
  %93 = phi i32 [ %90, %88 ], [ %spec.select214, %85 ]
  %94 = add nsw i32 %82, %83
  br label %.critedge

.split:                                           ; preds = %.thread.2, %113
  %95 = phi i32 [ %114, %113 ], [ %18, %.thread.2 ]
  %96 = phi i32 [ %115, %113 ], [ %18, %.thread.2 ]
  %97 = phi i32 [ %116, %113 ], [ %21, %.thread.2 ]
  %98 = phi i32 [ %117, %113 ], [ %spec.select214, %.thread.2 ]
  %99 = phi i32 [ %118, %113 ], [ %21, %.thread.2 ]
  %100 = phi i32 [ %119, %113 ], [ %.promoted.pre203, %.thread.2 ]
  %.083 = phi i32 [ %120, %113 ], [ 65536, %.thread.2 ]
  %..083 = tail call i32 @llvm.smin.i32(i32 %100, i32 %.083)
  %101 = sub nsw i32 %100, %..083
  %102 = icmp slt i32 %101, 1
  br i1 %102, label %103, label %113

103:                                              ; preds = %.split
  %104 = and i32 %99, 1
  store i32 %104, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 176), align 4, !tbaa !10
  %105 = lshr i32 %99, 1
  store i32 %105, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 124), align 4, !tbaa !5
  %.not92 = icmp eq i32 %104, 0
  br i1 %.not92, label %109, label %106

106:                                              ; preds = %103
  %107 = xor i32 %81, %105
  store i32 %107, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 124), align 4, !tbaa !5
  %108 = add nsw i32 %98, %82
  br label %109

109:                                              ; preds = %106, %103
  %110 = phi i32 [ %108, %106 ], [ %98, %103 ]
  %111 = phi i32 [ %107, %106 ], [ %105, %103 ]
  %112 = add nsw i32 %82, %101
  br label %113

113:                                              ; preds = %109, %.split
  %114 = phi i32 [ %104, %109 ], [ %95, %.split ]
  %115 = phi i32 [ %104, %109 ], [ %96, %.split ]
  %116 = phi i32 [ %111, %109 ], [ %97, %.split ]
  %117 = phi i32 [ %110, %109 ], [ %98, %.split ]
  %118 = phi i32 [ %111, %109 ], [ %99, %.split ]
  %119 = phi i32 [ %112, %109 ], [ %101, %.split ]
  %120 = sub nsw i32 %.083, %..083
  %121 = icmp slt i32 %120, 1
  br i1 %121, label %.critedge, label %.split, !llvm.loop !13

.critedge:                                        ; preds = %113, %.split.us, %91
  %122 = phi i32 [ %86, %91 ], [ %18, %.split.us ], [ %114, %113 ]
  %123 = phi i32 [ %86, %91 ], [ %18, %.split.us ], [ %115, %113 ]
  %124 = phi i32 [ %92, %91 ], [ %21, %.split.us ], [ %116, %113 ]
  %.us-phi = phi i32 [ %93, %91 ], [ %spec.select214, %.split.us ], [ %117, %113 ]
  %125 = phi i32 [ %94, %91 ], [ %83, %.split.us ], [ %119, %113 ]
  %.not94 = icmp eq i32 %123, 0
  %126 = select i1 %.not94, i32 0, i32 %125
  %spec.select215 = sub nsw i32 %.us-phi, %126
  %127 = mul nsw i32 %5, %.sroa.0.4
  %128 = mul nsw i32 %6, %.sroa.14.4
  %129 = add nsw i32 %128, %127
  %130 = mul nsw i32 %7, %.sroa.26.4
  %131 = add nsw i32 %129, %130
  %132 = mul nsw i32 %spec.select215, %.fr
  %133 = add nsw i32 %131, %132
  %.not95 = icmp ult i32 %133, 65536
  br i1 %.not95, label %139, label %134

134:                                              ; preds = %.critedge
  %spec.store.select = tail call i32 @llvm.umin.i32(i32 %133, i32 1207959552)
  %135 = lshr i32 %spec.store.select, 16
  %136 = load i16, ptr %.084115, align 2, !tbaa !14
  %137 = trunc nuw nsw i32 %135 to i16
  %138 = add i16 %136, %137
  store i16 %138, ptr %.084115, align 2, !tbaa !14
  br label %139

139:                                              ; preds = %134, %.critedge
  %.1 = getelementptr inbounds i8, ptr %.084115, i64 %.1.v
  %140 = add nsw i32 %.086114, -1
  %141 = icmp sgt i32 %.086114, 1
  br i1 %141, label %17, label %._crit_edge.loopexit, !llvm.loop !16

._crit_edge.loopexit:                             ; preds = %139
  store i32 %.pre143156, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 148), align 4, !tbaa !10
  store i32 %.pre149196, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 152), align 4, !tbaa !10
  store i32 %.pre152200, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 156), align 4, !tbaa !10
  store i32 %125, ptr getelementptr inbounds (i8, ptr @ono_sn, i64 160), align 4, !tbaa !10
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %3
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umin.i32(i32, i32) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #1

attributes #0 = { nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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 124}
!6 = !{!"SN76496", !7, i64 0, !7, i64 4, !8, i64 8, !8, i64 72, !7, i64 104, !8, i64 108, !7, i64 124, !7, i64 128, !8, i64 132, !8, i64 148, !8, i64 164, !8, i64 180}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!7, !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !15, i64 0}
!15 = !{!"short", !8, i64 0}
!16 = distinct !{!16, !12}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass