; LLVM IR from evanxg852000/rockstartdev :: chip8-cpp/src/chip8.ll (ZN5Chip812emulateCycleEv)

; 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.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.Chip8 = type <{ [16 x i16], i16, [4096 x i8], [16 x i8], i16, i16, i16, i8, i8, [2048 x i8], [16 x i8], i8, i8 }>

@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str.2 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [22 x i8], align 1

; 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 uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5Chip812emulateCycleEv(ptr noundef nonnull align 2 dereferenceable(6219) %0) #2 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i16, align 2
  %5 = alloca i16, align 2
  %6 = alloca i16, align 2
  %7 = alloca i16, align 2
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %15 = load ptr, ptr %2, align 8
  %16 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %17 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %18 = load i16, ptr %17, align 2, !tbaa !9
  %19 = zext i16 %18 to i64
  %20 = getelementptr inbounds [4096 x i8], ptr %16, i64 0, i64 %19
  %21 = load i8, ptr %20, align 1, !tbaa !13
  %22 = zext i8 %21 to i32
  %23 = shl i32 %22, 8
  %24 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %25 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %26 = load i16, ptr %25, align 2, !tbaa !9
  %27 = zext i16 %26 to i32
  %28 = add nsw i32 %27, 1
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds [4096 x i8], ptr %24, i64 0, i64 %29
  %31 = load i8, ptr %30, align 1, !tbaa !13
  %32 = zext i8 %31 to i32
  %33 = or i32 %23, %32
  %34 = trunc i32 %33 to i16
  %35 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  store i16 %34, ptr %35, align 2, !tbaa !14
  %36 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %37 = load i16, ptr %36, align 2, !tbaa !14
  %38 = zext i16 %37 to i32
  %39 = and i32 %38, 61440
  switch i32 %39, label %1178 [
    i32 0, label %40
    i32 4096, label %88
    i32 8192, label %95
    i32 12288, label %112
    i32 16384, label %141
    i32 20480, label %170
    i32 24576, label %205
    i32 28672, label %224
    i32 32768, label %246
    i32 36864, label %606
    i32 40960, label %641
    i32 45056, label %653
    i32 49152, label %665
    i32 53248, label %687
    i32 57344, label %796
    i32 61440, label %865
  ]

40:                                               ; preds = %1
  %41 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %42 = load i16, ptr %41, align 2, !tbaa !14
  %43 = zext i16 %42 to i32
  %44 = and i32 %43, 15
  switch i32 %44, label %81 [
    i32 0, label %45
    i32 14, label %65
  ]

45:                                               ; preds = %40
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  store i32 0, ptr %3, align 4, !tbaa !15
  br label %46

46:                                               ; preds = %55, %45
  %47 = load i32, ptr %3, align 4, !tbaa !15
  %48 = icmp slt i32 %47, 2048
  br i1 %48, label %50, label %49

49:                                               ; preds = %46
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  br label %58

50:                                               ; preds = %46
  %51 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 9
  %52 = load i32, ptr %3, align 4, !tbaa !15
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds [2048 x i8], ptr %51, i64 0, i64 %53
  store i8 0, ptr %54, align 1, !tbaa !13
  br label %55

55:                                               ; preds = %50
  %56 = load i32, ptr %3, align 4, !tbaa !15
  %57 = add nsw i32 %56, 1
  store i32 %57, ptr %3, align 4, !tbaa !15
  br label %46, !llvm.loop !17

58:                                               ; preds = %49
  %59 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 11
  store i8 1, ptr %59, align 2, !tbaa !19
  %60 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %61 = load i16, ptr %60, align 2, !tbaa !9
  %62 = zext i16 %61 to i32
  %63 = add nsw i32 %62, 2
  %64 = trunc i32 %63 to i16
  store i16 %64, ptr %60, align 2, !tbaa !9
  br label %87

65:                                               ; preds = %40
  %66 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 1
  %67 = load i16, ptr %66, align 2, !tbaa !20
  %68 = add i16 %67, -1
  store i16 %68, ptr %66, align 2, !tbaa !20
  %69 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 0
  %70 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 1
  %71 = load i16, ptr %70, align 2, !tbaa !20
  %72 = zext i16 %71 to i64
  %73 = getelementptr inbounds [16 x i16], ptr %69, i64 0, i64 %72
  %74 = load i16, ptr %73, align 2, !tbaa !21
  %75 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  store i16 %74, ptr %75, align 2, !tbaa !9
  %76 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %77 = load i16, ptr %76, align 2, !tbaa !9
  %78 = zext i16 %77 to i32
  %79 = add nsw i32 %78, 2
  %80 = trunc i32 %79 to i16
  store i16 %80, ptr %76, align 2, !tbaa !9
  br label %87

81:                                               ; preds = %40
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.2)
  %83 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %84 = load i16, ptr %83, align 2, !tbaa !14
  %85 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8) %82, i16 noundef zeroext %84)
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 3) #7
  unreachable

87:                                               ; preds = %65, %58
  br label %1184

88:                                               ; preds = %1
  %89 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %90 = load i16, ptr %89, align 2, !tbaa !14
  %91 = zext i16 %90 to i32
  %92 = and i32 %91, 4095
  %93 = trunc i32 %92 to i16
  %94 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  store i16 %93, ptr %94, align 2, !tbaa !9
  br label %1184

95:                                               ; preds = %1
  %96 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %97 = load i16, ptr %96, align 2, !tbaa !9
  %98 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 0
  %99 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 1
  %100 = load i16, ptr %99, align 2, !tbaa !20
  %101 = zext i16 %100 to i64
  %102 = getelementptr inbounds [16 x i16], ptr %98, i64 0, i64 %101
  store i16 %97, ptr %102, align 2, !tbaa !21
  %103 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 1
  %104 = load i16, ptr %103, align 2, !tbaa !20
  %105 = add i16 %104, 1
  store i16 %105, ptr %103, align 2, !tbaa !20
  %106 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %107 = load i16, ptr %106, align 2, !tbaa !14
  %108 = zext i16 %107 to i32
  %109 = and i32 %108, 4095
  %110 = trunc i32 %109 to i16
  %111 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  store i16 %110, ptr %111, align 2, !tbaa !9
  br label %1184

112:                                              ; preds = %1
  %113 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %114 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %115 = load i16, ptr %114, align 2, !tbaa !14
  %116 = zext i16 %115 to i32
  %117 = and i32 %116, 3840
  %118 = ashr i32 %117, 8
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds [16 x i8], ptr %113, i64 0, i64 %119
  %121 = load i8, ptr %120, align 1, !tbaa !13
  %122 = zext i8 %121 to i32
  %123 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %124 = load i16, ptr %123, align 2, !tbaa !14
  %125 = zext i16 %124 to i32
  %126 = and i32 %125, 255
  %127 = icmp eq i32 %122, %126
  br i1 %127, label %128, label %134

128:                                              ; preds = %112
  %129 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %130 = load i16, ptr %129, align 2, !tbaa !9
  %131 = zext i16 %130 to i32
  %132 = add nsw i32 %131, 4
  %133 = trunc i32 %132 to i16
  store i16 %133, ptr %129, align 2, !tbaa !9
  br label %140

134:                                              ; preds = %112
  %135 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %136 = load i16, ptr %135, align 2, !tbaa !9
  %137 = zext i16 %136 to i32
  %138 = add nsw i32 %137, 2
  %139 = trunc i32 %138 to i16
  store i16 %139, ptr %135, align 2, !tbaa !9
  br label %140

140:                                              ; preds = %134, %128
  br label %1184

141:                                              ; preds = %1
  %142 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %143 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %144 = load i16, ptr %143, align 2, !tbaa !14
  %145 = zext i16 %144 to i32
  %146 = and i32 %145, 3840
  %147 = ashr i32 %146, 8
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds [16 x i8], ptr %142, i64 0, i64 %148
  %150 = load i8, ptr %149, align 1, !tbaa !13
  %151 = zext i8 %150 to i32
  %152 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %153 = load i16, ptr %152, align 2, !tbaa !14
  %154 = zext i16 %153 to i32
  %155 = and i32 %154, 255
  %156 = icmp ne i32 %151, %155
  br i1 %156, label %157, label %163

157:                                              ; preds = %141
  %158 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %159 = load i16, ptr %158, align 2, !tbaa !9
  %160 = zext i16 %159 to i32
  %161 = add nsw i32 %160, 4
  %162 = trunc i32 %161 to i16
  store i16 %162, ptr %158, align 2, !tbaa !9
  br label %169

163:                                              ; preds = %141
  %164 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %165 = load i16, ptr %164, align 2, !tbaa !9
  %166 = zext i16 %165 to i32
  %167 = add nsw i32 %166, 2
  %168 = trunc i32 %167 to i16
  store i16 %168, ptr %164, align 2, !tbaa !9
  br label %169

169:                                              ; preds = %163, %157
  br label %1184

170:                                              ; preds = %1
  %171 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %172 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %173 = load i16, ptr %172, align 2, !tbaa !14
  %174 = zext i16 %173 to i32
  %175 = and i32 %174, 3840
  %176 = ashr i32 %175, 8
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds [16 x i8], ptr %171, i64 0, i64 %177
  %179 = load i8, ptr %178, align 1, !tbaa !13
  %180 = zext i8 %179 to i32
  %181 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %182 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %183 = load i16, ptr %182, align 2, !tbaa !14
  %184 = zext i16 %183 to i32
  %185 = and i32 %184, 240
  %186 = ashr i32 %185, 4
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds [16 x i8], ptr %181, i64 0, i64 %187
  %189 = load i8, ptr %188, align 1, !tbaa !13
  %190 = zext i8 %189 to i32
  %191 = icmp eq i32 %180, %190
  br i1 %191, label %192, label %198

192:                                              ; preds = %170
  %193 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %194 = load i16, ptr %193, align 2, !tbaa !9
  %195 = zext i16 %194 to i32
  %196 = add nsw i32 %195, 4
  %197 = trunc i32 %196 to i16
  store i16 %197, ptr %193, align 2, !tbaa !9
  br label %204

198:                                              ; preds = %170
  %199 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %200 = load i16, ptr %199, align 2, !tbaa !9
  %201 = zext i16 %200 to i32
  %202 = add nsw i32 %201, 2
  %203 = trunc i32 %202 to i16
  store i16 %203, ptr %199, align 2, !tbaa !9
  br label %204

204:                                              ; preds = %198, %192
  br label %1184

205:                                              ; preds = %1
  %206 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %207 = load i16, ptr %206, align 2, !tbaa !14
  %208 = zext i16 %207 to i32
  %209 = and i32 %208, 255
  %210 = trunc i32 %209 to i8
  %211 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %212 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %213 = load i16, ptr %212, align 2, !tbaa !14
  %214 = zext i16 %213 to i32
  %215 = and i32 %214, 3840
  %216 = ashr i32 %215, 8
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds [16 x i8], ptr %211, i64 0, i64 %217
  store i8 %210, ptr %218, align 1, !tbaa !13
  %219 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %220 = load i16, ptr %219, align 2, !tbaa !9
  %221 = zext i16 %220 to i32
  %222 = add nsw i32 %221, 2
  %223 = trunc i32 %222 to i16
  store i16 %223, ptr %219, align 2, !tbaa !9
  br label %1184

224:                                              ; preds = %1
  %225 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %226 = load i16, ptr %225, align 2, !tbaa !14
  %227 = zext i16 %226 to i32
  %228 = and i32 %227, 255
  %229 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %230 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %231 = load i16, ptr %230, align 2, !tbaa !14
  %232 = zext i16 %231 to i32
  %233 = and i32 %232, 3840
  %234 = ashr i32 %233, 8
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds [16 x i8], ptr %229, i64 0, i64 %235
  %237 = load i8, ptr %236, align 1, !tbaa !13
  %238 = zext i8 %237 to i32
  %239 = add nsw i32 %238, %228
  %240 = trunc i32 %239 to i8
  store i8 %240, ptr %236, align 1, !tbaa !13
  %241 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %242 = load i16, ptr %241, align 2, !tbaa !9
  %243 = zext i16 %242 to i32
  %244 = add nsw i32 %243, 2
  %245 = trunc i32 %244 to i16
  store i16 %245, ptr %241, align 2, !tbaa !9
  br label %1184

246:                                              ; preds = %1
  %247 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %248 = load i16, ptr %247, align 2, !tbaa !14
  %249 = zext i16 %248 to i32
  %250 = and i32 %249, 15
  switch i32 %250, label %599 [
    i32 0, label %251
    i32 1, label %274
    i32 2, label %302
    i32 3, label %330
    i32 4, label %358
    i32 5, label %415
    i32 6, label %471
    i32 7, label %503
    i32 14, label %567
  ]

251:                                              ; preds = %246
  %252 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %253 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %254 = load i16, ptr %253, align 2, !tbaa !14
  %255 = zext i16 %254 to i32
  %256 = and i32 %255, 240
  %257 = ashr i32 %256, 4
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds [16 x i8], ptr %252, i64 0, i64 %258
  %260 = load i8, ptr %259, align 1, !tbaa !13
  %261 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %262 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %263 = load i16, ptr %262, align 2, !tbaa !14
  %264 = zext i16 %263 to i32
  %265 = and i32 %264, 3840
  %266 = ashr i32 %265, 8
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [16 x i8], ptr %261, i64 0, i64 %267
  store i8 %260, ptr %268, align 1, !tbaa !13
  %269 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %270 = load i16, ptr %269, align 2, !tbaa !9
  %271 = zext i16 %270 to i32
  %272 = add nsw i32 %271, 2
  %273 = trunc i32 %272 to i16
  store i16 %273, ptr %269, align 2, !tbaa !9
  br label %605

