; LLVM IR from paintdream/DontStarveLuaJIT :: src/luajit/src (lj_dispatch)

; 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.global_State = type { ptr, i32, i32, ptr, ptr, %struct.GCState, i32, %struct.SBuf, %struct.GCstr, i8, i8, i8, i8, %struct.GCRef, %union.TValue, %union.TValue, %union.TValue, %struct.Node, %struct.GCupval, i32, i32, ptr, ptr, ptr, i32, i32, %struct.GCRef, %struct.MRef, %struct.MRef, [38 x %struct.GCRef] }
%struct.GCState = type { i32, i32, i8, i8, i8, i8, i32, %struct.GCRef, %struct.MRef, %struct.GCRef, %struct.GCRef, %struct.GCRef, %struct.GCRef, i32, i32, i32, i32 }
%struct.SBuf = type { %struct.MRef, %struct.MRef, %struct.MRef, %struct.MRef }
%struct.GCstr = type { %struct.GCRef, i8, i8, i8, i8, i32, i32 }
%union.TValue = type { i64 }
%struct.Node = type { %union.TValue, %union.TValue, %struct.MRef, %struct.MRef }
%struct.GCupval = type { %struct.GCRef, i8, i8, i8, i8, %union.anon.4, %struct.MRef, i32 }
%union.anon.4 = type { %union.TValue }
%struct.GCRef = type { i32 }
%struct.MRef = type { i32 }
%struct.GG_State = type { %struct.lua_State, %struct.global_State, %struct.jit_State, [64 x i16], [243 x ptr], [57 x i32] }
%struct.lua_State = type { %union.anon }
%union.anon = type { %struct.anon, [320 x i8] }
%struct.anon = type { %struct.GCRef, i8, i8, i8, i8, %struct.MRef, %struct.GCRef, ptr, ptr, %struct.MRef, %struct.MRef, %struct.GCRef, %struct.GCRef, ptr, i32 }
%struct.jit_State = type { %struct.GCtrace, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i8, i8, %struct.IRType1, i8, %struct.FoldState, ptr, i32, i32, i32, i32, i32, i32, i32, %struct.MRef, [5 x %union.TValue], ptr, i32, i32, i32, i32, ptr, ptr, i32, i32, i8, ptr, i32, i32, ptr, [100 x i16], [255 x i32], [15 x i32], [16 x ptr], [64 x %struct.HotPenalty], i32, i32, [16 x %struct.BPropEntry], i32, %struct.ScEvEntry, ptr, i32, i32, ptr, i32, i32, ptr, ptr, ptr, i64, i64, %union.TValue, ptr, i32, i32 }
%struct.GCtrace = type { %struct.GCRef, i8, i8, i8, i8, i32, %struct.GCRef, ptr, i32, i16, i16, ptr, ptr, %struct.GCRef, %struct.MRef, i32, i32, ptr, i32, i16, i16, i16, i16, i16, i16, i16, i8, i8 }
%struct.IRType1 = type { i8 }
%struct.FoldState = type { %union.IRIns, %union.IRIns, %union.IRIns }
%union.IRIns = type { %struct.anon.7 }
%struct.anon.7 = type { i32, %struct.IRType1, i8, i8, i8 }
%struct.HotPenalty = type { %struct.MRef, i16, i16 }
%struct.BPropEntry = type { i16, i16, i32 }
%struct.ScEvEntry = type { %struct.MRef, i16, i16, i16, i16, %struct.IRType1, i8 }

@lj_vm_asm_begin = external hidden global [0 x i8], align 1
@lj_bc_ofs = external hidden constant [0 x i16], align 2

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

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

; Function Attrs: nounwind uwtable
declare hidden void @lj_dispatch_init_hotcount(ptr noundef) #1

; Function Attrs: nounwind uwtable
define hidden void @lj_dispatch_update(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i8, align 1
  %4 = alloca i8, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %3) #4
  %14 = load ptr, ptr %2, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.global_State, ptr %14, i32 0, i32 11
  %16 = load i8, ptr %15, align 2, !tbaa !9
  store i8 %16, ptr %3, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #4
  store i8 0, ptr %4, align 1, !tbaa !19
  %17 = load ptr, ptr %2, align 8, !tbaa !5
  %18 = getelementptr inbounds i8, ptr %17, i64 -384
  %19 = getelementptr inbounds %struct.GG_State, ptr %18, i32 0, i32 2
  %20 = getelementptr inbounds %struct.jit_State, ptr %19, i32 0, i32 6
  %21 = load i32, ptr %20, align 8, !tbaa !20
  %22 = and i32 %21, 1
  %23 = icmp ne i32 %22, 0
  %24 = zext i1 %23 to i64
  %25 = select i1 %23, i32 16, i32 0
  %26 = load i8, ptr %4, align 1, !tbaa !19
  %27 = zext i8 %26 to i32
  %28 = or i32 %27, %25
  %29 = trunc i32 %28 to i8
  store i8 %29, ptr %4, align 1, !tbaa !19
  %30 = load ptr, ptr %2, align 8, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %30, i64 -384
  %32 = getelementptr inbounds %struct.GG_State, ptr %31, i32 0, i32 2
  %33 = getelementptr inbounds %struct.jit_State, ptr %32, i32 0, i32 16
  %34 = load i32, ptr %33, align 4, !tbaa !30
  %35 = icmp ne i32 %34, 0
  %36 = zext i1 %35 to i64
  %37 = select i1 %35, i32 37, i32 0
  %38 = load i8, ptr %4, align 1, !tbaa !19
  %39 = zext i8 %38 to i32
  %40 = or i32 %39, %37
  %41 = trunc i32 %40 to i8
  store i8 %41, ptr %4, align 1, !tbaa !19
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.global_State, ptr %42, i32 0, i32 10
  %44 = load i8, ptr %43, align 1, !tbaa !31
  %45 = zext i8 %44 to i32
  %46 = and i32 %45, 128
  %47 = icmp ne i32 %46, 0
  %48 = zext i1 %47 to i64
  %49 = select i1 %47, i32 68, i32 0
  %50 = load i8, ptr %4, align 1, !tbaa !19
  %51 = zext i8 %50 to i32
  %52 = or i32 %51, %49
  %53 = trunc i32 %52 to i8
  store i8 %53, ptr %4, align 1, !tbaa !19
  %54 = load ptr, ptr %2, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.global_State, ptr %54, i32 0, i32 10
  %56 = load i8, ptr %55, align 1, !tbaa !31
  %57 = zext i8 %56 to i32
  %58 = and i32 %57, 12
  %59 = icmp ne i32 %58, 0
  %60 = zext i1 %59 to i64
  %61 = select i1 %59, i32 4, i32 0
  %62 = load i8, ptr %4, align 1, !tbaa !19
  %63 = zext i8 %62 to i32
  %64 = or i32 %63, %61
  %65 = trunc i32 %64 to i8
  store i8 %65, ptr %4, align 1, !tbaa !19
  %66 = load ptr, ptr %2, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.global_State, ptr %66, i32 0, i32 10
  %68 = load i8, ptr %67, align 1, !tbaa !31
  %69 = zext i8 %68 to i32
  %70 = and i32 %69, 1
  %71 = icmp ne i32 %70, 0
  %72 = zext i1 %71 to i64
  %73 = select i1 %71, i32 1, i32 0
  %74 = load i8, ptr %4, align 1, !tbaa !19
  %75 = zext i8 %74 to i32
  %76 = or i32 %75, %73
  %77 = trunc i32 %76 to i8
  store i8 %77, ptr %4, align 1, !tbaa !19
  %78 = load ptr, ptr %2, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.global_State, ptr %78, i32 0, i32 10
  %80 = load i8, ptr %79, align 1, !tbaa !31
  %81 = zext i8 %80 to i32
  %82 = and i32 %81, 2
  %83 = icmp ne i32 %82, 0
  %84 = zext i1 %83 to i64
  %85 = select i1 %83, i32 2, i32 0
  %86 = load i8, ptr %4, align 1, !tbaa !19
  %87 = zext i8 %86 to i32
  %88 = or i32 %87, %85
  %89 = trunc i32 %88 to i8
  store i8 %89, ptr %4, align 1, !tbaa !19
  %90 = load i8, ptr %3, align 1, !tbaa !19
  %91 = zext i8 %90 to i32
  %92 = load i8, ptr %4, align 1, !tbaa !19
  %93 = zext i8 %92 to i32
  %94 = icmp ne i32 %91, %93
  br i1 %94, label %95, label %339

95:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  %96 = load ptr, ptr %2, align 8, !tbaa !5
  %97 = getelementptr inbounds i8, ptr %96, i64 -384
  %98 = getelementptr inbounds %struct.GG_State, ptr %97, i32 0, i32 4
  %99 = getelementptr inbounds [243 x ptr], ptr %98, i64 0, i64 0
  store ptr %99, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %100 = load i8, ptr %4, align 1, !tbaa !19
  %101 = load ptr, ptr %2, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.global_State, ptr %101, i32 0, i32 11
  store i8 %100, ptr %102, align 2, !tbaa !9
  %103 = load i8, ptr %4, align 1, !tbaa !19
  %104 = zext i8 %103 to i32
  %105 = and i32 %104, 48
  %106 = icmp eq i32 %105, 16
  br i1 %106, label %107, label %128

107:                                              ; preds = %95
  %108 = load i16, ptr getelementptr inbounds ([0 x i16], ptr @lj_bc_ofs, i64 0, i64 79), align 2, !tbaa !32
  %109 = zext i16 %108 to i32
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %110
  store ptr %111, ptr %6, align 8, !tbaa !5
  %112 = load i16, ptr getelementptr inbounds ([0 x i16], ptr @lj_bc_ofs, i64 0, i64 82), align 2, !tbaa !32
  %113 = zext i16 %112 to i32
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %114
  store ptr %115, ptr %7, align 8, !tbaa !5
  %116 = load i16, ptr getelementptr inbounds ([0 x i16], ptr @lj_bc_ofs, i64 0, i64 85), align 2, !tbaa !32
  %117 = zext i16 %116 to i32
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %118
  store ptr %119, ptr %8, align 8, !tbaa !5
  %120 = load i16, ptr getelementptr inbounds ([0 x i16], ptr @lj_bc_ofs, i64 0, i64 89), align 2, !tbaa !32
  %121 = zext i16 %120 to i32
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %122
  store ptr %123, ptr %9, align 8, !tbaa !5
  %124 = load i16, ptr getelementptr inbounds ([0 x i16], ptr @lj_bc_ofs, i64 0, i64 92), align 2, !tbaa !32
  %125 = zext i16 %124 to i32
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %126
  store ptr %127, ptr %10, align 8, !tbaa !5
  br label %146

128:                                              ; preds = %95
  %129 = load ptr, ptr %5, align 8, !tbaa !5
  %130 = getelementptr inbounds ptr, ptr %129, i64 234
  %131 = load ptr, ptr %130, align 8, !tbaa !5
  store ptr %131, ptr %6, align 8, !tbaa !5
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = getelementptr inbounds ptr, ptr %132, i64 237
  %134 = load ptr, ptr %133, align 8, !tbaa !5
  store ptr %134, ptr %7, align 8, !tbaa !5
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  %136 = getelementptr inbounds ptr, ptr %135, i64 240
  %137 = load ptr, ptr %136, align 8, !tbaa !5
  store ptr %137, ptr %8, align 8, !tbaa !5
  %138 = load i16, ptr getelementptr inbounds ([0 x i16], ptr @lj_bc_ofs, i64 0, i64 90), align 2, !tbaa !32
  %139 = zext i16 %138 to i32
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %140
  store ptr %141, ptr %9, align 8, !tbaa !5
  %142 = load i16, ptr getelementptr inbounds ([0 x i16], ptr @lj_bc_ofs, i64 0, i64 93), align 2, !tbaa !32
  %143 = zext i16 %142 to i32
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %144
  store ptr %145, ptr %10, align 8, !tbaa !5
  br label %146

146:                                              ; preds = %128, %107
  %147 = load ptr, ptr %6, align 8, !tbaa !5
  %148 = load ptr, ptr %5, align 8, !tbaa !5
  %149 = getelementptr inbounds ptr, ptr %148, i64 233
  store ptr %147, ptr %149, align 8, !tbaa !5
  %150 = load ptr, ptr %7, align 8, !tbaa !5
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  %152 = getelementptr inbounds ptr, ptr %151, i64 236
  store ptr %150, ptr %152, align 8, !tbaa !5
  %153 = load ptr, ptr %8, align 8, !tbaa !5
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = getelementptr inbounds ptr, ptr %154, i64 239
  store ptr %153, ptr %155, align 8, !tbaa !5
  %156 = load i8, ptr %3, align 1, !tbaa !19
  %157 = zext i8 %156 to i32
  %158 = load i8, ptr %4, align 1, !tbaa !19
  %159 = zext i8 %158 to i32
  %160 = xor i32 %157, %159
  %161 = and i32 %160, 100
  %162 = icmp ne i32 %161, 0
  br i1 %162, label %163, label %216

163:                                              ; preds = %146
  %164 = load i8, ptr %4, align 1, !tbaa !19
  %165 = zext i8 %164 to i32
  %166 = and i32 %165, 4
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %187, label %168

168:                                              ; preds = %163
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds ptr, ptr %169, i64 0
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds ptr, ptr %171, i64 154
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %170, ptr align 8 %172, i64 712, i1 false)
  %173 = load i8, ptr %4, align 1, !tbaa !19
  %174 = zext i8 %173 to i32
  %175 = and i32 %174, 2
  %176 = icmp ne i32 %175, 0
  br i1 %176, label %177, label %186

177:                                              ; preds = %168
  %178 = load ptr, ptr %5, align 8, !tbaa !5
  %179 = getelementptr inbounds ptr, ptr %178, i64 73
  store ptr @lj_vm_rethook, ptr %179, align 8, !tbaa !5
  %180 = load ptr, ptr %5, align 8, !tbaa !5
  %181 = getelementptr inbounds ptr, ptr %180, i64 74
  store ptr @lj_vm_rethook, ptr %181, align 8, !tbaa !5
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds ptr, ptr %182, i64 75
  store ptr @lj_vm_rethook, ptr %183, align 8, !tbaa !5
  %184 = load ptr, ptr %5, align 8, !tbaa !5
  %185 = getelementptr inbounds ptr, ptr %184, i64 76
  store ptr @lj_vm_rethook, ptr %185, align 8, !tbaa !5
  br label %186

186:                                              ; preds = %177, %168
  br label %215

187:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  %188 = load i8, ptr %4, align 1, !tbaa !19
  %189 = zext i8 %188 to i32
  %190 = and i32 %189, 64
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %193

192:                                              ; preds = %187
  br label %200

193:                                              ; preds = %187
  %194 = load i8, ptr %4, align 1, !tbaa !19
  %195 = zext i8 %194 to i32
  %196 = and i32 %195, 32
  %197 = icmp ne i32 %196, 0
  %198 = zext i1 %197 to i64
  %199 = select i1 %197, ptr @lj_vm_record, ptr @lj_vm_inshook
  br label %200

200:                                              ; preds = %193, %192
  %201 = phi ptr [ @lj_vm_profhook, %192 ], [ %199, %193 ]
  store ptr %201, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !33
  br label %202

202:                                              ; preds = %211, %200
  %203 = load i32, ptr %12, align 4, !tbaa !33
  %204 = icmp ult i32 %203, 89
  br i1 %204, label %205, label %214

205:                                              ; preds = %202
  %206 = load ptr, ptr %11, align 8, !tbaa !5
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = load i32, ptr %12, align 4, !tbaa !33
  %209 = zext i32 %208 to i64
  %210 = getelementptr inbounds ptr, ptr %207, i64 %209
  store ptr %206, ptr %210, align 8, !tbaa !5
  br label %211

211:                                              ; preds = %205
  %212 = load i32, ptr %12, align 4, !tbaa !33
  %213 = add i32 %212, 1
  store i32 %213, ptr %12, align 4, !tbaa !33
  br label %202, !llvm.loop !34

214:                                              ; preds = %202
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  br label %215

215:                                              ; preds = %214, %186
  br label %267

216:                                              ; preds = %146
  %217 = load i8, ptr %4, align 1, !tbaa !19
  %218 = zext i8 %217 to i32
  %219 = and i32 %218, 4
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %266, label %221

221:                                              ; preds = %216
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds ptr, ptr %223, i64 79
  store ptr %222, ptr %224, align 8, !tbaa !5
  %225 = load ptr, ptr %7, align 8, !tbaa !5
  %226 = load ptr, ptr %5, align 8, !tbaa !5
  %227 = getelementptr inbounds ptr, ptr %226, i64 82
  store ptr %225, ptr %227, align 8, !tbaa !5
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = load ptr, ptr %5, align 8, !tbaa !5
  %230 = getelementptr inbounds ptr, ptr %229, i64 85
  store ptr %228, ptr %230, align 8, !tbaa !5
  %231 = load i8, ptr %4, align 1, !tbaa !19
  %232 = zext i8 %231 to i32
  %233 = and i32 %232, 2
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %235, label %244

235:                                              ; preds = %221
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds ptr, ptr %236, i64 73
  store ptr @lj_vm_rethook, ptr %237, align 8, !tbaa !5
  %238 = load ptr, ptr %5, align 8, !tbaa !5
  %239 = getelementptr inbounds ptr, ptr %238, i64 74
  store ptr @lj_vm_rethook, ptr %239, align 8, !tbaa !5
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  %241 = getelementptr inbounds ptr, ptr %240, i64 75
  store ptr @lj_vm_rethook, ptr %241, align 8, !tbaa !5
  %242 = load ptr, ptr %5, align 8, !tbaa !5
  %243 = getelementptr inbounds ptr, ptr %242, i64 76
  store ptr @lj_vm_rethook, ptr %243, align 8, !tbaa !5
  br label %265

244:                                              ; preds = %221
  %245 = load ptr, ptr %5, align 8, !tbaa !5
  %246 = getelementptr inbounds ptr, ptr %245, i64 227
  %247 = load ptr, ptr %246, align 8, !tbaa !5
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds ptr, ptr %248, i64 73
  store ptr %247, ptr %249, align 8, !tbaa !5
  %250 = load ptr, ptr %5, align 8, !tbaa !5
  %251 = getelementptr inbounds ptr, ptr %250, i64 228
  %252 = load ptr, ptr %251, align 8, !tbaa !5
  %253 = load ptr, ptr %5, align 8, !tbaa !5
  %254 = getelementptr inbounds ptr, ptr %253, i64 74
  store ptr %252, ptr %254, align 8, !tbaa !5
  %255 = load ptr, ptr %5, align 8, !tbaa !5
  %256 = getelementptr inbounds ptr, ptr %255, i64 229
  %257 = load ptr, ptr %256, align 8, !tbaa !5
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds ptr, ptr %258, i64 75
  store ptr %257, ptr %259, align 8, !tbaa !5
  %260 = load ptr, ptr %5, align 8, !tbaa !5
  %261 = getelementptr inbounds ptr, ptr %260, i64 230
  %262 = load ptr, ptr %261, align 8, !tbaa !5
  %263 = load ptr, ptr %5, align 8, !tbaa !5
  %264 = getelementptr inbounds ptr, ptr %263, i64 76
  store ptr %262, ptr %264, align 8, !tbaa !5
  br label %265

265:                                              ; preds = %244, %235
  br label %266

266:                                              ; preds = %265, %216
  br label %267

267:                                              ; preds = %266, %215
  %268 = load i8, ptr %3, align 1, !tbaa !19
  %269 = zext i8 %268 to i32
  %270 = load i8, ptr %4, align 1, !tbaa !19
  %271 = zext i8 %270 to i32
  %272 = xor i32 %269, %271
  %273 = and i32 %272, 1
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %314

275:                                              ; preds = %267
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %276 = load i8, ptr %4, align 1, !tbaa !19
  %277 = zext i8 %276 to i32
  %278 = and i32 %277, 1
  %279 = icmp eq i32 %278, 0
  br i1 %279, label %280, label %300

280:                                              ; preds = %275
  store i32 89, ptr %13, align 4, !tbaa !33
  br label %281

281:                                              ; preds = %296, %280
  %282 = load i32, ptr %13, align 4, !tbaa !33
  %283 = icmp ult i32 %282, 154
  br i1 %283, label %284, label %299

284:                                              ; preds = %281
  %285 = load i32, ptr %13, align 4, !tbaa !33
  %286 = zext i32 %285 to i64
  %287 = getelementptr inbounds [0 x i16], ptr @lj_bc_ofs, i64 0, i64 %286
  %288 = load i16, ptr %287, align 2, !tbaa !32
  %289 = zext i16 %288 to i32
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %290
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = load i32, ptr %13, align 4, !tbaa !33
  %294 = zext i32 %293 to i64
  %295 = getelementptr inbounds ptr, ptr %292, i64 %294
  store ptr %291, ptr %295, align 8, !tbaa !5
  br label %296

296:                                              ; preds = %284
  %297 = load i32, ptr %13, align 4, !tbaa !33
  %298 = add i32 %297, 1
  store i32 %298, ptr %13, align 4, !tbaa !33
  br label %281, !llvm.loop !36

299:                                              ; preds = %281
  br label %313

300:                                              ; preds = %275
  store i32 89, ptr %13, align 4, !tbaa !33
  br label %301

301:                                              ; preds = %309, %300
  %302 = load i32, ptr %13, align 4, !tbaa !33
  %303 = icmp ult i32 %302, 154
  br i1 %303, label %304, label %312

304:                                              ; preds = %301
  %305 = load ptr, ptr %5, align 8, !tbaa !5
  %306 = load i32, ptr %13, align 4, !tbaa !33
  %307 = zext i32 %306 to i64
  %308 = getelementptr inbounds ptr, ptr %305, i64 %307
  store ptr @lj_vm_callhook, ptr %308, align 8, !tbaa !5
  br label %309

309:                                              ; preds = %304
  %310 = load i32, ptr %13, align 4, !tbaa !33
  %311 = add i32 %310, 1
  store i32 %311, ptr %13, align 4, !tbaa !33
  br label %301, !llvm.loop !37

312:                                              ; preds = %301
  br label %313

313:                                              ; preds = %312, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %314

314:                                              ; preds = %313, %267
  %315 = load i8, ptr %4, align 1, !tbaa !19
  %316 = zext i8 %315 to i32
  %317 = and i32 %316, 1
  %318 = icmp ne i32 %317, 0
  br i1 %318, label %326, label %319

319:                                              ; preds = %314
  %320 = load ptr, ptr %9, align 8, !tbaa !5
  %321 = load ptr, ptr %5, align 8, !tbaa !5
  %322 = getelementptr inbounds ptr, ptr %321, i64 89
  store ptr %320, ptr %322, align 8, !tbaa !5
  %323 = load ptr, ptr %10, align 8, !tbaa !5
  %324 = load ptr, ptr %5, align 8, !tbaa !5
  %325 = getelementptr inbounds ptr, ptr %324, i64 92
  store ptr %323, ptr %325, align 8, !tbaa !5
  br label %326

326:                                              ; preds = %319, %314
  %327 = load i8, ptr %4, align 1, !tbaa !19
  %328 = zext i8 %327 to i32
  %329 = and i32 %328, 16
  %330 = icmp ne i32 %329, 0
  br i1 %330, label %331, label %338

331:                                              ; preds = %326
  %332 = load i8, ptr %3, align 1, !tbaa !19
  %333 = zext i8 %332 to i32
  %334 = and i32 %333, 16
  %335 = icmp ne i32 %334, 0
  br i1 %335, label %338, label %336

336:                                              ; preds = %331
  %337 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_dispatch_init_hotcount(ptr noundef %337)
  br label %338

338:                                              ; preds = %336, %331, %326
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  br label %339

339:                                              ; preds = %338, %1
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %3) #4
  ret void
}

; 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) #2

declare hidden void @lj_vm_rethook() #3

declare hidden void @lj_vm_profhook() #3

declare hidden void @lj_vm_record() #3

declare hidden void @lj_vm_inshook() #3

declare hidden void @lj_vm_callhook() #3

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

!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, !7, i64 126}
!10 = !{!"global_State", !6, i64 0, !11, i64 8, !11, i64 12, !6, i64 16, !6, i64 24, !12, i64 32, !11, i64 88, !15, i64 92, !16, i64 108, !7, i64 124, !7, i64 125, !7, i64 126, !7, i64 127, !13, i64 128, !7, i64 136, !7, i64 144, !7, i64 152, !17, i64 160, !18, i64 184, !11, i64 208, !11, i64 212, !6, i64 216, !6, i64 224, !6, i64 232, !11, i64 240, !11, i64 244, !13, i64 248, !14, i64 252, !14, i64 256, !7, i64 260}
!11 = !{!"int", !7, i64 0}
!12 = !{!"GCState", !11, i64 0, !11, i64 4, !7, i64 8, !7, i64 9, !7, i64 10, !7, i64 11, !11, i64 12, !13, i64 16, !14, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52}
!13 = !{!"GCRef", !11, i64 0}
!14 = !{!"MRef", !11, i64 0}
!15 = !{!"SBuf", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12}
!16 = !{!"GCstr", !13, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !11, i64 8, !11, i64 12}
!17 = !{!"Node", !7, i64 0, !7, i64 8, !14, i64 16, !14, i64 20}
!18 = !{!"GCupval", !13, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !7, i64 8, !14, i64 16, !11, i64 20}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !11, i64 936}
!21 = !{!"GG_State", !22, i64 0, !10, i64 384, !23, i64 800, !7, i64 3312, !7, i64 3440, !7, i64 5384}
!22 = !{!"lua_State", !7, i64 0}
!23 = !{!"jit_State", !24, i64 0, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !11, i64 136, !11, i64 140, !11, i64 144, !7, i64 148, !7, i64 149, !26, i64 150, !7, i64 151, !27, i64 152, !6, i64 176, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !14, i64 212, !7, i64 216, !6, i64 256, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !6, i64 280, !6, i64 288, !11, i64 296, !11, i64 300, !7, i64 304, !6, i64 312, !11, i64 320, !11, i64 324, !6, i64 328, !7, i64 336, !7, i64 536, !7, i64 1556, !7, i64 1616, !7, i64 1744, !11, i64 2256, !11, i64 2260, !7, i64 2264, !11, i64 2392, !28, i64 2396, !6, i64 2416, !11, i64 2424, !11, i64 2428, !6, i64 2432, !11, i64 2440, !11, i64 2444, !6, i64 2448, !6, i64 2456, !6, i64 2464, !29, i64 2472, !29, i64 2480, !7, i64 2488, !6, i64 2496, !11, i64 2504, !11, i64 2508}
!24 = !{!"GCtrace", !13, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !11, i64 8, !13, i64 12, !6, i64 16, !11, i64 24, !25, i64 28, !25, i64 30, !6, i64 32, !6, i64 40, !13, i64 48, !14, i64 52, !11, i64 56, !11, i64 60, !6, i64 64, !11, i64 72, !25, i64 76, !25, i64 78, !25, i64 80, !25, i64 82, !25, i64 84, !25, i64 86, !25, i64 88, !7, i64 90, !7, i64 91}
!25 = !{!"short", !7, i64 0}
!26 = !{!"IRType1", !7, i64 0}
!27 = !{!"FoldState", !7, i64 0, !7, i64 8, !7, i64 16}
!28 = !{!"ScEvEntry", !14, i64 0, !25, i64 4, !25, i64 6, !25, i64 8, !25, i64 10, !26, i64 12, !7, i64 13}
!29 = !{!"long", !7, i64 0}
!30 = !{!21, !11, i64 988}
!31 = !{!10, !7, i64 125}
!32 = !{!25, !25, i64 0}
!33 = !{!11, !11, i64 0}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = distinct !{!36, !35}
!37 = distinct !{!37, !35}


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

@lj_vm_asm_begin = external hidden global [0 x i8], align 1
@lj_bc_ofs = external hidden local_unnamed_addr constant [0 x i16], align 2

; Function Attrs: nounwind uwtable
declare hidden void @lj_dispatch_init_hotcount(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define hidden void @lj_dispatch_update(ptr noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 126
  %3 = load i8, ptr %2, align 2, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 552
  %5 = load i32, ptr %4, align 8, !tbaa !18
  %6 = shl i32 %5, 4
  %7 = and i32 %6, 16
  %8 = getelementptr inbounds i8, ptr %0, i64 604
  %9 = load i32, ptr %8, align 4, !tbaa !28
  %.not = icmp eq i32 %9, 0
  %10 = select i1 %.not, i32 0, i32 37
  %11 = or disjoint i32 %10, %7
  %12 = getelementptr inbounds i8, ptr %0, i64 125
  %13 = load i8, ptr %12, align 1, !tbaa !29
  %14 = zext i8 %13 to i32
  %.not92 = icmp sgt i8 %13, -1
  %15 = and i32 %14, 12
  %.not93 = icmp eq i32 %15, 0
  %16 = select i1 %.not93, i32 0, i32 4
  %17 = and i32 %14, 3
  %18 = select i1 %.not92, i32 %16, i32 68
  %19 = or i32 %18, %11
  %20 = or i32 %19, %17
  %21 = zext i8 %3 to i32
  %.not96 = icmp eq i32 %20, %21
  br i1 %.not96, label %497, label %22

22:                                               ; preds = %1
  %23 = trunc nuw nsw i32 %20 to i8
  %24 = getelementptr inbounds i8, ptr %0, i64 3056
  store i8 %23, ptr %2, align 2, !tbaa !5
  %25 = and i32 %11, 48
  %26 = icmp eq i32 %25, 16
  br i1 %26, label %27, label %37

27:                                               ; preds = %22
  %28 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 158), align 2, !tbaa !30
  %29 = zext i16 %28 to i64
  %30 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %29
  %31 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 164), align 2, !tbaa !30
  %32 = zext i16 %31 to i64
  %33 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %32
  %34 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 170), align 2, !tbaa !30
  %35 = zext i16 %34 to i64
  %36 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %35
  br label %44

37:                                               ; preds = %22
  %38 = getelementptr inbounds i8, ptr %0, i64 4928
  %39 = load ptr, ptr %38, align 8, !tbaa !31
  %40 = getelementptr inbounds i8, ptr %0, i64 4952
  %41 = load ptr, ptr %40, align 8, !tbaa !31
  %42 = getelementptr inbounds i8, ptr %0, i64 4976
  %43 = load ptr, ptr %42, align 8, !tbaa !31
  br label %44

44:                                               ; preds = %37, %27
  %.089 = phi ptr [ %30, %27 ], [ %39, %37 ]
  %.088 = phi ptr [ %33, %27 ], [ %41, %37 ]
  %.087 = phi ptr [ %36, %27 ], [ %43, %37 ]
  %.pn.in.in = phi ptr [ getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 178), %27 ], [ getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 180), %37 ]
  %.pn97.in.in = phi ptr [ getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 184), %27 ], [ getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 186), %37 ]
  %.pn97.in = load i16, ptr %.pn97.in.in, align 2, !tbaa !30
  %.pn97 = zext i16 %.pn97.in to i64
  %.085 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %.pn97
  %.pn.in = load i16, ptr %.pn.in.in, align 2, !tbaa !30
  %.pn = zext i16 %.pn.in to i64
  %.086 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %.pn
  %45 = getelementptr inbounds i8, ptr %0, i64 4920
  store ptr %.089, ptr %45, align 8, !tbaa !31
  %46 = getelementptr inbounds i8, ptr %0, i64 4944
  store ptr %.088, ptr %46, align 8, !tbaa !31
  %47 = getelementptr inbounds i8, ptr %0, i64 4968
  store ptr %.087, ptr %47, align 8, !tbaa !31
  %48 = xor i32 %20, %21
  %49 = and i32 %48, 100
  %.not98 = icmp eq i32 %49, 0
  %50 = and i32 %19, 4
  %.not99 = icmp eq i32 %50, 0
  br i1 %.not98, label %147, label %51

51:                                               ; preds = %44
  br i1 %.not99, label %52, label %.loopexit111.loopexit

52:                                               ; preds = %51
  %53 = getelementptr inbounds i8, ptr %0, i64 4288
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(712) %24, ptr noundef nonnull align 8 dereferenceable(712) %53, i64 712, i1 false)
  %54 = and i32 %14, 2
  %.not102 = icmp eq i32 %54, 0
  br i1 %.not102, label %.loopexit111, label %55

55:                                               ; preds = %52
  %56 = getelementptr inbounds i8, ptr %0, i64 3640
  store ptr @lj_vm_rethook, ptr %56, align 8, !tbaa !31
  %57 = getelementptr inbounds i8, ptr %0, i64 3648
  store ptr @lj_vm_rethook, ptr %57, align 8, !tbaa !31
  %58 = getelementptr inbounds i8, ptr %0, i64 3656
  store ptr @lj_vm_rethook, ptr %58, align 8, !tbaa !31
  br label %.loopexit111.sink.split

.loopexit111.loopexit:                            ; preds = %51
  %59 = select i1 %.not, ptr @lj_vm_inshook, ptr @lj_vm_record
  %spec.select = select i1 %.not92, ptr %59, ptr @lj_vm_profhook
  store ptr %spec.select, ptr %24, align 8, !tbaa !31
  %60 = getelementptr inbounds i8, ptr %0, i64 3064
  store ptr %spec.select, ptr %60, align 8, !tbaa !31
  %61 = getelementptr inbounds i8, ptr %0, i64 3072
  store ptr %spec.select, ptr %61, align 8, !tbaa !31
  %62 = getelementptr inbounds i8, ptr %0, i64 3080
  store ptr %spec.select, ptr %62, align 8, !tbaa !31
  %63 = getelementptr inbounds i8, ptr %0, i64 3088
  store ptr %spec.select, ptr %63, align 8, !tbaa !31
  %64 = getelementptr inbounds i8, ptr %0, i64 3096
  store ptr %spec.select, ptr %64, align 8, !tbaa !31
  %65 = getelementptr inbounds i8, ptr %0, i64 3104
  store ptr %spec.select, ptr %65, align 8, !tbaa !31
  %66 = getelementptr inbounds i8, ptr %0, i64 3112
  store ptr %spec.select, ptr %66, align 8, !tbaa !31
  %67 = getelementptr inbounds i8, ptr %0, i64 3120
  store ptr %spec.select, ptr %67, align 8, !tbaa !31
  %68 = getelementptr inbounds i8, ptr %0, i64 3128
  store ptr %spec.select, ptr %68, align 8, !tbaa !31
  %69 = getelementptr inbounds i8, ptr %0, i64 3136
  store ptr %spec.select, ptr %69, align 8, !tbaa !31
  %70 = getelementptr inbounds i8, ptr %0, i64 3144
  store ptr %spec.select, ptr %70, align 8, !tbaa !31
  %71 = getelementptr inbounds i8, ptr %0, i64 3152
  store ptr %spec.select, ptr %71, align 8, !tbaa !31
  %72 = getelementptr inbounds i8, ptr %0, i64 3160
  store ptr %spec.select, ptr %72, align 8, !tbaa !31
  %73 = getelementptr inbounds i8, ptr %0, i64 3168
  store ptr %spec.select, ptr %73, align 8, !tbaa !31
  %74 = getelementptr inbounds i8, ptr %0, i64 3176
  store ptr %spec.select, ptr %74, align 8, !tbaa !31
  %75 = getelementptr inbounds i8, ptr %0, i64 3184
  store ptr %spec.select, ptr %75, align 8, !tbaa !31
  %76 = getelementptr inbounds i8, ptr %0, i64 3192
  store ptr %spec.select, ptr %76, align 8, !tbaa !31
  %77 = getelementptr inbounds i8, ptr %0, i64 3200
  store ptr %spec.select, ptr %77, align 8, !tbaa !31
  %78 = getelementptr inbounds i8, ptr %0, i64 3208
  store ptr %spec.select, ptr %78, align 8, !tbaa !31
  %79 = getelementptr inbounds i8, ptr %0, i64 3216
  store ptr %spec.select, ptr %79, align 8, !tbaa !31
  %80 = getelementptr inbounds i8, ptr %0, i64 3224
  store ptr %spec.select, ptr %80, align 8, !tbaa !31
  %81 = getelementptr inbounds i8, ptr %0, i64 3232
  store ptr %spec.select, ptr %81, align 8, !tbaa !31
  %82 = getelementptr inbounds i8, ptr %0, i64 3240
  store ptr %spec.select, ptr %82, align 8, !tbaa !31
  %83 = getelementptr inbounds i8, ptr %0, i64 3248
  store ptr %spec.select, ptr %83, align 8, !tbaa !31
  %84 = getelementptr inbounds i8, ptr %0, i64 3256
  store ptr %spec.select, ptr %84, align 8, !tbaa !31
  %85 = getelementptr inbounds i8, ptr %0, i64 3264
  store ptr %spec.select, ptr %85, align 8, !tbaa !31
  %86 = getelementptr inbounds i8, ptr %0, i64 3272
  store ptr %spec.select, ptr %86, align 8, !tbaa !31
  %87 = getelementptr inbounds i8, ptr %0, i64 3280
  store ptr %spec.select, ptr %87, align 8, !tbaa !31
  %88 = getelementptr inbounds i8, ptr %0, i64 3288
  store ptr %spec.select, ptr %88, align 8, !tbaa !31
  %89 = getelementptr inbounds i8, ptr %0, i64 3296
  store ptr %spec.select, ptr %89, align 8, !tbaa !31
  %90 = getelementptr inbounds i8, ptr %0, i64 3304
  store ptr %spec.select, ptr %90, align 8, !tbaa !31
  %91 = getelementptr inbounds i8, ptr %0, i64 3312
  store ptr %spec.select, ptr %91, align 8, !tbaa !31
  %92 = getelementptr inbounds i8, ptr %0, i64 3320
  store ptr %spec.select, ptr %92, align 8, !tbaa !31
  %93 = getelementptr inbounds i8, ptr %0, i64 3328
  store ptr %spec.select, ptr %93, align 8, !tbaa !31
  %94 = getelementptr inbounds i8, ptr %0, i64 3336
  store ptr %spec.select, ptr %94, align 8, !tbaa !31
  %95 = getelementptr inbounds i8, ptr %0, i64 3344
  store ptr %spec.select, ptr %95, align 8, !tbaa !31
  %96 = getelementptr inbounds i8, ptr %0, i64 3352
  store ptr %spec.select, ptr %96, align 8, !tbaa !31
  %97 = getelementptr inbounds i8, ptr %0, i64 3360
  store ptr %spec.select, ptr %97, align 8, !tbaa !31
  %98 = getelementptr inbounds i8, ptr %0, i64 3368
  store ptr %spec.select, ptr %98, align 8, !tbaa !31
  %99 = getelementptr inbounds i8, ptr %0, i64 3376
  store ptr %spec.select, ptr %99, align 8, !tbaa !31
  %100 = getelementptr inbounds i8, ptr %0, i64 3384
  store ptr %spec.select, ptr %100, align 8, !tbaa !31
  %101 = getelementptr inbounds i8, ptr %0, i64 3392
  store ptr %spec.select, ptr %101, align 8, !tbaa !31
  %102 = getelementptr inbounds i8, ptr %0, i64 3400
  store ptr %spec.select, ptr %102, align 8, !tbaa !31
  %103 = getelementptr inbounds i8, ptr %0, i64 3408
  store ptr %spec.select, ptr %103, align 8, !tbaa !31
  %104 = getelementptr inbounds i8, ptr %0, i64 3416
  store ptr %spec.select, ptr %104, align 8, !tbaa !31
  %105 = getelementptr inbounds i8, ptr %0, i64 3424
  store ptr %spec.select, ptr %105, align 8, !tbaa !31
  %106 = getelementptr inbounds i8, ptr %0, i64 3432
  store ptr %spec.select, ptr %106, align 8, !tbaa !31
  %107 = getelementptr inbounds i8, ptr %0, i64 3440
  store ptr %spec.select, ptr %107, align 8, !tbaa !31
  %108 = getelementptr inbounds i8, ptr %0, i64 3448
  store ptr %spec.select, ptr %108, align 8, !tbaa !31
  %109 = getelementptr inbounds i8, ptr %0, i64 3456
  store ptr %spec.select, ptr %109, align 8, !tbaa !31
  %110 = getelementptr inbounds i8, ptr %0, i64 3464
  store ptr %spec.select, ptr %110, align 8, !tbaa !31
  %111 = getelementptr inbounds i8, ptr %0, i64 3472
  store ptr %spec.select, ptr %111, align 8, !tbaa !31
  %112 = getelementptr inbounds i8, ptr %0, i64 3480
  store ptr %spec.select, ptr %112, align 8, !tbaa !31
  %113 = getelementptr inbounds i8, ptr %0, i64 3488
  store ptr %spec.select, ptr %113, align 8, !tbaa !31
  %114 = getelementptr inbounds i8, ptr %0, i64 3496
  store ptr %spec.select, ptr %114, align 8, !tbaa !31
  %115 = getelementptr inbounds i8, ptr %0, i64 3504
  store ptr %spec.select, ptr %115, align 8, !tbaa !31
  %116 = getelementptr inbounds i8, ptr %0, i64 3512
  store ptr %spec.select, ptr %116, align 8, !tbaa !31
  %117 = getelementptr inbounds i8, ptr %0, i64 3520
  store ptr %spec.select, ptr %117, align 8, !tbaa !31
  %118 = getelementptr inbounds i8, ptr %0, i64 3528
  store ptr %spec.select, ptr %118, align 8, !tbaa !31
  %119 = getelementptr inbounds i8, ptr %0, i64 3536
  store ptr %spec.select, ptr %119, align 8, !tbaa !31
  %120 = getelementptr inbounds i8, ptr %0, i64 3544
  store ptr %spec.select, ptr %120, align 8, !tbaa !31
  %121 = getelementptr inbounds i8, ptr %0, i64 3552
  store ptr %spec.select, ptr %121, align 8, !tbaa !31
  %122 = getelementptr inbounds i8, ptr %0, i64 3560
  store ptr %spec.select, ptr %122, align 8, !tbaa !31
  %123 = getelementptr inbounds i8, ptr %0, i64 3568
  store ptr %spec.select, ptr %123, align 8, !tbaa !31
  %124 = getelementptr inbounds i8, ptr %0, i64 3576
  store ptr %spec.select, ptr %124, align 8, !tbaa !31
  %125 = getelementptr inbounds i8, ptr %0, i64 3584
  store ptr %spec.select, ptr %125, align 8, !tbaa !31
  %126 = getelementptr inbounds i8, ptr %0, i64 3592
  store ptr %spec.select, ptr %126, align 8, !tbaa !31
  %127 = getelementptr inbounds i8, ptr %0, i64 3600
  store ptr %spec.select, ptr %127, align 8, !tbaa !31
  %128 = getelementptr inbounds i8, ptr %0, i64 3608
  store ptr %spec.select, ptr %128, align 8, !tbaa !31
  %129 = getelementptr inbounds i8, ptr %0, i64 3616
  store ptr %spec.select, ptr %129, align 8, !tbaa !31
  %130 = getelementptr inbounds i8, ptr %0, i64 3624
  store ptr %spec.select, ptr %130, align 8, !tbaa !31
  %131 = getelementptr inbounds i8, ptr %0, i64 3632
  store ptr %spec.select, ptr %131, align 8, !tbaa !31
  %132 = getelementptr inbounds i8, ptr %0, i64 3640
  store ptr %spec.select, ptr %132, align 8, !tbaa !31
  %133 = getelementptr inbounds i8, ptr %0, i64 3648
  store ptr %spec.select, ptr %133, align 8, !tbaa !31
  %134 = getelementptr inbounds i8, ptr %0, i64 3656
  store ptr %spec.select, ptr %134, align 8, !tbaa !31
  %135 = getelementptr inbounds i8, ptr %0, i64 3664
  store ptr %spec.select, ptr %135, align 8, !tbaa !31
  %136 = getelementptr inbounds i8, ptr %0, i64 3672
  store ptr %spec.select, ptr %136, align 8, !tbaa !31
  %137 = getelementptr inbounds i8, ptr %0, i64 3680
  store ptr %spec.select, ptr %137, align 8, !tbaa !31
  %138 = getelementptr inbounds i8, ptr %0, i64 3688
  store ptr %spec.select, ptr %138, align 8, !tbaa !31
  %139 = getelementptr inbounds i8, ptr %0, i64 3696
  store ptr %spec.select, ptr %139, align 8, !tbaa !31
  %140 = getelementptr inbounds i8, ptr %0, i64 3704
  store ptr %spec.select, ptr %140, align 8, !tbaa !31
  %141 = getelementptr inbounds i8, ptr %0, i64 3712
  store ptr %spec.select, ptr %141, align 8, !tbaa !31
  %142 = getelementptr inbounds i8, ptr %0, i64 3720
  store ptr %spec.select, ptr %142, align 8, !tbaa !31
  %143 = getelementptr inbounds i8, ptr %0, i64 3728
  store ptr %spec.select, ptr %143, align 8, !tbaa !31
  %144 = getelementptr inbounds i8, ptr %0, i64 3736
  store ptr %spec.select, ptr %144, align 8, !tbaa !31
  %145 = getelementptr inbounds i8, ptr %0, i64 3744
  store ptr %spec.select, ptr %145, align 8, !tbaa !31
  %146 = getelementptr inbounds i8, ptr %0, i64 3752
  store ptr %spec.select, ptr %146, align 8, !tbaa !31
  br label %.loopexit111.sink.split

147:                                              ; preds = %44
  br i1 %.not99, label %148, label %.loopexit111

148:                                              ; preds = %147
  %149 = getelementptr inbounds i8, ptr %0, i64 3688
  store ptr %.089, ptr %149, align 8, !tbaa !31
  %150 = getelementptr inbounds i8, ptr %0, i64 3712
  store ptr %.088, ptr %150, align 8, !tbaa !31
  %151 = getelementptr inbounds i8, ptr %0, i64 3736
  store ptr %.087, ptr %151, align 8, !tbaa !31
  %152 = and i32 %14, 2
  %.not100 = icmp eq i32 %152, 0
  br i1 %.not100, label %157, label %153

153:                                              ; preds = %148
  %154 = getelementptr inbounds i8, ptr %0, i64 3640
  store ptr @lj_vm_rethook, ptr %154, align 8, !tbaa !31
  %155 = getelementptr inbounds i8, ptr %0, i64 3648
  store ptr @lj_vm_rethook, ptr %155, align 8, !tbaa !31
  %156 = getelementptr inbounds i8, ptr %0, i64 3656
  store ptr @lj_vm_rethook, ptr %156, align 8, !tbaa !31
  br label %.loopexit111.sink.split

157:                                              ; preds = %148
  %158 = getelementptr inbounds i8, ptr %0, i64 4872
  %159 = getelementptr inbounds i8, ptr %0, i64 3640
  %160 = load <2 x ptr>, ptr %158, align 8, !tbaa !31
  store <2 x ptr> %160, ptr %159, align 8, !tbaa !31
  %161 = getelementptr inbounds i8, ptr %0, i64 4888
  %162 = load ptr, ptr %161, align 8, !tbaa !31
  %163 = getelementptr inbounds i8, ptr %0, i64 3656
  store ptr %162, ptr %163, align 8, !tbaa !31
  %164 = getelementptr inbounds i8, ptr %0, i64 4896
  %165 = load ptr, ptr %164, align 8, !tbaa !31
  br label %.loopexit111.sink.split

.loopexit111.sink.split:                          ; preds = %55, %153, %157, %.loopexit111.loopexit
  %.sink122 = phi i64 [ 3760, %.loopexit111.loopexit ], [ 3664, %157 ], [ 3664, %153 ], [ 3664, %55 ]
  %spec.select.sink = phi ptr [ %spec.select, %.loopexit111.loopexit ], [ %165, %157 ], [ @lj_vm_rethook, %153 ], [ @lj_vm_rethook, %55 ]
  %166 = getelementptr inbounds i8, ptr %0, i64 %.sink122
  store ptr %spec.select.sink, ptr %166, align 8, !tbaa !31
  br label %.loopexit111

.loopexit111:                                     ; preds = %.loopexit111.sink.split, %147, %52
  %167 = and i32 %48, 1
  %.not105 = icmp eq i32 %167, 0
  %.pre = and i32 %20, 1
  %168 = icmp eq i32 %.pre, 0
  br i1 %.not105, label %.loopexit, label %169

169:                                              ; preds = %.loopexit111
  br i1 %168, label %.loopexit.thread, label %.loopexit.thread120

.loopexit.thread120:                              ; preds = %169
  %170 = getelementptr inbounds i8, ptr %0, i64 3768
  store ptr @lj_vm_callhook, ptr %170, align 8, !tbaa !31
  %171 = getelementptr inbounds i8, ptr %0, i64 3776
  store ptr @lj_vm_callhook, ptr %171, align 8, !tbaa !31
  %172 = getelementptr inbounds i8, ptr %0, i64 3784
  store ptr @lj_vm_callhook, ptr %172, align 8, !tbaa !31
  %173 = getelementptr inbounds i8, ptr %0, i64 3792
  store ptr @lj_vm_callhook, ptr %173, align 8, !tbaa !31
  %174 = getelementptr inbounds i8, ptr %0, i64 3800
  store ptr @lj_vm_callhook, ptr %174, align 8, !tbaa !31
  %175 = getelementptr inbounds i8, ptr %0, i64 3808
  store ptr @lj_vm_callhook, ptr %175, align 8, !tbaa !31
  %176 = getelementptr inbounds i8, ptr %0, i64 3816
  store ptr @lj_vm_callhook, ptr %176, align 8, !tbaa !31
  %177 = getelementptr inbounds i8, ptr %0, i64 3824
  store ptr @lj_vm_callhook, ptr %177, align 8, !tbaa !31
  %178 = getelementptr inbounds i8, ptr %0, i64 3832
  store ptr @lj_vm_callhook, ptr %178, align 8, !tbaa !31
  %179 = getelementptr inbounds i8, ptr %0, i64 3840
  store ptr @lj_vm_callhook, ptr %179, align 8, !tbaa !31
  %180 = getelementptr inbounds i8, ptr %0, i64 3848
  store ptr @lj_vm_callhook, ptr %180, align 8, !tbaa !31
  %181 = getelementptr inbounds i8, ptr %0, i64 3856
  store ptr @lj_vm_callhook, ptr %181, align 8, !tbaa !31
  %182 = getelementptr inbounds i8, ptr %0, i64 3864
  store ptr @lj_vm_callhook, ptr %182, align 8, !tbaa !31
  %183 = getelementptr inbounds i8, ptr %0, i64 3872
  store ptr @lj_vm_callhook, ptr %183, align 8, !tbaa !31
  %184 = getelementptr inbounds i8, ptr %0, i64 3880
  store ptr @lj_vm_callhook, ptr %184, align 8, !tbaa !31
  %185 = getelementptr inbounds i8, ptr %0, i64 3888
  store ptr @lj_vm_callhook, ptr %185, align 8, !tbaa !31
  %186 = getelementptr inbounds i8, ptr %0, i64 3896
  store ptr @lj_vm_callhook, ptr %186, align 8, !tbaa !31
  %187 = getelementptr inbounds i8, ptr %0, i64 3904
  store ptr @lj_vm_callhook, ptr %187, align 8, !tbaa !31
  %188 = getelementptr inbounds i8, ptr %0, i64 3912
  store ptr @lj_vm_callhook, ptr %188, align 8, !tbaa !31
  %189 = getelementptr inbounds i8, ptr %0, i64 3920
  store ptr @lj_vm_callhook, ptr %189, align 8, !tbaa !31
  %190 = getelementptr inbounds i8, ptr %0, i64 3928
  store ptr @lj_vm_callhook, ptr %190, align 8, !tbaa !31
  %191 = getelementptr inbounds i8, ptr %0, i64 3936
  store ptr @lj_vm_callhook, ptr %191, align 8, !tbaa !31
  %192 = getelementptr inbounds i8, ptr %0, i64 3944
  store ptr @lj_vm_callhook, ptr %192, align 8, !tbaa !31
  %193 = getelementptr inbounds i8, ptr %0, i64 3952
  store ptr @lj_vm_callhook, ptr %193, align 8, !tbaa !31
  %194 = getelementptr inbounds i8, ptr %0, i64 3960
  store ptr @lj_vm_callhook, ptr %194, align 8, !tbaa !31
  %195 = getelementptr inbounds i8, ptr %0, i64 3968
  store ptr @lj_vm_callhook, ptr %195, align 8, !tbaa !31
  %196 = getelementptr inbounds i8, ptr %0, i64 3976
  store ptr @lj_vm_callhook, ptr %196, align 8, !tbaa !31
  %197 = getelementptr inbounds i8, ptr %0, i64 3984
  store ptr @lj_vm_callhook, ptr %197, align 8, !tbaa !31
  %198 = getelementptr inbounds i8, ptr %0, i64 3992
  store ptr @lj_vm_callhook, ptr %198, align 8, !tbaa !31
  %199 = getelementptr inbounds i8, ptr %0, i64 4000
  store ptr @lj_vm_callhook, ptr %199, align 8, !tbaa !31
  %200 = getelementptr inbounds i8, ptr %0, i64 4008
  store ptr @lj_vm_callhook, ptr %200, align 8, !tbaa !31
  %201 = getelementptr inbounds i8, ptr %0, i64 4016
  store ptr @lj_vm_callhook, ptr %201, align 8, !tbaa !31
  %202 = getelementptr inbounds i8, ptr %0, i64 4024
  store ptr @lj_vm_callhook, ptr %202, align 8, !tbaa !31
  %203 = getelementptr inbounds i8, ptr %0, i64 4032
  store ptr @lj_vm_callhook, ptr %203, align 8, !tbaa !31
  %204 = getelementptr inbounds i8, ptr %0, i64 4040
  store ptr @lj_vm_callhook, ptr %204, align 8, !tbaa !31
  %205 = getelementptr inbounds i8, ptr %0, i64 4048
  store ptr @lj_vm_callhook, ptr %205, align 8, !tbaa !31
  %206 = getelementptr inbounds i8, ptr %0, i64 4056
  store ptr @lj_vm_callhook, ptr %206, align 8, !tbaa !31
  %207 = getelementptr inbounds i8, ptr %0, i64 4064
  store ptr @lj_vm_callhook, ptr %207, align 8, !tbaa !31
  %208 = getelementptr inbounds i8, ptr %0, i64 4072
  store ptr @lj_vm_callhook, ptr %208, align 8, !tbaa !31
  %209 = getelementptr inbounds i8, ptr %0, i64 4080
  store ptr @lj_vm_callhook, ptr %209, align 8, !tbaa !31
  %210 = getelementptr inbounds i8, ptr %0, i64 4088
  store ptr @lj_vm_callhook, ptr %210, align 8, !tbaa !31
  %211 = getelementptr inbounds i8, ptr %0, i64 4096
  store ptr @lj_vm_callhook, ptr %211, align 8, !tbaa !31
  %212 = getelementptr inbounds i8, ptr %0, i64 4104
  store ptr @lj_vm_callhook, ptr %212, align 8, !tbaa !31
  %213 = getelementptr inbounds i8, ptr %0, i64 4112
  store ptr @lj_vm_callhook, ptr %213, align 8, !tbaa !31
  %214 = getelementptr inbounds i8, ptr %0, i64 4120
  store ptr @lj_vm_callhook, ptr %214, align 8, !tbaa !31
  %215 = getelementptr inbounds i8, ptr %0, i64 4128
  store ptr @lj_vm_callhook, ptr %215, align 8, !tbaa !31
  %216 = getelementptr inbounds i8, ptr %0, i64 4136
  store ptr @lj_vm_callhook, ptr %216, align 8, !tbaa !31
  %217 = getelementptr inbounds i8, ptr %0, i64 4144
  store ptr @lj_vm_callhook, ptr %217, align 8, !tbaa !31
  %218 = getelementptr inbounds i8, ptr %0, i64 4152
  store ptr @lj_vm_callhook, ptr %218, align 8, !tbaa !31
  %219 = getelementptr inbounds i8, ptr %0, i64 4160
  store ptr @lj_vm_callhook, ptr %219, align 8, !tbaa !31
  %220 = getelementptr inbounds i8, ptr %0, i64 4168
  store ptr @lj_vm_callhook, ptr %220, align 8, !tbaa !31
  %221 = getelementptr inbounds i8, ptr %0, i64 4176
  store ptr @lj_vm_callhook, ptr %221, align 8, !tbaa !31
  %222 = getelementptr inbounds i8, ptr %0, i64 4184
  store ptr @lj_vm_callhook, ptr %222, align 8, !tbaa !31
  %223 = getelementptr inbounds i8, ptr %0, i64 4192
  store ptr @lj_vm_callhook, ptr %223, align 8, !tbaa !31
  %224 = getelementptr inbounds i8, ptr %0, i64 4200
  store ptr @lj_vm_callhook, ptr %224, align 8, !tbaa !31
  %225 = getelementptr inbounds i8, ptr %0, i64 4208
  store ptr @lj_vm_callhook, ptr %225, align 8, !tbaa !31
  %226 = getelementptr inbounds i8, ptr %0, i64 4216
  store ptr @lj_vm_callhook, ptr %226, align 8, !tbaa !31
  %227 = getelementptr inbounds i8, ptr %0, i64 4224
  store ptr @lj_vm_callhook, ptr %227, align 8, !tbaa !31
  %228 = getelementptr inbounds i8, ptr %0, i64 4232
  store ptr @lj_vm_callhook, ptr %228, align 8, !tbaa !31
  %229 = getelementptr inbounds i8, ptr %0, i64 4240
  store ptr @lj_vm_callhook, ptr %229, align 8, !tbaa !31
  %230 = getelementptr inbounds i8, ptr %0, i64 4248
  store ptr @lj_vm_callhook, ptr %230, align 8, !tbaa !31
  %231 = getelementptr inbounds i8, ptr %0, i64 4256
  store ptr @lj_vm_callhook, ptr %231, align 8, !tbaa !31
  br label %.sink.split.sink.split

.loopexit.thread:                                 ; preds = %169
  %232 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 178), align 2, !tbaa !30
  %233 = zext i16 %232 to i64
  %234 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %233
  %235 = getelementptr inbounds i8, ptr %0, i64 3768
  store ptr %234, ptr %235, align 8, !tbaa !31
  %236 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 180), align 2, !tbaa !30
  %237 = zext i16 %236 to i64
  %238 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %237
  %239 = getelementptr inbounds i8, ptr %0, i64 3776
  store ptr %238, ptr %239, align 8, !tbaa !31
  %240 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 182), align 2, !tbaa !30
  %241 = zext i16 %240 to i64
  %242 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %241
  %243 = getelementptr inbounds i8, ptr %0, i64 3784
  store ptr %242, ptr %243, align 8, !tbaa !31
  %244 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 184), align 2, !tbaa !30
  %245 = zext i16 %244 to i64
  %246 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %245
  %247 = getelementptr inbounds i8, ptr %0, i64 3792
  store ptr %246, ptr %247, align 8, !tbaa !31
  %248 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 186), align 2, !tbaa !30
  %249 = zext i16 %248 to i64
  %250 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %249
  %251 = getelementptr inbounds i8, ptr %0, i64 3800
  store ptr %250, ptr %251, align 8, !tbaa !31
  %252 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 188), align 2, !tbaa !30
  %253 = zext i16 %252 to i64
  %254 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %253
  %255 = getelementptr inbounds i8, ptr %0, i64 3808
  store ptr %254, ptr %255, align 8, !tbaa !31
  %256 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 190), align 2, !tbaa !30
  %257 = zext i16 %256 to i64
  %258 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %257
  %259 = getelementptr inbounds i8, ptr %0, i64 3816
  store ptr %258, ptr %259, align 8, !tbaa !31
  %260 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 192), align 2, !tbaa !30
  %261 = zext i16 %260 to i64
  %262 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %261
  %263 = getelementptr inbounds i8, ptr %0, i64 3824
  store ptr %262, ptr %263, align 8, !tbaa !31
  %264 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 194), align 2, !tbaa !30
  %265 = zext i16 %264 to i64
  %266 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %265
  %267 = getelementptr inbounds i8, ptr %0, i64 3832
  store ptr %266, ptr %267, align 8, !tbaa !31
  %268 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 196), align 2, !tbaa !30
  %269 = zext i16 %268 to i64
  %270 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %269
  %271 = getelementptr inbounds i8, ptr %0, i64 3840
  store ptr %270, ptr %271, align 8, !tbaa !31
  %272 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 198), align 2, !tbaa !30
  %273 = zext i16 %272 to i64
  %274 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %273
  %275 = getelementptr inbounds i8, ptr %0, i64 3848
  store ptr %274, ptr %275, align 8, !tbaa !31
  %276 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 200), align 2, !tbaa !30
  %277 = zext i16 %276 to i64
  %278 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %277
  %279 = getelementptr inbounds i8, ptr %0, i64 3856
  store ptr %278, ptr %279, align 8, !tbaa !31
  %280 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 202), align 2, !tbaa !30
  %281 = zext i16 %280 to i64
  %282 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %281
  %283 = getelementptr inbounds i8, ptr %0, i64 3864
  store ptr %282, ptr %283, align 8, !tbaa !31
  %284 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 204), align 2, !tbaa !30
  %285 = zext i16 %284 to i64
  %286 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %285
  %287 = getelementptr inbounds i8, ptr %0, i64 3872
  store ptr %286, ptr %287, align 8, !tbaa !31
  %288 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 206), align 2, !tbaa !30
  %289 = zext i16 %288 to i64
  %290 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %289
  %291 = getelementptr inbounds i8, ptr %0, i64 3880
  store ptr %290, ptr %291, align 8, !tbaa !31
  %292 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 208), align 2, !tbaa !30
  %293 = zext i16 %292 to i64
  %294 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %293
  %295 = getelementptr inbounds i8, ptr %0, i64 3888
  store ptr %294, ptr %295, align 8, !tbaa !31
  %296 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 210), align 2, !tbaa !30
  %297 = zext i16 %296 to i64
  %298 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %297
  %299 = getelementptr inbounds i8, ptr %0, i64 3896
  store ptr %298, ptr %299, align 8, !tbaa !31
  %300 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 212), align 2, !tbaa !30
  %301 = zext i16 %300 to i64
  %302 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %301
  %303 = getelementptr inbounds i8, ptr %0, i64 3904
  store ptr %302, ptr %303, align 8, !tbaa !31
  %304 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 214), align 2, !tbaa !30
  %305 = zext i16 %304 to i64
  %306 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %305
  %307 = getelementptr inbounds i8, ptr %0, i64 3912
  store ptr %306, ptr %307, align 8, !tbaa !31
  %308 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 216), align 2, !tbaa !30
  %309 = zext i16 %308 to i64
  %310 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %309
  %311 = getelementptr inbounds i8, ptr %0, i64 3920
  store ptr %310, ptr %311, align 8, !tbaa !31
  %312 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 218), align 2, !tbaa !30
  %313 = zext i16 %312 to i64
  %314 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %313
  %315 = getelementptr inbounds i8, ptr %0, i64 3928
  store ptr %314, ptr %315, align 8, !tbaa !31
  %316 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 220), align 2, !tbaa !30
  %317 = zext i16 %316 to i64
  %318 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %317
  %319 = getelementptr inbounds i8, ptr %0, i64 3936
  store ptr %318, ptr %319, align 8, !tbaa !31
  %320 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 222), align 2, !tbaa !30
  %321 = zext i16 %320 to i64
  %322 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %321
  %323 = getelementptr inbounds i8, ptr %0, i64 3944
  store ptr %322, ptr %323, align 8, !tbaa !31
  %324 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 224), align 2, !tbaa !30
  %325 = zext i16 %324 to i64
  %326 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %325
  %327 = getelementptr inbounds i8, ptr %0, i64 3952
  store ptr %326, ptr %327, align 8, !tbaa !31
  %328 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 226), align 2, !tbaa !30
  %329 = zext i16 %328 to i64
  %330 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %329
  %331 = getelementptr inbounds i8, ptr %0, i64 3960
  store ptr %330, ptr %331, align 8, !tbaa !31
  %332 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 228), align 2, !tbaa !30
  %333 = zext i16 %332 to i64
  %334 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %333
  %335 = getelementptr inbounds i8, ptr %0, i64 3968
  store ptr %334, ptr %335, align 8, !tbaa !31
  %336 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 230), align 2, !tbaa !30
  %337 = zext i16 %336 to i64
  %338 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %337
  %339 = getelementptr inbounds i8, ptr %0, i64 3976
  store ptr %338, ptr %339, align 8, !tbaa !31
  %340 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 232), align 2, !tbaa !30
  %341 = zext i16 %340 to i64
  %342 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %341
  %343 = getelementptr inbounds i8, ptr %0, i64 3984
  store ptr %342, ptr %343, align 8, !tbaa !31
  %344 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 234), align 2, !tbaa !30
  %345 = zext i16 %344 to i64
  %346 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %345
  %347 = getelementptr inbounds i8, ptr %0, i64 3992
  store ptr %346, ptr %347, align 8, !tbaa !31
  %348 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 236), align 2, !tbaa !30
  %349 = zext i16 %348 to i64
  %350 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %349
  %351 = getelementptr inbounds i8, ptr %0, i64 4000
  store ptr %350, ptr %351, align 8, !tbaa !31
  %352 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 238), align 2, !tbaa !30
  %353 = zext i16 %352 to i64
  %354 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %353
  %355 = getelementptr inbounds i8, ptr %0, i64 4008
  store ptr %354, ptr %355, align 8, !tbaa !31
  %356 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 240), align 2, !tbaa !30
  %357 = zext i16 %356 to i64
  %358 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %357
  %359 = getelementptr inbounds i8, ptr %0, i64 4016
  store ptr %358, ptr %359, align 8, !tbaa !31
  %360 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 242), align 2, !tbaa !30
  %361 = zext i16 %360 to i64
  %362 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %361
  %363 = getelementptr inbounds i8, ptr %0, i64 4024
  store ptr %362, ptr %363, align 8, !tbaa !31
  %364 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 244), align 2, !tbaa !30
  %365 = zext i16 %364 to i64
  %366 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %365
  %367 = getelementptr inbounds i8, ptr %0, i64 4032
  store ptr %366, ptr %367, align 8, !tbaa !31
  %368 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 246), align 2, !tbaa !30
  %369 = zext i16 %368 to i64
  %370 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %369
  %371 = getelementptr inbounds i8, ptr %0, i64 4040
  store ptr %370, ptr %371, align 8, !tbaa !31
  %372 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 248), align 2, !tbaa !30
  %373 = zext i16 %372 to i64
  %374 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %373
  %375 = getelementptr inbounds i8, ptr %0, i64 4048
  store ptr %374, ptr %375, align 8, !tbaa !31
  %376 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 250), align 2, !tbaa !30
  %377 = zext i16 %376 to i64
  %378 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %377
  %379 = getelementptr inbounds i8, ptr %0, i64 4056
  store ptr %378, ptr %379, align 8, !tbaa !31
  %380 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 252), align 2, !tbaa !30
  %381 = zext i16 %380 to i64
  %382 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %381
  %383 = getelementptr inbounds i8, ptr %0, i64 4064
  store ptr %382, ptr %383, align 8, !tbaa !31
  %384 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 254), align 2, !tbaa !30
  %385 = zext i16 %384 to i64
  %386 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %385
  %387 = getelementptr inbounds i8, ptr %0, i64 4072
  store ptr %386, ptr %387, align 8, !tbaa !31
  %388 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 256), align 2, !tbaa !30
  %389 = zext i16 %388 to i64
  %390 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %389
  %391 = getelementptr inbounds i8, ptr %0, i64 4080
  store ptr %390, ptr %391, align 8, !tbaa !31
  %392 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 258), align 2, !tbaa !30
  %393 = zext i16 %392 to i64
  %394 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %393
  %395 = getelementptr inbounds i8, ptr %0, i64 4088
  store ptr %394, ptr %395, align 8, !tbaa !31
  %396 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 260), align 2, !tbaa !30
  %397 = zext i16 %396 to i64
  %398 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %397
  %399 = getelementptr inbounds i8, ptr %0, i64 4096
  store ptr %398, ptr %399, align 8, !tbaa !31
  %400 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 262), align 2, !tbaa !30
  %401 = zext i16 %400 to i64
  %402 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %401
  %403 = getelementptr inbounds i8, ptr %0, i64 4104
  store ptr %402, ptr %403, align 8, !tbaa !31
  %404 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 264), align 2, !tbaa !30
  %405 = zext i16 %404 to i64
  %406 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %405
  %407 = getelementptr inbounds i8, ptr %0, i64 4112
  store ptr %406, ptr %407, align 8, !tbaa !31
  %408 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 266), align 2, !tbaa !30
  %409 = zext i16 %408 to i64
  %410 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %409
  %411 = getelementptr inbounds i8, ptr %0, i64 4120
  store ptr %410, ptr %411, align 8, !tbaa !31
  %412 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 268), align 2, !tbaa !30
  %413 = zext i16 %412 to i64
  %414 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %413
  %415 = getelementptr inbounds i8, ptr %0, i64 4128
  store ptr %414, ptr %415, align 8, !tbaa !31
  %416 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 270), align 2, !tbaa !30
  %417 = zext i16 %416 to i64
  %418 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %417
  %419 = getelementptr inbounds i8, ptr %0, i64 4136
  store ptr %418, ptr %419, align 8, !tbaa !31
  %420 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 272), align 2, !tbaa !30
  %421 = zext i16 %420 to i64
  %422 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %421
  %423 = getelementptr inbounds i8, ptr %0, i64 4144
  store ptr %422, ptr %423, align 8, !tbaa !31
  %424 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 274), align 2, !tbaa !30
  %425 = zext i16 %424 to i64
  %426 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %425
  %427 = getelementptr inbounds i8, ptr %0, i64 4152
  store ptr %426, ptr %427, align 8, !tbaa !31
  %428 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 276), align 2, !tbaa !30
  %429 = zext i16 %428 to i64
  %430 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %429
  %431 = getelementptr inbounds i8, ptr %0, i64 4160
  store ptr %430, ptr %431, align 8, !tbaa !31
  %432 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 278), align 2, !tbaa !30
  %433 = zext i16 %432 to i64
  %434 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %433
  %435 = getelementptr inbounds i8, ptr %0, i64 4168
  store ptr %434, ptr %435, align 8, !tbaa !31
  %436 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 280), align 2, !tbaa !30
  %437 = zext i16 %436 to i64
  %438 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %437
  %439 = getelementptr inbounds i8, ptr %0, i64 4176
  store ptr %438, ptr %439, align 8, !tbaa !31
  %440 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 282), align 2, !tbaa !30
  %441 = zext i16 %440 to i64
  %442 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %441
  %443 = getelementptr inbounds i8, ptr %0, i64 4184
  store ptr %442, ptr %443, align 8, !tbaa !31
  %444 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 284), align 2, !tbaa !30
  %445 = zext i16 %444 to i64
  %446 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %445
  %447 = getelementptr inbounds i8, ptr %0, i64 4192
  store ptr %446, ptr %447, align 8, !tbaa !31
  %448 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 286), align 2, !tbaa !30
  %449 = zext i16 %448 to i64
  %450 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %449
  %451 = getelementptr inbounds i8, ptr %0, i64 4200
  store ptr %450, ptr %451, align 8, !tbaa !31
  %452 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 288), align 2, !tbaa !30
  %453 = zext i16 %452 to i64
  %454 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %453
  %455 = getelementptr inbounds i8, ptr %0, i64 4208
  store ptr %454, ptr %455, align 8, !tbaa !31
  %456 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 290), align 2, !tbaa !30
  %457 = zext i16 %456 to i64
  %458 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %457
  %459 = getelementptr inbounds i8, ptr %0, i64 4216
  store ptr %458, ptr %459, align 8, !tbaa !31
  %460 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 292), align 2, !tbaa !30
  %461 = zext i16 %460 to i64
  %462 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %461
  %463 = getelementptr inbounds i8, ptr %0, i64 4224
  store ptr %462, ptr %463, align 8, !tbaa !31
  %464 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 294), align 2, !tbaa !30
  %465 = zext i16 %464 to i64
  %466 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %465
  %467 = getelementptr inbounds i8, ptr %0, i64 4232
  store ptr %466, ptr %467, align 8, !tbaa !31
  %468 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 296), align 2, !tbaa !30
  %469 = zext i16 %468 to i64
  %470 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %469
  %471 = getelementptr inbounds i8, ptr %0, i64 4240
  store ptr %470, ptr %471, align 8, !tbaa !31
  %472 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 298), align 2, !tbaa !30
  %473 = zext i16 %472 to i64
  %474 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %473
  %475 = getelementptr inbounds i8, ptr %0, i64 4248
  store ptr %474, ptr %475, align 8, !tbaa !31
  %476 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 300), align 2, !tbaa !30
  %477 = zext i16 %476 to i64
  %478 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %477
  %479 = getelementptr inbounds i8, ptr %0, i64 4256
  store ptr %478, ptr %479, align 8, !tbaa !31
  %480 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 302), align 2, !tbaa !30
  %481 = zext i16 %480 to i64
  %482 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %481
  %483 = getelementptr inbounds i8, ptr %0, i64 4264
  store ptr %482, ptr %483, align 8, !tbaa !31
  %484 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 304), align 2, !tbaa !30
  %485 = zext i16 %484 to i64
  %486 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %485
  %487 = getelementptr inbounds i8, ptr %0, i64 4272
  store ptr %486, ptr %487, align 8, !tbaa !31
  %488 = load i16, ptr getelementptr inbounds (i8, ptr @lj_bc_ofs, i64 306), align 2, !tbaa !30
  %489 = zext i16 %488 to i64
  %490 = getelementptr inbounds i8, ptr @lj_vm_asm_begin, i64 %489
  br label %.sink.split.sink.split

.loopexit:                                        ; preds = %.loopexit111
  br i1 %168, label %.sink.split, label %494

.sink.split.sink.split:                           ; preds = %.loopexit.thread120, %.loopexit.thread
  %.sink127 = phi i64 [ 4280, %.loopexit.thread ], [ 4264, %.loopexit.thread120 ]
  %.sink = phi ptr [ %490, %.loopexit.thread ], [ @lj_vm_callhook, %.loopexit.thread120 ]
  %.sink125.ph = phi i64 [ 3768, %.loopexit.thread ], [ 4272, %.loopexit.thread120 ]
  %lj_vm_callhook.sink124.ph = phi ptr [ %.086, %.loopexit.thread ], [ @lj_vm_callhook, %.loopexit.thread120 ]
  %.sink123.ph = phi i64 [ 3792, %.loopexit.thread ], [ 4280, %.loopexit.thread120 ]
  %lj_vm_callhook.sink.ph = phi ptr [ %.085, %.loopexit.thread ], [ @lj_vm_callhook, %.loopexit.thread120 ]
  %491 = getelementptr inbounds i8, ptr %0, i64 %.sink127
  store ptr %.sink, ptr %491, align 8, !tbaa !31
  br label %.sink.split

.sink.split:                                      ; preds = %.sink.split.sink.split, %.loopexit
  %.sink125 = phi i64 [ 3768, %.loopexit ], [ %.sink125.ph, %.sink.split.sink.split ]
  %lj_vm_callhook.sink124 = phi ptr [ %.086, %.loopexit ], [ %lj_vm_callhook.sink124.ph, %.sink.split.sink.split ]
  %.sink123 = phi i64 [ 3792, %.loopexit ], [ %.sink123.ph, %.sink.split.sink.split ]
  %lj_vm_callhook.sink = phi ptr [ %.085, %.loopexit ], [ %lj_vm_callhook.sink.ph, %.sink.split.sink.split ]
  %492 = getelementptr inbounds i8, ptr %0, i64 %.sink125
  store ptr %lj_vm_callhook.sink124, ptr %492, align 8, !tbaa !31
  %493 = getelementptr inbounds i8, ptr %0, i64 %.sink123
  store ptr %lj_vm_callhook.sink, ptr %493, align 8, !tbaa !31
  br label %494

494:                                              ; preds = %.sink.split, %.loopexit
  %.not107 = icmp ne i32 %7, 0
  %495 = and i32 %21, 16
  %.not108 = icmp eq i32 %495, 0
  %or.cond = and i1 %.not108, %.not107
  br i1 %or.cond, label %496, label %497

496:                                              ; preds = %494
  tail call void @lj_dispatch_init_hotcount(ptr noundef nonnull %0)
  br label %497

497:                                              ; preds = %494, %496, %1
  ret void
}

; Function Attrs: mustprogress 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) #1

declare hidden void @lj_vm_rethook() #2

declare hidden void @lj_vm_profhook() #2

declare hidden void @lj_vm_record() #2

declare hidden void @lj_vm_inshook() #2

declare hidden void @lj_vm_callhook() #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 = { mustprogress nocallback nofree 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" }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !8, i64 126}
!6 = !{!"global_State", !7, i64 0, !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 24, !11, i64 32, !10, i64 88, !14, i64 92, !15, i64 108, !8, i64 124, !8, i64 125, !8, i64 126, !8, i64 127, !12, i64 128, !8, i64 136, !8, i64 144, !8, i64 152, !16, i64 160, !17, i64 184, !10, i64 208, !10, i64 212, !7, i64 216, !7, i64 224, !7, i64 232, !10, i64 240, !10, i64 244, !12, i64 248, !13, i64 252, !13, i64 256, !8, i64 260}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"GCState", !10, i64 0, !10, i64 4, !8, i64 8, !8, i64 9, !8, i64 10, !8, i64 11, !10, i64 12, !12, i64 16, !13, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52}
!12 = !{!"GCRef", !10, i64 0}
!13 = !{!"MRef", !10, i64 0}
!14 = !{!"SBuf", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12}
!15 = !{!"GCstr", !12, i64 0, !8, i64 4, !8, i64 5, !8, i64 6, !8, i64 7, !10, i64 8, !10, i64 12}
!16 = !{!"Node", !8, i64 0, !8, i64 8, !13, i64 16, !13, i64 20}
!17 = !{!"GCupval", !12, i64 0, !8, i64 4, !8, i64 5, !8, i64 6, !8, i64 7, !8, i64 8, !13, i64 16, !10, i64 20}
!18 = !{!19, !10, i64 936}
!19 = !{!"GG_State", !20, i64 0, !6, i64 384, !21, i64 800, !8, i64 3312, !8, i64 3440, !8, i64 5384}
!20 = !{!"lua_State", !8, i64 0}
!21 = !{!"jit_State", !22, i64 0, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !10, i64 136, !10, i64 140, !10, i64 144, !8, i64 148, !8, i64 149, !24, i64 150, !8, i64 151, !25, i64 152, !7, i64 176, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !13, i64 212, !8, i64 216, !7, i64 256, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !7, i64 280, !7, i64 288, !10, i64 296, !10, i64 300, !8, i64 304, !7, i64 312, !10, i64 320, !10, i64 324, !7, i64 328, !8, i64 336, !8, i64 536, !8, i64 1556, !8, i64 1616, !8, i64 1744, !10, i64 2256, !10, i64 2260, !8, i64 2264, !10, i64 2392, !26, i64 2396, !7, i64 2416, !10, i64 2424, !10, i64 2428, !7, i64 2432, !10, i64 2440, !10, i64 2444, !7, i64 2448, !7, i64 2456, !7, i64 2464, !27, i64 2472, !27, i64 2480, !8, i64 2488, !7, i64 2496, !10, i64 2504, !10, i64 2508}
!22 = !{!"GCtrace", !12, i64 0, !8, i64 4, !8, i64 5, !8, i64 6, !8, i64 7, !10, i64 8, !12, i64 12, !7, i64 16, !10, i64 24, !23, i64 28, !23, i64 30, !7, i64 32, !7, i64 40, !12, i64 48, !13, i64 52, !10, i64 56, !10, i64 60, !7, i64 64, !10, i64 72, !23, i64 76, !23, i64 78, !23, i64 80, !23, i64 82, !23, i64 84, !23, i64 86, !23, i64 88, !8, i64 90, !8, i64 91}
!23 = !{!"short", !8, i64 0}
!24 = !{!"IRType1", !8, i64 0}
!25 = !{!"FoldState", !8, i64 0, !8, i64 8, !8, i64 16}
!26 = !{!"ScEvEntry", !13, i64 0, !23, i64 4, !23, i64 6, !23, i64 8, !23, i64 10, !24, i64 12, !8, i64 13}
!27 = !{!"long", !8, i64 0}
!28 = !{!19, !10, i64 988}
!29 = !{!6, !8, i64 125}
!30 = !{!23, !23, i64 0}
!31 = !{!7, !7, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass