; LLVM IR from mist64/perfect6502 :: measure (main)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.anon = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@memory = external global [65536 x i8], align 16
@initial_s = external dso_local global i16, align 2
@initial_p = external dso_local global i16, align 2
@initial_a = external dso_local global i16, align 2
@initial_x = external dso_local global i16, align 2
@initial_y = external dso_local global i16, align 2
@state = external dso_local global ptr, align 8
@cycle = external global i32, align 4
@.str = external hidden unnamed_addr constant [8 x i8], align 1
@data = external dso_local global [256 x %struct.anon], align 16
@__const.main.magics = external hidden unnamed_addr constant [19 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @setup_memory(i8 noundef zeroext) #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @resetChip_test() #0

declare ptr @initAndResetChip(...) #2

declare void @step(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i16, align 2
  %6 = alloca i32, align 4
  %7 = alloca [19 x i8], align 16
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca [100 x i16], align 16
  %13 = alloca [100 x i16], align 16
  %14 = alloca [100 x i16], align 16
  %15 = alloca i8, align 1
  %16 = alloca i8, align 1
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %22 = call ptr (...) @initAndResetChip()
  store ptr %22, ptr @state, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #4
  store i32 0, ptr %2, align 4, !tbaa !9
  br label %23

23:                                               ; preds = %1304, %0
  %24 = load i32, ptr %2, align 4, !tbaa !9
  %25 = icmp sle i32 %24, 255
  br i1 %25, label %27, label %26

26:                                               ; preds = %23
  store i32 2, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #4
  br label %1307

27:                                               ; preds = %23
  %28 = load i32, ptr %2, align 4, !tbaa !9
  %29 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %28)
  %30 = load i32, ptr %2, align 4, !tbaa !9
  %31 = trunc i32 %30 to i8
  call void @setup_memory(i8 noundef zeroext %31)
  call void @resetChip_test()
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %32

32:                                               ; preds = %51, %27
  %33 = load i32, ptr %4, align 4, !tbaa !9
  %34 = icmp slt i32 %33, 100
  br i1 %34, label %35, label %54

35:                                               ; preds = %32
  %36 = load ptr, ptr @state, align 8, !tbaa !5
  call void @step(ptr noundef %36)
  %37 = load i32, ptr @cycle, align 4, !tbaa !9
  %38 = and i32 %37, 1
  %39 = icmp ne i32 %38, 0
  br i1 %39, label %40, label %50

40:                                               ; preds = %35
  %41 = load ptr, ptr @state, align 8, !tbaa !5
  %42 = call i32 @readRW(ptr noundef %41)
  %43 = icmp ne i32 %42, 0
  br i1 %43, label %44, label %50

44:                                               ; preds = %40
  %45 = load ptr, ptr @state, align 8, !tbaa !5
  %46 = call zeroext i16 @readAddressBus(ptr noundef %45)
  %47 = zext i16 %46 to i32
  %48 = icmp eq i32 %47, 64512
  br i1 %48, label %49, label %50

49:                                               ; preds = %44
  br label %54

50:                                               ; preds = %44, %40, %35
  br label %51

51:                                               ; preds = %50
  %52 = load i32, ptr %4, align 4, !tbaa !9
  %53 = add nsw i32 %52, 1
  store i32 %53, ptr %4, align 4, !tbaa !9
  br label %32, !llvm.loop !11

54:                                               ; preds = %49, %32
  %55 = load i32, ptr %4, align 4, !tbaa !9
  %56 = icmp eq i32 %55, 100
  br i1 %56, label %57, label %62

57:                                               ; preds = %54
  %58 = load i32, ptr %2, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %59
  %61 = getelementptr inbounds %struct.anon, ptr %60, i32 0, i32 0
  store i32 1, ptr %61, align 16, !tbaa !13
  br label %1035

62:                                               ; preds = %54
  %63 = load i32, ptr %2, align 4, !tbaa !9
  %64 = sext i32 %63 to i64
  %65 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %64
  %66 = getelementptr inbounds %struct.anon, ptr %65, i32 0, i32 0
  store i32 0, ptr %66, align 16, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 2, ptr %5) #4
  %67 = load ptr, ptr @state, align 8, !tbaa !5
  %68 = call zeroext i8 @readSP(ptr noundef %67)
  %69 = zext i8 %68 to i32
  %70 = add nsw i32 256, %69
  %71 = add nsw i32 %70, 2
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %72
  %74 = load i8, ptr %73, align 1, !tbaa !15
  %75 = zext i8 %74 to i32
  %76 = load ptr, ptr @state, align 8, !tbaa !5
  %77 = call zeroext i8 @readSP(ptr noundef %76)
  %78 = zext i8 %77 to i32
  %79 = add nsw i32 256, %78
  %80 = add nsw i32 %79, 3
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %81
  %83 = load i8, ptr %82, align 1, !tbaa !15
  %84 = zext i8 %83 to i32
  %85 = shl i32 %84, 8
  %86 = or i32 %75, %85
  %87 = trunc i32 %86 to i16
  store i16 %87, ptr %5, align 2, !tbaa !16
  %88 = load i16, ptr %5, align 2, !tbaa !16
  %89 = zext i16 %88 to i32
  %90 = sub nsw i32 %89, 63488
  %91 = sub nsw i32 %90, 2
  %92 = load i32, ptr %2, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %93
  %95 = getelementptr inbounds %struct.anon, ptr %94, i32 0, i32 1
  store i32 %91, ptr %95, align 4, !tbaa !18
  %96 = load i32, ptr %2, align 4, !tbaa !9
  %97 = trunc i32 %96 to i8
  call void @setup_memory(i8 noundef zeroext %97)
  call void @resetChip_test()
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %109, %62
  %99 = load i32, ptr %4, align 4, !tbaa !9
  %100 = icmp slt i32 %99, 100
  br i1 %100, label %101, label %112

101:                                              ; preds = %98
  %102 = load ptr, ptr @state, align 8, !tbaa !5
  call void @step(ptr noundef %102)
  %103 = load ptr, ptr @state, align 8, !tbaa !5
  %104 = call zeroext i8 @readIR(ptr noundef %103)
  %105 = zext i8 %104 to i32
  %106 = icmp eq i32 %105, 0
  br i1 %106, label %107, label %108

107:                                              ; preds = %101
  br label %112

108:                                              ; preds = %101
  br label %109

109:                                              ; preds = %108
  %110 = load i32, ptr %4, align 4, !tbaa !9
  %111 = add nsw i32 %110, 1
  store i32 %111, ptr %4, align 4, !tbaa !9
  br label %98, !llvm.loop !19

112:                                              ; preds = %107, %98
  %113 = load i32, ptr @cycle, align 4, !tbaa !9
  %114 = icmp ne i32 %113, 0
  br i1 %114, label %115, label %122

115:                                              ; preds = %112
  %116 = load i32, ptr @cycle, align 4, !tbaa !9
  %117 = udiv i32 %116, 2
  %118 = load i32, ptr %2, align 4, !tbaa !9
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %119
  %121 = getelementptr inbounds %struct.anon, ptr %120, i32 0, i32 2
  store i32 %117, ptr %121, align 8, !tbaa !20
  br label %127

122:                                              ; preds = %112
  %123 = load i32, ptr %2, align 4, !tbaa !9
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %124
  %126 = getelementptr inbounds %struct.anon, ptr %125, i32 0, i32 2
  store i32 0, ptr %126, align 8, !tbaa !20
  br label %127

127:                                              ; preds = %122, %115
  %128 = load i32, ptr %2, align 4, !tbaa !9
  %129 = trunc i32 %128 to i8
  call void @setup_memory(i8 noundef zeroext %129)
  %130 = load i16, ptr @initial_x, align 2, !tbaa !16
  %131 = zext i16 %130 to i64
  %132 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %131
  store i8 5, ptr %132, align 1, !tbaa !15
  %133 = load i16, ptr @initial_y, align 2, !tbaa !16
  %134 = zext i16 %133 to i64
  %135 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %134
  store i8 10, ptr %135, align 1, !tbaa !15
  store i8 40, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 239), align 1, !tbaa !15
  store i8 19, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 240), align 16, !tbaa !15
  store i8 121, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 234), align 2, !tbaa !15
  store i8 25, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 235), align 1, !tbaa !15
  call void @resetChip_test()
  %136 = load i32, ptr %2, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %137
  %139 = getelementptr inbounds %struct.anon, ptr %138, i32 0, i32 1
  %140 = load i32, ptr %139, align 4, !tbaa !18
  %141 = icmp eq i32 %140, 2
  br i1 %141, label %142, label %143

142:                                              ; preds = %127
  store i8 -22, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63489), align 1, !tbaa !15
  br label %152

143:                                              ; preds = %127
  %144 = load i32, ptr %2, align 4, !tbaa !9
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %145
  %147 = getelementptr inbounds %struct.anon, ptr %146, i32 0, i32 1
  %148 = load i32, ptr %147, align 4, !tbaa !18
  %149 = icmp eq i32 %148, 3
  br i1 %149, label %150, label %151

150:                                              ; preds = %143
  store i8 30, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63489), align 1, !tbaa !15
  store i8 -85, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63490), align 2, !tbaa !15
  br label %151

151:                                              ; preds = %150, %143
  br label %152

152:                                              ; preds = %151, %142
  %153 = load i32, ptr %2, align 4, !tbaa !9
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %154
  %156 = getelementptr inbounds %struct.anon, ptr %155, i32 0, i32 4
  store i32 0, ptr %156, align 16, !tbaa !21
  %157 = load i32, ptr %2, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %158
  %160 = getelementptr inbounds %struct.anon, ptr %159, i32 0, i32 5
  store i32 0, ptr %160, align 4, !tbaa !22
  %161 = load i32, ptr %2, align 4, !tbaa !9
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %162
  %164 = getelementptr inbounds %struct.anon, ptr %163, i32 0, i32 6
  store i32 0, ptr %164, align 8, !tbaa !23
  %165 = load i32, ptr %2, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %166
  %168 = getelementptr inbounds %struct.anon, ptr %167, i32 0, i32 7
  store i32 0, ptr %168, align 4, !tbaa !24
  %169 = load i32, ptr %2, align 4, !tbaa !9
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %170
  %172 = getelementptr inbounds %struct.anon, ptr %171, i32 0, i32 8
  store i32 0, ptr %172, align 16, !tbaa !25
  %173 = load i32, ptr %2, align 4, !tbaa !9
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %174
  %176 = getelementptr inbounds %struct.anon, ptr %175, i32 0, i32 9
  store i32 0, ptr %176, align 4, !tbaa !26
  %177 = load i32, ptr %2, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %178
  %180 = getelementptr inbounds %struct.anon, ptr %179, i32 0, i32 10
  store i32 0, ptr %180, align 8, !tbaa !27
  %181 = load i32, ptr %2, align 4, !tbaa !9
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %182
  %184 = getelementptr inbounds %struct.anon, ptr %183, i32 0, i32 11
  store i32 0, ptr %184, align 4, !tbaa !28
  %185 = load i32, ptr %2, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %186
  %188 = getelementptr inbounds %struct.anon, ptr %187, i32 0, i32 12
  store i32 0, ptr %188, align 16, !tbaa !29
  %189 = load i32, ptr %2, align 4, !tbaa !9
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %190
  %192 = getelementptr inbounds %struct.anon, ptr %191, i32 0, i32 13
  store i32 0, ptr %192, align 4, !tbaa !30
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %193

193:                                              ; preds = %340, %152
  %194 = load i32, ptr %4, align 4, !tbaa !9
  %195 = load i32, ptr %2, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %196
  %198 = getelementptr inbounds %struct.anon, ptr %197, i32 0, i32 2
  %199 = load i32, ptr %198, align 8, !tbaa !20
  %200 = mul nsw i32 %199, 2
  %201 = add nsw i32 %200, 2
  %202 = icmp slt i32 %194, %201
  br i1 %202, label %203, label %343

203:                                              ; preds = %193
  %204 = load ptr, ptr @state, align 8, !tbaa !5
  call void @step(ptr noundef %204)
  %205 = load i32, ptr @cycle, align 4, !tbaa !9
  %206 = and i32 %205, 1
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %208, label %212

208:                                              ; preds = %203
  %209 = load ptr, ptr @state, align 8, !tbaa !5
  %210 = call i32 @readRW(ptr noundef %209)
  %211 = icmp ne i32 %210, 0
  br i1 %211, label %220, label %212

212:                                              ; preds = %208, %203
  %213 = load i32, ptr @cycle, align 4, !tbaa !9
  %214 = and i32 %213, 1
  %215 = icmp ne i32 %214, 0
  br i1 %215, label %216, label %339

216:                                              ; preds = %212
  %217 = load ptr, ptr @state, align 8, !tbaa !5
  %218 = call i32 @readRW(ptr noundef %217)
  %219 = icmp ne i32 %218, 0
  br i1 %219, label %339, label %220

220:                                              ; preds = %216, %208
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  store i32 1, ptr %6, align 4, !tbaa !9
  %221 = load ptr, ptr @state, align 8, !tbaa !5
  %222 = call zeroext i16 @readAddressBus(ptr noundef %221)
  %223 = zext i16 %222 to i32
  %224 = icmp eq i32 %223, 234
  br i1 %224, label %225, label %230

225:                                              ; preds = %220
  %226 = load i32, ptr %2, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %227
  %229 = getelementptr inbounds %struct.anon, ptr %228, i32 0, i32 4
  store i32 1, ptr %229, align 16, !tbaa !21
  br label %308

230:                                              ; preds = %220
  %231 = load ptr, ptr @state, align 8, !tbaa !5
  %232 = call zeroext i16 @readAddressBus(ptr noundef %231)
  %233 = zext i16 %232 to i32
  %234 = icmp eq i32 %233, 43806
  br i1 %234, label %235, label %240

235:                                              ; preds = %230
  %236 = load i32, ptr %2, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %237
  %239 = getelementptr inbounds %struct.anon, ptr %238, i32 0, i32 5
  store i32 1, ptr %239, align 4, !tbaa !22
  br label %307

240:                                              ; preds = %230
  %241 = load ptr, ptr @state, align 8, !tbaa !5
  %242 = call zeroext i16 @readAddressBus(ptr noundef %241)
  %243 = zext i16 %242 to i32
  %244 = icmp eq i32 %243, 239
  br i1 %244, label %245, label %250

245:                                              ; preds = %240
  %246 = load i32, ptr %2, align 4, !tbaa !9
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %247
  %249 = getelementptr inbounds %struct.anon, ptr %248, i32 0, i32 6
  store i32 1, ptr %249, align 8, !tbaa !23
  br label %306

250:                                              ; preds = %240
  %251 = load ptr, ptr @state, align 8, !tbaa !5
  %252 = call zeroext i16 @readAddressBus(ptr noundef %251)
  %253 = zext i16 %252 to i32
  %254 = icmp eq i32 %253, 43811
  br i1 %254, label %255, label %260

255:                                              ; preds = %250
  %256 = load i32, ptr %2, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %257
  %259 = getelementptr inbounds %struct.anon, ptr %258, i32 0, i32 7
  store i32 1, ptr %259, align 4, !tbaa !24
  br label %305

260:                                              ; preds = %250
  %261 = load ptr, ptr @state, align 8, !tbaa !5
  %262 = call zeroext i16 @readAddressBus(ptr noundef %261)
  %263 = zext i16 %262 to i32
  %264 = icmp eq i32 %263, 244
  br i1 %264, label %265, label %270

265:                                              ; preds = %260
  %266 = load i32, ptr %2, align 4, !tbaa !9
  %267 = sext i32 %266 to i64
  %268 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %267
  %269 = getelementptr inbounds %struct.anon, ptr %268, i32 0, i32 8
  store i32 1, ptr %269, align 16, !tbaa !25
  br label %304

270:                                              ; preds = %260
  %271 = load ptr, ptr @state, align 8, !tbaa !5
  %272 = call zeroext i16 @readAddressBus(ptr noundef %271)
  %273 = zext i16 %272 to i32
  %274 = icmp eq i32 %273, 43816
  br i1 %274, label %275, label %280

275:                                              ; preds = %270
  %276 = load i32, ptr %2, align 4, !tbaa !9
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %277
  %279 = getelementptr inbounds %struct.anon, ptr %278, i32 0, i32 9
  store i32 1, ptr %279, align 4, !tbaa !26
  br label %303

280:                                              ; preds = %270
  %281 = load ptr, ptr @state, align 8, !tbaa !5
  %282 = call zeroext i16 @readAddressBus(ptr noundef %281)
  %283 = zext i16 %282 to i32
  %284 = icmp eq i32 %283, 4904
  br i1 %284, label %285, label %290

285:                                              ; preds = %280
  %286 = load i32, ptr %2, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %287
  %289 = getelementptr inbounds %struct.anon, ptr %288, i32 0, i32 10
  store i32 1, ptr %289, align 8, !tbaa !27
  br label %302

290:                                              ; preds = %280
  %291 = load ptr, ptr @state, align 8, !tbaa !5
  %292 = call zeroext i16 @readAddressBus(ptr noundef %291)
  %293 = zext i16 %292 to i32
  %294 = icmp eq i32 %293, 6531
  br i1 %294, label %295, label %300

295:                                              ; preds = %290
  %296 = load i32, ptr %2, align 4, !tbaa !9
  %297 = sext i32 %296 to i64
  %298 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %297
  %299 = getelementptr inbounds %struct.anon, ptr %298, i32 0, i32 11
  store i32 1, ptr %299, align 4, !tbaa !28
  br label %301

300:                                              ; preds = %290
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %301

301:                                              ; preds = %300, %295
  br label %302

302:                                              ; preds = %301, %285
  br label %303

303:                                              ; preds = %302, %275
  br label %304

304:                                              ; preds = %303, %265
  br label %305

305:                                              ; preds = %304, %255
  br label %306

306:                                              ; preds = %305, %245
  br label %307

307:                                              ; preds = %306, %235
  br label %308

308:                                              ; preds = %307, %225
  %309 = load i32, ptr %6, align 4, !tbaa !9
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %325

311:                                              ; preds = %308
  %312 = load i32, ptr @cycle, align 4, !tbaa !9
  %313 = and i32 %312, 1
  %314 = icmp ne i32 %313, 0
  br i1 %314, label %315, label %324

315:                                              ; preds = %311
  %316 = load ptr, ptr @state, align 8, !tbaa !5
  %317 = call i32 @readRW(ptr noundef %316)
  %318 = icmp ne i32 %317, 0
  br i1 %318, label %319, label %324

319:                                              ; preds = %315
  %320 = load i32, ptr %2, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %321
  %323 = getelementptr inbounds %struct.anon, ptr %322, i32 0, i32 12
  store i32 1, ptr %323, align 16, !tbaa !29
  br label %324

324:                                              ; preds = %319, %315, %311
  br label %325

325:                                              ; preds = %324, %308
  %326 = load i32, ptr @cycle, align 4, !tbaa !9
  %327 = and i32 %326, 1
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %329, label %338

329:                                              ; preds = %325
  %330 = load ptr, ptr @state, align 8, !tbaa !5
  %331 = call i32 @readRW(ptr noundef %330)
  %332 = icmp ne i32 %331, 0
  br i1 %332, label %338, label %333

333:                                              ; preds = %329
  %334 = load i32, ptr %2, align 4, !tbaa !9
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %335
  %337 = getelementptr inbounds %struct.anon, ptr %336, i32 0, i32 13
  store i32 1, ptr %337, align 4, !tbaa !30
  br label %338

338:                                              ; preds = %333, %329, %325
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %339

339:                                              ; preds = %338, %216, %212
  br label %340

340:                                              ; preds = %339
  %341 = load i32, ptr %4, align 4, !tbaa !9
  %342 = add nsw i32 %341, 1
  store i32 %342, ptr %4, align 4, !tbaa !9
  br label %193, !llvm.loop !31

343:                                              ; preds = %193
  %344 = load i32, ptr %2, align 4, !tbaa !9
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %345
  %347 = getelementptr inbounds %struct.anon, ptr %346, i32 0, i32 3
  store i32 0, ptr %347, align 4, !tbaa !32
  %348 = load i32, ptr %2, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %349
  %351 = getelementptr inbounds %struct.anon, ptr %350, i32 0, i32 11
  %352 = load i32, ptr %351, align 4, !tbaa !28
  %353 = icmp ne i32 %352, 0
  br i1 %353, label %354, label %359

354:                                              ; preds = %343
  %355 = load i32, ptr %2, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %356
  %358 = getelementptr inbounds %struct.anon, ptr %357, i32 0, i32 3
  store i32 1, ptr %358, align 4, !tbaa !32
  br label %450

359:                                              ; preds = %343
  %360 = load i32, ptr %2, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %361
  %363 = getelementptr inbounds %struct.anon, ptr %362, i32 0, i32 10
  %364 = load i32, ptr %363, align 8, !tbaa !27
  %365 = icmp ne i32 %364, 0
  br i1 %365, label %366, label %371

366:                                              ; preds = %359
  %367 = load i32, ptr %2, align 4, !tbaa !9
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %368
  %370 = getelementptr inbounds %struct.anon, ptr %369, i32 0, i32 3
  store i32 2, ptr %370, align 4, !tbaa !32
  br label %449

371:                                              ; preds = %359
  %372 = load i32, ptr %2, align 4, !tbaa !9
  %373 = sext i32 %372 to i64
  %374 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %373
  %375 = getelementptr inbounds %struct.anon, ptr %374, i32 0, i32 8
  %376 = load i32, ptr %375, align 16, !tbaa !25
  %377 = icmp ne i32 %376, 0
  br i1 %377, label %378, label %383

378:                                              ; preds = %371
  %379 = load i32, ptr %2, align 4, !tbaa !9
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %380
  %382 = getelementptr inbounds %struct.anon, ptr %381, i32 0, i32 3
  store i32 3, ptr %382, align 4, !tbaa !32
  br label %448

383:                                              ; preds = %371
  %384 = load i32, ptr %2, align 4, !tbaa !9
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %385
  %387 = getelementptr inbounds %struct.anon, ptr %386, i32 0, i32 6
  %388 = load i32, ptr %387, align 8, !tbaa !23
  %389 = icmp ne i32 %388, 0
  br i1 %389, label %390, label %395

390:                                              ; preds = %383
  %391 = load i32, ptr %2, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %392
  %394 = getelementptr inbounds %struct.anon, ptr %393, i32 0, i32 3
  store i32 4, ptr %394, align 4, !tbaa !32
  br label %447

395:                                              ; preds = %383
  %396 = load i32, ptr %2, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %397
  %399 = getelementptr inbounds %struct.anon, ptr %398, i32 0, i32 4
  %400 = load i32, ptr %399, align 16, !tbaa !21
  %401 = icmp ne i32 %400, 0
  br i1 %401, label %402, label %407

402:                                              ; preds = %395
  %403 = load i32, ptr %2, align 4, !tbaa !9
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %404
  %406 = getelementptr inbounds %struct.anon, ptr %405, i32 0, i32 3
  store i32 5, ptr %406, align 4, !tbaa !32
  br label %446

407:                                              ; preds = %395
  %408 = load i32, ptr %2, align 4, !tbaa !9
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %409
  %411 = getelementptr inbounds %struct.anon, ptr %410, i32 0, i32 9
  %412 = load i32, ptr %411, align 4, !tbaa !26
  %413 = icmp ne i32 %412, 0
  br i1 %413, label %414, label %419

414:                                              ; preds = %407
  %415 = load i32, ptr %2, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %416
  %418 = getelementptr inbounds %struct.anon, ptr %417, i32 0, i32 3
  store i32 6, ptr %418, align 4, !tbaa !32
  br label %445

419:                                              ; preds = %407
  %420 = load i32, ptr %2, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %421
  %423 = getelementptr inbounds %struct.anon, ptr %422, i32 0, i32 7
  %424 = load i32, ptr %423, align 4, !tbaa !24
  %425 = icmp ne i32 %424, 0
  br i1 %425, label %426, label %431

426:                                              ; preds = %419
  %427 = load i32, ptr %2, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %428
  %430 = getelementptr inbounds %struct.anon, ptr %429, i32 0, i32 3
  store i32 7, ptr %430, align 4, !tbaa !32
  br label %444

431:                                              ; preds = %419
  %432 = load i32, ptr %2, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %433
  %435 = getelementptr inbounds %struct.anon, ptr %434, i32 0, i32 5
  %436 = load i32, ptr %435, align 4, !tbaa !22
  %437 = icmp ne i32 %436, 0
  br i1 %437, label %438, label %443

438:                                              ; preds = %431
  %439 = load i32, ptr %2, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %440
  %442 = getelementptr inbounds %struct.anon, ptr %441, i32 0, i32 3
  store i32 8, ptr %442, align 4, !tbaa !32
  br label %443

443:                                              ; preds = %438, %431
  br label %444

444:                                              ; preds = %443, %426
  br label %445

445:                                              ; preds = %444, %414
  br label %446

446:                                              ; preds = %445, %402
  br label %447

447:                                              ; preds = %446, %390
  br label %448

448:                                              ; preds = %447, %378
  br label %449

449:                                              ; preds = %448, %366
  br label %450

450:                                              ; preds = %449, %354
  call void @llvm.lifetime.start.p0(i64 19, ptr %7) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %7, ptr align 16 @__const.main.magics, i64 19, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %451

451:                                              ; preds = %800, %450
  %452 = load i32, ptr %8, align 4, !tbaa !9
  %453 = icmp slt i32 %452, 5
  br i1 %453, label %455, label %454

454:                                              ; preds = %451
  store i32 14, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #4
  br label %803

455:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 0, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 200, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 200, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 200, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %456

456:                                              ; preds = %763, %455
  %457 = load i32, ptr %20, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = icmp ult i64 %458, 19
  br i1 %459, label %461, label %460

460:                                              ; preds = %456
  store i32 17, ptr %3, align 4
  br label %766

461:                                              ; preds = %456
  %462 = load i32, ptr %2, align 4, !tbaa !9
  %463 = trunc i32 %462 to i8
  call void @setup_memory(i8 noundef zeroext %463)
  %464 = load i32, ptr %2, align 4, !tbaa !9
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %465
  %467 = getelementptr inbounds %struct.anon, ptr %466, i32 0, i32 1
  %468 = load i32, ptr %467, align 4, !tbaa !18
  %469 = icmp eq i32 %468, 2
  br i1 %469, label %470, label %471

470:                                              ; preds = %461
  store i8 -22, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63489), align 1, !tbaa !15
  br label %480

471:                                              ; preds = %461
  %472 = load i32, ptr %2, align 4, !tbaa !9
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %473
  %475 = getelementptr inbounds %struct.anon, ptr %474, i32 0, i32 1
  %476 = load i32, ptr %475, align 4, !tbaa !18
  %477 = icmp eq i32 %476, 3
  br i1 %477, label %478, label %479

478:                                              ; preds = %471
  store i8 30, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63489), align 1, !tbaa !15
  store i8 -85, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63490), align 2, !tbaa !15
  br label %479

479:                                              ; preds = %478, %471
  br label %480

480:                                              ; preds = %479, %470
  %481 = load i32, ptr %8, align 4, !tbaa !9
  switch i32 %481, label %522 [
    i32 0, label %482
    i32 1, label %490
    i32 2, label %498
    i32 3, label %506
    i32 4, label %514
  ]

482:                                              ; preds = %480
  %483 = load i32, ptr %20, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %484
  %486 = load i8, ptr %485, align 1, !tbaa !15
  %487 = load i16, ptr @initial_a, align 2, !tbaa !16
  %488 = zext i16 %487 to i64
  %489 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %488
  store i8 %486, ptr %489, align 1, !tbaa !15
  br label %522

490:                                              ; preds = %480
  %491 = load i32, ptr %20, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %492
  %494 = load i8, ptr %493, align 1, !tbaa !15
  %495 = load i16, ptr @initial_x, align 2, !tbaa !16
  %496 = zext i16 %495 to i64
  %497 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %496
  store i8 %494, ptr %497, align 1, !tbaa !15
  br label %522

498:                                              ; preds = %480
  %499 = load i32, ptr %20, align 4, !tbaa !9
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %500
  %502 = load i8, ptr %501, align 1, !tbaa !15
  %503 = load i16, ptr @initial_y, align 2, !tbaa !16
  %504 = zext i16 %503 to i64
  %505 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %504
  store i8 %502, ptr %505, align 1, !tbaa !15
  br label %522

506:                                              ; preds = %480
  %507 = load i32, ptr %20, align 4, !tbaa !9
  %508 = sext i32 %507 to i64
  %509 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %508
  %510 = load i8, ptr %509, align 1, !tbaa !15
  %511 = load i16, ptr @initial_s, align 2, !tbaa !16
  %512 = zext i16 %511 to i64
  %513 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %512
  store i8 %510, ptr %513, align 1, !tbaa !15
  br label %522

514:                                              ; preds = %480
  %515 = load i32, ptr %20, align 4, !tbaa !9
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %516
  %518 = load i8, ptr %517, align 1, !tbaa !15
  %519 = load i16, ptr @initial_p, align 2, !tbaa !16
  %520 = zext i16 %519 to i64
  %521 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %520
  store i8 %518, ptr %521, align 1, !tbaa !15
  br label %522

522:                                              ; preds = %514, %506, %498, %490, %482, %480
  %523 = load i32, ptr %2, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %524
  %526 = getelementptr inbounds %struct.anon, ptr %525, i32 0, i32 3
  %527 = load i32, ptr %526, align 4, !tbaa !32
  switch i32 %527, label %566 [
    i32 1, label %566
    i32 2, label %566
    i32 3, label %528
    i32 4, label %537
    i32 5, label %546
    i32 6, label %547
    i32 7, label %556
    i32 8, label %565
  ]

528:                                              ; preds = %522
  %529 = load i16, ptr @initial_y, align 2, !tbaa !16
  %530 = zext i16 %529 to i64
  %531 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %530
  %532 = load i8, ptr %531, align 1, !tbaa !15
  %533 = zext i8 %532 to i32
  %534 = add nsw i32 234, %533
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %535
  store i8 3, ptr %536, align 1, !tbaa !15
  br label %566

537:                                              ; preds = %522
  %538 = load i16, ptr @initial_x, align 2, !tbaa !16
  %539 = zext i16 %538 to i64
  %540 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %539
  %541 = load i8, ptr %540, align 1, !tbaa !15
  %542 = zext i8 %541 to i32
  %543 = add nsw i32 234, %542
  %544 = sext i32 %543 to i64
  %545 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %544
  store i8 3, ptr %545, align 1, !tbaa !15
  br label %566

546:                                              ; preds = %522
  store i8 3, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 234), align 2, !tbaa !15
  br label %566

547:                                              ; preds = %522
  %548 = load i16, ptr @initial_y, align 2, !tbaa !16
  %549 = zext i16 %548 to i64
  %550 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %549
  %551 = load i8, ptr %550, align 1, !tbaa !15
  %552 = zext i8 %551 to i32
  %553 = add nsw i32 43806, %552
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %554
  store i8 3, ptr %555, align 1, !tbaa !15
  br label %566

556:                                              ; preds = %522
  %557 = load i16, ptr @initial_x, align 2, !tbaa !16
  %558 = zext i16 %557 to i64
  %559 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %558
  %560 = load i8, ptr %559, align 1, !tbaa !15
  %561 = zext i8 %560 to i32
  %562 = add nsw i32 43806, %561
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %563
  store i8 3, ptr %564, align 1, !tbaa !15
  br label %566

565:                                              ; preds = %522
  store i8 3, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 43806), align 2, !tbaa !15
  br label %566

566:                                              ; preds = %565, %556, %547, %546, %537, %528, %522, %522, %522
  call void @resetChip_test()
  store i32 0, ptr %11, align 4, !tbaa !9
  store i32 0, ptr %10, align 4, !tbaa !9
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %567

567:                                              ; preds = %660, %566
  %568 = load i32, ptr %4, align 4, !tbaa !9
  %569 = load i32, ptr %2, align 4, !tbaa !9
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %570
  %572 = getelementptr inbounds %struct.anon, ptr %571, i32 0, i32 2
  %573 = load i32, ptr %572, align 8, !tbaa !20
  %574 = mul nsw i32 %573, 2
  %575 = add nsw i32 %574, 2
  %576 = icmp slt i32 %568, %575
  br i1 %576, label %577, label %663

577:                                              ; preds = %567
  %578 = load ptr, ptr @state, align 8, !tbaa !5
  call void @step(ptr noundef %578)
  %579 = load i32, ptr @cycle, align 4, !tbaa !9
  %580 = and i32 %579, 1
  %581 = icmp ne i32 %580, 0
  br i1 %581, label %582, label %610

582:                                              ; preds = %577
  %583 = load ptr, ptr @state, align 8, !tbaa !5
  %584 = call i32 @readRW(ptr noundef %583)
  %585 = icmp ne i32 %584, 0
  br i1 %585, label %586, label %610

586:                                              ; preds = %582
  %587 = load i32, ptr %20, align 4, !tbaa !9
  %588 = icmp ne i32 %587, 0
  br i1 %588, label %596, label %589

589:                                              ; preds = %586
  %590 = load ptr, ptr @state, align 8, !tbaa !5
  %591 = call zeroext i16 @readAddressBus(ptr noundef %590)
  %592 = load i32, ptr %10, align 4, !tbaa !9
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %10, align 4, !tbaa !9
  %594 = sext i32 %592 to i64
  %595 = getelementptr inbounds [100 x i16], ptr %12, i64 0, i64 %594
  store i16 %591, ptr %595, align 2, !tbaa !16
  br label %609

596:                                              ; preds = %586
  %597 = load i32, ptr %10, align 4, !tbaa !9
  %598 = add nsw i32 %597, 1
  store i32 %598, ptr %10, align 4, !tbaa !9
  %599 = sext i32 %597 to i64
  %600 = getelementptr inbounds [100 x i16], ptr %12, i64 0, i64 %599
  %601 = load i16, ptr %600, align 2, !tbaa !16
  %602 = zext i16 %601 to i32
  %603 = load ptr, ptr @state, align 8, !tbaa !5
  %604 = call zeroext i16 @readAddressBus(ptr noundef %603)
  %605 = zext i16 %604 to i32
  %606 = icmp ne i32 %602, %605
  br i1 %606, label %607, label %608

607:                                              ; preds = %596
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %663

608:                                              ; preds = %596
  br label %609

609:                                              ; preds = %608, %589
  br label %610

610:                                              ; preds = %609, %582, %577
  %611 = load i32, ptr @cycle, align 4, !tbaa !9
  %612 = and i32 %611, 1
  %613 = icmp ne i32 %612, 0
  br i1 %613, label %614, label %659

614:                                              ; preds = %610
  %615 = load ptr, ptr @state, align 8, !tbaa !5
  %616 = call i32 @readRW(ptr noundef %615)
  %617 = icmp ne i32 %616, 0
  br i1 %617, label %659, label %618

618:                                              ; preds = %614
  %619 = load i32, ptr %20, align 4, !tbaa !9
  %620 = icmp ne i32 %619, 0
  br i1 %620, label %634, label %621

621:                                              ; preds = %618
  %622 = load ptr, ptr @state, align 8, !tbaa !5
  %623 = call zeroext i16 @readAddressBus(ptr noundef %622)
  %624 = load i32, ptr %11, align 4, !tbaa !9
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds [100 x i16], ptr %13, i64 0, i64 %625
  store i16 %623, ptr %626, align 2, !tbaa !16
  %627 = load ptr, ptr @state, align 8, !tbaa !5
  %628 = call zeroext i8 @readDataBus(ptr noundef %627)
  %629 = zext i8 %628 to i16
  %630 = load i32, ptr %11, align 4, !tbaa !9
  %631 = add nsw i32 %630, 1
  store i32 %631, ptr %11, align 4, !tbaa !9
  %632 = sext i32 %630 to i64
  %633 = getelementptr inbounds [100 x i16], ptr %14, i64 0, i64 %632
  store i16 %629, ptr %633, align 2, !tbaa !16
  br label %658

634:                                              ; preds = %618
  %635 = load i32, ptr %11, align 4, !tbaa !9
  %636 = sext i32 %635 to i64
  %637 = getelementptr inbounds [100 x i16], ptr %13, i64 0, i64 %636
  %638 = load i16, ptr %637, align 2, !tbaa !16
  %639 = zext i16 %638 to i32
  %640 = load ptr, ptr @state, align 8, !tbaa !5
  %641 = call zeroext i16 @readAddressBus(ptr noundef %640)
  %642 = zext i16 %641 to i32
  %643 = icmp ne i32 %639, %642
  br i1 %643, label %644, label %645

644:                                              ; preds = %634
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %663

645:                                              ; preds = %634
  %646 = load i32, ptr %11, align 4, !tbaa !9
  %647 = add nsw i32 %646, 1
  store i32 %647, ptr %11, align 4, !tbaa !9
  %648 = sext i32 %646 to i64
  %649 = getelementptr inbounds [100 x i16], ptr %14, i64 0, i64 %648
  %650 = load i16, ptr %649, align 2, !tbaa !16
  %651 = zext i16 %650 to i32
  %652 = load ptr, ptr @state, align 8, !tbaa !5
  %653 = call zeroext i8 @readDataBus(ptr noundef %652)
  %654 = zext i8 %653 to i32
  %655 = icmp ne i32 %651, %654
  br i1 %655, label %656, label %657

656:                                              ; preds = %645
  store i32 1, ptr %9, align 4, !tbaa !9
  br label %663

657:                                              ; preds = %645
  br label %658

658:                                              ; preds = %657, %621
  br label %659

659:                                              ; preds = %658, %614, %610
  br label %660

660:                                              ; preds = %659
  %661 = load i32, ptr %4, align 4, !tbaa !9
  %662 = add nsw i32 %661, 1
  store i32 %662, ptr %4, align 4, !tbaa !9
  br label %567, !llvm.loop !33

663:                                              ; preds = %656, %644, %607, %567
  %664 = load i32, ptr %9, align 4, !tbaa !9
  %665 = icmp ne i32 %664, 0
  br i1 %665, label %666, label %667

666:                                              ; preds = %663
  store i32 17, ptr %3, align 4
  br label %766

667:                                              ; preds = %663
  %668 = load i32, ptr %8, align 4, !tbaa !9
  %669 = icmp eq i32 %668, 0
  br i1 %669, label %686, label %670

670:                                              ; preds = %667
  %671 = load i32, ptr %20, align 4, !tbaa !9
  %672 = icmp ne i32 %671, 0
  br i1 %672, label %676, label %673

673:                                              ; preds = %670
  %674 = load ptr, ptr @state, align 8, !tbaa !5
  %675 = call zeroext i8 @readA(ptr noundef %674)
  store i8 %675, ptr %15, align 1, !tbaa !15
  br label %685

676:                                              ; preds = %670
  %677 = load i8, ptr %15, align 1, !tbaa !15
  %678 = zext i8 %677 to i32
  %679 = load ptr, ptr @state, align 8, !tbaa !5
  %680 = call zeroext i8 @readA(ptr noundef %679)
  %681 = zext i8 %680 to i32
  %682 = icmp ne i32 %678, %681
  br i1 %682, label %683, label %684

683:                                              ; preds = %676
  store i32 1, ptr %9, align 4, !tbaa !9
  store i32 17, ptr %3, align 4
  br label %766

684:                                              ; preds = %676
  br label %685

685:                                              ; preds = %684, %673
  br label %686

686:                                              ; preds = %685, %667
  %687 = load i32, ptr %8, align 4, !tbaa !9
  %688 = icmp eq i32 %687, 1
  br i1 %688, label %705, label %689

689:                                              ; preds = %686
  %690 = load i32, ptr %20, align 4, !tbaa !9
  %691 = icmp ne i32 %690, 0
  br i1 %691, label %695, label %692

692:                                              ; preds = %689
  %693 = load ptr, ptr @state, align 8, !tbaa !5
  %694 = call zeroext i8 @readX(ptr noundef %693)
  store i8 %694, ptr %16, align 1, !tbaa !15
  br label %704

695:                                              ; preds = %689
  %696 = load i8, ptr %16, align 1, !tbaa !15
  %697 = zext i8 %696 to i32
  %698 = load ptr, ptr @state, align 8, !tbaa !5
  %699 = call zeroext i8 @readX(ptr noundef %698)
  %700 = zext i8 %699 to i32
  %701 = icmp ne i32 %697, %700
  br i1 %701, label %702, label %703

702:                                              ; preds = %695
  store i32 1, ptr %9, align 4, !tbaa !9
  store i32 17, ptr %3, align 4
  br label %766

703:                                              ; preds = %695
  br label %704

704:                                              ; preds = %703, %692
  br label %705

705:                                              ; preds = %704, %686
  %706 = load i32, ptr %8, align 4, !tbaa !9
  %707 = icmp eq i32 %706, 2
  br i1 %707, label %724, label %708

708:                                              ; preds = %705
  %709 = load i32, ptr %20, align 4, !tbaa !9
  %710 = icmp ne i32 %709, 0
  br i1 %710, label %714, label %711

711:                                              ; preds = %708
  %712 = load ptr, ptr @state, align 8, !tbaa !5
  %713 = call zeroext i8 @readY(ptr noundef %712)
  store i8 %713, ptr %17, align 1, !tbaa !15
  br label %723

714:                                              ; preds = %708
  %715 = load i8, ptr %17, align 1, !tbaa !15
  %716 = zext i8 %715 to i32
  %717 = load ptr, ptr @state, align 8, !tbaa !5
  %718 = call zeroext i8 @readY(ptr noundef %717)
  %719 = zext i8 %718 to i32
  %720 = icmp ne i32 %716, %719
  br i1 %720, label %721, label %722

721:                                              ; preds = %714
  store i32 1, ptr %9, align 4, !tbaa !9
  store i32 17, ptr %3, align 4
  br label %766

722:                                              ; preds = %714
  br label %723

723:                                              ; preds = %722, %711
  br label %724

724:                                              ; preds = %723, %705
  %725 = load i32, ptr %8, align 4, !tbaa !9
  %726 = icmp eq i32 %725, 3
  br i1 %726, label %743, label %727

727:                                              ; preds = %724
  %728 = load i32, ptr %20, align 4, !tbaa !9
  %729 = icmp ne i32 %728, 0
  br i1 %729, label %733, label %730

730:                                              ; preds = %727
  %731 = load ptr, ptr @state, align 8, !tbaa !5
  %732 = call zeroext i8 @readSP(ptr noundef %731)
  store i8 %732, ptr %18, align 1, !tbaa !15
  br label %742

733:                                              ; preds = %727
  %734 = load i8, ptr %18, align 1, !tbaa !15
  %735 = zext i8 %734 to i32
  %736 = load ptr, ptr @state, align 8, !tbaa !5
  %737 = call zeroext i8 @readSP(ptr noundef %736)
  %738 = zext i8 %737 to i32
  %739 = icmp ne i32 %735, %738
  br i1 %739, label %740, label %741

740:                                              ; preds = %733
  store i32 1, ptr %9, align 4, !tbaa !9
  store i32 17, ptr %3, align 4
  br label %766

741:                                              ; preds = %733
  br label %742

742:                                              ; preds = %741, %730
  br label %743

743:                                              ; preds = %742, %724
  %744 = load i32, ptr %8, align 4, !tbaa !9
  %745 = icmp eq i32 %744, 4
  br i1 %745, label %762, label %746

746:                                              ; preds = %743
  %747 = load i32, ptr %20, align 4, !tbaa !9
  %748 = icmp ne i32 %747, 0
  br i1 %748, label %752, label %749

749:                                              ; preds = %746
  %750 = load ptr, ptr @state, align 8, !tbaa !5
  %751 = call zeroext i8 @readP(ptr noundef %750)
  store i8 %751, ptr %19, align 1, !tbaa !15
  br label %761

752:                                              ; preds = %746
  %753 = load i8, ptr %19, align 1, !tbaa !15
  %754 = zext i8 %753 to i32
  %755 = load ptr, ptr @state, align 8, !tbaa !5
  %756 = call zeroext i8 @readP(ptr noundef %755)
  %757 = zext i8 %756 to i32
  %758 = icmp ne i32 %754, %757
  br i1 %758, label %759, label %760

759:                                              ; preds = %752
  store i32 1, ptr %9, align 4, !tbaa !9
  store i32 17, ptr %3, align 4
  br label %766

760:                                              ; preds = %752
  br label %761

761:                                              ; preds = %760, %749
  br label %762

762:                                              ; preds = %761, %743
  br label %763

763:                                              ; preds = %762
  %764 = load i32, ptr %20, align 4, !tbaa !9
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %20, align 4, !tbaa !9
  br label %456, !llvm.loop !34

766:                                              ; preds = %759, %740, %721, %702, %683, %666, %460
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %767

767:                                              ; preds = %766
  %768 = load i32, ptr %8, align 4, !tbaa !9
  switch i32 %768, label %799 [
    i32 0, label %769
    i32 1, label %775
    i32 2, label %781
    i32 3, label %787
    i32 4, label %793
  ]

769:                                              ; preds = %767
  %770 = load i32, ptr %9, align 4, !tbaa !9
  %771 = load i32, ptr %2, align 4, !tbaa !9
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %772
  %774 = getelementptr inbounds %struct.anon, ptr %773, i32 0, i32 14
  store i32 %770, ptr %774, align 8, !tbaa !35
  br label %799

775:                                              ; preds = %767
  %776 = load i32, ptr %9, align 4, !tbaa !9
  %777 = load i32, ptr %2, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %778
  %780 = getelementptr inbounds %struct.anon, ptr %779, i32 0, i32 15
  store i32 %776, ptr %780, align 4, !tbaa !36
  br label %799

781:                                              ; preds = %767
  %782 = load i32, ptr %9, align 4, !tbaa !9
  %783 = load i32, ptr %2, align 4, !tbaa !9
  %784 = sext i32 %783 to i64
  %785 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %784
  %786 = getelementptr inbounds %struct.anon, ptr %785, i32 0, i32 16
  store i32 %782, ptr %786, align 16, !tbaa !37
  br label %799

787:                                              ; preds = %767
  %788 = load i32, ptr %9, align 4, !tbaa !9
  %789 = load i32, ptr %2, align 4, !tbaa !9
  %790 = sext i32 %789 to i64
  %791 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %790
  %792 = getelementptr inbounds %struct.anon, ptr %791, i32 0, i32 17
  store i32 %788, ptr %792, align 4, !tbaa !38
  br label %799

793:                                              ; preds = %767
  %794 = load i32, ptr %9, align 4, !tbaa !9
  %795 = load i32, ptr %2, align 4, !tbaa !9
  %796 = sext i32 %795 to i64
  %797 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %796
  %798 = getelementptr inbounds %struct.anon, ptr %797, i32 0, i32 18
  store i32 %794, ptr %798, align 8, !tbaa !39
  br label %799

799:                                              ; preds = %793, %787, %781, %775, %769, %767
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 200, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 200, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 200, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %800

800:                                              ; preds = %799
  %801 = load i32, ptr %8, align 4, !tbaa !9
  %802 = add nsw i32 %801, 1
  store i32 %802, ptr %8, align 4, !tbaa !9
  br label %451, !llvm.loop !40

803:                                              ; preds = %454
  %804 = load i32, ptr %2, align 4, !tbaa !9
  %805 = sext i32 %804 to i64
  %806 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %805
  %807 = getelementptr inbounds %struct.anon, ptr %806, i32 0, i32 19
  store i32 0, ptr %807, align 4, !tbaa !41
  %808 = load i32, ptr %2, align 4, !tbaa !9
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %809
  %811 = getelementptr inbounds %struct.anon, ptr %810, i32 0, i32 20
  store i32 0, ptr %811, align 16, !tbaa !42
  %812 = load i32, ptr %2, align 4, !tbaa !9
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %813
  %815 = getelementptr inbounds %struct.anon, ptr %814, i32 0, i32 21
  store i32 0, ptr %815, align 4, !tbaa !43
  %816 = load i32, ptr %2, align 4, !tbaa !9
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %817
  %819 = getelementptr inbounds %struct.anon, ptr %818, i32 0, i32 22
  store i32 0, ptr %819, align 8, !tbaa !44
  %820 = load i32, ptr %2, align 4, !tbaa !9
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %821
  %823 = getelementptr inbounds %struct.anon, ptr %822, i32 0, i32 23
  store i32 0, ptr %823, align 4, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %824

824:                                              ; preds = %1031, %803
  %825 = load i32, ptr %21, align 4, !tbaa !9
  %826 = sext i32 %825 to i64
  %827 = icmp ult i64 %826, 14
  br i1 %827, label %829, label %828

828:                                              ; preds = %824
  store i32 26, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %1034

829:                                              ; preds = %824
  %830 = load i32, ptr %2, align 4, !tbaa !9
  %831 = trunc i32 %830 to i8
  call void @setup_memory(i8 noundef zeroext %831)
  %832 = load i32, ptr %21, align 4, !tbaa !9
  %833 = add nsw i32 %832, 0
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %834
  %836 = load i8, ptr %835, align 1, !tbaa !15
  %837 = load i16, ptr @initial_a, align 2, !tbaa !16
  %838 = zext i16 %837 to i64
  %839 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %838
  store i8 %836, ptr %839, align 1, !tbaa !15
  %840 = load i32, ptr %21, align 4, !tbaa !9
  %841 = add nsw i32 %840, 1
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %842
  %844 = load i8, ptr %843, align 1, !tbaa !15
  %845 = load i16, ptr @initial_x, align 2, !tbaa !16
  %846 = zext i16 %845 to i64
  %847 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %846
  store i8 %844, ptr %847, align 1, !tbaa !15
  %848 = load i32, ptr %21, align 4, !tbaa !9
  %849 = add nsw i32 %848, 2
  %850 = sext i32 %849 to i64
  %851 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %850
  %852 = load i8, ptr %851, align 1, !tbaa !15
  %853 = load i16, ptr @initial_y, align 2, !tbaa !16
  %854 = zext i16 %853 to i64
  %855 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %854
  store i8 %852, ptr %855, align 1, !tbaa !15
  %856 = load i32, ptr %21, align 4, !tbaa !9
  %857 = add nsw i32 %856, 3
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %858
  %860 = load i8, ptr %859, align 1, !tbaa !15
  %861 = load i16, ptr @initial_s, align 2, !tbaa !16
  %862 = zext i16 %861 to i64
  %863 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %862
  store i8 %860, ptr %863, align 1, !tbaa !15
  %864 = load i32, ptr %21, align 4, !tbaa !9
  %865 = add nsw i32 %864, 4
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %866
  %868 = load i8, ptr %867, align 1, !tbaa !15
  %869 = load i16, ptr @initial_p, align 2, !tbaa !16
  %870 = zext i16 %869 to i64
  %871 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %870
  store i8 %868, ptr %871, align 1, !tbaa !15
  %872 = load i32, ptr %2, align 4, !tbaa !9
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %873
  %875 = getelementptr inbounds %struct.anon, ptr %874, i32 0, i32 1
  %876 = load i32, ptr %875, align 4, !tbaa !18
  %877 = icmp eq i32 %876, 2
  br i1 %877, label %878, label %879

878:                                              ; preds = %829
  store i8 -22, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63489), align 1, !tbaa !15
  br label %888

879:                                              ; preds = %829
  %880 = load i32, ptr %2, align 4, !tbaa !9
  %881 = sext i32 %880 to i64
  %882 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %881
  %883 = getelementptr inbounds %struct.anon, ptr %882, i32 0, i32 1
  %884 = load i32, ptr %883, align 4, !tbaa !18
  %885 = icmp eq i32 %884, 3
  br i1 %885, label %886, label %887

886:                                              ; preds = %879
  store i8 30, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63489), align 1, !tbaa !15
  store i8 -85, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 63490), align 2, !tbaa !15
  br label %887

887:                                              ; preds = %886, %879
  br label %888

888:                                              ; preds = %887, %878
  %889 = load i32, ptr %2, align 4, !tbaa !9
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %890
  %892 = getelementptr inbounds %struct.anon, ptr %891, i32 0, i32 3
  %893 = load i32, ptr %892, align 4, !tbaa !32
  switch i32 %893, label %932 [
    i32 1, label %932
    i32 2, label %932
    i32 3, label %894
    i32 4, label %903
    i32 5, label %912
    i32 6, label %913
    i32 7, label %922
    i32 8, label %931
  ]

894:                                              ; preds = %888
  %895 = load i16, ptr @initial_y, align 2, !tbaa !16
  %896 = zext i16 %895 to i64
  %897 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %896
  %898 = load i8, ptr %897, align 1, !tbaa !15
  %899 = zext i8 %898 to i32
  %900 = add nsw i32 234, %899
  %901 = sext i32 %900 to i64
  %902 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %901
  store i8 3, ptr %902, align 1, !tbaa !15
  br label %932

903:                                              ; preds = %888
  %904 = load i16, ptr @initial_x, align 2, !tbaa !16
  %905 = zext i16 %904 to i64
  %906 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %905
  %907 = load i8, ptr %906, align 1, !tbaa !15
  %908 = zext i8 %907 to i32
  %909 = add nsw i32 234, %908
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %910
  store i8 3, ptr %911, align 1, !tbaa !15
  br label %932

912:                                              ; preds = %888
  store i8 3, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 234), align 2, !tbaa !15
  br label %932

913:                                              ; preds = %888
  %914 = load i16, ptr @initial_y, align 2, !tbaa !16
  %915 = zext i16 %914 to i64
  %916 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %915
  %917 = load i8, ptr %916, align 1, !tbaa !15
  %918 = zext i8 %917 to i32
  %919 = add nsw i32 43806, %918
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %920
  store i8 3, ptr %921, align 1, !tbaa !15
  br label %932

922:                                              ; preds = %888
  %923 = load i16, ptr @initial_x, align 2, !tbaa !16
  %924 = zext i16 %923 to i64
  %925 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %924
  %926 = load i8, ptr %925, align 1, !tbaa !15
  %927 = zext i8 %926 to i32
  %928 = add nsw i32 43806, %927
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %929
  store i8 3, ptr %930, align 1, !tbaa !15
  br label %932

931:                                              ; preds = %888
  store i8 3, ptr getelementptr inbounds ([65536 x i8], ptr @memory, i64 0, i64 43806), align 2, !tbaa !15
  br label %932

932:                                              ; preds = %931, %922, %913, %912, %903, %894, %888, %888, %888
  call void @resetChip_test()
  store i32 0, ptr %4, align 4, !tbaa !9
  br label %933

933:                                              ; preds = %945, %932
  %934 = load i32, ptr %4, align 4, !tbaa !9
  %935 = load i32, ptr %2, align 4, !tbaa !9
  %936 = sext i32 %935 to i64
  %937 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %936
  %938 = getelementptr inbounds %struct.anon, ptr %937, i32 0, i32 2
  %939 = load i32, ptr %938, align 8, !tbaa !20
  %940 = mul nsw i32 %939, 2
  %941 = add nsw i32 %940, 2
  %942 = icmp slt i32 %934, %941
  br i1 %942, label %943, label %948

943:                                              ; preds = %933
  %944 = load ptr, ptr @state, align 8, !tbaa !5
  call void @step(ptr noundef %944)
  br label %945

945:                                              ; preds = %943
  %946 = load i32, ptr %4, align 4, !tbaa !9
  %947 = add nsw i32 %946, 1
  store i32 %947, ptr %4, align 4, !tbaa !9
  br label %933, !llvm.loop !46

948:                                              ; preds = %933
  %949 = load ptr, ptr @state, align 8, !tbaa !5
  %950 = call zeroext i8 @readA(ptr noundef %949)
  %951 = zext i8 %950 to i32
  %952 = load i32, ptr %21, align 4, !tbaa !9
  %953 = add nsw i32 %952, 0
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %954
  %956 = load i8, ptr %955, align 1, !tbaa !15
  %957 = zext i8 %956 to i32
  %958 = icmp ne i32 %951, %957
  br i1 %958, label %959, label %964

959:                                              ; preds = %948
  %960 = load i32, ptr %2, align 4, !tbaa !9
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %961
  %963 = getelementptr inbounds %struct.anon, ptr %962, i32 0, i32 19
  store i32 1, ptr %963, align 4, !tbaa !41
  br label %964

964:                                              ; preds = %959, %948
  %965 = load ptr, ptr @state, align 8, !tbaa !5
  %966 = call zeroext i8 @readX(ptr noundef %965)
  %967 = zext i8 %966 to i32
  %968 = load i32, ptr %21, align 4, !tbaa !9
  %969 = add nsw i32 %968, 1
  %970 = sext i32 %969 to i64
  %971 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %970
  %972 = load i8, ptr %971, align 1, !tbaa !15
  %973 = zext i8 %972 to i32
  %974 = icmp ne i32 %967, %973
  br i1 %974, label %975, label %980

975:                                              ; preds = %964
  %976 = load i32, ptr %2, align 4, !tbaa !9
  %977 = sext i32 %976 to i64
  %978 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %977
  %979 = getelementptr inbounds %struct.anon, ptr %978, i32 0, i32 20
  store i32 1, ptr %979, align 16, !tbaa !42
  br label %980

980:                                              ; preds = %975, %964
  %981 = load ptr, ptr @state, align 8, !tbaa !5
  %982 = call zeroext i8 @readY(ptr noundef %981)
  %983 = zext i8 %982 to i32
  %984 = load i32, ptr %21, align 4, !tbaa !9
  %985 = add nsw i32 %984, 2
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %986
  %988 = load i8, ptr %987, align 1, !tbaa !15
  %989 = zext i8 %988 to i32
  %990 = icmp ne i32 %983, %989
  br i1 %990, label %991, label %996

991:                                              ; preds = %980
  %992 = load i32, ptr %2, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %993
  %995 = getelementptr inbounds %struct.anon, ptr %994, i32 0, i32 21
  store i32 1, ptr %995, align 4, !tbaa !43
  br label %996

996:                                              ; preds = %991, %980
  %997 = load ptr, ptr @state, align 8, !tbaa !5
  %998 = call zeroext i8 @readSP(ptr noundef %997)
  %999 = zext i8 %998 to i32
  %1000 = load i32, ptr %21, align 4, !tbaa !9
  %1001 = add nsw i32 %1000, 3
  %1002 = sext i32 %1001 to i64
  %1003 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %1002
  %1004 = load i8, ptr %1003, align 1, !tbaa !15
  %1005 = zext i8 %1004 to i32
  %1006 = icmp ne i32 %999, %1005
  br i1 %1006, label %1007, label %1012

1007:                                             ; preds = %996
  %1008 = load i32, ptr %2, align 4, !tbaa !9
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1009
  %1011 = getelementptr inbounds %struct.anon, ptr %1010, i32 0, i32 22
  store i32 1, ptr %1011, align 8, !tbaa !44
  br label %1012

1012:                                             ; preds = %1007, %996
  %1013 = load ptr, ptr @state, align 8, !tbaa !5
  %1014 = call zeroext i8 @readP(ptr noundef %1013)
  %1015 = zext i8 %1014 to i32
  %1016 = and i32 %1015, 207
  %1017 = load i32, ptr %21, align 4, !tbaa !9
  %1018 = add nsw i32 %1017, 4
  %1019 = sext i32 %1018 to i64
  %1020 = getelementptr inbounds [19 x i8], ptr %7, i64 0, i64 %1019
  %1021 = load i8, ptr %1020, align 1, !tbaa !15
  %1022 = zext i8 %1021 to i32
  %1023 = and i32 %1022, 207
  %1024 = icmp ne i32 %1016, %1023
  br i1 %1024, label %1025, label %1030

1025:                                             ; preds = %1012
  %1026 = load i32, ptr %2, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1027
  %1029 = getelementptr inbounds %struct.anon, ptr %1028, i32 0, i32 23
  store i32 1, ptr %1029, align 4, !tbaa !45
  br label %1030

1030:                                             ; preds = %1025, %1012
  br label %1031

1031:                                             ; preds = %1030
  %1032 = load i32, ptr %21, align 4, !tbaa !9
  %1033 = add nsw i32 %1032, 1
  store i32 %1033, ptr %21, align 4, !tbaa !9
  br label %824, !llvm.loop !47

1034:                                             ; preds = %828
  call void @llvm.lifetime.end.p0(i64 19, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 2, ptr %5) #4
  br label %1035

1035:                                             ; preds = %1034, %57
  %1036 = load i32, ptr %2, align 4, !tbaa !9
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1037
  %1039 = getelementptr inbounds %struct.anon, ptr %1038, i32 0, i32 7
  %1040 = load i32, ptr %1039, align 4, !tbaa !24
  %1041 = icmp ne i32 %1040, 0
  br i1 %1041, label %1056, label %1042

1042:                                             ; preds = %1035
  %1043 = load i32, ptr %2, align 4, !tbaa !9
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1044
  %1046 = getelementptr inbounds %struct.anon, ptr %1045, i32 0, i32 6
  %1047 = load i32, ptr %1046, align 8, !tbaa !23
  %1048 = icmp ne i32 %1047, 0
  br i1 %1048, label %1056, label %1049

1049:                                             ; preds = %1042
  %1050 = load i32, ptr %2, align 4, !tbaa !9
  %1051 = sext i32 %1050 to i64
  %1052 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1051
  %1053 = getelementptr inbounds %struct.anon, ptr %1052, i32 0, i32 10
  %1054 = load i32, ptr %1053, align 8, !tbaa !27
  %1055 = icmp ne i32 %1054, 0
  br i1 %1055, label %1056, label %1070

1056:                                             ; preds = %1049, %1042, %1035
  %1057 = load i32, ptr %2, align 4, !tbaa !9
  %1058 = sext i32 %1057 to i64
  %1059 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1058
  %1060 = getelementptr inbounds %struct.anon, ptr %1059, i32 0, i32 15
  %1061 = load i32, ptr %1060, align 4, !tbaa !36
  %1062 = icmp ne i32 %1061, 0
  br i1 %1062, label %1065, label %1063

1063:                                             ; preds = %1056
  %1064 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  br label %1065

1065:                                             ; preds = %1063, %1056
  %1066 = load i32, ptr %2, align 4, !tbaa !9
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1067
  %1069 = getelementptr inbounds %struct.anon, ptr %1068, i32 0, i32 15
  store i32 0, ptr %1069, align 4, !tbaa !36
  br label %1070

1070:                                             ; preds = %1065, %1049
  %1071 = load i32, ptr %2, align 4, !tbaa !9
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1072
  %1074 = getelementptr inbounds %struct.anon, ptr %1073, i32 0, i32 9
  %1075 = load i32, ptr %1074, align 4, !tbaa !26
  %1076 = icmp ne i32 %1075, 0
  br i1 %1076, label %1091, label %1077

1077:                                             ; preds = %1070
  %1078 = load i32, ptr %2, align 4, !tbaa !9
  %1079 = sext i32 %1078 to i64
  %1080 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1079
  %1081 = getelementptr inbounds %struct.anon, ptr %1080, i32 0, i32 8
  %1082 = load i32, ptr %1081, align 16, !tbaa !25
  %1083 = icmp ne i32 %1082, 0
  br i1 %1083, label %1091, label %1084

1084:                                             ; preds = %1077
  %1085 = load i32, ptr %2, align 4, !tbaa !9
  %1086 = sext i32 %1085 to i64
  %1087 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1086
  %1088 = getelementptr inbounds %struct.anon, ptr %1087, i32 0, i32 11
  %1089 = load i32, ptr %1088, align 4, !tbaa !28
  %1090 = icmp ne i32 %1089, 0
  br i1 %1090, label %1091, label %1105

1091:                                             ; preds = %1084, %1077, %1070
  %1092 = load i32, ptr %2, align 4, !tbaa !9
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1093
  %1095 = getelementptr inbounds %struct.anon, ptr %1094, i32 0, i32 16
  %1096 = load i32, ptr %1095, align 16, !tbaa !37
  %1097 = icmp ne i32 %1096, 0
  br i1 %1097, label %1100, label %1098

1098:                                             ; preds = %1091
  %1099 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  br label %1100

1100:                                             ; preds = %1098, %1091
  %1101 = load i32, ptr %2, align 4, !tbaa !9
  %1102 = sext i32 %1101 to i64
  %1103 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1102
  %1104 = getelementptr inbounds %struct.anon, ptr %1103, i32 0, i32 16
  store i32 0, ptr %1104, align 16, !tbaa !37
  br label %1105

1105:                                             ; preds = %1100, %1084
  %1106 = load i32, ptr %2, align 4, !tbaa !9
  %1107 = sext i32 %1106 to i64
  %1108 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1107
  %1109 = getelementptr inbounds %struct.anon, ptr %1108, i32 0, i32 0
  %1110 = load i32, ptr %1109, align 16, !tbaa !13
  %1111 = icmp ne i32 %1110, 0
  br i1 %1111, label %1112, label %1114

1112:                                             ; preds = %1105
  %1113 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  br label %1303

1114:                                             ; preds = %1105
  %1115 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  %1116 = load i32, ptr %2, align 4, !tbaa !9
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1117
  %1119 = getelementptr inbounds %struct.anon, ptr %1118, i32 0, i32 1
  %1120 = load i32, ptr %1119, align 4, !tbaa !18
  %1121 = icmp slt i32 %1120, 0
  br i1 %1121, label %1129, label %1122

1122:                                             ; preds = %1114
  %1123 = load i32, ptr %2, align 4, !tbaa !9
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1124
  %1126 = getelementptr inbounds %struct.anon, ptr %1125, i32 0, i32 1
  %1127 = load i32, ptr %1126, align 4, !tbaa !18
  %1128 = icmp sgt i32 %1127, 9
  br i1 %1128, label %1129, label %1131

1129:                                             ; preds = %1122, %1114
  %1130 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %1138

1131:                                             ; preds = %1122
  %1132 = load i32, ptr %2, align 4, !tbaa !9
  %1133 = sext i32 %1132 to i64
  %1134 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1133
  %1135 = getelementptr inbounds %struct.anon, ptr %1134, i32 0, i32 1
  %1136 = load i32, ptr %1135, align 4, !tbaa !18
  %1137 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef %1136)
  br label %1138

1138:                                             ; preds = %1131, %1129
  %1139 = load i32, ptr %2, align 4, !tbaa !9
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1140
  %1142 = getelementptr inbounds %struct.anon, ptr %1141, i32 0, i32 2
  %1143 = load i32, ptr %1142, align 8, !tbaa !20
  %1144 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef %1143)
  %1145 = load i32, ptr %2, align 4, !tbaa !9
  %1146 = sext i32 %1145 to i64
  %1147 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1146
  %1148 = getelementptr inbounds %struct.anon, ptr %1147, i32 0, i32 14
  %1149 = load i32, ptr %1148, align 8, !tbaa !35
  %1150 = icmp ne i32 %1149, 0
  br i1 %1150, label %1151, label %1153

1151:                                             ; preds = %1138
  %1152 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  br label %1155

1153:                                             ; preds = %1138
  %1154 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1155

1155:                                             ; preds = %1153, %1151
  %1156 = load i32, ptr %2, align 4, !tbaa !9
  %1157 = sext i32 %1156 to i64
  %1158 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1157
  %1159 = getelementptr inbounds %struct.anon, ptr %1158, i32 0, i32 15
  %1160 = load i32, ptr %1159, align 4, !tbaa !36
  %1161 = icmp ne i32 %1160, 0
  br i1 %1161, label %1162, label %1164

1162:                                             ; preds = %1155
  %1163 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %1166

1164:                                             ; preds = %1155
  %1165 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1166

1166:                                             ; preds = %1164, %1162
  %1167 = load i32, ptr %2, align 4, !tbaa !9
  %1168 = sext i32 %1167 to i64
  %1169 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1168
  %1170 = getelementptr inbounds %struct.anon, ptr %1169, i32 0, i32 16
  %1171 = load i32, ptr %1170, align 16, !tbaa !37
  %1172 = icmp ne i32 %1171, 0
  br i1 %1172, label %1173, label %1175

1173:                                             ; preds = %1166
  %1174 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  br label %1177

1175:                                             ; preds = %1166
  %1176 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1177

1177:                                             ; preds = %1175, %1173
  %1178 = load i32, ptr %2, align 4, !tbaa !9
  %1179 = sext i32 %1178 to i64
  %1180 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1179
  %1181 = getelementptr inbounds %struct.anon, ptr %1180, i32 0, i32 17
  %1182 = load i32, ptr %1181, align 4, !tbaa !38
  %1183 = icmp ne i32 %1182, 0
  br i1 %1183, label %1184, label %1186

1184:                                             ; preds = %1177
  %1185 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  br label %1188

1186:                                             ; preds = %1177
  %1187 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1188

1188:                                             ; preds = %1186, %1184
  %1189 = load i32, ptr %2, align 4, !tbaa !9
  %1190 = sext i32 %1189 to i64
  %1191 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1190
  %1192 = getelementptr inbounds %struct.anon, ptr %1191, i32 0, i32 18
  %1193 = load i32, ptr %1192, align 8, !tbaa !39
  %1194 = icmp ne i32 %1193, 0
  br i1 %1194, label %1195, label %1197

1195:                                             ; preds = %1188
  %1196 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  br label %1199

1197:                                             ; preds = %1188
  %1198 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1199

1199:                                             ; preds = %1197, %1195
  %1200 = call i32 (ptr, ...) @printf(ptr noundef @.str.14)
  %1201 = load i32, ptr %2, align 4, !tbaa !9
  %1202 = sext i32 %1201 to i64
  %1203 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1202
  %1204 = getelementptr inbounds %struct.anon, ptr %1203, i32 0, i32 19
  %1205 = load i32, ptr %1204, align 4, !tbaa !41
  %1206 = icmp ne i32 %1205, 0
  br i1 %1206, label %1207, label %1209

1207:                                             ; preds = %1199
  %1208 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  br label %1211

1209:                                             ; preds = %1199
  %1210 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1211

1211:                                             ; preds = %1209, %1207
  %1212 = load i32, ptr %2, align 4, !tbaa !9
  %1213 = sext i32 %1212 to i64
  %1214 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1213
  %1215 = getelementptr inbounds %struct.anon, ptr %1214, i32 0, i32 20
  %1216 = load i32, ptr %1215, align 16, !tbaa !42
  %1217 = icmp ne i32 %1216, 0
  br i1 %1217, label %1218, label %1220

1218:                                             ; preds = %1211
  %1219 = call i32 (ptr, ...) @printf(ptr noundef @.str.10)
  br label %1222

1220:                                             ; preds = %1211
  %1221 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1222

1222:                                             ; preds = %1220, %1218
  %1223 = load i32, ptr %2, align 4, !tbaa !9
  %1224 = sext i32 %1223 to i64
  %1225 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1224
  %1226 = getelementptr inbounds %struct.anon, ptr %1225, i32 0, i32 21
  %1227 = load i32, ptr %1226, align 4, !tbaa !43
  %1228 = icmp ne i32 %1227, 0
  br i1 %1228, label %1229, label %1231

1229:                                             ; preds = %1222
  %1230 = call i32 (ptr, ...) @printf(ptr noundef @.str.11)
  br label %1233

1231:                                             ; preds = %1222
  %1232 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1233

1233:                                             ; preds = %1231, %1229
  %1234 = load i32, ptr %2, align 4, !tbaa !9
  %1235 = sext i32 %1234 to i64
  %1236 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1235
  %1237 = getelementptr inbounds %struct.anon, ptr %1236, i32 0, i32 22
  %1238 = load i32, ptr %1237, align 8, !tbaa !44
  %1239 = icmp ne i32 %1238, 0
  br i1 %1239, label %1240, label %1242

1240:                                             ; preds = %1233
  %1241 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  br label %1244

1242:                                             ; preds = %1233
  %1243 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1244

1244:                                             ; preds = %1242, %1240
  %1245 = load i32, ptr %2, align 4, !tbaa !9
  %1246 = sext i32 %1245 to i64
  %1247 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1246
  %1248 = getelementptr inbounds %struct.anon, ptr %1247, i32 0, i32 23
  %1249 = load i32, ptr %1248, align 4, !tbaa !45
  %1250 = icmp ne i32 %1249, 0
  br i1 %1250, label %1251, label %1253

1251:                                             ; preds = %1244
  %1252 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  br label %1255

1253:                                             ; preds = %1244
  %1254 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1255

1255:                                             ; preds = %1253, %1251
  %1256 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  %1257 = load i32, ptr %2, align 4, !tbaa !9
  %1258 = sext i32 %1257 to i64
  %1259 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1258
  %1260 = getelementptr inbounds %struct.anon, ptr %1259, i32 0, i32 12
  %1261 = load i32, ptr %1260, align 16, !tbaa !29
  %1262 = icmp ne i32 %1261, 0
  br i1 %1262, label %1263, label %1265

1263:                                             ; preds = %1255
  %1264 = call i32 (ptr, ...) @printf(ptr noundef @.str.16)
  br label %1267

1265:                                             ; preds = %1255
  %1266 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1267

1267:                                             ; preds = %1265, %1263
  %1268 = load i32, ptr %2, align 4, !tbaa !9
  %1269 = sext i32 %1268 to i64
  %1270 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1269
  %1271 = getelementptr inbounds %struct.anon, ptr %1270, i32 0, i32 13
  %1272 = load i32, ptr %1271, align 4, !tbaa !30
  %1273 = icmp ne i32 %1272, 0
  br i1 %1273, label %1274, label %1276

1274:                                             ; preds = %1267
  %1275 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  br label %1278

1276:                                             ; preds = %1267
  %1277 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %1278

1278:                                             ; preds = %1276, %1274
  %1279 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  %1280 = load i32, ptr %2, align 4, !tbaa !9
  %1281 = sext i32 %1280 to i64
  %1282 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %1281
  %1283 = getelementptr inbounds %struct.anon, ptr %1282, i32 0, i32 3
  %1284 = load i32, ptr %1283, align 4, !tbaa !32
  switch i32 %1284, label %1301 [
    i32 1, label %1285
    i32 2, label %1287
    i32 3, label %1289
    i32 4, label %1291
    i32 5, label %1293
    i32 6, label %1295
    i32 7, label %1297
    i32 8, label %1299
  ]

1285:                                             ; preds = %1278
  %1286 = call i32 (ptr, ...) @printf(ptr noundef @.str.18)
  br label %1301

1287:                                             ; preds = %1278
  %1288 = call i32 (ptr, ...) @printf(ptr noundef @.str.19)
  br label %1301

1289:                                             ; preds = %1278
  %1290 = call i32 (ptr, ...) @printf(ptr noundef @.str.20)
  br label %1301

1291:                                             ; preds = %1278
  %1292 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  br label %1301

1293:                                             ; preds = %1278
  %1294 = call i32 (ptr, ...) @printf(ptr noundef @.str.22)
  br label %1301

1295:                                             ; preds = %1278
  %1296 = call i32 (ptr, ...) @printf(ptr noundef @.str.23)
  br label %1301

1297:                                             ; preds = %1278
  %1298 = call i32 (ptr, ...) @printf(ptr noundef @.str.24)
  br label %1301

1299:                                             ; preds = %1278
  %1300 = call i32 (ptr, ...) @printf(ptr noundef @.str.25)
  br label %1301

1301:                                             ; preds = %1299, %1297, %1295, %1293, %1291, %1289, %1287, %1285, %1278
  %1302 = call i32 (ptr, ...) @printf(ptr noundef @.str.26)
  br label %1303

1303:                                             ; preds = %1301, %1112
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  br label %1304

1304:                                             ; preds = %1303
  %1305 = load i32, ptr %2, align 4, !tbaa !9
  %1306 = add nsw i32 %1305, 1
  store i32 %1306, ptr %2, align 4, !tbaa !9
  br label %23, !llvm.loop !48

1307:                                             ; preds = %26
  %1308 = load i32, ptr %1, align 4
  ret i32 %1308
}

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

declare i32 @readRW(ptr noundef) #2

declare zeroext i16 @readAddressBus(ptr noundef) #2

declare zeroext i8 @readSP(ptr noundef) #2

declare zeroext i8 @readIR(ptr noundef) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare zeroext i8 @readDataBus(ptr noundef) #2

declare zeroext i8 @readA(ptr noundef) #2

declare zeroext i8 @readX(ptr noundef) #2

declare zeroext i8 @readY(ptr noundef) #2

declare zeroext i8 @readP(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 0}
!14 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92}
!15 = !{!7, !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"short", !7, i64 0}
!18 = !{!14, !10, i64 4}
!19 = distinct !{!19, !12}
!20 = !{!14, !10, i64 8}
!21 = !{!14, !10, i64 16}
!22 = !{!14, !10, i64 20}
!23 = !{!14, !10, i64 24}
!24 = !{!14, !10, i64 28}
!25 = !{!14, !10, i64 32}
!26 = !{!14, !10, i64 36}
!27 = !{!14, !10, i64 40}
!28 = !{!14, !10, i64 44}
!29 = !{!14, !10, i64 48}
!30 = !{!14, !10, i64 52}
!31 = distinct !{!31, !12}
!32 = !{!14, !10, i64 12}
!33 = distinct !{!33, !12}
!34 = distinct !{!34, !12}
!35 = !{!14, !10, i64 56}
!36 = !{!14, !10, i64 60}
!37 = !{!14, !10, i64 64}
!38 = !{!14, !10, i64 68}
!39 = !{!14, !10, i64 72}
!40 = distinct !{!40, !12}
!41 = !{!14, !10, i64 76}
!42 = !{!14, !10, i64 80}
!43 = !{!14, !10, i64 84}
!44 = !{!14, !10, i64 88}
!45 = !{!14, !10, i64 92}
!46 = distinct !{!46, !12}
!47 = distinct !{!47, !12}
!48 = distinct !{!48, !12}


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

%struct.anon = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@memory = external local_unnamed_addr global [65536 x i8], align 16
@initial_s = external dso_local local_unnamed_addr global i16, align 2
@initial_p = external dso_local local_unnamed_addr global i16, align 2
@initial_a = external dso_local local_unnamed_addr global i16, align 2
@initial_x = external dso_local local_unnamed_addr global i16, align 2
@initial_y = external dso_local local_unnamed_addr global i16, align 2
@state = external dso_local local_unnamed_addr global ptr, align 8
@cycle = external local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [8 x i8], align 1
@data = external dso_local local_unnamed_addr global [256 x %struct.anon], align 16
@__const.main.magics = external hidden unnamed_addr constant [19 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [2 x i8], align 1
@switch.table.main = private unnamed_addr constant [5 x ptr] [ptr @initial_a, ptr @initial_x, ptr @initial_y, ptr @initial_s, ptr @initial_p], align 8
@switch.table.main.1 = private unnamed_addr constant [8 x ptr] [ptr @.str.18, ptr @.str.19, ptr @.str.20, ptr @.str.21, ptr @.str.22, ptr @.str.23, ptr @.str.24, ptr @.str.25], align 8

; Function Attrs: nounwind uwtable
declare dso_local void @setup_memory(i8 noundef zeroext) local_unnamed_addr #0

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @resetChip_test() local_unnamed_addr #0

declare ptr @initAndResetChip(...) local_unnamed_addr #2

declare void @step(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  %1 = alloca [100 x i16], align 16
  %2 = alloca [100 x i16], align 16
  %3 = alloca [100 x i16], align 16
  %4 = tail call ptr (...) @initAndResetChip() #5
  store ptr %4, ptr @state, align 8, !tbaa !5
  br label %6

5:                                                ; preds = %505
  ret i32 0

6:                                                ; preds = %0, %505
  %indvars.iv394 = phi i64 [ 0, %0 ], [ %indvars.iv.next395, %505 ]
  %.0171371 = phi i8 [ undef, %0 ], [ %.4, %505 ]
  %.0172370 = phi i8 [ undef, %0 ], [ %.5, %505 ]
  %.0177369 = phi i8 [ undef, %0 ], [ %.5182, %505 ]
  %.0183368 = phi i8 [ undef, %0 ], [ %.5188, %505 ]
  %.0189367 = phi i8 [ undef, %0 ], [ %.5194, %505 ]
  %7 = trunc nuw nsw i64 %indvars.iv394 to i32
  %8 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %7)
  %9 = trunc i64 %indvars.iv394 to i8
  tail call void @setup_memory(i8 noundef zeroext %9)
  tail call void @resetChip_test()
  br label %10

10:                                               ; preds = %6, %21
  %.0205328 = phi i32 [ 0, %6 ], [ %22, %21 ]
  %11 = load ptr, ptr @state, align 8, !tbaa !5
  tail call void @step(ptr noundef %11) #5
  %12 = load i32, ptr @cycle, align 4, !tbaa !9
  %13 = and i32 %12, 1
  %.not = icmp eq i32 %13, 0
  br i1 %.not, label %21, label %14

14:                                               ; preds = %10
  %15 = load ptr, ptr @state, align 8, !tbaa !5
  %16 = tail call i32 @readRW(ptr noundef %15) #5
  %.not217 = icmp eq i32 %16, 0
  br i1 %.not217, label %21, label %17

17:                                               ; preds = %14
  %18 = load ptr, ptr @state, align 8, !tbaa !5
  %19 = tail call zeroext i16 @readAddressBus(ptr noundef %18) #5
  %20 = icmp eq i16 %19, -1024
  br i1 %20, label %.thread, label %21

21:                                               ; preds = %10, %14, %17
  %22 = add nuw nsw i32 %.0205328, 1
  %exitcond.not = icmp eq i32 %22, 100
  br i1 %exitcond.not, label %23, label %10, !llvm.loop !11

23:                                               ; preds = %21
  %24 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %indvars.iv394
  store i32 1, ptr %24, align 16, !tbaa !13
  br label %.loopexit320

.thread:                                          ; preds = %17
  %25 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %indvars.iv394
  store i32 0, ptr %25, align 16, !tbaa !13
  %26 = load ptr, ptr @state, align 8, !tbaa !5
  %27 = tail call zeroext i8 @readSP(ptr noundef %26) #5
  %28 = zext i8 %27 to i64
  %29 = add nuw nsw i64 %28, 258
  %30 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %29
  %31 = load i8, ptr %30, align 1, !tbaa !15
  %32 = zext i8 %31 to i32
  %33 = load ptr, ptr @state, align 8, !tbaa !5
  %34 = tail call zeroext i8 @readSP(ptr noundef %33) #5
  %35 = zext i8 %34 to i64
  %36 = add nuw nsw i64 %35, 259
  %37 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %36
  %38 = load i8, ptr %37, align 1, !tbaa !15
  %39 = zext i8 %38 to i32
  %40 = shl nuw nsw i32 %39, 8
  %41 = or disjoint i32 %40, %32
  %42 = add nsw i32 %41, -63490
  %43 = getelementptr inbounds i8, ptr %25, i64 4
  store i32 %42, ptr %43, align 4, !tbaa !16
  tail call void @setup_memory(i8 noundef zeroext %9)
  tail call void @resetChip_test()
  br label %44

44:                                               ; preds = %44, %.thread
  %.1206329 = phi i32 [ 0, %.thread ], [ %49, %44 ]
  %45 = load ptr, ptr @state, align 8, !tbaa !5
  tail call void @step(ptr noundef %45) #5
  %46 = load ptr, ptr @state, align 8, !tbaa !5
  %47 = tail call zeroext i8 @readIR(ptr noundef %46) #5
  %48 = icmp ne i8 %47, 0
  %49 = add nuw nsw i32 %.1206329, 1
  %50 = icmp ult i32 %.1206329, 99
  %or.cond372 = select i1 %48, i1 %50, i1 false
  br i1 %or.cond372, label %44, label %51, !llvm.loop !17

51:                                               ; preds = %44
  %52 = load i32, ptr @cycle, align 4, !tbaa !9
  %53 = lshr i32 %52, 1
  %54 = getelementptr inbounds i8, ptr %25, i64 8
  store i32 %53, ptr %54, align 8
  tail call void @setup_memory(i8 noundef zeroext %9)
  %55 = load i16, ptr @initial_x, align 2, !tbaa !18
  %56 = zext i16 %55 to i64
  %57 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %56
  store i8 5, ptr %57, align 1, !tbaa !15
  %58 = load i16, ptr @initial_y, align 2, !tbaa !18
  %59 = zext i16 %58 to i64
  %60 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %59
  store i8 10, ptr %60, align 1, !tbaa !15
  store i8 40, ptr getelementptr inbounds (i8, ptr @memory, i64 239), align 1, !tbaa !15
  store i8 19, ptr getelementptr inbounds (i8, ptr @memory, i64 240), align 16, !tbaa !15
  store i8 121, ptr getelementptr inbounds (i8, ptr @memory, i64 234), align 2, !tbaa !15
  store i8 25, ptr getelementptr inbounds (i8, ptr @memory, i64 235), align 1, !tbaa !15
  tail call void @resetChip_test()
  %61 = load i32, ptr %43, align 4, !tbaa !16
  switch i32 %61, label %64 [
    i32 2, label %62
    i32 3, label %63
  ]

62:                                               ; preds = %51
  store i8 -22, ptr getelementptr inbounds (i8, ptr @memory, i64 63489), align 1, !tbaa !15
  br label %64

63:                                               ; preds = %51
  store i8 30, ptr getelementptr inbounds (i8, ptr @memory, i64 63489), align 1, !tbaa !15
  store i8 -85, ptr getelementptr inbounds (i8, ptr @memory, i64 63490), align 2, !tbaa !15
  br label %64

64:                                               ; preds = %51, %63, %62
  %65 = getelementptr inbounds i8, ptr %25, i64 16
  %66 = getelementptr inbounds i8, ptr %25, i64 20
  %67 = getelementptr inbounds i8, ptr %25, i64 24
  %68 = getelementptr inbounds i8, ptr %25, i64 28
  %69 = getelementptr inbounds i8, ptr %25, i64 32
  %70 = getelementptr inbounds i8, ptr %25, i64 36
  %71 = getelementptr inbounds i8, ptr %25, i64 40
  %72 = getelementptr inbounds i8, ptr %25, i64 44
  %73 = getelementptr inbounds i8, ptr %25, i64 48
  %74 = getelementptr inbounds i8, ptr %25, i64 52
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(40) %65, i8 0, i64 40, i1 false)
  %75 = load i32, ptr %54, align 8, !tbaa !20
  %76 = icmp sgt i32 %75, -1
  br i1 %76, label %.lr.ph, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %64
  %77 = getelementptr inbounds i8, ptr %25, i64 12
  store i32 0, ptr %77, align 4, !tbaa !21
  br label %146

.lr.ph:                                           ; preds = %64, %.thread401
  %.2207330 = phi i32 [ %141, %.thread401 ], [ 0, %64 ]
  %78 = load ptr, ptr @state, align 8, !tbaa !5
  tail call void @step(ptr noundef %78) #5
  %79 = load i32, ptr @cycle, align 4, !tbaa !9
  %80 = and i32 %79, 1
  %.not253 = icmp eq i32 %80, 0
  br i1 %.not253, label %.thread401, label %81

81:                                               ; preds = %.lr.ph
  %82 = load ptr, ptr @state, align 8, !tbaa !5
  %83 = tail call i32 @readRW(ptr noundef %82) #5
  %.not254 = icmp eq i32 %83, 0
  br i1 %.not254, label %84, label %88

84:                                               ; preds = %81
  %.pre = load i32, ptr @cycle, align 4, !tbaa !9
  %.pre400 = and i32 %.pre, 1
  %.not255 = icmp eq i32 %.pre400, 0
  br i1 %.not255, label %.thread401, label %85

85:                                               ; preds = %84
  %86 = load ptr, ptr @state, align 8, !tbaa !5
  %87 = tail call i32 @readRW(ptr noundef %86) #5
  %.not256 = icmp eq i32 %87, 0
  br i1 %.not256, label %88, label %.thread401

88:                                               ; preds = %85, %81
  %89 = load ptr, ptr @state, align 8, !tbaa !5
  %90 = tail call zeroext i16 @readAddressBus(ptr noundef %89) #5
  %91 = icmp eq i16 %90, 234
  br i1 %91, label %92, label %93

92:                                               ; preds = %88
  store i32 1, ptr %65, align 16, !tbaa !22
  br label %.critedge

93:                                               ; preds = %88
  %94 = load ptr, ptr @state, align 8, !tbaa !5
  %95 = tail call zeroext i16 @readAddressBus(ptr noundef %94) #5
  %96 = icmp eq i16 %95, -21730
  br i1 %96, label %97, label %98

97:                                               ; preds = %93
  store i32 1, ptr %66, align 4, !tbaa !23
  br label %.critedge

98:                                               ; preds = %93
  %99 = load ptr, ptr @state, align 8, !tbaa !5
  %100 = tail call zeroext i16 @readAddressBus(ptr noundef %99) #5
  %101 = icmp eq i16 %100, 239
  br i1 %101, label %102, label %103

102:                                              ; preds = %98
  store i32 1, ptr %67, align 8, !tbaa !24
  br label %.critedge

103:                                              ; preds = %98
  %104 = load ptr, ptr @state, align 8, !tbaa !5
  %105 = tail call zeroext i16 @readAddressBus(ptr noundef %104) #5
  %106 = icmp eq i16 %105, -21725
  br i1 %106, label %107, label %108

107:                                              ; preds = %103
  store i32 1, ptr %68, align 4, !tbaa !25
  br label %.critedge

108:                                              ; preds = %103
  %109 = load ptr, ptr @state, align 8, !tbaa !5
  %110 = tail call zeroext i16 @readAddressBus(ptr noundef %109) #5
  %111 = icmp eq i16 %110, 244
  br i1 %111, label %112, label %113

112:                                              ; preds = %108
  store i32 1, ptr %69, align 16, !tbaa !26
  br label %.critedge

113:                                              ; preds = %108
  %114 = load ptr, ptr @state, align 8, !tbaa !5
  %115 = tail call zeroext i16 @readAddressBus(ptr noundef %114) #5
  %116 = icmp eq i16 %115, -21720
  br i1 %116, label %117, label %118

117:                                              ; preds = %113
  store i32 1, ptr %70, align 4, !tbaa !27
  br label %.critedge

118:                                              ; preds = %113
  %119 = load ptr, ptr @state, align 8, !tbaa !5
  %120 = tail call zeroext i16 @readAddressBus(ptr noundef %119) #5
  %121 = icmp eq i16 %120, 4904
  br i1 %121, label %122, label %123

122:                                              ; preds = %118
  store i32 1, ptr %71, align 8, !tbaa !28
  br label %.critedge

123:                                              ; preds = %118
  %124 = load ptr, ptr @state, align 8, !tbaa !5
  %125 = tail call zeroext i16 @readAddressBus(ptr noundef %124) #5
  %126 = icmp eq i16 %125, 6531
  br i1 %126, label %127, label %134

127:                                              ; preds = %123
  store i32 1, ptr %72, align 4, !tbaa !29
  br label %.critedge

.critedge:                                        ; preds = %127, %122, %117, %112, %107, %102, %97, %92
  %128 = load i32, ptr @cycle, align 4, !tbaa !9
  %129 = and i32 %128, 1
  %.not258 = icmp eq i32 %129, 0
  br i1 %.not258, label %134, label %130

130:                                              ; preds = %.critedge
  %131 = load ptr, ptr @state, align 8, !tbaa !5
  %132 = tail call i32 @readRW(ptr noundef %131) #5
  %.not259 = icmp eq i32 %132, 0
  br i1 %.not259, label %134, label %133

133:                                              ; preds = %130
  store i32 1, ptr %73, align 16, !tbaa !30
  br label %134

134:                                              ; preds = %123, %.critedge, %130, %133
  %135 = load i32, ptr @cycle, align 4, !tbaa !9
  %136 = and i32 %135, 1
  %.not260 = icmp eq i32 %136, 0
  br i1 %.not260, label %.thread401, label %137

137:                                              ; preds = %134
  %138 = load ptr, ptr @state, align 8, !tbaa !5
  %139 = tail call i32 @readRW(ptr noundef %138) #5
  %.not261 = icmp eq i32 %139, 0
  br i1 %.not261, label %140, label %.thread401

140:                                              ; preds = %137
  store i32 1, ptr %74, align 4, !tbaa !31
  br label %.thread401

.thread401:                                       ; preds = %.lr.ph, %134, %137, %140, %84, %85
  %141 = add nuw nsw i32 %.2207330, 1
  %142 = load i32, ptr %54, align 8, !tbaa !20
  %143 = shl nsw i32 %142, 1
  %.not373 = icmp sgt i32 %.2207330, %143
  br i1 %.not373, label %._crit_edge, label %.lr.ph, !llvm.loop !32

._crit_edge:                                      ; preds = %.thread401
  %.pre398 = load i32, ptr %72, align 4, !tbaa !29
  %144 = getelementptr inbounds i8, ptr %25, i64 12
  store i32 0, ptr %144, align 4, !tbaa !21
  %.not219 = icmp eq i32 %.pre398, 0
  br i1 %.not219, label %146, label %145

145:                                              ; preds = %._crit_edge
  store i32 1, ptr %144, align 4, !tbaa !21
  br label %168

146:                                              ; preds = %._crit_edge.thread, %._crit_edge
  %147 = phi ptr [ %77, %._crit_edge.thread ], [ %144, %._crit_edge ]
  %148 = load i32, ptr %71, align 8, !tbaa !28
  %.not220 = icmp eq i32 %148, 0
  br i1 %.not220, label %150, label %149

149:                                              ; preds = %146
  store i32 2, ptr %147, align 4, !tbaa !21
  br label %168

150:                                              ; preds = %146
  %151 = load i32, ptr %69, align 16, !tbaa !26
  %.not221 = icmp eq i32 %151, 0
  br i1 %.not221, label %153, label %152

152:                                              ; preds = %150
  store i32 3, ptr %147, align 4, !tbaa !21
  br label %168

153:                                              ; preds = %150
  %154 = load i32, ptr %67, align 8, !tbaa !24
  %.not222 = icmp eq i32 %154, 0
  br i1 %.not222, label %156, label %155

155:                                              ; preds = %153
  store i32 4, ptr %147, align 4, !tbaa !21
  br label %168

156:                                              ; preds = %153
  %157 = load i32, ptr %65, align 16, !tbaa !22
  %.not223 = icmp eq i32 %157, 0
  br i1 %.not223, label %159, label %158

158:                                              ; preds = %156
  store i32 5, ptr %147, align 4, !tbaa !21
  br label %168

159:                                              ; preds = %156
  %160 = load i32, ptr %70, align 4, !tbaa !27
  %.not224 = icmp eq i32 %160, 0
  br i1 %.not224, label %162, label %161

161:                                              ; preds = %159
  store i32 6, ptr %147, align 4, !tbaa !21
  br label %168

162:                                              ; preds = %159
  %163 = load i32, ptr %68, align 4, !tbaa !25
  %.not225 = icmp eq i32 %163, 0
  br i1 %.not225, label %165, label %164

164:                                              ; preds = %162
  store i32 7, ptr %147, align 4, !tbaa !21
  br label %168

165:                                              ; preds = %162
  %166 = load i32, ptr %66, align 4, !tbaa !23
  %.not226 = icmp eq i32 %166, 0
  br i1 %.not226, label %168, label %167

167:                                              ; preds = %165
  store i32 8, ptr %147, align 4, !tbaa !21
  br label %168

168:                                              ; preds = %149, %155, %161, %165, %167, %164, %158, %152, %145
  %169 = phi ptr [ %147, %149 ], [ %147, %155 ], [ %147, %161 ], [ %147, %165 ], [ %147, %167 ], [ %147, %164 ], [ %147, %158 ], [ %147, %152 ], [ %144, %145 ]
  %170 = getelementptr inbounds i8, ptr %25, i64 72
  %171 = getelementptr inbounds i8, ptr %25, i64 68
  %172 = getelementptr inbounds i8, ptr %25, i64 64
  %173 = getelementptr inbounds i8, ptr %25, i64 60
  %174 = getelementptr inbounds i8, ptr %25, i64 56
  br label %181

175:                                              ; preds = %.loopexit
  store i32 %.2201, ptr %170, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %2) #5
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %1) #5
  %176 = getelementptr inbounds i8, ptr %25, i64 76
  %177 = getelementptr inbounds i8, ptr %25, i64 80
  %178 = getelementptr inbounds i8, ptr %25, i64 84
  %179 = getelementptr inbounds i8, ptr %25, i64 88
  %180 = getelementptr inbounds i8, ptr %25, i64 92
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(20) %176, i8 0, i64 20, i1 false)
  br label %332

181:                                              ; preds = %330, %168
  %.1360 = phi i8 [ %.0171371, %168 ], [ %.2323, %330 ]
  %.1173359 = phi i8 [ %.0172370, %168 ], [ %.4176, %330 ]
  %.1178358 = phi i8 [ %.0177369, %168 ], [ %.4181, %330 ]
  %.1184357 = phi i8 [ %.0183368, %168 ], [ %.4187, %330 ]
  %.1190356 = phi i8 [ %.0189367, %168 ], [ %.4193, %330 ]
  %.0202353 = phi i32 [ 0, %168 ], [ %331, %330 ]
  call void @llvm.lifetime.start.p0(i64 200, ptr nonnull %1) #5
  call void @llvm.lifetime.start.p0(i64 200, ptr nonnull %2) #5
  call void @llvm.lifetime.start.p0(i64 200, ptr nonnull %3) #5
  %182 = icmp eq i32 %.0202353, 0
  %183 = icmp eq i32 %.0202353, 1
  %184 = icmp eq i32 %.0202353, 2
  %185 = icmp eq i32 %.0202353, 3
  %186 = icmp eq i32 %.0202353, 4
  %187 = icmp ult i32 %.0202353, 5
  %188 = zext nneg i32 %.0202353 to i64
  %switch.gep = getelementptr inbounds [5 x ptr], ptr @switch.table.main, i64 0, i64 %188
  br label %189

189:                                              ; preds = %181, %325
  %indvars.iv = phi i64 [ 0, %181 ], [ %indvars.iv.next, %325 ]
  %.2351 = phi i8 [ %.1360, %181 ], [ %.3, %325 ]
  %.2174347 = phi i8 [ %.1173359, %181 ], [ %.3175318, %325 ]
  %.2179344 = phi i8 [ %.1178358, %181 ], [ %.3180305312, %325 ]
  %.2185342 = phi i8 [ %.1184357, %181 ], [ %.3186295301316, %325 ]
  %.2191341 = phi i8 [ %.1190356, %181 ], [ %.3192288293303314, %325 ]
  tail call void @setup_memory(i8 noundef zeroext %9)
  %190 = load i32, ptr %43, align 4, !tbaa !16
  switch i32 %190, label %193 [
    i32 2, label %191
    i32 3, label %192
  ]

191:                                              ; preds = %189
  store i8 -22, ptr getelementptr inbounds (i8, ptr @memory, i64 63489), align 1, !tbaa !15
  br label %193

192:                                              ; preds = %189
  store i8 30, ptr getelementptr inbounds (i8, ptr @memory, i64 63489), align 1, !tbaa !15
  store i8 -85, ptr getelementptr inbounds (i8, ptr @memory, i64 63490), align 2, !tbaa !15
  br label %193

193:                                              ; preds = %189, %192, %191
  br i1 %187, label %switch.lookup, label %199

switch.lookup:                                    ; preds = %193
  %switch.load = load ptr, ptr %switch.gep, align 8
  %194 = getelementptr inbounds [19 x i8], ptr @__const.main.magics, i64 0, i64 %indvars.iv
  %195 = load i8, ptr %194, align 1, !tbaa !15
  %196 = load i16, ptr %switch.load, align 2, !tbaa !18
  %197 = zext i16 %196 to i64
  %198 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %197
  store i8 %195, ptr %198, align 1, !tbaa !15
  br label %199

199:                                              ; preds = %193, %switch.lookup
  %200 = load i32, ptr %169, align 4, !tbaa !21
  switch i32 %200, label %235 [
    i32 8, label %234
    i32 7, label %226
    i32 3, label %201
    i32 4, label %209
    i32 5, label %217
    i32 6, label %218
  ]

201:                                              ; preds = %199
  %202 = load i16, ptr @initial_y, align 2, !tbaa !18
  %203 = zext i16 %202 to i64
  %204 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %203
  %205 = load i8, ptr %204, align 1, !tbaa !15
  %206 = zext i8 %205 to i64
  %207 = add nuw nsw i64 %206, 234
  %208 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %207
  store i8 3, ptr %208, align 1, !tbaa !15
  br label %235

209:                                              ; preds = %199
  %210 = load i16, ptr @initial_x, align 2, !tbaa !18
  %211 = zext i16 %210 to i64
  %212 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %211
  %213 = load i8, ptr %212, align 1, !tbaa !15
  %214 = zext i8 %213 to i64
  %215 = add nuw nsw i64 %214, 234
  %216 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %215
  store i8 3, ptr %216, align 1, !tbaa !15
  br label %235

217:                                              ; preds = %199
  store i8 3, ptr getelementptr inbounds (i8, ptr @memory, i64 234), align 2, !tbaa !15
  br label %235

218:                                              ; preds = %199
  %219 = load i16, ptr @initial_y, align 2, !tbaa !18
  %220 = zext i16 %219 to i64
  %221 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %220
  %222 = load i8, ptr %221, align 1, !tbaa !15
  %223 = zext i8 %222 to i64
  %224 = add nuw nsw i64 %223, 43806
  %225 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %224
  store i8 3, ptr %225, align 1, !tbaa !15
  br label %235

226:                                              ; preds = %199
  %227 = load i16, ptr @initial_x, align 2, !tbaa !18
  %228 = zext i16 %227 to i64
  %229 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %228
  %230 = load i8, ptr %229, align 1, !tbaa !15
  %231 = zext i8 %230 to i64
  %232 = add nuw nsw i64 %231, 43806
  %233 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %232
  store i8 3, ptr %233, align 1, !tbaa !15
  br label %235

234:                                              ; preds = %199
  store i8 3, ptr getelementptr inbounds (i8, ptr @memory, i64 43806), align 2, !tbaa !15
  br label %235

235:                                              ; preds = %234, %226, %218, %217, %209, %201, %199
  tail call void @resetChip_test()
  %236 = load i32, ptr %54, align 8, !tbaa !20
  %.not242331 = icmp sgt i32 %236, -1
  br i1 %.not242331, label %.lr.ph336, label %.critedge284

.lr.ph336:                                        ; preds = %235
  %.not234 = icmp eq i64 %indvars.iv, 0
  br i1 %.not234, label %.lr.ph336.split.us, label %.lr.ph336.split

.lr.ph336.split.us:                               ; preds = %.lr.ph336, %265
  %.0195334.us = phi i32 [ %.1196.us, %265 ], [ 0, %.lr.ph336 ]
  %.0197333.us = phi i32 [ %.1198.us, %265 ], [ 0, %.lr.ph336 ]
  %.3208332.us = phi i32 [ %266, %265 ], [ 0, %.lr.ph336 ]
  %237 = load ptr, ptr @state, align 8, !tbaa !5
  tail call void @step(ptr noundef %237) #5
  %238 = load i32, ptr @cycle, align 4, !tbaa !9
  %239 = and i32 %238, 1
  %.not232.us = icmp eq i32 %239, 0
  br i1 %.not232.us, label %249, label %240

240:                                              ; preds = %.lr.ph336.split.us
  %241 = load ptr, ptr @state, align 8, !tbaa !5
  %242 = tail call i32 @readRW(ptr noundef %241) #5
  %.not233.us = icmp eq i32 %242, 0
  br i1 %.not233.us, label %249, label %243

243:                                              ; preds = %240
  %244 = load ptr, ptr @state, align 8, !tbaa !5
  %245 = tail call zeroext i16 @readAddressBus(ptr noundef %244) #5
  %246 = add nsw i32 %.0197333.us, 1
  %247 = sext i32 %.0197333.us to i64
  %248 = getelementptr inbounds [100 x i16], ptr %1, i64 0, i64 %247
  store i16 %245, ptr %248, align 2, !tbaa !18
  br label %249

249:                                              ; preds = %243, %240, %.lr.ph336.split.us
  %.1198.us = phi i32 [ %246, %243 ], [ %.0197333.us, %240 ], [ %.0197333.us, %.lr.ph336.split.us ]
  %250 = load i32, ptr @cycle, align 4, !tbaa !9
  %251 = and i32 %250, 1
  %.not236.us = icmp eq i32 %251, 0
  br i1 %.not236.us, label %265, label %252

252:                                              ; preds = %249
  %253 = load ptr, ptr @state, align 8, !tbaa !5
  %254 = tail call i32 @readRW(ptr noundef %253) #5
  %.not237.us = icmp eq i32 %254, 0
  br i1 %.not237.us, label %255, label %265

255:                                              ; preds = %252
  %256 = load ptr, ptr @state, align 8, !tbaa !5
  %257 = tail call zeroext i16 @readAddressBus(ptr noundef %256) #5
  %258 = sext i32 %.0195334.us to i64
  %259 = getelementptr inbounds [100 x i16], ptr %2, i64 0, i64 %258
  store i16 %257, ptr %259, align 2, !tbaa !18
  %260 = load ptr, ptr @state, align 8, !tbaa !5
  %261 = tail call zeroext i8 @readDataBus(ptr noundef %260) #5
  %262 = zext i8 %261 to i16
  %263 = add nsw i32 %.0195334.us, 1
  %264 = getelementptr inbounds [100 x i16], ptr %3, i64 0, i64 %258
  store i16 %262, ptr %264, align 2, !tbaa !18
  br label %265

265:                                              ; preds = %255, %252, %249
  %.1196.us = phi i32 [ %.0195334.us, %252 ], [ %263, %255 ], [ %.0195334.us, %249 ]
  %266 = add nuw nsw i32 %.3208332.us, 1
  %267 = load i32, ptr %54, align 8, !tbaa !20
  %268 = shl nsw i32 %267, 1
  %.not242.us.not = icmp sgt i32 %.3208332.us, %268
  br i1 %.not242.us.not, label %.critedge284, label %.lr.ph336.split.us, !llvm.loop !34

.lr.ph336.split:                                  ; preds = %.lr.ph336, %301
  %.0195334 = phi i32 [ %.1196, %301 ], [ 0, %.lr.ph336 ]
  %.0197333 = phi i32 [ %.1198, %301 ], [ 0, %.lr.ph336 ]
  %.3208332 = phi i32 [ %302, %301 ], [ 0, %.lr.ph336 ]
  %269 = load ptr, ptr @state, align 8, !tbaa !5
  tail call void @step(ptr noundef %269) #5
  %270 = load i32, ptr @cycle, align 4, !tbaa !9
  %271 = and i32 %270, 1
  %.not232 = icmp eq i32 %271, 0
  br i1 %.not232, label %282, label %272

272:                                              ; preds = %.lr.ph336.split
  %273 = load ptr, ptr @state, align 8, !tbaa !5
  %274 = tail call i32 @readRW(ptr noundef %273) #5
  %.not233 = icmp eq i32 %274, 0
  br i1 %.not233, label %282, label %275

275:                                              ; preds = %272
  %276 = add nsw i32 %.0197333, 1
  %277 = sext i32 %.0197333 to i64
  %278 = getelementptr inbounds [100 x i16], ptr %1, i64 0, i64 %277
  %279 = load i16, ptr %278, align 2, !tbaa !18
  %280 = load ptr, ptr @state, align 8, !tbaa !5
  %281 = tail call zeroext i16 @readAddressBus(ptr noundef %280) #5
  %.not235 = icmp eq i16 %279, %281
  br i1 %.not235, label %282, label %.loopexit

282:                                              ; preds = %275, %272, %.lr.ph336.split
  %.1198 = phi i32 [ %276, %275 ], [ %.0197333, %272 ], [ %.0197333, %.lr.ph336.split ]
  %283 = load i32, ptr @cycle, align 4, !tbaa !9
  %284 = and i32 %283, 1
  %.not236 = icmp eq i32 %284, 0
  br i1 %.not236, label %301, label %285

285:                                              ; preds = %282
  %286 = load ptr, ptr @state, align 8, !tbaa !5
  %287 = tail call i32 @readRW(ptr noundef %286) #5
  %.not237 = icmp eq i32 %287, 0
  br i1 %.not237, label %288, label %301

288:                                              ; preds = %285
  %289 = sext i32 %.0195334 to i64
  %290 = getelementptr inbounds [100 x i16], ptr %2, i64 0, i64 %289
  %291 = load i16, ptr %290, align 2, !tbaa !18
  %292 = load ptr, ptr @state, align 8, !tbaa !5
  %293 = tail call zeroext i16 @readAddressBus(ptr noundef %292) #5
  %.not239 = icmp eq i16 %291, %293
  br i1 %.not239, label %294, label %.loopexit

294:                                              ; preds = %288
  %295 = add nsw i32 %.0195334, 1
  %296 = getelementptr inbounds [100 x i16], ptr %3, i64 0, i64 %289
  %297 = load i16, ptr %296, align 2, !tbaa !18
  %298 = load ptr, ptr @state, align 8, !tbaa !5
  %299 = tail call zeroext i8 @readDataBus(ptr noundef %298) #5
  %300 = zext i8 %299 to i16
  %.not240 = icmp eq i16 %297, %300
  br i1 %.not240, label %301, label %.loopexit

301:                                              ; preds = %282, %285, %294
  %.1196 = phi i32 [ %.0195334, %285 ], [ %295, %294 ], [ %.0195334, %282 ]
  %302 = add nuw nsw i32 %.3208332, 1
  %303 = load i32, ptr %54, align 8, !tbaa !20
  %304 = shl nsw i32 %303, 1
  %.not242.not = icmp sgt i32 %.3208332, %304
  br i1 %.not242.not, label %.critedge284, label %.lr.ph336.split, !llvm.loop !34

.critedge284:                                     ; preds = %301, %265, %235
  br i1 %182, label %.thread285, label %305

305:                                              ; preds = %.critedge284
  %.not243 = icmp eq i64 %indvars.iv, 0
  %306 = load ptr, ptr @state, align 8, !tbaa !5
  %307 = tail call zeroext i8 @readA(ptr noundef %306) #5
  br i1 %.not243, label %309, label %308

308:                                              ; preds = %305
  %.not244 = icmp eq i8 %.2191341, %307
  br i1 %.not244, label %309, label %.loopexit

309:                                              ; preds = %305, %308
  %.3192 = phi i8 [ %.2191341, %308 ], [ %307, %305 ]
  br i1 %183, label %.thread289, label %.thread285

.thread285:                                       ; preds = %.critedge284, %309
  %.3192287 = phi i8 [ %.3192, %309 ], [ %.2191341, %.critedge284 ]
  %.not245 = icmp eq i64 %indvars.iv, 0
  %310 = load ptr, ptr @state, align 8, !tbaa !5
  %311 = tail call zeroext i8 @readX(ptr noundef %310) #5
  br i1 %.not245, label %313, label %312

312:                                              ; preds = %.thread285
  %.not246 = icmp eq i8 %.2185342, %311
  br i1 %.not246, label %313, label %.loopexit

313:                                              ; preds = %.thread285, %312
  %.3186 = phi i8 [ %.2185342, %312 ], [ %311, %.thread285 ]
  br i1 %184, label %.thread296, label %.thread289

.thread289:                                       ; preds = %309, %313
  %.3186294 = phi i8 [ %.3186, %313 ], [ %.2185342, %309 ]
  %.3192288292 = phi i8 [ %.3192287, %313 ], [ %.3192, %309 ]
  %.not247 = icmp eq i64 %indvars.iv, 0
  %314 = load ptr, ptr @state, align 8, !tbaa !5
  %315 = tail call zeroext i8 @readY(ptr noundef %314) #5
  br i1 %.not247, label %317, label %316

316:                                              ; preds = %.thread289
  %.not248 = icmp eq i8 %.2179344, %315
  br i1 %.not248, label %317, label %.loopexit

317:                                              ; preds = %.thread289, %316
  %.3180 = phi i8 [ %.2179344, %316 ], [ %315, %.thread289 ]
  br i1 %185, label %.thread306, label %.thread296

.thread296:                                       ; preds = %313, %317
  %.3180304 = phi i8 [ %.3180, %317 ], [ %.2179344, %313 ]
  %.3192288293302 = phi i8 [ %.3192288292, %317 ], [ %.3192287, %313 ]
  %.3186295300 = phi i8 [ %.3186294, %317 ], [ %.3186, %313 ]
  %.not249 = icmp eq i64 %indvars.iv, 0
  %318 = load ptr, ptr @state, align 8, !tbaa !5
  %319 = tail call zeroext i8 @readSP(ptr noundef %318) #5
  br i1 %.not249, label %321, label %320

320:                                              ; preds = %.thread296
  %.not250 = icmp eq i8 %.2174347, %319
  br i1 %.not250, label %321, label %.loopexit

321:                                              ; preds = %.thread296, %320
  %.3175 = phi i8 [ %.2174347, %320 ], [ %319, %.thread296 ]
  br i1 %186, label %325, label %.thread306

.thread306:                                       ; preds = %317, %321
  %.3175317 = phi i8 [ %.3175, %321 ], [ %.2174347, %317 ]
  %.3186295301315 = phi i8 [ %.3186295300, %321 ], [ %.3186294, %317 ]
  %.3192288293303313 = phi i8 [ %.3192288293302, %321 ], [ %.3192288292, %317 ]
  %.3180305311 = phi i8 [ %.3180304, %321 ], [ %.3180, %317 ]
  %.not251 = icmp eq i64 %indvars.iv, 0
  %322 = load ptr, ptr @state, align 8, !tbaa !5
  %323 = tail call zeroext i8 @readP(ptr noundef %322) #5
  br i1 %.not251, label %325, label %324

324:                                              ; preds = %.thread306
  %.not252 = icmp eq i8 %.2351, %323
  br i1 %.not252, label %325, label %.loopexit

325:                                              ; preds = %.thread306, %321, %324
  %.3175318 = phi i8 [ %.3175, %321 ], [ %.3175317, %324 ], [ %.3175317, %.thread306 ]
  %.3186295301316 = phi i8 [ %.3186295300, %321 ], [ %.3186295301315, %324 ], [ %.3186295301315, %.thread306 ]
  %.3192288293303314 = phi i8 [ %.3192288293302, %321 ], [ %.3192288293303313, %324 ], [ %.3192288293303313, %.thread306 ]
  %.3180305312 = phi i8 [ %.3180304, %321 ], [ %.3180305311, %324 ], [ %.3180305311, %.thread306 ]
  %.3 = phi i8 [ %.2351, %321 ], [ %.2351, %324 ], [ %323, %.thread306 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond388.not = icmp eq i64 %indvars.iv.next, 19
  br i1 %exitcond388.not, label %.loopexit, label %189, !llvm.loop !35

.loopexit:                                        ; preds = %324, %320, %316, %312, %308, %325, %294, %288, %275
  %.2323 = phi i8 [ %.2351, %275 ], [ %.2351, %288 ], [ %.2351, %294 ], [ %.3, %325 ], [ %.2351, %308 ], [ %.2351, %312 ], [ %.2351, %316 ], [ %.2351, %320 ], [ %.2351, %324 ]
  %.2201 = phi i32 [ 1, %275 ], [ 1, %288 ], [ 1, %294 ], [ 0, %325 ], [ 1, %308 ], [ 1, %312 ], [ 1, %316 ], [ 1, %320 ], [ 1, %324 ]
  %.4193 = phi i8 [ %.2191341, %275 ], [ %.2191341, %288 ], [ %.2191341, %294 ], [ %.3192288293303314, %325 ], [ %.2191341, %308 ], [ %.3192287, %312 ], [ %.3192288292, %316 ], [ %.3192288293302, %320 ], [ %.3192288293303313, %324 ]
  %.4187 = phi i8 [ %.2185342, %275 ], [ %.2185342, %288 ], [ %.2185342, %294 ], [ %.3186295301316, %325 ], [ %.2185342, %308 ], [ %.2185342, %312 ], [ %.3186294, %316 ], [ %.3186295300, %320 ], [ %.3186295301315, %324 ]
  %.4181 = phi i8 [ %.2179344, %275 ], [ %.2179344, %288 ], [ %.2179344, %294 ], [ %.3180305312, %325 ], [ %.2179344, %308 ], [ %.2179344, %312 ], [ %.2179344, %316 ], [ %.3180304, %320 ], [ %.3180305311, %324 ]
  %.4176 = phi i8 [ %.2174347, %275 ], [ %.2174347, %288 ], [ %.2174347, %294 ], [ %.3175318, %325 ], [ %.2174347, %308 ], [ %.2174347, %312 ], [ %.2174347, %316 ], [ %.2174347, %320 ], [ %.3175317, %324 ]
  switch i32 %.0202353, label %330 [
    i32 0, label %326
    i32 1, label %327
    i32 2, label %328
    i32 3, label %329
    i32 4, label %175
  ]

326:                                              ; preds = %.loopexit
  store i32 %.2201, ptr %174, align 8, !tbaa !36
  br label %330

327:                                              ; preds = %.loopexit
  store i32 %.2201, ptr %173, align 4, !tbaa !37
  br label %330

328:                                              ; preds = %.loopexit
  store i32 %.2201, ptr %172, align 16, !tbaa !38
  br label %330

329:                                              ; preds = %.loopexit
  store i32 %.2201, ptr %171, align 4, !tbaa !39
  br label %330

330:                                              ; preds = %329, %328, %327, %326, %.loopexit
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %2) #5
  call void @llvm.lifetime.end.p0(i64 200, ptr nonnull %1) #5
  %331 = add nuw nsw i32 %.0202353, 1
  br label %181

332:                                              ; preds = %175, %416
  %indvars.iv390 = phi i64 [ 0, %175 ], [ %indvars.iv.next391, %416 ]
  tail call void @setup_memory(i8 noundef zeroext %9)
  %333 = getelementptr inbounds [19 x i8], ptr @__const.main.magics, i64 0, i64 %indvars.iv390
  %334 = load i8, ptr %333, align 1, !tbaa !15
  %335 = load i16, ptr @initial_a, align 2, !tbaa !18
  %336 = zext i16 %335 to i64
  %337 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %336
  store i8 %334, ptr %337, align 1, !tbaa !15
  %indvars.iv.next391 = add nuw nsw i64 %indvars.iv390, 1
  %338 = getelementptr inbounds [19 x i8], ptr @__const.main.magics, i64 0, i64 %indvars.iv.next391
  %339 = load i8, ptr %338, align 1, !tbaa !15
  %340 = load i16, ptr @initial_x, align 2, !tbaa !18
  %341 = zext i16 %340 to i64
  %342 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %341
  store i8 %339, ptr %342, align 1, !tbaa !15
  %343 = add nuw nsw i64 %indvars.iv390, 2
  %344 = getelementptr inbounds [19 x i8], ptr @__const.main.magics, i64 0, i64 %343
  %345 = load i8, ptr %344, align 1, !tbaa !15
  %346 = load i16, ptr @initial_y, align 2, !tbaa !18
  %347 = zext i16 %346 to i64
  %348 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %347
  store i8 %345, ptr %348, align 1, !tbaa !15
  %349 = add nuw nsw i64 %indvars.iv390, 3
  %350 = getelementptr inbounds [19 x i8], ptr @__const.main.magics, i64 0, i64 %349
  %351 = load i8, ptr %350, align 1, !tbaa !15
  %352 = load i16, ptr @initial_s, align 2, !tbaa !18
  %353 = zext i16 %352 to i64
  %354 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %353
  store i8 %351, ptr %354, align 1, !tbaa !15
  %355 = add nuw nsw i64 %indvars.iv390, 4
  %356 = getelementptr inbounds [19 x i8], ptr @__const.main.magics, i64 0, i64 %355
  %357 = load i8, ptr %356, align 1, !tbaa !15
  %358 = load i16, ptr @initial_p, align 2, !tbaa !18
  %359 = zext i16 %358 to i64
  %360 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %359
  store i8 %357, ptr %360, align 1, !tbaa !15
  %361 = load i32, ptr %43, align 4, !tbaa !16
  switch i32 %361, label %364 [
    i32 2, label %362
    i32 3, label %363
  ]

362:                                              ; preds = %332
  store i8 -22, ptr getelementptr inbounds (i8, ptr @memory, i64 63489), align 1, !tbaa !15
  br label %364

363:                                              ; preds = %332
  store i8 30, ptr getelementptr inbounds (i8, ptr @memory, i64 63489), align 1, !tbaa !15
  store i8 -85, ptr getelementptr inbounds (i8, ptr @memory, i64 63490), align 2, !tbaa !15
  br label %364

364:                                              ; preds = %332, %363, %362
  %365 = load i32, ptr %169, align 4, !tbaa !21
  switch i32 %365, label %388 [
    i32 8, label %387
    i32 7, label %382
    i32 3, label %366
    i32 4, label %371
    i32 5, label %376
    i32 6, label %377
  ]

366:                                              ; preds = %364
  %367 = load i8, ptr %348, align 1, !tbaa !15
  %368 = zext i8 %367 to i64
  %369 = add nuw nsw i64 %368, 234
  %370 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %369
  store i8 3, ptr %370, align 1, !tbaa !15
  br label %388

371:                                              ; preds = %364
  %372 = load i8, ptr %342, align 1, !tbaa !15
  %373 = zext i8 %372 to i64
  %374 = add nuw nsw i64 %373, 234
  %375 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %374
  store i8 3, ptr %375, align 1, !tbaa !15
  br label %388

376:                                              ; preds = %364
  store i8 3, ptr getelementptr inbounds (i8, ptr @memory, i64 234), align 2, !tbaa !15
  br label %388

377:                                              ; preds = %364
  %378 = load i8, ptr %348, align 1, !tbaa !15
  %379 = zext i8 %378 to i64
  %380 = add nuw nsw i64 %379, 43806
  %381 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %380
  store i8 3, ptr %381, align 1, !tbaa !15
  br label %388

382:                                              ; preds = %364
  %383 = load i8, ptr %342, align 1, !tbaa !15
  %384 = zext i8 %383 to i64
  %385 = add nuw nsw i64 %384, 43806
  %386 = getelementptr inbounds [65536 x i8], ptr @memory, i64 0, i64 %385
  store i8 3, ptr %386, align 1, !tbaa !15
  br label %388

387:                                              ; preds = %364
  store i8 3, ptr getelementptr inbounds (i8, ptr @memory, i64 43806), align 2, !tbaa !15
  br label %388

388:                                              ; preds = %387, %382, %377, %376, %371, %366, %364
  tail call void @resetChip_test()
  %389 = load i32, ptr %54, align 8, !tbaa !20
  %390 = icmp sgt i32 %389, -1
  br i1 %390, label %.lr.ph363, label %._crit_edge364

.lr.ph363:                                        ; preds = %388, %.lr.ph363
  %.4209361 = phi i32 [ %392, %.lr.ph363 ], [ 0, %388 ]
  %391 = load ptr, ptr @state, align 8, !tbaa !5
  tail call void @step(ptr noundef %391) #5
  %392 = add nuw nsw i32 %.4209361, 1
  %393 = load i32, ptr %54, align 8, !tbaa !20
  %394 = shl nsw i32 %393, 1
  %.not374 = icmp sgt i32 %.4209361, %394
  br i1 %.not374, label %._crit_edge364, label %.lr.ph363, !llvm.loop !40

._crit_edge364:                                   ; preds = %.lr.ph363, %388
  %395 = load ptr, ptr @state, align 8, !tbaa !5
  %396 = tail call zeroext i8 @readA(ptr noundef %395) #5
  %.not227 = icmp eq i8 %396, %334
  br i1 %.not227, label %398, label %397

397:                                              ; preds = %._crit_edge364
  store i32 1, ptr %176, align 4, !tbaa !41
  br label %398

398:                                              ; preds = %397, %._crit_edge364
  %399 = load ptr, ptr @state, align 8, !tbaa !5
  %400 = tail call zeroext i8 @readX(ptr noundef %399) #5
  %.not228 = icmp eq i8 %400, %339
  br i1 %.not228, label %402, label %401

401:                                              ; preds = %398
  store i32 1, ptr %177, align 16, !tbaa !42
  br label %402

402:                                              ; preds = %401, %398
  %403 = load ptr, ptr @state, align 8, !tbaa !5
  %404 = tail call zeroext i8 @readY(ptr noundef %403) #5
  %.not229 = icmp eq i8 %404, %345
  br i1 %.not229, label %406, label %405

405:                                              ; preds = %402
  store i32 1, ptr %178, align 4, !tbaa !43
  br label %406

406:                                              ; preds = %405, %402
  %407 = load ptr, ptr @state, align 8, !tbaa !5
  %408 = tail call zeroext i8 @readSP(ptr noundef %407) #5
  %.not230 = icmp eq i8 %408, %351
  br i1 %.not230, label %410, label %409

409:                                              ; preds = %406
  store i32 1, ptr %179, align 8, !tbaa !44
  br label %410

410:                                              ; preds = %409, %406
  %411 = load ptr, ptr @state, align 8, !tbaa !5
  %412 = tail call zeroext i8 @readP(ptr noundef %411) #5
  %413 = xor i8 %412, %357
  %414 = and i8 %413, -49
  %.not231 = icmp eq i8 %414, 0
  br i1 %.not231, label %416, label %415

415:                                              ; preds = %410
  store i32 1, ptr %180, align 4, !tbaa !45
  br label %416

416:                                              ; preds = %410, %415
  %exitcond393.not = icmp eq i64 %indvars.iv.next391, 14
  br i1 %exitcond393.not, label %.loopexit320, label %332, !llvm.loop !46

.loopexit320:                                     ; preds = %416, %23
  %.5194 = phi i8 [ %.0189367, %23 ], [ %.4193, %416 ]
  %.5188 = phi i8 [ %.0183368, %23 ], [ %.4187, %416 ]
  %.5182 = phi i8 [ %.0177369, %23 ], [ %.4181, %416 ]
  %.5 = phi i8 [ %.0172370, %23 ], [ %.4176, %416 ]
  %.4 = phi i8 [ %.0171371, %23 ], [ %.2323, %416 ]
  %417 = getelementptr inbounds [256 x %struct.anon], ptr @data, i64 0, i64 %indvars.iv394
  %418 = getelementptr inbounds i8, ptr %417, i64 28
  %419 = load i32, ptr %418, align 4, !tbaa !25
  %.not262 = icmp eq i32 %419, 0
  br i1 %.not262, label %420, label %426

420:                                              ; preds = %.loopexit320
  %421 = getelementptr inbounds i8, ptr %417, i64 24
  %422 = load i32, ptr %421, align 8, !tbaa !24
  %.not263 = icmp eq i32 %422, 0
  br i1 %.not263, label %423, label %426

423:                                              ; preds = %420
  %424 = getelementptr inbounds i8, ptr %417, i64 40
  %425 = load i32, ptr %424, align 8, !tbaa !28
  %.not264 = icmp eq i32 %425, 0
  br i1 %.not264, label %432, label %426

426:                                              ; preds = %423, %420, %.loopexit320
  %427 = getelementptr inbounds i8, ptr %417, i64 60
  %428 = load i32, ptr %427, align 4, !tbaa !37
  %.not265 = icmp eq i32 %428, 0
  br i1 %.not265, label %429, label %431

429:                                              ; preds = %426
  %430 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  br label %431

431:                                              ; preds = %429, %426
  store i32 0, ptr %427, align 4, !tbaa !37
  br label %432

432:                                              ; preds = %431, %423
  %433 = getelementptr inbounds i8, ptr %417, i64 36
  %434 = load i32, ptr %433, align 4, !tbaa !27
  %.not266 = icmp eq i32 %434, 0
  br i1 %.not266, label %435, label %441

435:                                              ; preds = %432
  %436 = getelementptr inbounds i8, ptr %417, i64 32
  %437 = load i32, ptr %436, align 16, !tbaa !26
  %.not267 = icmp eq i32 %437, 0
  br i1 %.not267, label %438, label %441

438:                                              ; preds = %435
  %439 = getelementptr inbounds i8, ptr %417, i64 44
  %440 = load i32, ptr %439, align 4, !tbaa !29
  %.not268 = icmp eq i32 %440, 0
  br i1 %.not268, label %447, label %441

441:                                              ; preds = %438, %435, %432
  %442 = getelementptr inbounds i8, ptr %417, i64 64
  %443 = load i32, ptr %442, align 16, !tbaa !38
  %.not269 = icmp eq i32 %443, 0
  br i1 %.not269, label %444, label %446

444:                                              ; preds = %441
  %445 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %446

446:                                              ; preds = %444, %441
  store i32 0, ptr %442, align 16, !tbaa !38
  br label %447

447:                                              ; preds = %446, %438
  %448 = load i32, ptr %417, align 16, !tbaa !13
  %.not270 = icmp eq i32 %448, 0
  br i1 %.not270, label %449, label %505

449:                                              ; preds = %447
  %450 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  %451 = getelementptr inbounds i8, ptr %417, i64 4
  %452 = load i32, ptr %451, align 4, !tbaa !16
  %or.cond = icmp ugt i32 %452, 9
  br i1 %or.cond, label %453, label %455

453:                                              ; preds = %449
  %454 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  br label %457

455:                                              ; preds = %449
  %456 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef %452)
  br label %457

457:                                              ; preds = %455, %453
  %458 = getelementptr inbounds i8, ptr %417, i64 8
  %459 = load i32, ptr %458, align 8, !tbaa !20
  %460 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef %459)
  %461 = getelementptr inbounds i8, ptr %417, i64 56
  %462 = load i32, ptr %461, align 8, !tbaa !36
  %.not271 = icmp eq i32 %462, 0
  %.str.9..str.8 = select i1 %.not271, ptr @.str.9, ptr @.str.8
  %463 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9..str.8)
  %464 = getelementptr inbounds i8, ptr %417, i64 60
  %465 = load i32, ptr %464, align 4, !tbaa !37
  %.not272 = icmp eq i32 %465, 0
  %.str.9.sink418 = select i1 %.not272, ptr @.str.9, ptr @.str.10
  %466 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink418)
  %467 = getelementptr inbounds i8, ptr %417, i64 64
  %468 = load i32, ptr %467, align 16, !tbaa !38
  %.not273 = icmp eq i32 %468, 0
  %.str.9.sink419 = select i1 %.not273, ptr @.str.9, ptr @.str.11
  %469 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink419)
  %470 = getelementptr inbounds i8, ptr %417, i64 68
  %471 = load i32, ptr %470, align 4, !tbaa !39
  %.not274 = icmp eq i32 %471, 0
  %.str.9.sink420 = select i1 %.not274, ptr @.str.9, ptr @.str.12
  %472 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink420)
  %473 = getelementptr inbounds i8, ptr %417, i64 72
  %474 = load i32, ptr %473, align 8, !tbaa !33
  %.not275 = icmp eq i32 %474, 0
  %.str.9.sink421 = select i1 %.not275, ptr @.str.9, ptr @.str.13
  %475 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink421)
  %476 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14)
  %477 = getelementptr inbounds i8, ptr %417, i64 76
  %478 = load i32, ptr %477, align 4, !tbaa !41
  %.not276 = icmp eq i32 %478, 0
  %.str.9.sink422 = select i1 %.not276, ptr @.str.9, ptr @.str.8
  %479 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink422)
  %480 = getelementptr inbounds i8, ptr %417, i64 80
  %481 = load i32, ptr %480, align 16, !tbaa !42
  %.not277 = icmp eq i32 %481, 0
  %.str.9.sink423 = select i1 %.not277, ptr @.str.9, ptr @.str.10
  %482 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink423)
  %483 = getelementptr inbounds i8, ptr %417, i64 84
  %484 = load i32, ptr %483, align 4, !tbaa !43
  %.not278 = icmp eq i32 %484, 0
  %.str.9.sink424 = select i1 %.not278, ptr @.str.9, ptr @.str.11
  %485 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink424)
  %486 = getelementptr inbounds i8, ptr %417, i64 88
  %487 = load i32, ptr %486, align 8, !tbaa !44
  %.not279 = icmp eq i32 %487, 0
  %.str.9.sink425 = select i1 %.not279, ptr @.str.9, ptr @.str.12
  %488 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink425)
  %489 = getelementptr inbounds i8, ptr %417, i64 92
  %490 = load i32, ptr %489, align 4, !tbaa !45
  %.not280 = icmp eq i32 %490, 0
  %.str.9.sink426 = select i1 %.not280, ptr @.str.9, ptr @.str.13
  %491 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink426)
  %492 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  %493 = getelementptr inbounds i8, ptr %417, i64 48
  %494 = load i32, ptr %493, align 16, !tbaa !30
  %.not281 = icmp eq i32 %494, 0
  %.str.9.sink427 = select i1 %.not281, ptr @.str.9, ptr @.str.16
  %495 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink427)
  %496 = getelementptr inbounds i8, ptr %417, i64 52
  %497 = load i32, ptr %496, align 4, !tbaa !31
  %.not282 = icmp eq i32 %497, 0
  %.str.9.sink428 = select i1 %.not282, ptr @.str.9, ptr @.str.17
  %498 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.9.sink428)
  %499 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  %500 = getelementptr inbounds i8, ptr %417, i64 12
  %501 = load i32, ptr %500, align 4, !tbaa !21
  %switch.tableidx = add i32 %501, -1
  %502 = icmp ult i32 %switch.tableidx, 8
  br i1 %502, label %switch.lookup437, label %505

switch.lookup437:                                 ; preds = %457
  %503 = zext nneg i32 %switch.tableidx to i64
  %switch.gep438 = getelementptr inbounds [8 x ptr], ptr @switch.table.main.1, i64 0, i64 %503
  %switch.load439 = load ptr, ptr %switch.gep438, align 8
  %504 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %switch.load439)
  br label %505

505:                                              ; preds = %457, %switch.lookup437, %447
  %.str.26.sink = phi ptr [ @.str.3, %447 ], [ @.str.26, %switch.lookup437 ], [ @.str.26, %457 ]
  %506 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.26.sink)
  %indvars.iv.next395 = add nuw nsw i64 %indvars.iv394, 1
  %exitcond396.not = icmp eq i64 %indvars.iv.next395, 256
  br i1 %exitcond396.not, label %5, label %6, !llvm.loop !47
}

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

declare i32 @readRW(ptr noundef) local_unnamed_addr #2

declare zeroext i16 @readAddressBus(ptr noundef) local_unnamed_addr #2

declare zeroext i8 @readSP(ptr noundef) local_unnamed_addr #2

declare zeroext i8 @readIR(ptr noundef) local_unnamed_addr #2

declare zeroext i8 @readDataBus(ptr noundef) local_unnamed_addr #2

declare zeroext i8 @readA(ptr noundef) local_unnamed_addr #2

declare zeroext i8 @readX(ptr noundef) local_unnamed_addr #2

declare zeroext i8 @readY(ptr noundef) local_unnamed_addr #2

declare zeroext i8 @readP(ptr noundef) local_unnamed_addr #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !10, i64 0}
!14 = !{!"", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92}
!15 = !{!7, !7, i64 0}
!16 = !{!14, !10, i64 4}
!17 = distinct !{!17, !12}
!18 = !{!19, !19, i64 0}
!19 = !{!"short", !7, i64 0}
!20 = !{!14, !10, i64 8}
!21 = !{!14, !10, i64 12}
!22 = !{!14, !10, i64 16}
!23 = !{!14, !10, i64 20}
!24 = !{!14, !10, i64 24}
!25 = !{!14, !10, i64 28}
!26 = !{!14, !10, i64 32}
!27 = !{!14, !10, i64 36}
!28 = !{!14, !10, i64 40}
!29 = !{!14, !10, i64 44}
!30 = !{!14, !10, i64 48}
!31 = !{!14, !10, i64 52}
!32 = distinct !{!32, !12}
!33 = !{!14, !10, i64 72}
!34 = distinct !{!34, !12}
!35 = distinct !{!35, !12}
!36 = !{!14, !10, i64 56}
!37 = !{!14, !10, i64 60}
!38 = !{!14, !10, i64 64}
!39 = !{!14, !10, i64 68}
!40 = distinct !{!40, !12}
!41 = !{!14, !10, i64 76}
!42 = !{!14, !10, i64 80}
!43 = !{!14, !10, i64 84}
!44 = !{!14, !10, i64 88}
!45 = !{!14, !10, i64 92}
!46 = distinct !{!46, !12}
!47 = distinct !{!47, !12}


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