274:                                              ; preds = %246
  %275 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %276 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %277 = load i16, ptr %276, align 2, !tbaa !14
  %278 = zext i16 %277 to i32
  %279 = and i32 %278, 240
  %280 = ashr i32 %279, 4
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds [16 x i8], ptr %275, i64 0, i64 %281
  %283 = load i8, ptr %282, align 1, !tbaa !13
  %284 = zext i8 %283 to i32
  %285 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %286 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %287 = load i16, ptr %286, align 2, !tbaa !14
  %288 = zext i16 %287 to i32
  %289 = and i32 %288, 3840
  %290 = ashr i32 %289, 8
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds [16 x i8], ptr %285, i64 0, i64 %291
  %293 = load i8, ptr %292, align 1, !tbaa !13
  %294 = zext i8 %293 to i32
  %295 = or i32 %294, %284
  %296 = trunc i32 %295 to i8
  store i8 %296, ptr %292, align 1, !tbaa !13
  %297 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %298 = load i16, ptr %297, align 2, !tbaa !9
  %299 = zext i16 %298 to i32
  %300 = add nsw i32 %299, 2
  %301 = trunc i32 %300 to i16
  store i16 %301, ptr %297, align 2, !tbaa !9
  br label %605

302:                                              ; preds = %246
  %303 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %304 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %305 = load i16, ptr %304, align 2, !tbaa !14
  %306 = zext i16 %305 to i32
  %307 = and i32 %306, 240
  %308 = ashr i32 %307, 4
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds [16 x i8], ptr %303, i64 0, i64 %309
  %311 = load i8, ptr %310, align 1, !tbaa !13
  %312 = zext i8 %311 to i32
  %313 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %314 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %315 = load i16, ptr %314, align 2, !tbaa !14
  %316 = zext i16 %315 to i32
  %317 = and i32 %316, 3840
  %318 = ashr i32 %317, 8
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds [16 x i8], ptr %313, i64 0, i64 %319
  %321 = load i8, ptr %320, align 1, !tbaa !13
  %322 = zext i8 %321 to i32
  %323 = and i32 %322, %312
  %324 = trunc i32 %323 to i8
  store i8 %324, ptr %320, align 1, !tbaa !13
  %325 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %326 = load i16, ptr %325, align 2, !tbaa !9
  %327 = zext i16 %326 to i32
  %328 = add nsw i32 %327, 2
  %329 = trunc i32 %328 to i16
  store i16 %329, ptr %325, align 2, !tbaa !9
  br label %605

330:                                              ; preds = %246
  %331 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %332 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %333 = load i16, ptr %332, align 2, !tbaa !14
  %334 = zext i16 %333 to i32
  %335 = and i32 %334, 240
  %336 = ashr i32 %335, 4
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds [16 x i8], ptr %331, i64 0, i64 %337
  %339 = load i8, ptr %338, align 1, !tbaa !13
  %340 = zext i8 %339 to i32
  %341 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %342 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %343 = load i16, ptr %342, align 2, !tbaa !14
  %344 = zext i16 %343 to i32
  %345 = and i32 %344, 3840
  %346 = ashr i32 %345, 8
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds [16 x i8], ptr %341, i64 0, i64 %347
  %349 = load i8, ptr %348, align 1, !tbaa !13
  %350 = zext i8 %349 to i32
  %351 = xor i32 %350, %340
  %352 = trunc i32 %351 to i8
  store i8 %352, ptr %348, align 1, !tbaa !13
  %353 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %354 = load i16, ptr %353, align 2, !tbaa !9
  %355 = zext i16 %354 to i32
  %356 = add nsw i32 %355, 2
  %357 = trunc i32 %356 to i16
  store i16 %357, ptr %353, align 2, !tbaa !9
  br label %605

358:                                              ; preds = %246
  %359 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %360 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %361 = load i16, ptr %360, align 2, !tbaa !14
  %362 = zext i16 %361 to i32
  %363 = and i32 %362, 240
  %364 = ashr i32 %363, 4
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds [16 x i8], ptr %359, i64 0, i64 %365
  %367 = load i8, ptr %366, align 1, !tbaa !13
  %368 = zext i8 %367 to i32
  %369 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %370 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %371 = load i16, ptr %370, align 2, !tbaa !14
  %372 = zext i16 %371 to i32
  %373 = and i32 %372, 3840
  %374 = ashr i32 %373, 8
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds [16 x i8], ptr %369, i64 0, i64 %375
  %377 = load i8, ptr %376, align 1, !tbaa !13
  %378 = zext i8 %377 to i32
  %379 = add nsw i32 %378, %368
  %380 = trunc i32 %379 to i8
  store i8 %380, ptr %376, align 1, !tbaa !13
  %381 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %382 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %383 = load i16, ptr %382, align 2, !tbaa !14
  %384 = zext i16 %383 to i32
  %385 = and i32 %384, 240
  %386 = ashr i32 %385, 4
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds [16 x i8], ptr %381, i64 0, i64 %387
  %389 = load i8, ptr %388, align 1, !tbaa !13
  %390 = zext i8 %389 to i32
  %391 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %392 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %393 = load i16, ptr %392, align 2, !tbaa !14
  %394 = zext i16 %393 to i32
  %395 = and i32 %394, 3840
  %396 = ashr i32 %395, 8
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds [16 x i8], ptr %391, i64 0, i64 %397
  %399 = load i8, ptr %398, align 1, !tbaa !13
  %400 = zext i8 %399 to i32
  %401 = sub nsw i32 255, %400
  %402 = icmp sgt i32 %390, %401
  br i1 %402, label %403, label %406

403:                                              ; preds = %358
  %404 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %405 = getelementptr inbounds [16 x i8], ptr %404, i64 0, i64 15
  store i8 1, ptr %405, align 1, !tbaa !13
  br label %409

406:                                              ; preds = %358
  %407 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %408 = getelementptr inbounds [16 x i8], ptr %407, i64 0, i64 15
  store i8 0, ptr %408, align 1, !tbaa !13
  br label %409

409:                                              ; preds = %406, %403
  %410 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %411 = load i16, ptr %410, align 2, !tbaa !9
  %412 = zext i16 %411 to i32
  %413 = add nsw i32 %412, 2
  %414 = trunc i32 %413 to i16
  store i16 %414, ptr %410, align 2, !tbaa !9
  br label %605

415:                                              ; preds = %246
  %416 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %417 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %418 = load i16, ptr %417, align 2, !tbaa !14
  %419 = zext i16 %418 to i32
  %420 = and i32 %419, 240
  %421 = ashr i32 %420, 4
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds [16 x i8], ptr %416, i64 0, i64 %422
  %424 = load i8, ptr %423, align 1, !tbaa !13
  %425 = zext i8 %424 to i32
  %426 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %427 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %428 = load i16, ptr %427, align 2, !tbaa !14
  %429 = zext i16 %428 to i32
  %430 = and i32 %429, 3840
  %431 = ashr i32 %430, 8
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds [16 x i8], ptr %426, i64 0, i64 %432
  %434 = load i8, ptr %433, align 1, !tbaa !13
  %435 = zext i8 %434 to i32
  %436 = icmp sgt i32 %425, %435
  br i1 %436, label %437, label %440

437:                                              ; preds = %415
  %438 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %439 = getelementptr inbounds [16 x i8], ptr %438, i64 0, i64 15
  store i8 0, ptr %439, align 1, !tbaa !13
  br label %443

440:                                              ; preds = %415
  %441 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %442 = getelementptr inbounds [16 x i8], ptr %441, i64 0, i64 15
  store i8 1, ptr %442, align 1, !tbaa !13
  br label %443

443:                                              ; preds = %440, %437
  %444 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %445 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %446 = load i16, ptr %445, align 2, !tbaa !14
  %447 = zext i16 %446 to i32
  %448 = and i32 %447, 240
  %449 = ashr i32 %448, 4
  %450 = sext i32 %449 to i64
  %451 = getelementptr inbounds [16 x i8], ptr %444, i64 0, i64 %450
  %452 = load i8, ptr %451, align 1, !tbaa !13
  %453 = zext i8 %452 to i32
  %454 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %455 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %456 = load i16, ptr %455, align 2, !tbaa !14
  %457 = zext i16 %456 to i32
  %458 = and i32 %457, 3840
  %459 = ashr i32 %458, 8
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds [16 x i8], ptr %454, i64 0, i64 %460
  %462 = load i8, ptr %461, align 1, !tbaa !13
  %463 = zext i8 %462 to i32
  %464 = sub nsw i32 %463, %453
  %465 = trunc i32 %464 to i8
  store i8 %465, ptr %461, align 1, !tbaa !13
  %466 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %467 = load i16, ptr %466, align 2, !tbaa !9
  %468 = zext i16 %467 to i32
  %469 = add nsw i32 %468, 2
  %470 = trunc i32 %469 to i16
  store i16 %470, ptr %466, align 2, !tbaa !9
  br label %605

471:                                              ; preds = %246
  %472 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %473 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %474 = load i16, ptr %473, align 2, !tbaa !14
  %475 = zext i16 %474 to i32
  %476 = and i32 %475, 3840
  %477 = ashr i32 %476, 8
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds [16 x i8], ptr %472, i64 0, i64 %478
  %480 = load i8, ptr %479, align 1, !tbaa !13
  %481 = zext i8 %480 to i32
  %482 = and i32 %481, 1
  %483 = trunc i32 %482 to i8
  %484 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %485 = getelementptr inbounds [16 x i8], ptr %484, i64 0, i64 15
  store i8 %483, ptr %485, align 1, !tbaa !13
  %486 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %487 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %488 = load i16, ptr %487, align 2, !tbaa !14
  %489 = zext i16 %488 to i32
  %490 = and i32 %489, 3840
  %491 = ashr i32 %490, 8
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds [16 x i8], ptr %486, i64 0, i64 %492
  %494 = load i8, ptr %493, align 1, !tbaa !13
  %495 = zext i8 %494 to i32
  %496 = ashr i32 %495, 1
  %497 = trunc i32 %496 to i8
  store i8 %497, ptr %493, align 1, !tbaa !13
  %498 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %499 = load i16, ptr %498, align 2, !tbaa !9
  %500 = zext i16 %499 to i32
  %501 = add nsw i32 %500, 2
  %502 = trunc i32 %501 to i16
  store i16 %502, ptr %498, align 2, !tbaa !9
  br label %605

503:                                              ; preds = %246
  %504 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %505 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %506 = load i16, ptr %505, align 2, !tbaa !14
  %507 = zext i16 %506 to i32
  %508 = and i32 %507, 3840
  %509 = ashr i32 %508, 8
  %510 = sext i32 %509 to i64
  %511 = getelementptr inbounds [16 x i8], ptr %504, i64 0, i64 %510
  %512 = load i8, ptr %511, align 1, !tbaa !13
  %513 = zext i8 %512 to i32
  %514 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %515 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %516 = load i16, ptr %515, align 2, !tbaa !14
  %517 = zext i16 %516 to i32
  %518 = and i32 %517, 240
  %519 = ashr i32 %518, 4
  %520 = sext i32 %519 to i64
  %521 = getelementptr inbounds [16 x i8], ptr %514, i64 0, i64 %520
  %522 = load i8, ptr %521, align 1, !tbaa !13
  %523 = zext i8 %522 to i32
  %524 = icmp sgt i32 %513, %523
  br i1 %524, label %525, label %528

525:                                              ; preds = %503
  %526 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %527 = getelementptr inbounds [16 x i8], ptr %526, i64 0, i64 15
  store i8 0, ptr %527, align 1, !tbaa !13
  br label %531

528:                                              ; preds = %503
  %529 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %530 = getelementptr inbounds [16 x i8], ptr %529, i64 0, i64 15
  store i8 1, ptr %530, align 1, !tbaa !13
  br label %531

531:                                              ; preds = %528, %525
  %532 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %533 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %534 = load i16, ptr %533, align 2, !tbaa !14
  %535 = zext i16 %534 to i32
  %536 = and i32 %535, 240
  %537 = ashr i32 %536, 4
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds [16 x i8], ptr %532, i64 0, i64 %538
  %540 = load i8, ptr %539, align 1, !tbaa !13
  %541 = zext i8 %540 to i32
  %542 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %543 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %544 = load i16, ptr %543, align 2, !tbaa !14
  %545 = zext i16 %544 to i32
  %546 = and i32 %545, 3840
  %547 = ashr i32 %546, 8
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds [16 x i8], ptr %542, i64 0, i64 %548
  %550 = load i8, ptr %549, align 1, !tbaa !13
  %551 = zext i8 %550 to i32
  %552 = sub nsw i32 %541, %551
  %553 = trunc i32 %552 to i8
  %554 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %555 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %556 = load i16, ptr %555, align 2, !tbaa !14
  %557 = zext i16 %556 to i32
  %558 = and i32 %557, 3840
  %559 = ashr i32 %558, 8
  %560 = sext i32 %559 to i64
  %561 = getelementptr inbounds [16 x i8], ptr %554, i64 0, i64 %560
  store i8 %553, ptr %561, align 1, !tbaa !13
  %562 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %563 = load i16, ptr %562, align 2, !tbaa !9
  %564 = zext i16 %563 to i32
  %565 = add nsw i32 %564, 2
  %566 = trunc i32 %565 to i16
  store i16 %566, ptr %562, align 2, !tbaa !9
  br label %605

567:                                              ; preds = %246
  %568 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %569 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %570 = load i16, ptr %569, align 2, !tbaa !14
  %571 = zext i16 %570 to i32
  %572 = and i32 %571, 3840
  %573 = ashr i32 %572, 8
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds [16 x i8], ptr %568, i64 0, i64 %574
  %576 = load i8, ptr %575, align 1, !tbaa !13
  %577 = zext i8 %576 to i32
  %578 = ashr i32 %577, 7
  %579 = trunc i32 %578 to i8
  %580 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %581 = getelementptr inbounds [16 x i8], ptr %580, i64 0, i64 15
  store i8 %579, ptr %581, align 1, !tbaa !13
  %582 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %583 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %584 = load i16, ptr %583, align 2, !tbaa !14
  %585 = zext i16 %584 to i32
  %586 = and i32 %585, 3840
  %587 = ashr i32 %586, 8
  %588 = sext i32 %587 to i64
  %589 = getelementptr inbounds [16 x i8], ptr %582, i64 0, i64 %588
  %590 = load i8, ptr %589, align 1, !tbaa !13
  %591 = zext i8 %590 to i32
  %592 = shl i32 %591, 1
  %593 = trunc i32 %592 to i8
  store i8 %593, ptr %589, align 1, !tbaa !13
  %594 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %595 = load i16, ptr %594, align 2, !tbaa !9
  %596 = zext i16 %595 to i32
  %597 = add nsw i32 %596, 2
  %598 = trunc i32 %597 to i16
  store i16 %598, ptr %594, align 2, !tbaa !9
  br label %605

599:                                              ; preds = %246
  %600 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.2)
  %601 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %602 = load i16, ptr %601, align 2, !tbaa !14
  %603 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8) %600, i16 noundef zeroext %602)
  %604 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %603, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 3) #7
  unreachable

605:                                              ; preds = %567, %531, %471, %443, %409, %330, %302, %274, %251
  br label %1184

606:                                              ; preds = %1
  %607 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %608 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %609 = load i16, ptr %608, align 2, !tbaa !14
  %610 = zext i16 %609 to i32
  %611 = and i32 %610, 3840
  %612 = ashr i32 %611, 8
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds [16 x i8], ptr %607, i64 0, i64 %613
  %615 = load i8, ptr %614, align 1, !tbaa !13
  %616 = zext i8 %615 to i32
  %617 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %618 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %619 = load i16, ptr %618, align 2, !tbaa !14
  %620 = zext i16 %619 to i32
  %621 = and i32 %620, 240
  %622 = ashr i32 %621, 4
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds [16 x i8], ptr %617, i64 0, i64 %623
  %625 = load i8, ptr %624, align 1, !tbaa !13
  %626 = zext i8 %625 to i32
  %627 = icmp ne i32 %616, %626
  br i1 %627, label %628, label %634

628:                                              ; preds = %606
  %629 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %630 = load i16, ptr %629, align 2, !tbaa !9
  %631 = zext i16 %630 to i32
  %632 = add nsw i32 %631, 4
  %633 = trunc i32 %632 to i16
  store i16 %633, ptr %629, align 2, !tbaa !9
  br label %640

634:                                              ; preds = %606
  %635 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %636 = load i16, ptr %635, align 2, !tbaa !9
  %637 = zext i16 %636 to i32
  %638 = add nsw i32 %637, 2
  %639 = trunc i32 %638 to i16
  store i16 %639, ptr %635, align 2, !tbaa !9
  br label %640

640:                                              ; preds = %634, %628
  br label %1184

641:                                              ; preds = %1
  %642 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %643 = load i16, ptr %642, align 2, !tbaa !14
  %644 = zext i16 %643 to i32
  %645 = and i32 %644, 4095
  %646 = trunc i32 %645 to i16
  %647 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  store i16 %646, ptr %647, align 2, !tbaa !22
  %648 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %649 = load i16, ptr %648, align 2, !tbaa !9
  %650 = zext i16 %649 to i32
  %651 = add nsw i32 %650, 2
  %652 = trunc i32 %651 to i16
  store i16 %652, ptr %648, align 2, !tbaa !9
  br label %1184

653:                                              ; preds = %1
  %654 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %655 = load i16, ptr %654, align 2, !tbaa !14
  %656 = zext i16 %655 to i32
  %657 = and i32 %656, 4095
  %658 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %659 = getelementptr inbounds [16 x i8], ptr %658, i64 0, i64 0
  %660 = load i8, ptr %659, align 2, !tbaa !13
  %661 = zext i8 %660 to i32
  %662 = add nsw i32 %657, %661
  %663 = trunc i32 %662 to i16
  %664 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  store i16 %663, ptr %664, align 2, !tbaa !9
  br label %1184

665:                                              ; preds = %1
  %666 = call i32 @rand() #6
  %667 = srem i32 %666, 256
  %668 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %669 = load i16, ptr %668, align 2, !tbaa !14
  %670 = zext i16 %669 to i32
  %671 = and i32 %670, 255
  %672 = and i32 %667, %671
  %673 = trunc i32 %672 to i8
  %674 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %675 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %676 = load i16, ptr %675, align 2, !tbaa !14
  %677 = zext i16 %676 to i32
  %678 = and i32 %677, 3840
  %679 = ashr i32 %678, 8
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds [16 x i8], ptr %674, i64 0, i64 %680
  store i8 %673, ptr %681, align 1, !tbaa !13
  %682 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %683 = load i16, ptr %682, align 2, !tbaa !9
  %684 = zext i16 %683 to i32
  %685 = add nsw i32 %684, 2
  %686 = trunc i32 %685 to i16
  store i16 %686, ptr %682, align 2, !tbaa !9
  br label %1184

687:                                              ; preds = %1
  call void @llvm.lifetime.start.p0(i64 2, ptr %4) #6
  %688 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %689 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %690 = load i16, ptr %689, align 2, !tbaa !14
  %691 = zext i16 %690 to i32
  %692 = and i32 %691, 3840
  %693 = ashr i32 %692, 8
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds [16 x i8], ptr %688, i64 0, i64 %694
  %696 = load i8, ptr %695, align 1, !tbaa !13
  %697 = zext i8 %696 to i16
  store i16 %697, ptr %4, align 2, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 2, ptr %5) #6
  %698 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %699 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %700 = load i16, ptr %699, align 2, !tbaa !14
  %701 = zext i16 %700 to i32
  %702 = and i32 %701, 240
  %703 = ashr i32 %702, 4
  %704 = sext i32 %703 to i64
  %705 = getelementptr inbounds [16 x i8], ptr %698, i64 0, i64 %704
  %706 = load i8, ptr %705, align 1, !tbaa !13
  %707 = zext i8 %706 to i16
  store i16 %707, ptr %5, align 2, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 2, ptr %6) #6
  %708 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %709 = load i16, ptr %708, align 2, !tbaa !14
  %710 = zext i16 %709 to i32
  %711 = and i32 %710, 15
  %712 = trunc i32 %711 to i16
  store i16 %712, ptr %6, align 2, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 2, ptr %7) #6
  %713 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %714 = getelementptr inbounds [16 x i8], ptr %713, i64 0, i64 15
  store i8 0, ptr %714, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !15
  br label %715

715:                                              ; preds = %786, %687
  %716 = load i32, ptr %8, align 4, !tbaa !15
  %717 = load i16, ptr %6, align 2, !tbaa !21
  %718 = zext i16 %717 to i32
  %719 = icmp slt i32 %716, %718
  br i1 %719, label %721, label %720

720:                                              ; preds = %715
  store i32 8, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %789

721:                                              ; preds = %715
  %722 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %723 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %724 = load i16, ptr %723, align 2, !tbaa !22
  %725 = zext i16 %724 to i32
  %726 = load i32, ptr %8, align 4, !tbaa !15
  %727 = add nsw i32 %725, %726
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds [4096 x i8], ptr %722, i64 0, i64 %728
  %730 = load i8, ptr %729, align 1, !tbaa !13
  %731 = zext i8 %730 to i16
  store i16 %731, ptr %7, align 2, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !15
  br label %732

732:                                              ; preds = %782, %721
  %733 = load i32, ptr %10, align 4, !tbaa !15
  %734 = icmp slt i32 %733, 8
  br i1 %734, label %736, label %735

735:                                              ; preds = %732
  store i32 11, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %785

736:                                              ; preds = %732
  %737 = load i16, ptr %7, align 2, !tbaa !21
  %738 = zext i16 %737 to i32
  %739 = load i32, ptr %10, align 4, !tbaa !15
  %740 = ashr i32 128, %739
  %741 = and i32 %738, %740
  %742 = icmp ne i32 %741, 0
  br i1 %742, label %743, label %781

743:                                              ; preds = %736
  %744 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 9
  %745 = load i16, ptr %4, align 2, !tbaa !21
  %746 = zext i16 %745 to i32
  %747 = load i32, ptr %10, align 4, !tbaa !15
  %748 = add nsw i32 %746, %747
  %749 = load i16, ptr %5, align 2, !tbaa !21
  %750 = zext i16 %749 to i32
  %751 = load i32, ptr %8, align 4, !tbaa !15
  %752 = add nsw i32 %750, %751
  %753 = mul nsw i32 %752, 64
  %754 = add nsw i32 %748, %753
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds [2048 x i8], ptr %744, i64 0, i64 %755
  %757 = load i8, ptr %756, align 1, !tbaa !13
  %758 = zext i8 %757 to i32
  %759 = icmp eq i32 %758, 1
  br i1 %759, label %760, label %763

760:                                              ; preds = %743
  %761 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %762 = getelementptr inbounds [16 x i8], ptr %761, i64 0, i64 15
  store i8 1, ptr %762, align 1, !tbaa !13
  br label %763

763:                                              ; preds = %760, %743
  %764 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 9
  %765 = load i16, ptr %4, align 2, !tbaa !21
  %766 = zext i16 %765 to i32
  %767 = load i32, ptr %10, align 4, !tbaa !15
  %768 = add nsw i32 %766, %767
  %769 = load i16, ptr %5, align 2, !tbaa !21
  %770 = zext i16 %769 to i32
  %771 = load i32, ptr %8, align 4, !tbaa !15
  %772 = add nsw i32 %770, %771
  %773 = mul nsw i32 %772, 64
  %774 = add nsw i32 %768, %773
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds [2048 x i8], ptr %764, i64 0, i64 %775
  %777 = load i8, ptr %776, align 1, !tbaa !13
  %778 = zext i8 %777 to i32
  %779 = xor i32 %778, 1
  %780 = trunc i32 %779 to i8
  store i8 %780, ptr %776, align 1, !tbaa !13
  br label %781

781:                                              ; preds = %763, %736
  br label %782

782:                                              ; preds = %781
  %783 = load i32, ptr %10, align 4, !tbaa !15
  %784 = add nsw i32 %783, 1
  store i32 %784, ptr %10, align 4, !tbaa !15
  br label %732, !llvm.loop !23

785:                                              ; preds = %735
  br label %786

786:                                              ; preds = %785
  %787 = load i32, ptr %8, align 4, !tbaa !15
  %788 = add nsw i32 %787, 1
  store i32 %788, ptr %8, align 4, !tbaa !15
  br label %715, !llvm.loop !24

789:                                              ; preds = %720
  %790 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 11
  store i8 1, ptr %790, align 2, !tbaa !19
  %791 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %792 = load i16, ptr %791, align 2, !tbaa !9
  %793 = zext i16 %792 to i32
  %794 = add nsw i32 %793, 2
  %795 = trunc i32 %794 to i16
  store i16 %795, ptr %791, align 2, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 2, ptr %4) #6
  br label %1184

796:                                              ; preds = %1
  %797 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %798 = load i16, ptr %797, align 2, !tbaa !14
  %799 = zext i16 %798 to i32
  %800 = and i32 %799, 255
  switch i32 %800, label %859 [
    i32 158, label %801
    i32 161, label %830
  ]

801:                                              ; preds = %796
  %802 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 10
  %803 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %804 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %805 = load i16, ptr %804, align 2, !tbaa !14
  %806 = zext i16 %805 to i32
  %807 = and i32 %806, 3840
  %808 = ashr i32 %807, 8
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds [16 x i8], ptr %803, i64 0, i64 %809
  %811 = load i8, ptr %810, align 1, !tbaa !13
  %812 = zext i8 %811 to i64
  %813 = getelementptr inbounds [16 x i8], ptr %802, i64 0, i64 %812
  %814 = load i8, ptr %813, align 1, !tbaa !13
  %815 = zext i8 %814 to i32
  %816 = icmp ne i32 %815, 0
  br i1 %816, label %817, label %823

817:                                              ; preds = %801
  %818 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %819 = load i16, ptr %818, align 2, !tbaa !9
  %820 = zext i16 %819 to i32
  %821 = add nsw i32 %820, 4
  %822 = trunc i32 %821 to i16
  store i16 %822, ptr %818, align 2, !tbaa !9
  br label %829

823:                                              ; preds = %801
  %824 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %825 = load i16, ptr %824, align 2, !tbaa !9
  %826 = zext i16 %825 to i32
  %827 = add nsw i32 %826, 2
  %828 = trunc i32 %827 to i16
  store i16 %828, ptr %824, align 2, !tbaa !9
  br label %829

829:                                              ; preds = %823, %817
  br label %864

830:                                              ; preds = %796
  %831 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 10
  %832 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %833 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %834 = load i16, ptr %833, align 2, !tbaa !14
  %835 = zext i16 %834 to i32
  %836 = and i32 %835, 3840
  %837 = ashr i32 %836, 8
  %838 = sext i32 %837 to i64
  %839 = getelementptr inbounds [16 x i8], ptr %832, i64 0, i64 %838
  %840 = load i8, ptr %839, align 1, !tbaa !13
  %841 = zext i8 %840 to i64
  %842 = getelementptr inbounds [16 x i8], ptr %831, i64 0, i64 %841
  %843 = load i8, ptr %842, align 1, !tbaa !13
  %844 = zext i8 %843 to i32
  %845 = icmp eq i32 %844, 0
  br i1 %845, label %846, label %852

846:                                              ; preds = %830
  %847 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %848 = load i16, ptr %847, align 2, !tbaa !9
  %849 = zext i16 %848 to i32
  %850 = add nsw i32 %849, 4
  %851 = trunc i32 %850 to i16
  store i16 %851, ptr %847, align 2, !tbaa !9
  br label %858

852:                                              ; preds = %830
  %853 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %854 = load i16, ptr %853, align 2, !tbaa !9
  %855 = zext i16 %854 to i32
  %856 = add nsw i32 %855, 2
  %857 = trunc i32 %856 to i16
  store i16 %857, ptr %853, align 2, !tbaa !9
  br label %858

858:                                              ; preds = %852, %846
  br label %864

859:                                              ; preds = %796
  %860 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %861 = load i16, ptr %860, align 2, !tbaa !14
  %862 = zext i16 %861 to i32
  %863 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %862)
  call void @exit(i32 noundef 3) #7
  unreachable

864:                                              ; preds = %858, %829
  br label %1184

865:                                              ; preds = %1
  %866 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %867 = load i16, ptr %866, align 2, !tbaa !14
  %868 = zext i16 %867 to i32
  %869 = and i32 %868, 255
  switch i32 %869, label %1171 [
    i32 7, label %870
    i32 10, label %886
    i32 21, label %927
    i32 24, label %943
    i32 30, label %959
    i32 41, label %1002
    i32 51, label %1021
    i32 85, label %1083
    i32 101, label %1127
  ]

870:                                              ; preds = %865
  %871 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 7
  %872 = load i8, ptr %871, align 2, !tbaa !25
  %873 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %874 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %875 = load i16, ptr %874, align 2, !tbaa !14
  %876 = zext i16 %875 to i32
  %877 = and i32 %876, 3840
  %878 = ashr i32 %877, 8
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds [16 x i8], ptr %873, i64 0, i64 %879
  store i8 %872, ptr %880, align 1, !tbaa !13
  %881 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %882 = load i16, ptr %881, align 2, !tbaa !9
  %883 = zext i16 %882 to i32
  %884 = add nsw i32 %883, 2
  %885 = trunc i32 %884 to i16
  store i16 %885, ptr %881, align 2, !tbaa !9
  br label %1177

886:                                              ; preds = %865
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #6
  store i8 0, ptr %11, align 1, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !15
  br label %887

887:                                              ; preds = %911, %886
  %888 = load i32, ptr %12, align 4, !tbaa !15
  %889 = icmp slt i32 %888, 16
  br i1 %889, label %891, label %890

890:                                              ; preds = %887
  store i32 16, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  br label %914

891:                                              ; preds = %887
  %892 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 10
  %893 = load i32, ptr %12, align 4, !tbaa !15
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds [16 x i8], ptr %892, i64 0, i64 %894
  %896 = load i8, ptr %895, align 1, !tbaa !13
  %897 = zext i8 %896 to i32
  %898 = icmp ne i32 %897, 0
  br i1 %898, label %899, label %910

899:                                              ; preds = %891
  %900 = load i32, ptr %12, align 4, !tbaa !15
  %901 = trunc i32 %900 to i8
  %902 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %903 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %904 = load i16, ptr %903, align 2, !tbaa !14
  %905 = zext i16 %904 to i32
  %906 = and i32 %905, 3840
  %907 = ashr i32 %906, 8
  %908 = sext i32 %907 to i64
  %909 = getelementptr inbounds [16 x i8], ptr %902, i64 0, i64 %908
  store i8 %901, ptr %909, align 1, !tbaa !13
  store i8 1, ptr %11, align 1, !tbaa !26
  br label %910

910:                                              ; preds = %899, %891
  br label %911

911:                                              ; preds = %910
  %912 = load i32, ptr %12, align 4, !tbaa !15
  %913 = add nsw i32 %912, 1
  store i32 %913, ptr %12, align 4, !tbaa !15
  br label %887, !llvm.loop !27

914:                                              ; preds = %890
  %915 = load i8, ptr %11, align 1, !tbaa !26, !range !28, !noundef !29
  %916 = trunc i8 %915 to i1
  br i1 %916, label %918, label %917

917:                                              ; preds = %914
  store i32 1, ptr %9, align 4
  br label %924

918:                                              ; preds = %914
  %919 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %920 = load i16, ptr %919, align 2, !tbaa !9
  %921 = zext i16 %920 to i32
  %922 = add nsw i32 %921, 2
  %923 = trunc i32 %922 to i16
  store i16 %923, ptr %919, align 2, !tbaa !9
  store i32 0, ptr %9, align 4
  br label %924

924:                                              ; preds = %918, %917
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #6
  %925 = load i32, ptr %9, align 4
  switch i32 %925, label %1203 [
    i32 0, label %926
    i32 1, label %1202
  ]

926:                                              ; preds = %924
  br label %1177

927:                                              ; preds = %865
  %928 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %929 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %930 = load i16, ptr %929, align 2, !tbaa !14
  %931 = zext i16 %930 to i32
  %932 = and i32 %931, 3840
  %933 = ashr i32 %932, 8
  %934 = sext i32 %933 to i64
  %935 = getelementptr inbounds [16 x i8], ptr %928, i64 0, i64 %934
  %936 = load i8, ptr %935, align 1, !tbaa !13
  %937 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 7
  store i8 %936, ptr %937, align 2, !tbaa !25
  %938 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %939 = load i16, ptr %938, align 2, !tbaa !9
  %940 = zext i16 %939 to i32
  %941 = add nsw i32 %940, 2
  %942 = trunc i32 %941 to i16
  store i16 %942, ptr %938, align 2, !tbaa !9
  br label %1177

943:                                              ; preds = %865
  %944 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %945 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %946 = load i16, ptr %945, align 2, !tbaa !14
  %947 = zext i16 %946 to i32
  %948 = and i32 %947, 3840
  %949 = ashr i32 %948, 8
  %950 = sext i32 %949 to i64
  %951 = getelementptr inbounds [16 x i8], ptr %944, i64 0, i64 %950
  %952 = load i8, ptr %951, align 1, !tbaa !13
  %953 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 8
  store i8 %952, ptr %953, align 1, !tbaa !30
  %954 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %955 = load i16, ptr %954, align 2, !tbaa !9
  %956 = zext i16 %955 to i32
  %957 = add nsw i32 %956, 2
  %958 = trunc i32 %957 to i16
  store i16 %958, ptr %954, align 2, !tbaa !9
  br label %1177

959:                                              ; preds = %865
  %960 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %961 = load i16, ptr %960, align 2, !tbaa !22
  %962 = zext i16 %961 to i32
  %963 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %964 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %965 = load i16, ptr %964, align 2, !tbaa !14
  %966 = zext i16 %965 to i32
  %967 = and i32 %966, 3840
  %968 = ashr i32 %967, 8
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds [16 x i8], ptr %963, i64 0, i64 %969
  %971 = load i8, ptr %970, align 1, !tbaa !13
  %972 = zext i8 %971 to i32
  %973 = add nsw i32 %962, %972
  %974 = icmp sgt i32 %973, 4095
  br i1 %974, label %975, label %978

975:                                              ; preds = %959
  %976 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %977 = getelementptr inbounds [16 x i8], ptr %976, i64 0, i64 15
  store i8 1, ptr %977, align 1, !tbaa !13
  br label %981

978:                                              ; preds = %959
  %979 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %980 = getelementptr inbounds [16 x i8], ptr %979, i64 0, i64 15
  store i8 0, ptr %980, align 1, !tbaa !13
  br label %981

981:                                              ; preds = %978, %975
  %982 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %983 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %984 = load i16, ptr %983, align 2, !tbaa !14
  %985 = zext i16 %984 to i32
  %986 = and i32 %985, 3840
  %987 = ashr i32 %986, 8
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds [16 x i8], ptr %982, i64 0, i64 %988
  %990 = load i8, ptr %989, align 1, !tbaa !13
  %991 = zext i8 %990 to i32
  %992 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %993 = load i16, ptr %992, align 2, !tbaa !22
  %994 = zext i16 %993 to i32
  %995 = add nsw i32 %994, %991
  %996 = trunc i32 %995 to i16
  store i16 %996, ptr %992, align 2, !tbaa !22
  %997 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %998 = load i16, ptr %997, align 2, !tbaa !9
  %999 = zext i16 %998 to i32
  %1000 = add nsw i32 %999, 2
  %1001 = trunc i32 %1000 to i16
  store i16 %1001, ptr %997, align 2, !tbaa !9
  br label %1177

1002:                                             ; preds = %865
  %1003 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %1004 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1005 = load i16, ptr %1004, align 2, !tbaa !14
  %1006 = zext i16 %1005 to i32
  %1007 = and i32 %1006, 3840
  %1008 = ashr i32 %1007, 8
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds [16 x i8], ptr %1003, i64 0, i64 %1009
  %1011 = load i8, ptr %1010, align 1, !tbaa !13
  %1012 = zext i8 %1011 to i32
  %1013 = mul nsw i32 %1012, 5
  %1014 = trunc i32 %1013 to i16
  %1015 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  store i16 %1014, ptr %1015, align 2, !tbaa !22
  %1016 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %1017 = load i16, ptr %1016, align 2, !tbaa !9
  %1018 = zext i16 %1017 to i32
  %1019 = add nsw i32 %1018, 2
  %1020 = trunc i32 %1019 to i16
  store i16 %1020, ptr %1016, align 2, !tbaa !9
  br label %1177

1021:                                             ; preds = %865
  %1022 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %1023 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1024 = load i16, ptr %1023, align 2, !tbaa !14
  %1025 = zext i16 %1024 to i32
  %1026 = and i32 %1025, 3840
  %1027 = ashr i32 %1026, 8
  %1028 = sext i32 %1027 to i64
  %1029 = getelementptr inbounds [16 x i8], ptr %1022, i64 0, i64 %1028
  %1030 = load i8, ptr %1029, align 1, !tbaa !13
  %1031 = zext i8 %1030 to i32
  %1032 = sdiv i32 %1031, 100
  %1033 = trunc i32 %1032 to i8
  %1034 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %1035 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %1036 = load i16, ptr %1035, align 2, !tbaa !22
  %1037 = zext i16 %1036 to i64
  %1038 = getelementptr inbounds [4096 x i8], ptr %1034, i64 0, i64 %1037
  store i8 %1033, ptr %1038, align 1, !tbaa !13
  %1039 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %1040 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1041 = load i16, ptr %1040, align 2, !tbaa !14
  %1042 = zext i16 %1041 to i32
  %1043 = and i32 %1042, 3840
  %1044 = ashr i32 %1043, 8
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds [16 x i8], ptr %1039, i64 0, i64 %1045
  %1047 = load i8, ptr %1046, align 1, !tbaa !13
  %1048 = zext i8 %1047 to i32
  %1049 = sdiv i32 %1048, 10
  %1050 = srem i32 %1049, 10
  %1051 = trunc i32 %1050 to i8
  %1052 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %1053 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %1054 = load i16, ptr %1053, align 2, !tbaa !22
  %1055 = zext i16 %1054 to i32
  %1056 = add nsw i32 %1055, 1
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds [4096 x i8], ptr %1052, i64 0, i64 %1057
  store i8 %1051, ptr %1058, align 1, !tbaa !13
  %1059 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %1060 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1061 = load i16, ptr %1060, align 2, !tbaa !14
  %1062 = zext i16 %1061 to i32
  %1063 = and i32 %1062, 3840
  %1064 = ashr i32 %1063, 8
  %1065 = sext i32 %1064 to i64
  %1066 = getelementptr inbounds [16 x i8], ptr %1059, i64 0, i64 %1065
  %1067 = load i8, ptr %1066, align 1, !tbaa !13
  %1068 = zext i8 %1067 to i32
  %1069 = srem i32 %1068, 10
  %1070 = trunc i32 %1069 to i8
  %1071 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %1072 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %1073 = load i16, ptr %1072, align 2, !tbaa !22
  %1074 = zext i16 %1073 to i32
  %1075 = add nsw i32 %1074, 2
  %1076 = sext i32 %1075 to i64
  %1077 = getelementptr inbounds [4096 x i8], ptr %1071, i64 0, i64 %1076
  store i8 %1070, ptr %1077, align 1, !tbaa !13
  %1078 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %1079 = load i16, ptr %1078, align 2, !tbaa !9
  %1080 = zext i16 %1079 to i32
  %1081 = add nsw i32 %1080, 2
  %1082 = trunc i32 %1081 to i16
  store i16 %1082, ptr %1078, align 2, !tbaa !9
  br label %1177

1083:                                             ; preds = %865
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 0, ptr %13, align 4, !tbaa !15
  br label %1084

1084:                                             ; preds = %1107, %1083
  %1085 = load i32, ptr %13, align 4, !tbaa !15
  %1086 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1087 = load i16, ptr %1086, align 2, !tbaa !14
  %1088 = zext i16 %1087 to i32
  %1089 = and i32 %1088, 3840
  %1090 = ashr i32 %1089, 8
  %1091 = icmp sle i32 %1085, %1090
  br i1 %1091, label %1093, label %1092

1092:                                             ; preds = %1084
  store i32 19, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %1110

1093:                                             ; preds = %1084
  %1094 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %1095 = load i32, ptr %13, align 4, !tbaa !15
  %1096 = sext i32 %1095 to i64
  %1097 = getelementptr inbounds [16 x i8], ptr %1094, i64 0, i64 %1096
  %1098 = load i8, ptr %1097, align 1, !tbaa !13
  %1099 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %1100 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %1101 = load i16, ptr %1100, align 2, !tbaa !22
  %1102 = zext i16 %1101 to i32
  %1103 = load i32, ptr %13, align 4, !tbaa !15
  %1104 = add nsw i32 %1102, %1103
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds [4096 x i8], ptr %1099, i64 0, i64 %1105
  store i8 %1098, ptr %1106, align 1, !tbaa !13
  br label %1107

1107:                                             ; preds = %1093
  %1108 = load i32, ptr %13, align 4, !tbaa !15
  %1109 = add nsw i32 %1108, 1
  store i32 %1109, ptr %13, align 4, !tbaa !15
  br label %1084, !llvm.loop !31

1110:                                             ; preds = %1092
  %1111 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1112 = load i16, ptr %1111, align 2, !tbaa !14
  %1113 = zext i16 %1112 to i32
  %1114 = and i32 %1113, 3840
  %1115 = ashr i32 %1114, 8
  %1116 = add nsw i32 %1115, 1
  %1117 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %1118 = load i16, ptr %1117, align 2, !tbaa !22
  %1119 = zext i16 %1118 to i32
  %1120 = add nsw i32 %1119, %1116
  %1121 = trunc i32 %1120 to i16
  store i16 %1121, ptr %1117, align 2, !tbaa !22
  %1122 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %1123 = load i16, ptr %1122, align 2, !tbaa !9
  %1124 = zext i16 %1123 to i32
  %1125 = add nsw i32 %1124, 2
  %1126 = trunc i32 %1125 to i16
  store i16 %1126, ptr %1122, align 2, !tbaa !9
  br label %1177

1127:                                             ; preds = %865
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !15
  br label %1128

1128:                                             ; preds = %1151, %1127
  %1129 = load i32, ptr %14, align 4, !tbaa !15
  %1130 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1131 = load i16, ptr %1130, align 2, !tbaa !14
  %1132 = zext i16 %1131 to i32
  %1133 = and i32 %1132, 3840
  %1134 = ashr i32 %1133, 8
  %1135 = icmp sle i32 %1129, %1134
  br i1 %1135, label %1137, label %1136

1136:                                             ; preds = %1128
  store i32 22, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %1154

1137:                                             ; preds = %1128
  %1138 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 2
  %1139 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %1140 = load i16, ptr %1139, align 2, !tbaa !22
  %1141 = zext i16 %1140 to i32
  %1142 = load i32, ptr %14, align 4, !tbaa !15
  %1143 = add nsw i32 %1141, %1142
  %1144 = sext i32 %1143 to i64
  %1145 = getelementptr inbounds [4096 x i8], ptr %1138, i64 0, i64 %1144
  %1146 = load i8, ptr %1145, align 1, !tbaa !13
  %1147 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 3
  %1148 = load i32, ptr %14, align 4, !tbaa !15
  %1149 = sext i32 %1148 to i64
  %1150 = getelementptr inbounds [16 x i8], ptr %1147, i64 0, i64 %1149
  store i8 %1146, ptr %1150, align 1, !tbaa !13
  br label %1151

1151:                                             ; preds = %1137
  %1152 = load i32, ptr %14, align 4, !tbaa !15
  %1153 = add nsw i32 %1152, 1
  store i32 %1153, ptr %14, align 4, !tbaa !15
  br label %1128, !llvm.loop !32

1154:                                             ; preds = %1136
  %1155 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1156 = load i16, ptr %1155, align 2, !tbaa !14
  %1157 = zext i16 %1156 to i32
  %1158 = and i32 %1157, 3840
  %1159 = ashr i32 %1158, 8
  %1160 = add nsw i32 %1159, 1
  %1161 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 6
  %1162 = load i16, ptr %1161, align 2, !tbaa !22
  %1163 = zext i16 %1162 to i32
  %1164 = add nsw i32 %1163, %1160
  %1165 = trunc i32 %1164 to i16
  store i16 %1165, ptr %1161, align 2, !tbaa !22
  %1166 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 4
  %1167 = load i16, ptr %1166, align 2, !tbaa !9
  %1168 = zext i16 %1167 to i32
  %1169 = add nsw i32 %1168, 2
  %1170 = trunc i32 %1169 to i16
  store i16 %1170, ptr %1166, align 2, !tbaa !9
  br label %1177

1171:                                             ; preds = %865
  %1172 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.4)
  %1173 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1174 = load i16, ptr %1173, align 2, !tbaa !14
  %1175 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8) %1172, i16 noundef zeroext %1174)
  %1176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1175, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %1177

1177:                                             ; preds = %1171, %1154, %1110, %1021, %1002, %981, %943, %927, %926, %870
  br label %1184

1178:                                             ; preds = %1
  %1179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef @.str.5)
  %1180 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 5
  %1181 = load i16, ptr %1180, align 2, !tbaa !14
  %1182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8) %1179, i16 noundef zeroext %1181)
  %1183 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1182, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 3) #7
  unreachable

1184:                                             ; preds = %1177, %864, %789, %665, %653, %641, %640, %605, %224, %205, %204, %169, %140, %95, %88, %87
  %1185 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 7
  %1186 = load i8, ptr %1185, align 2, !tbaa !25
  %1187 = zext i8 %1186 to i32
  %1188 = icmp sgt i32 %1187, 0
  br i1 %1188, label %1189, label %1193

1189:                                             ; preds = %1184
  %1190 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 7
  %1191 = load i8, ptr %1190, align 2, !tbaa !25
  %1192 = add i8 %1191, -1
  store i8 %1192, ptr %1190, align 2, !tbaa !25
  br label %1193

1193:                                             ; preds = %1189, %1184
  %1194 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 8
  %1195 = load i8, ptr %1194, align 1, !tbaa !30
  %1196 = zext i8 %1195 to i32
  %1197 = icmp sgt i32 %1196, 0
  br i1 %1197, label %1198, label %1202

1198:                                             ; preds = %1193
  %1199 = getelementptr inbounds %class.Chip8, ptr %15, i32 0, i32 8
  %1200 = load i8, ptr %1199, align 1, !tbaa !30
  %1201 = add i8 %1200, -1
  store i8 %1201, ptr %1199, align 1, !tbaa !30
  br label %1202

1202:                                             ; preds = %1198, %1193, %924
  ret void

1203:                                             ; preds = %924
  unreachable
}

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8), i16 noundef zeroext) #2 align 2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #3

; Function Attrs: nounwind
declare i32 @rand() #4

declare i32 @printf(ptr noundef, ...) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint 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 #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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "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 #5 = { "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 #6 = { nounwind }
attributes #7 = { noreturn 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, !11, i64 4146}
!10 = !{!"_ZTS5Chip8", !7, i64 0, !11, i64 32, !7, i64 34, !7, i64 4130, !11, i64 4146, !11, i64 4148, !11, i64 4150, !7, i64 4152, !7, i64 4153, !7, i64 4154, !7, i64 6202, !12, i64 6218}
!11 = !{!"short", !7, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!10, !11, i64 4148}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!10, !12, i64 6218}
!20 = !{!10, !11, i64 32}
!21 = !{!11, !11, i64 0}
!22 = !{!10, !11, i64 4150}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = !{!10, !7, i64 4152}
!26 = !{!12, !12, i64 0}
!27 = distinct !{!27, !18}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!10, !7, i64 4153}
!31 = distinct !{!31, !18}
!32 = distinct !{!32, !18}


; 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.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@_ZSt4cerr = external global %"class.std::basic_ostream", align 8
@.str.2 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [15 x i8], align 1

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5Chip812emulateCycleEv(ptr noundef nonnull align 2 dereferenceable(6219) %0) local_unnamed_addr #1 align 2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 34
  %3 = getelementptr inbounds i8, ptr %0, i64 4146
  %4 = load i16, ptr %3, align 2, !tbaa !5
  %5 = zext i16 %4 to i64
  %6 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %5
  %7 = load i8, ptr %6, align 1, !tbaa !11
  %8 = zext i8 %7 to i16
  %9 = shl nuw i16 %8, 8
  %10 = add nuw nsw i64 %5, 1
  %11 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %10
  %12 = load i8, ptr %11, align 1, !tbaa !11
  %13 = zext i8 %12 to i16
  %14 = or disjoint i16 %9, %13
  %15 = getelementptr inbounds i8, ptr %0, i64 4148
  store i16 %14, ptr %15, align 2, !tbaa !12
  %16 = zext i16 %14 to i32
  %17 = lshr i32 %16, 12
  switch i32 %17, label %default.unreachable [
    i32 0, label %18
    i32 1, label %36
    i32 2, label %38
    i32 3, label %47
    i32 4, label %59
    i32 5, label %70
    i32 6, label %87
    i32 7, label %94
    i32 8, label %103
    i32 9, label %248
    i32 10, label %264
    i32 11, label %268
    i32 12, label %274
    i32 13, label %287
    i32 14, label %395
    i32 15, label %429
  ]

18:                                               ; preds = %1
  %19 = and i32 %16, 15
  switch i32 %19, label %31 [
    i32 0, label %.preheader
    i32 14, label %23
  ]

.preheader:                                       ; preds = %18
  %20 = getelementptr inbounds i8, ptr %0, i64 4154
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 2 dereferenceable(2048) %20, i8 0, i64 2048, i1 false), !tbaa !11
  %21 = getelementptr inbounds i8, ptr %0, i64 6218
  store i8 1, ptr %21, align 2, !tbaa !13
  %22 = add i16 %4, 2
  store i16 %22, ptr %3, align 2, !tbaa !5
  br label %637

23:                                               ; preds = %18
  %24 = getelementptr inbounds i8, ptr %0, i64 32
  %25 = load i16, ptr %24, align 2, !tbaa !14
  %26 = add i16 %25, -1
  store i16 %26, ptr %24, align 2, !tbaa !14
  %27 = zext i16 %26 to i64
  %28 = getelementptr inbounds [16 x i16], ptr %0, i64 0, i64 %27
  %29 = load i16, ptr %28, align 2, !tbaa !15
  %30 = add i16 %29, 2
  store i16 %30, ptr %3, align 2, !tbaa !5
  br label %637

31:                                               ; preds = %18
  %32 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.2)
  %33 = load i16, ptr %15, align 2, !tbaa !12
  %34 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8) %32, i16 noundef zeroext %33)
  %35 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 3) #6
  unreachable

36:                                               ; preds = %1
  %37 = and i16 %14, 4095
  store i16 %37, ptr %3, align 2, !tbaa !5
  br label %637

38:                                               ; preds = %1
  %39 = getelementptr inbounds i8, ptr %0, i64 32
  %40 = load i16, ptr %39, align 2, !tbaa !14
  %41 = zext i16 %40 to i64
  %42 = getelementptr inbounds [16 x i16], ptr %0, i64 0, i64 %41
  store i16 %4, ptr %42, align 2, !tbaa !15
  %43 = load i16, ptr %39, align 2, !tbaa !14
  %44 = add i16 %43, 1
  store i16 %44, ptr %39, align 2, !tbaa !14
  %45 = load i16, ptr %15, align 2, !tbaa !12
  %46 = and i16 %45, 4095
  store i16 %46, ptr %3, align 2, !tbaa !5
  br label %637

47:                                               ; preds = %1
  %48 = getelementptr inbounds i8, ptr %0, i64 4130
  %49 = lshr i32 %16, 8
  %50 = and i32 %49, 15
  %51 = zext nneg i32 %50 to i64
  %52 = getelementptr inbounds [16 x i8], ptr %48, i64 0, i64 %51
  %53 = load i8, ptr %52, align 1, !tbaa !11
  %54 = icmp eq i8 %53, %12
  br i1 %54, label %55, label %57

55:                                               ; preds = %47
  %56 = add i16 %4, 4
  store i16 %56, ptr %3, align 2, !tbaa !5
  br label %637

57:                                               ; preds = %47
  %58 = add i16 %4, 2
  store i16 %58, ptr %3, align 2, !tbaa !5
  br label %637

59:                                               ; preds = %1
  %60 = getelementptr inbounds i8, ptr %0, i64 4130
  %61 = lshr i32 %16, 8
  %62 = and i32 %61, 15
  %63 = zext nneg i32 %62 to i64
  %64 = getelementptr inbounds [16 x i8], ptr %60, i64 0, i64 %63
  %65 = load i8, ptr %64, align 1, !tbaa !11
  %.not47 = icmp eq i8 %65, %12
  br i1 %.not47, label %68, label %66

66:                                               ; preds = %59
  %67 = add i16 %4, 4
  store i16 %67, ptr %3, align 2, !tbaa !5
  br label %637

68:                                               ; preds = %59
  %69 = add i16 %4, 2
  store i16 %69, ptr %3, align 2, !tbaa !5
  br label %637

70:                                               ; preds = %1
  %71 = getelementptr inbounds i8, ptr %0, i64 4130
  %72 = lshr i32 %16, 8
  %73 = and i32 %72, 15
  %74 = zext nneg i32 %73 to i64
  %75 = getelementptr inbounds [16 x i8], ptr %71, i64 0, i64 %74
  %76 = load i8, ptr %75, align 1, !tbaa !11
  %77 = lshr i32 %16, 4
  %78 = and i32 %77, 15
  %79 = zext nneg i32 %78 to i64
  %80 = getelementptr inbounds [16 x i8], ptr %71, i64 0, i64 %79
  %81 = load i8, ptr %80, align 1, !tbaa !11
  %82 = icmp eq i8 %76, %81
  br i1 %82, label %83, label %85

83:                                               ; preds = %70
  %84 = add i16 %4, 4
  store i16 %84, ptr %3, align 2, !tbaa !5
  br label %637

85:                                               ; preds = %70
  %86 = add i16 %4, 2
  store i16 %86, ptr %3, align 2, !tbaa !5
  br label %637

87:                                               ; preds = %1
  %88 = getelementptr inbounds i8, ptr %0, i64 4130
  %89 = lshr i32 %16, 8
  %90 = and i32 %89, 15
  %91 = zext nneg i32 %90 to i64
  %92 = getelementptr inbounds [16 x i8], ptr %88, i64 0, i64 %91
  store i8 %12, ptr %92, align 1, !tbaa !11
  %93 = add i16 %4, 2
  store i16 %93, ptr %3, align 2, !tbaa !5
  br label %637

94:                                               ; preds = %1
  %95 = getelementptr inbounds i8, ptr %0, i64 4130
  %96 = lshr i32 %16, 8
  %97 = and i32 %96, 15
  %98 = zext nneg i32 %97 to i64
  %99 = getelementptr inbounds [16 x i8], ptr %95, i64 0, i64 %98
  %100 = load i8, ptr %99, align 1, !tbaa !11
  %101 = add i8 %100, %12
  store i8 %101, ptr %99, align 1, !tbaa !11
  %102 = add i16 %4, 2
  store i16 %102, ptr %3, align 2, !tbaa !5
  br label %637

103:                                              ; preds = %1
  %104 = and i32 %16, 15
  switch i32 %104, label %243 [
    i32 0, label %105
    i32 1, label %117
    i32 2, label %131
    i32 3, label %145
    i32 4, label %159
    i32 5, label %177
    i32 6, label %195
    i32 7, label %210
    i32 14, label %228
  ]

105:                                              ; preds = %103
  %106 = getelementptr inbounds i8, ptr %0, i64 4130
  %107 = lshr i32 %16, 4
  %108 = and i32 %107, 15
  %109 = zext nneg i32 %108 to i64
  %110 = getelementptr inbounds [16 x i8], ptr %106, i64 0, i64 %109
  %111 = load i8, ptr %110, align 1, !tbaa !11
  %112 = lshr i32 %16, 8
  %113 = and i32 %112, 15
  %114 = zext nneg i32 %113 to i64
  %115 = getelementptr inbounds [16 x i8], ptr %106, i64 0, i64 %114
  store i8 %111, ptr %115, align 1, !tbaa !11
  %116 = add i16 %4, 2
  store i16 %116, ptr %3, align 2, !tbaa !5
  br label %637

117:                                              ; preds = %103
  %118 = getelementptr inbounds i8, ptr %0, i64 4130
  %119 = lshr i32 %16, 4
  %120 = and i32 %119, 15
  %121 = zext nneg i32 %120 to i64
  %122 = getelementptr inbounds [16 x i8], ptr %118, i64 0, i64 %121
  %123 = load i8, ptr %122, align 1, !tbaa !11
  %124 = lshr i32 %16, 8
  %125 = and i32 %124, 15
  %126 = zext nneg i32 %125 to i64
  %127 = getelementptr inbounds [16 x i8], ptr %118, i64 0, i64 %126
  %128 = load i8, ptr %127, align 1, !tbaa !11
  %129 = or i8 %128, %123
  store i8 %129, ptr %127, align 1, !tbaa !11
  %130 = add i16 %4, 2
  store i16 %130, ptr %3, align 2, !tbaa !5
  br label %637

131:                                              ; preds = %103
  %132 = getelementptr inbounds i8, ptr %0, i64 4130
  %133 = lshr i32 %16, 4
  %134 = and i32 %133, 15
  %135 = zext nneg i32 %134 to i64
  %136 = getelementptr inbounds [16 x i8], ptr %132, i64 0, i64 %135
  %137 = load i8, ptr %136, align 1, !tbaa !11
  %138 = lshr i32 %16, 8
  %139 = and i32 %138, 15
  %140 = zext nneg i32 %139 to i64
  %141 = getelementptr inbounds [16 x i8], ptr %132, i64 0, i64 %140
  %142 = load i8, ptr %141, align 1, !tbaa !11
  %143 = and i8 %142, %137
  store i8 %143, ptr %141, align 1, !tbaa !11
  %144 = add i16 %4, 2
  store i16 %144, ptr %3, align 2, !tbaa !5
  br label %637

145:                                              ; preds = %103
  %146 = getelementptr inbounds i8, ptr %0, i64 4130
  %147 = lshr i32 %16, 4
  %148 = and i32 %147, 15
  %149 = zext nneg i32 %148 to i64
  %150 = getelementptr inbounds [16 x i8], ptr %146, i64 0, i64 %149
  %151 = load i8, ptr %150, align 1, !tbaa !11
  %152 = lshr i32 %16, 8
  %153 = and i32 %152, 15
  %154 = zext nneg i32 %153 to i64
  %155 = getelementptr inbounds [16 x i8], ptr %146, i64 0, i64 %154
  %156 = load i8, ptr %155, align 1, !tbaa !11
  %157 = xor i8 %156, %151
  store i8 %157, ptr %155, align 1, !tbaa !11
  %158 = add i16 %4, 2
  store i16 %158, ptr %3, align 2, !tbaa !5
  br label %637

159:                                              ; preds = %103
  %160 = getelementptr inbounds i8, ptr %0, i64 4130
  %161 = lshr i32 %16, 4
  %162 = and i32 %161, 15
  %163 = zext nneg i32 %162 to i64
  %164 = getelementptr inbounds [16 x i8], ptr %160, i64 0, i64 %163
  %165 = load i8, ptr %164, align 1, !tbaa !11
  %166 = lshr i32 %16, 8
  %167 = and i32 %166, 15
  %168 = zext nneg i32 %167 to i64
  %169 = getelementptr inbounds [16 x i8], ptr %160, i64 0, i64 %168
  %170 = load i8, ptr %169, align 1, !tbaa !11
  %171 = add i8 %170, %165
  store i8 %171, ptr %169, align 1, !tbaa !11
  %172 = load i8, ptr %164, align 1, !tbaa !11
  %173 = xor i8 %171, -1
  %174 = icmp ugt i8 %172, %173
  %spec.select = zext i1 %174 to i8
  %175 = getelementptr inbounds i8, ptr %0, i64 4145
  store i8 %spec.select, ptr %175, align 1
  %176 = add i16 %4, 2
  store i16 %176, ptr %3, align 2, !tbaa !5
  br label %637

177:                                              ; preds = %103
  %178 = getelementptr inbounds i8, ptr %0, i64 4130
  %179 = lshr i32 %16, 4
  %180 = and i32 %179, 15
  %181 = zext nneg i32 %180 to i64
  %182 = getelementptr inbounds [16 x i8], ptr %178, i64 0, i64 %181
  %183 = load i8, ptr %182, align 1, !tbaa !11
  %184 = lshr i32 %16, 8
  %185 = and i32 %184, 15
  %186 = zext nneg i32 %185 to i64
  %187 = getelementptr inbounds [16 x i8], ptr %178, i64 0, i64 %186
  %188 = load i8, ptr %187, align 1, !tbaa !11
  %189 = icmp ule i8 %183, %188
  %spec.select85 = zext i1 %189 to i8
  %190 = getelementptr inbounds i8, ptr %0, i64 4145
  store i8 %spec.select85, ptr %190, align 1
  %191 = load i8, ptr %182, align 1, !tbaa !11
  %192 = load i8, ptr %187, align 1, !tbaa !11
  %193 = sub i8 %192, %191
  store i8 %193, ptr %187, align 1, !tbaa !11
  %194 = add i16 %4, 2
  store i16 %194, ptr %3, align 2, !tbaa !5
  br label %637

195:                                              ; preds = %103
  %196 = getelementptr inbounds i8, ptr %0, i64 4130
  %197 = lshr i32 %16, 8
  %198 = and i32 %197, 15
  %199 = zext nneg i32 %198 to i64
  %200 = getelementptr inbounds [16 x i8], ptr %196, i64 0, i64 %199
  %201 = load i8, ptr %200, align 1, !tbaa !11
  %202 = and i8 %201, 1
  %203 = getelementptr inbounds i8, ptr %0, i64 4145
  store i8 %202, ptr %203, align 1, !tbaa !11
  %204 = and i16 %8, 15
  %205 = zext nneg i16 %204 to i64
  %206 = getelementptr inbounds [16 x i8], ptr %196, i64 0, i64 %205
  %207 = load i8, ptr %206, align 1, !tbaa !11
  %208 = lshr i8 %207, 1
  store i8 %208, ptr %206, align 1, !tbaa !11
  %209 = add i16 %4, 2
  store i16 %209, ptr %3, align 2, !tbaa !5
  br label %637

210:                                              ; preds = %103
  %211 = getelementptr inbounds i8, ptr %0, i64 4130
  %212 = lshr i32 %16, 8
  %213 = and i32 %212, 15
  %214 = zext nneg i32 %213 to i64
  %215 = getelementptr inbounds [16 x i8], ptr %211, i64 0, i64 %214
  %216 = load i8, ptr %215, align 1, !tbaa !11
  %217 = lshr i32 %16, 4
  %218 = and i32 %217, 15
  %219 = zext nneg i32 %218 to i64
  %220 = getelementptr inbounds [16 x i8], ptr %211, i64 0, i64 %219
  %221 = load i8, ptr %220, align 1, !tbaa !11
  %222 = icmp ule i8 %216, %221
  %spec.select86 = zext i1 %222 to i8
  %223 = getelementptr inbounds i8, ptr %0, i64 4145
  store i8 %spec.select86, ptr %223, align 1
  %224 = load i8, ptr %220, align 1, !tbaa !11
  %225 = load i8, ptr %215, align 1, !tbaa !11
  %226 = sub i8 %224, %225
  store i8 %226, ptr %215, align 1, !tbaa !11
  %227 = add i16 %4, 2
  store i16 %227, ptr %3, align 2, !tbaa !5
  br label %637

228:                                              ; preds = %103
  %229 = getelementptr inbounds i8, ptr %0, i64 4130
  %230 = lshr i32 %16, 8
  %231 = and i32 %230, 15
  %232 = zext nneg i32 %231 to i64
  %233 = getelementptr inbounds [16 x i8], ptr %229, i64 0, i64 %232
  %234 = load i8, ptr %233, align 1, !tbaa !11
  %235 = lshr i8 %234, 7
  %236 = getelementptr inbounds i8, ptr %0, i64 4145
  store i8 %235, ptr %236, align 1, !tbaa !11
  %237 = and i16 %8, 15
  %238 = zext nneg i16 %237 to i64
  %239 = getelementptr inbounds [16 x i8], ptr %229, i64 0, i64 %238
  %240 = load i8, ptr %239, align 1, !tbaa !11
  %241 = shl i8 %240, 1
  store i8 %241, ptr %239, align 1, !tbaa !11
  %242 = add i16 %4, 2
  store i16 %242, ptr %3, align 2, !tbaa !5
  br label %637

243:                                              ; preds = %103
  %244 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.2)
  %245 = load i16, ptr %15, align 2, !tbaa !12
  %246 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8) %244, i16 noundef zeroext %245)
  %247 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %246, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 3) #6
  unreachable

248:                                              ; preds = %1
  %249 = getelementptr inbounds i8, ptr %0, i64 4130
  %250 = lshr i32 %16, 8
  %251 = and i32 %250, 15
  %252 = zext nneg i32 %251 to i64
  %253 = getelementptr inbounds [16 x i8], ptr %249, i64 0, i64 %252
  %254 = load i8, ptr %253, align 1, !tbaa !11
  %255 = lshr i32 %16, 4
  %256 = and i32 %255, 15
  %257 = zext nneg i32 %256 to i64
  %258 = getelementptr inbounds [16 x i8], ptr %249, i64 0, i64 %257
  %259 = load i8, ptr %258, align 1, !tbaa !11
  %.not46 = icmp eq i8 %254, %259
  br i1 %.not46, label %262, label %260

260:                                              ; preds = %248
  %261 = add i16 %4, 4
  store i16 %261, ptr %3, align 2, !tbaa !5
  br label %637

262:                                              ; preds = %248
  %263 = add i16 %4, 2
  store i16 %263, ptr %3, align 2, !tbaa !5
  br label %637

264:                                              ; preds = %1
  %265 = and i16 %14, 4095
  %266 = getelementptr inbounds i8, ptr %0, i64 4150
  store i16 %265, ptr %266, align 2, !tbaa !16
  %267 = add i16 %4, 2
  store i16 %267, ptr %3, align 2, !tbaa !5
  br label %637

268:                                              ; preds = %1
  %269 = and i16 %14, 4095
  %270 = getelementptr inbounds i8, ptr %0, i64 4130
  %271 = load i8, ptr %270, align 2, !tbaa !11
  %272 = zext i8 %271 to i16
  %273 = add nuw nsw i16 %269, %272
  store i16 %273, ptr %3, align 2, !tbaa !5
  br label %637

274:                                              ; preds = %1
  %275 = tail call i32 @rand() #7
  %276 = load i16, ptr %15, align 2, !tbaa !12
  %277 = zext i16 %276 to i32
  %278 = and i32 %275, %277
  %279 = trunc i32 %278 to i8
  %280 = getelementptr inbounds i8, ptr %0, i64 4130
  %281 = lshr i32 %277, 8
  %282 = and i32 %281, 15
  %283 = zext nneg i32 %282 to i64
  %284 = getelementptr inbounds [16 x i8], ptr %280, i64 0, i64 %283
  store i8 %279, ptr %284, align 1, !tbaa !11
  %285 = load i16, ptr %3, align 2, !tbaa !5
  %286 = add i16 %285, 2
  store i16 %286, ptr %3, align 2, !tbaa !5
  br label %637

287:                                              ; preds = %1
  %288 = getelementptr inbounds i8, ptr %0, i64 4130
  %289 = lshr i32 %16, 8
  %290 = and i32 %289, 15
  %291 = zext nneg i32 %290 to i64
  %292 = getelementptr inbounds [16 x i8], ptr %288, i64 0, i64 %291
  %293 = load i8, ptr %292, align 1, !tbaa !11
  %294 = lshr i32 %16, 4
  %295 = and i32 %294, 15
  %296 = zext nneg i32 %295 to i64
  %297 = getelementptr inbounds [16 x i8], ptr %288, i64 0, i64 %296
  %298 = load i8, ptr %297, align 1, !tbaa !11
  %299 = and i16 %13, 15
  %300 = getelementptr inbounds i8, ptr %0, i64 4145
  store i8 0, ptr %300, align 1, !tbaa !11
  %.not = icmp eq i16 %299, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %287
  %301 = getelementptr inbounds i8, ptr %0, i64 4150
  %302 = load i16, ptr %301, align 2, !tbaa !16
  %303 = getelementptr inbounds i8, ptr %0, i64 4154
  %304 = zext i16 %302 to i64
  %305 = zext i8 %298 to i64
  %306 = zext i8 %293 to i64
  %wide.trip.count = zext nneg i16 %299 to i64
  br label %309

._crit_edge:                                      ; preds = %394, %287
  %307 = getelementptr inbounds i8, ptr %0, i64 6218
  store i8 1, ptr %307, align 2, !tbaa !13
  %308 = add i16 %4, 2
  store i16 %308, ptr %3, align 2, !tbaa !5
  br label %637

309:                                              ; preds = %.lr.ph, %394
  %indvars.iv73 = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next74, %394 ]
  %310 = add nuw nsw i64 %indvars.iv73, %304
  %311 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %310
  %312 = load i8, ptr %311, align 1, !tbaa !11
  %313 = zext i8 %312 to i32
  %314 = add nuw nsw i64 %indvars.iv73, %305
  %315 = shl nsw i64 %314, 6
  %316 = add nuw nsw i64 %315, %306
  %.not45 = icmp sgt i8 %312, -1
  br i1 %.not45, label %324, label %317

317:                                              ; preds = %309
  %318 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %316
  %319 = load i8, ptr %318, align 1, !tbaa !11
  %320 = icmp eq i8 %319, 1
  br i1 %320, label %321, label %322

321:                                              ; preds = %317
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %322

322:                                              ; preds = %321, %317
  %323 = xor i8 %319, 1
  store i8 %323, ptr %318, align 1, !tbaa !11
  br label %324

324:                                              ; preds = %309, %322
  %325 = and i32 %313, 64
  %.not45.1 = icmp eq i32 %325, 0
  br i1 %.not45.1, label %334, label %326

326:                                              ; preds = %324
  %327 = add nuw nsw i64 %316, 1
  %328 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %327
  %329 = load i8, ptr %328, align 1, !tbaa !11
  %330 = icmp eq i8 %329, 1
  br i1 %330, label %331, label %332

331:                                              ; preds = %326
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %332

332:                                              ; preds = %331, %326
  %333 = xor i8 %329, 1
  store i8 %333, ptr %328, align 1, !tbaa !11
  br label %334

334:                                              ; preds = %332, %324
  %335 = and i32 %313, 32
  %.not45.2 = icmp eq i32 %335, 0
  br i1 %.not45.2, label %344, label %336

336:                                              ; preds = %334
  %337 = add nuw nsw i64 %316, 2
  %338 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %337
  %339 = load i8, ptr %338, align 1, !tbaa !11
  %340 = icmp eq i8 %339, 1
  br i1 %340, label %341, label %342

341:                                              ; preds = %336
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %342

342:                                              ; preds = %341, %336
  %343 = xor i8 %339, 1
  store i8 %343, ptr %338, align 1, !tbaa !11
  br label %344

344:                                              ; preds = %342, %334
  %345 = and i32 %313, 16
  %.not45.3 = icmp eq i32 %345, 0
  br i1 %.not45.3, label %354, label %346

346:                                              ; preds = %344
  %347 = add nuw nsw i64 %316, 3
  %348 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %347
  %349 = load i8, ptr %348, align 1, !tbaa !11
  %350 = icmp eq i8 %349, 1
  br i1 %350, label %351, label %352

351:                                              ; preds = %346
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %352

352:                                              ; preds = %351, %346
  %353 = xor i8 %349, 1
  store i8 %353, ptr %348, align 1, !tbaa !11
  br label %354

354:                                              ; preds = %352, %344
  %355 = and i32 %313, 8
  %.not45.4 = icmp eq i32 %355, 0
  br i1 %.not45.4, label %364, label %356

356:                                              ; preds = %354
  %357 = add nuw nsw i64 %316, 4
  %358 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %357
  %359 = load i8, ptr %358, align 1, !tbaa !11
  %360 = icmp eq i8 %359, 1
  br i1 %360, label %361, label %362

361:                                              ; preds = %356
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %362

362:                                              ; preds = %361, %356
  %363 = xor i8 %359, 1
  store i8 %363, ptr %358, align 1, !tbaa !11
  br label %364

364:                                              ; preds = %362, %354
  %365 = and i32 %313, 4
  %.not45.5 = icmp eq i32 %365, 0
  br i1 %.not45.5, label %374, label %366

366:                                              ; preds = %364
  %367 = add nuw nsw i64 %316, 5
  %368 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %367
  %369 = load i8, ptr %368, align 1, !tbaa !11
  %370 = icmp eq i8 %369, 1
  br i1 %370, label %371, label %372

371:                                              ; preds = %366
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %372

372:                                              ; preds = %371, %366
  %373 = xor i8 %369, 1
  store i8 %373, ptr %368, align 1, !tbaa !11
  br label %374

374:                                              ; preds = %372, %364
  %375 = and i32 %313, 2
  %.not45.6 = icmp eq i32 %375, 0
  br i1 %.not45.6, label %384, label %376

376:                                              ; preds = %374
  %377 = add nuw nsw i64 %316, 6
  %378 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %377
  %379 = load i8, ptr %378, align 1, !tbaa !11
  %380 = icmp eq i8 %379, 1
  br i1 %380, label %381, label %382

381:                                              ; preds = %376
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %382

382:                                              ; preds = %381, %376
  %383 = xor i8 %379, 1
  store i8 %383, ptr %378, align 1, !tbaa !11
  br label %384

384:                                              ; preds = %382, %374
  %385 = and i32 %313, 1
  %.not45.7 = icmp eq i32 %385, 0
  br i1 %.not45.7, label %394, label %386

386:                                              ; preds = %384
  %387 = add nuw nsw i64 %316, 7
  %388 = getelementptr inbounds [2048 x i8], ptr %303, i64 0, i64 %387
  %389 = load i8, ptr %388, align 1, !tbaa !11
  %390 = icmp eq i8 %389, 1
  br i1 %390, label %391, label %392

391:                                              ; preds = %386
  store i8 1, ptr %300, align 1, !tbaa !11
  br label %392

392:                                              ; preds = %391, %386
  %393 = xor i8 %389, 1
  store i8 %393, ptr %388, align 1, !tbaa !11
  br label %394

394:                                              ; preds = %392, %384
  %indvars.iv.next74 = add nuw nsw i64 %indvars.iv73, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next74, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %309, !llvm.loop !17

395:                                              ; preds = %1
  switch i8 %12, label %427 [
    i8 -98, label %396
    i8 -95, label %411
  ]

396:                                              ; preds = %395
  %397 = getelementptr inbounds i8, ptr %0, i64 6202
  %398 = getelementptr inbounds i8, ptr %0, i64 4130
  %399 = lshr i32 %16, 8
  %400 = and i32 %399, 15
  %401 = zext nneg i32 %400 to i64
  %402 = getelementptr inbounds [16 x i8], ptr %398, i64 0, i64 %401
  %403 = load i8, ptr %402, align 1, !tbaa !11
  %404 = zext i8 %403 to i64
  %405 = getelementptr inbounds [16 x i8], ptr %397, i64 0, i64 %404
  %406 = load i8, ptr %405, align 1, !tbaa !11
  %.not44 = icmp eq i8 %406, 0
  br i1 %.not44, label %409, label %407

407:                                              ; preds = %396
  %408 = add i16 %4, 4
  store i16 %408, ptr %3, align 2, !tbaa !5
  br label %637

409:                                              ; preds = %396
  %410 = add i16 %4, 2
  store i16 %410, ptr %3, align 2, !tbaa !5
  br label %637

411:                                              ; preds = %395
  %412 = getelementptr inbounds i8, ptr %0, i64 6202
  %413 = getelementptr inbounds i8, ptr %0, i64 4130
  %414 = lshr i32 %16, 8
  %415 = and i32 %414, 15
  %416 = zext nneg i32 %415 to i64
  %417 = getelementptr inbounds [16 x i8], ptr %413, i64 0, i64 %416
  %418 = load i8, ptr %417, align 1, !tbaa !11
  %419 = zext i8 %418 to i64
  %420 = getelementptr inbounds [16 x i8], ptr %412, i64 0, i64 %419
  %421 = load i8, ptr %420, align 1, !tbaa !11
  %422 = icmp eq i8 %421, 0
  br i1 %422, label %423, label %425

423:                                              ; preds = %411
  %424 = add i16 %4, 4
  store i16 %424, ptr %3, align 2, !tbaa !5
  br label %637

425:                                              ; preds = %411
  %426 = add i16 %4, 2
  store i16 %426, ptr %3, align 2, !tbaa !5
  br label %637

427:                                              ; preds = %395
  %428 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %16)
  tail call void @exit(i32 noundef 3) #6
  unreachable

429:                                              ; preds = %1
  switch i8 %12, label %632 [
    i8 7, label %440
    i8 10, label %.preheader52
    i8 21, label %511
    i8 24, label %520
    i8 30, label %529
    i8 41, label %550
    i8 51, label %561
    i8 85, label %.preheader53
    i8 101, label %.preheader54
  ]

.preheader54:                                     ; preds = %429
  %430 = getelementptr inbounds i8, ptr %0, i64 4150
  %431 = getelementptr inbounds i8, ptr %0, i64 4130
  br label %621

.preheader53:                                     ; preds = %429
  %432 = getelementptr inbounds i8, ptr %0, i64 4130
  %433 = getelementptr inbounds i8, ptr %0, i64 4150
  br label %604

.preheader52:                                     ; preds = %429
  %434 = getelementptr inbounds i8, ptr %0, i64 6202
  %435 = getelementptr inbounds i8, ptr %0, i64 4130
  %436 = and i16 %8, 15
  %437 = zext nneg i16 %436 to i64
  %438 = getelementptr inbounds [16 x i8], ptr %435, i64 0, i64 %437
  %439 = load i8, ptr %434, align 2, !tbaa !11
  %.not43 = icmp ne i8 %439, 0
  br i1 %.not43, label %449, label %450

440:                                              ; preds = %429
  %441 = getelementptr inbounds i8, ptr %0, i64 4152
  %442 = load i8, ptr %441, align 2, !tbaa !19
  %443 = getelementptr inbounds i8, ptr %0, i64 4130
  %444 = lshr i32 %16, 8
  %445 = and i32 %444, 15
  %446 = zext nneg i32 %445 to i64
  %447 = getelementptr inbounds [16 x i8], ptr %443, i64 0, i64 %446
  store i8 %442, ptr %447, align 1, !tbaa !11
  %448 = add i16 %4, 2
  store i16 %448, ptr %3, align 2, !tbaa !5
  br label %637

449:                                              ; preds = %.preheader52
  store i8 0, ptr %438, align 1, !tbaa !11
  br label %450

450:                                              ; preds = %.preheader52, %449
  %451 = getelementptr inbounds i8, ptr %0, i64 6203
  %452 = load i8, ptr %451, align 1, !tbaa !11
  %.not43.1 = icmp eq i8 %452, 0
  br i1 %.not43.1, label %454, label %453

453:                                              ; preds = %450
  store i8 1, ptr %438, align 1, !tbaa !11
  br label %454

454:                                              ; preds = %453, %450
  %.1.1 = phi i1 [ true, %453 ], [ %.not43, %450 ]
  %455 = getelementptr inbounds i8, ptr %0, i64 6204
  %456 = load i8, ptr %455, align 2, !tbaa !11
  %.not43.2 = icmp eq i8 %456, 0
  br i1 %.not43.2, label %458, label %457

457:                                              ; preds = %454
  store i8 2, ptr %438, align 1, !tbaa !11
  br label %458

458:                                              ; preds = %457, %454
  %.1.2 = phi i1 [ true, %457 ], [ %.1.1, %454 ]
  %459 = getelementptr inbounds i8, ptr %0, i64 6205
  %460 = load i8, ptr %459, align 1, !tbaa !11
  %.not43.3 = icmp eq i8 %460, 0
  br i1 %.not43.3, label %462, label %461

461:                                              ; preds = %458
  store i8 3, ptr %438, align 1, !tbaa !11
  br label %462

462:                                              ; preds = %461, %458
  %.1.3 = phi i1 [ true, %461 ], [ %.1.2, %458 ]
  %463 = getelementptr inbounds i8, ptr %0, i64 6206
  %464 = load i8, ptr %463, align 2, !tbaa !11
  %.not43.4 = icmp eq i8 %464, 0
  br i1 %.not43.4, label %466, label %465

465:                                              ; preds = %462
  store i8 4, ptr %438, align 1, !tbaa !11
  br label %466

466:                                              ; preds = %465, %462
  %.1.4 = phi i1 [ true, %465 ], [ %.1.3, %462 ]
  %467 = getelementptr inbounds i8, ptr %0, i64 6207
  %468 = load i8, ptr %467, align 1, !tbaa !11
  %.not43.5 = icmp eq i8 %468, 0
  br i1 %.not43.5, label %470, label %469

469:                                              ; preds = %466
  store i8 5, ptr %438, align 1, !tbaa !11
  br label %470

470:                                              ; preds = %469, %466
  %.1.5 = phi i1 [ true, %469 ], [ %.1.4, %466 ]
  %471 = getelementptr inbounds i8, ptr %0, i64 6208
  %472 = load i8, ptr %471, align 2, !tbaa !11
  %.not43.6 = icmp eq i8 %472, 0
  br i1 %.not43.6, label %474, label %473

473:                                              ; preds = %470
  store i8 6, ptr %438, align 1, !tbaa !11
  br label %474

474:                                              ; preds = %473, %470
  %.1.6 = phi i1 [ true, %473 ], [ %.1.5, %470 ]
  %475 = getelementptr inbounds i8, ptr %0, i64 6209
  %476 = load i8, ptr %475, align 1, !tbaa !11
  %.not43.7 = icmp eq i8 %476, 0
  br i1 %.not43.7, label %478, label %477

477:                                              ; preds = %474
  store i8 7, ptr %438, align 1, !tbaa !11
  br label %478

478:                                              ; preds = %477, %474
  %.1.7 = phi i1 [ true, %477 ], [ %.1.6, %474 ]
  %479 = getelementptr inbounds i8, ptr %0, i64 6210
  %480 = load i8, ptr %479, align 2, !tbaa !11
  %.not43.8 = icmp eq i8 %480, 0
  br i1 %.not43.8, label %482, label %481

481:                                              ; preds = %478
  store i8 8, ptr %438, align 1, !tbaa !11
  br label %482

482:                                              ; preds = %481, %478
  %.1.8 = phi i1 [ true, %481 ], [ %.1.7, %478 ]
  %483 = getelementptr inbounds i8, ptr %0, i64 6211
  %484 = load i8, ptr %483, align 1, !tbaa !11
  %.not43.9 = icmp eq i8 %484, 0
  br i1 %.not43.9, label %486, label %485

485:                                              ; preds = %482
  store i8 9, ptr %438, align 1, !tbaa !11
  br label %486

486:                                              ; preds = %485, %482
  %.1.9 = phi i1 [ true, %485 ], [ %.1.8, %482 ]
  %487 = getelementptr inbounds i8, ptr %0, i64 6212
  %488 = load i8, ptr %487, align 2, !tbaa !11
  %.not43.10 = icmp eq i8 %488, 0
  br i1 %.not43.10, label %490, label %489

489:                                              ; preds = %486
  store i8 10, ptr %438, align 1, !tbaa !11
  br label %490

490:                                              ; preds = %489, %486
  %.1.10 = phi i1 [ true, %489 ], [ %.1.9, %486 ]
  %491 = getelementptr inbounds i8, ptr %0, i64 6213
  %492 = load i8, ptr %491, align 1, !tbaa !11
  %.not43.11 = icmp eq i8 %492, 0
  br i1 %.not43.11, label %494, label %493

493:                                              ; preds = %490
  store i8 11, ptr %438, align 1, !tbaa !11
  br label %494

494:                                              ; preds = %493, %490
  %.1.11 = phi i1 [ true, %493 ], [ %.1.10, %490 ]
  %495 = getelementptr inbounds i8, ptr %0, i64 6214
  %496 = load i8, ptr %495, align 2, !tbaa !11
  %.not43.12 = icmp eq i8 %496, 0
  br i1 %.not43.12, label %498, label %497

497:                                              ; preds = %494
  store i8 12, ptr %438, align 1, !tbaa !11
  br label %498

498:                                              ; preds = %497, %494
  %.1.12 = phi i1 [ true, %497 ], [ %.1.11, %494 ]
  %499 = getelementptr inbounds i8, ptr %0, i64 6215
  %500 = load i8, ptr %499, align 1, !tbaa !11
  %.not43.13 = icmp eq i8 %500, 0
  br i1 %.not43.13, label %502, label %501

501:                                              ; preds = %498
  store i8 13, ptr %438, align 1, !tbaa !11
  br label %502

502:                                              ; preds = %501, %498
  %.1.13 = phi i1 [ true, %501 ], [ %.1.12, %498 ]
  %503 = getelementptr inbounds i8, ptr %0, i64 6216
  %504 = load i8, ptr %503, align 2, !tbaa !11
  %.not43.14 = icmp eq i8 %504, 0
  br i1 %.not43.14, label %506, label %505

505:                                              ; preds = %502
  store i8 14, ptr %438, align 1, !tbaa !11
  br label %506

506:                                              ; preds = %505, %502
  %.1.14 = phi i1 [ true, %505 ], [ %.1.13, %502 ]
  %507 = getelementptr inbounds i8, ptr %0, i64 6217
  %508 = load i8, ptr %507, align 1, !tbaa !11
  %.not43.15 = icmp eq i8 %508, 0
  br i1 %.not43.15, label %509, label %.thread82

.thread82:                                        ; preds = %506
  store i8 15, ptr %438, align 1, !tbaa !11
  br label %.thread

509:                                              ; preds = %506
  br i1 %.1.14, label %.thread, label %647

.thread:                                          ; preds = %.thread82, %509
  %510 = add i16 %4, 2
  store i16 %510, ptr %3, align 2, !tbaa !5
  br label %637

511:                                              ; preds = %429
  %512 = getelementptr inbounds i8, ptr %0, i64 4130
  %513 = lshr i32 %16, 8
  %514 = and i32 %513, 15
  %515 = zext nneg i32 %514 to i64
  %516 = getelementptr inbounds [16 x i8], ptr %512, i64 0, i64 %515
  %517 = load i8, ptr %516, align 1, !tbaa !11
  %518 = getelementptr inbounds i8, ptr %0, i64 4152
  store i8 %517, ptr %518, align 2, !tbaa !19
  %519 = add i16 %4, 2
  store i16 %519, ptr %3, align 2, !tbaa !5
  br label %637

520:                                              ; preds = %429
  %521 = getelementptr inbounds i8, ptr %0, i64 4130
  %522 = lshr i32 %16, 8
  %523 = and i32 %522, 15
  %524 = zext nneg i32 %523 to i64
  %525 = getelementptr inbounds [16 x i8], ptr %521, i64 0, i64 %524
  %526 = load i8, ptr %525, align 1, !tbaa !11
  %527 = getelementptr inbounds i8, ptr %0, i64 4153
  store i8 %526, ptr %527, align 1, !tbaa !20
  %528 = add i16 %4, 2
  store i16 %528, ptr %3, align 2, !tbaa !5
  br label %637

529:                                              ; preds = %429
  %530 = getelementptr inbounds i8, ptr %0, i64 4150
  %531 = load i16, ptr %530, align 2, !tbaa !16
  %532 = zext i16 %531 to i32
  %533 = getelementptr inbounds i8, ptr %0, i64 4130
  %534 = lshr i32 %16, 8
  %535 = and i32 %534, 15
  %536 = zext nneg i32 %535 to i64
  %537 = getelementptr inbounds [16 x i8], ptr %533, i64 0, i64 %536
  %538 = load i8, ptr %537, align 1, !tbaa !11
  %539 = zext i8 %538 to i32
  %540 = add nuw nsw i32 %539, %532
  %541 = icmp ugt i32 %540, 4095
  %spec.select87 = zext i1 %541 to i8
  %542 = getelementptr inbounds i8, ptr %0, i64 4145
  store i8 %spec.select87, ptr %542, align 1
  %543 = and i16 %8, 15
  %544 = zext nneg i16 %543 to i64
  %545 = getelementptr inbounds [16 x i8], ptr %533, i64 0, i64 %544
  %546 = load i8, ptr %545, align 1, !tbaa !11
  %547 = zext i8 %546 to i16
  %548 = add i16 %531, %547
  store i16 %548, ptr %530, align 2, !tbaa !16
  %549 = add i16 %4, 2
  store i16 %549, ptr %3, align 2, !tbaa !5
  br label %637

550:                                              ; preds = %429
  %551 = getelementptr inbounds i8, ptr %0, i64 4130
  %552 = lshr i32 %16, 8
  %553 = and i32 %552, 15
  %554 = zext nneg i32 %553 to i64
  %555 = getelementptr inbounds [16 x i8], ptr %551, i64 0, i64 %554
  %556 = load i8, ptr %555, align 1, !tbaa !11
  %557 = zext i8 %556 to i16
  %558 = mul nuw nsw i16 %557, 5
  %559 = getelementptr inbounds i8, ptr %0, i64 4150
  store i16 %558, ptr %559, align 2, !tbaa !16
  %560 = add i16 %4, 2
  store i16 %560, ptr %3, align 2, !tbaa !5
  br label %637

561:                                              ; preds = %429
  %562 = getelementptr inbounds i8, ptr %0, i64 4130
  %563 = lshr i32 %16, 8
  %564 = and i32 %563, 15
  %565 = zext nneg i32 %564 to i64
  %566 = getelementptr inbounds [16 x i8], ptr %562, i64 0, i64 %565
  %567 = load i8, ptr %566, align 1, !tbaa !11
  %568 = udiv i8 %567, 100
  %569 = getelementptr inbounds i8, ptr %0, i64 4150
  %570 = load i16, ptr %569, align 2, !tbaa !16
  %571 = zext i16 %570 to i64
  %572 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %571
  store i8 %568, ptr %572, align 1, !tbaa !11
  %573 = load i16, ptr %15, align 2, !tbaa !12
  %574 = lshr i16 %573, 8
  %575 = and i16 %574, 15
  %576 = zext nneg i16 %575 to i64
  %577 = getelementptr inbounds [16 x i8], ptr %562, i64 0, i64 %576
  %578 = load i8, ptr %577, align 1, !tbaa !11
  %579 = udiv i8 %578, 10
  %580 = urem i8 %579, 10
  %581 = load i16, ptr %569, align 2, !tbaa !16
  %582 = zext i16 %581 to i64
  %583 = add nuw nsw i64 %582, 1
  %584 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %583
  store i8 %580, ptr %584, align 1, !tbaa !11
  %585 = load i16, ptr %15, align 2, !tbaa !12
  %586 = lshr i16 %585, 8
  %587 = and i16 %586, 15
  %588 = zext nneg i16 %587 to i64
  %589 = getelementptr inbounds [16 x i8], ptr %562, i64 0, i64 %588
  %590 = load i8, ptr %589, align 1, !tbaa !11
  %591 = urem i8 %590, 10
  %592 = load i16, ptr %569, align 2, !tbaa !16
  %593 = zext i16 %592 to i64
  %594 = add nuw nsw i64 %593, 2
  %595 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %594
  store i8 %591, ptr %595, align 1, !tbaa !11
  %596 = load i16, ptr %3, align 2, !tbaa !5
  %597 = add i16 %596, 2
  store i16 %597, ptr %3, align 2, !tbaa !5
  br label %637

598:                                              ; preds = %604
  %599 = add nuw nsw i16 %613, 1
  %600 = load i16, ptr %433, align 2, !tbaa !16
  %601 = add i16 %599, %600
  store i16 %601, ptr %433, align 2, !tbaa !16
  %602 = load i16, ptr %3, align 2, !tbaa !5
  %603 = add i16 %602, 2
  store i16 %603, ptr %3, align 2, !tbaa !5
  br label %637

604:                                              ; preds = %.preheader53, %604
  %indvars.iv65 = phi i64 [ 0, %.preheader53 ], [ %indvars.iv.next66, %604 ]
  %605 = getelementptr inbounds [16 x i8], ptr %432, i64 0, i64 %indvars.iv65
  %606 = load i8, ptr %605, align 1, !tbaa !11
  %607 = load i16, ptr %433, align 2, !tbaa !16
  %608 = zext i16 %607 to i64
  %609 = add nuw nsw i64 %indvars.iv65, %608
  %610 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %609
  store i8 %606, ptr %610, align 1, !tbaa !11
  %indvars.iv.next66 = add nuw nsw i64 %indvars.iv65, 1
  %611 = load i16, ptr %15, align 2, !tbaa !12
  %612 = lshr i16 %611, 8
  %613 = and i16 %612, 15
  %614 = zext nneg i16 %613 to i64
  %.not42.not = icmp ult i64 %indvars.iv65, %614
  br i1 %.not42.not, label %604, label %598, !llvm.loop !21

615:                                              ; preds = %621
  %616 = add nuw nsw i16 %630, 1
  %617 = load i16, ptr %430, align 2, !tbaa !16
  %618 = add i16 %616, %617
  store i16 %618, ptr %430, align 2, !tbaa !16
  %619 = load i16, ptr %3, align 2, !tbaa !5
  %620 = add i16 %619, 2
  store i16 %620, ptr %3, align 2, !tbaa !5
  br label %637

621:                                              ; preds = %.preheader54, %621
  %indvars.iv = phi i64 [ 0, %.preheader54 ], [ %indvars.iv.next, %621 ]
  %622 = load i16, ptr %430, align 2, !tbaa !16
  %623 = zext i16 %622 to i64
  %624 = add nuw nsw i64 %indvars.iv, %623
  %625 = getelementptr inbounds [4096 x i8], ptr %2, i64 0, i64 %624
  %626 = load i8, ptr %625, align 1, !tbaa !11
  %627 = getelementptr inbounds [16 x i8], ptr %431, i64 0, i64 %indvars.iv
  store i8 %626, ptr %627, align 1, !tbaa !11
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %628 = load i16, ptr %15, align 2, !tbaa !12
  %629 = lshr i16 %628, 8
  %630 = and i16 %629, 15
  %631 = zext nneg i16 %630 to i64
  %.not.not = icmp ult i64 %indvars.iv, %631
  br i1 %.not.not, label %621, label %615, !llvm.loop !22

632:                                              ; preds = %429
  %633 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cerr, ptr noundef nonnull @.str.4)
  %634 = load i16, ptr %15, align 2, !tbaa !12
  %635 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8) %633, i16 noundef zeroext %634)
  %636 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %635, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %637

default.unreachable:                              ; preds = %1
  unreachable

637:                                              ; preds = %.thread, %440, %511, %520, %529, %550, %561, %598, %615, %632, %409, %407, %425, %423, %260, %262, %105, %117, %131, %145, %159, %177, %195, %210, %228, %83, %85, %66, %68, %55, %57, %.preheader, %23, %._crit_edge, %274, %268, %264, %94, %87, %38, %36
  %638 = getelementptr inbounds i8, ptr %0, i64 4152
  %639 = load i8, ptr %638, align 2, !tbaa !19
  %.not48 = icmp eq i8 %639, 0
  br i1 %.not48, label %642, label %640

640:                                              ; preds = %637
  %641 = add i8 %639, -1
  store i8 %641, ptr %638, align 2, !tbaa !19
  br label %642

642:                                              ; preds = %640, %637
  %643 = getelementptr inbounds i8, ptr %0, i64 4153
  %644 = load i8, ptr %643, align 1, !tbaa !20
  %.not49 = icmp eq i8 %644, 0
  br i1 %.not49, label %647, label %645

645:                                              ; preds = %642
  %646 = add i8 %644, -1
  store i8 %646, ptr %643, align 1, !tbaa !20
  br label %647

647:                                              ; preds = %509, %645, %642
  ret void
}

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEt(ptr noundef nonnull align 8 dereferenceable(8), i16 noundef zeroext) local_unnamed_addr #1 align 2

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #4

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

attributes #0 = { inlinehint 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 #1 = { 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 #2 = { noreturn nounwind "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 "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nofree nounwind "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 #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { noreturn nounwind }
attributes #7 = { 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, !9, i64 4146}
!6 = !{!"_ZTS5Chip8", !7, i64 0, !9, i64 32, !7, i64 34, !7, i64 4130, !9, i64 4146, !9, i64 4148, !9, i64 4150, !7, i64 4152, !7, i64 4153, !7, i64 4154, !7, i64 6202, !10, i64 6218}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!"short", !7, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!6, !9, i64 4148}
!13 = !{!6, !10, i64 6218}
!14 = !{!6, !9, i64 32}
!15 = !{!9, !9, i64 0}
!16 = !{!6, !9, i64 4150}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!6, !7, i64 4152}
!20 = !{!6, !7, i64 4153}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MergedLoadStoreMotionPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass