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

; 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.RecordIndex = type { %union.TValue, %union.TValue, %union.TValue, %union.TValue, ptr, ptr, i32, i32, i32, i32, i32, i32 }
%union.TValue = type { i64 }
%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.GCRef = type { i32 }
%struct.IRType1 = type { i8 }
%struct.FoldState = type { %union.IRIns, %union.IRIns, %union.IRIns }
%union.IRIns = type { %struct.anon.3 }
%struct.anon.3 = type { i32, %struct.IRType1, i8, i8, i8 }
%struct.MRef = type { i32 }
%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 }
%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.4 }
%union.anon.4 = type { %struct.anon.5, [320 x i8] }
%struct.anon.5 = type { %struct.GCRef, i8, i8, i8, i8, %struct.MRef, %struct.GCRef, ptr, ptr, %struct.MRef, %struct.MRef, %struct.GCRef, %struct.GCRef, ptr, i32 }
%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 }
%struct.Node = type { %union.TValue, %union.TValue, %struct.MRef, %struct.MRef }
%struct.GCupval = type { %struct.GCRef, i8, i8, i8, i8, %union.anon.6, %struct.MRef, i32 }
%union.anon.6 = type { %union.TValue }
%struct.anon = type { %union.anon, i32 }
%union.anon = type { %struct.GCRef }
%struct.SnapShot = type { i16, i16, i8, i8, i8, i8 }
%struct.GCproto = type { %struct.GCRef, i8, i8, i8, i8, i32, %struct.GCRef, %struct.MRef, %struct.MRef, i32, i32, i32, i8, i8, i16, %struct.GCRef, i32, i32, %struct.MRef, %struct.MRef, %struct.MRef }
%struct.GCfuncL = type { %struct.GCRef, i8, i8, i8, i8, %struct.GCRef, %struct.GCRef, %struct.MRef, [1 x %struct.GCRef] }
%struct.anon.1 = type { i32, i32 }

@lj_bc_mode = external hidden constant [0 x i16], align 2

; Function Attrs: nounwind uwtable
declare hidden i32 @lj_record_objcmp(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #0

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @lj_ir_set_(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext) #2

declare hidden i32 @lj_opt_fold(ptr noundef) #3

; 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 hidden i32 @lj_record_constify(ptr noundef, ptr noundef) #0

declare hidden i32 @lj_ir_kgc(ptr noundef, ptr noundef, i32 noundef) #3

declare hidden i32 @lj_ir_knumint(ptr noundef, double noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @lj_record_stop(ptr noundef, i32 noundef, i32 noundef) #0

declare hidden void @lj_snap_add(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden void @lj_record_call(ptr noundef, i32 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @lj_record_tailcall(ptr noundef, i32 noundef, i64 noundef) #0

; Function Attrs: noreturn
declare hidden void @lj_trace_err(ptr noundef, i32 noundef) #4

; Function Attrs: nounwind uwtable
declare hidden void @lj_record_ret(ptr noundef, i32 noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @sload(ptr noundef, i32 noundef) #0

declare hidden void @lj_snap_purge(ptr noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @copyTV(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_cat(ptr noundef, i32 noundef, i32 noundef) #0

declare hidden i32 @lj_ir_kint(ptr noundef, i32 noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @settabV(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @setstrV(ptr noundef, ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @lj_record_idx(ptr noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
define hidden void @lj_record_ins(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca %struct.RecordIndex, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 72, ptr %4) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  %25 = load ptr, ptr %2, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.jit_State, ptr %25, i32 0, i32 32
  %27 = load i32, ptr %26, align 4, !tbaa !9
  %28 = icmp ne i32 %27, 0
  %29 = xor i1 %28, true
  %30 = xor i1 %29, true
  %31 = zext i1 %30 to i32
  %32 = sext i32 %31 to i64
  %33 = call i64 @llvm.expect.i64(i64 %32, i64 0)
  %34 = icmp ne i64 %33, 0
  br i1 %34, label %35, label %230

35:                                               ; preds = %1
  %36 = load ptr, ptr %2, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.jit_State, ptr %36, i32 0, i32 32
  %38 = load i32, ptr %37, align 4, !tbaa !9
  switch i32 %38, label %226 [
    i32 1, label %39
    i32 2, label %62
    i32 3, label %62
    i32 4, label %118
    i32 5, label %169
    i32 6, label %217
  ]

39:                                               ; preds = %35
  %40 = load ptr, ptr %2, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %40, i64 -800
  %42 = getelementptr inbounds %struct.GG_State, ptr %41, i32 0, i32 1
  %43 = getelementptr inbounds %struct.global_State, ptr %42, i32 0, i32 15
  %44 = load i64, ptr %43, align 8, !tbaa !20
  %45 = inttoptr i64 %44 to ptr
  store ptr %45, ptr %5, align 8, !tbaa !5
  %46 = load ptr, ptr %2, align 8, !tbaa !5
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = load ptr, ptr %2, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %48, i64 -800
  %50 = getelementptr inbounds %struct.GG_State, ptr %49, i32 0, i32 1
  %51 = getelementptr inbounds %struct.global_State, ptr %50, i32 0, i32 16
  %52 = getelementptr inbounds %struct.anon, ptr %51, i32 0, i32 1
  %53 = load i32, ptr %52, align 4, !tbaa !20
  %54 = icmp ult i32 %53, -2
  %55 = xor i1 %54, true
  %56 = zext i1 %55 to i32
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = load i32, ptr %57, align 4, !tbaa !21
  %59 = and i32 %58, 255
  %60 = and i32 %59, 1
  %61 = xor i32 %56, %60
  call void @rec_comp_fixup(ptr noundef %46, ptr noundef %47, i32 noundef %61)
  br label %62

62:                                               ; preds = %39, %35, %35
  %63 = load ptr, ptr %2, align 8, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %63, i64 -800
  %65 = getelementptr inbounds %struct.GG_State, ptr %64, i32 0, i32 1
  %66 = getelementptr inbounds %struct.global_State, ptr %65, i32 0, i32 16
  %67 = getelementptr inbounds %struct.anon, ptr %66, i32 0, i32 1
  %68 = load i32, ptr %67, align 4, !tbaa !20
  %69 = icmp ult i32 %68, -2
  br i1 %69, label %115, label %70

70:                                               ; preds = %62
  %71 = load ptr, ptr %2, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.jit_State, ptr %71, i32 0, i32 13
  %73 = getelementptr inbounds %struct.FoldState, ptr %72, i32 0, i32 0
  %74 = getelementptr inbounds %struct.anon.3, ptr %73, i32 0, i32 2
  %75 = load i8, ptr %74, align 1, !tbaa !20
  %76 = zext i8 %75 to i32
  %77 = xor i32 %76, 1
  %78 = trunc i32 %77 to i8
  store i8 %78, ptr %74, align 1, !tbaa !20
  %79 = load ptr, ptr %2, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.jit_State, ptr %79, i32 0, i32 32
  %81 = load i32, ptr %80, align 4, !tbaa !9
  %82 = icmp eq i32 %81, 3
  br i1 %82, label %83, label %114

83:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.jit_State, ptr %84, i32 0, i32 0
  %86 = getelementptr inbounds %struct.GCtrace, ptr %85, i32 0, i32 11
  %87 = load ptr, ptr %86, align 8, !tbaa !22
  %88 = load ptr, ptr %2, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.jit_State, ptr %88, i32 0, i32 0
  %90 = getelementptr inbounds %struct.GCtrace, ptr %89, i32 0, i32 9
  %91 = load i16, ptr %90, align 4, !tbaa !23
  %92 = zext i16 %91 to i32
  %93 = sub nsw i32 %92, 1
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds %struct.SnapShot, ptr %87, i64 %94
  store ptr %95, ptr %11, align 8, !tbaa !5
  %96 = load ptr, ptr %2, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.jit_State, ptr %96, i32 0, i32 0
  %98 = getelementptr inbounds %struct.GCtrace, ptr %97, i32 0, i32 12
  %99 = load ptr, ptr %98, align 8, !tbaa !24
  %100 = load ptr, ptr %11, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.SnapShot, ptr %100, i32 0, i32 0
  %102 = load i16, ptr %101, align 2, !tbaa !25
  %103 = zext i16 %102 to i32
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.SnapShot, ptr %104, i32 0, i32 4
  %106 = load i8, ptr %105, align 2, !tbaa !27
  %107 = zext i8 %106 to i32
  %108 = add nsw i32 %103, %107
  %109 = sub nsw i32 %108, 1
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds i32, ptr %99, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !21
  %113 = add i32 %112, -1
  store i32 %113, ptr %111, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  br label %114

114:                                              ; preds = %83, %70
  br label %115

115:                                              ; preds = %114, %62
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = call i32 @lj_opt_fold(ptr noundef %116)
  br label %118

118:                                              ; preds = %115, %35
  %119 = load ptr, ptr %2, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %119, i64 -800
  %121 = getelementptr inbounds %struct.GG_State, ptr %120, i32 0, i32 1
  %122 = getelementptr inbounds %struct.global_State, ptr %121, i32 0, i32 16
  %123 = getelementptr inbounds %struct.anon, ptr %122, i32 0, i32 1
  %124 = load i32, ptr %123, align 4, !tbaa !20
  %125 = icmp ult i32 %124, -2
  br i1 %125, label %168, label %126

126:                                              ; preds = %118
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %127 = load ptr, ptr %2, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.jit_State, ptr %127, i32 0, i32 1
  %129 = load ptr, ptr %128, align 8, !tbaa !28
  %130 = getelementptr inbounds %struct.lua_State, ptr %129, i32 0, i32 0
  %131 = getelementptr inbounds %struct.anon.5, ptr %130, i32 0, i32 7
  %132 = load ptr, ptr %131, align 8, !tbaa !20
  store ptr %132, ptr %13, align 8, !tbaa !5
  store i32 0, ptr %12, align 4, !tbaa !21
  br label %133

133:                                              ; preds = %164, %126
  %134 = load i32, ptr %12, align 4, !tbaa !21
  %135 = load ptr, ptr %2, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.jit_State, ptr %135, i32 0, i32 7
  %137 = load i32, ptr %136, align 4, !tbaa !29
  %138 = icmp ult i32 %134, %137
  br i1 %138, label %139, label %167

139:                                              ; preds = %133
  %140 = load ptr, ptr %2, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.jit_State, ptr %140, i32 0, i32 5
  %142 = load ptr, ptr %141, align 8, !tbaa !30
  %143 = load i32, ptr %12, align 4, !tbaa !21
  %144 = zext i32 %143 to i64
  %145 = getelementptr inbounds i32, ptr %142, i64 %144
  %146 = load i32, ptr %145, align 4, !tbaa !21
  %147 = icmp eq i32 %146, 33587197
  br i1 %147, label %148, label %163

148:                                              ; preds = %139
  %149 = load ptr, ptr %13, align 8, !tbaa !5
  %150 = load i32, ptr %12, align 4, !tbaa !21
  %151 = zext i32 %150 to i64
  %152 = getelementptr inbounds %union.TValue, ptr %149, i64 %151
  %153 = getelementptr inbounds %struct.anon, ptr %152, i32 0, i32 1
  %154 = load i32, ptr %153, align 4, !tbaa !20
  %155 = icmp eq i32 %154, -2
  br i1 %155, label %156, label %163

156:                                              ; preds = %148
  %157 = load ptr, ptr %2, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.jit_State, ptr %157, i32 0, i32 5
  %159 = load ptr, ptr %158, align 8, !tbaa !30
  %160 = load i32, ptr %12, align 4, !tbaa !21
  %161 = zext i32 %160 to i64
  %162 = getelementptr inbounds i32, ptr %159, i64 %161
  store i32 16809982, ptr %162, align 4, !tbaa !21
  br label %167

163:                                              ; preds = %148, %139
  br label %164

164:                                              ; preds = %163
  %165 = load i32, ptr %12, align 4, !tbaa !21
  %166 = add i32 %165, 1
  store i32 %166, ptr %12, align 4, !tbaa !21
  br label %133, !llvm.loop !31

167:                                              ; preds = %156, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  br label %168

168:                                              ; preds = %167, %118
  br label %227

169:                                              ; preds = %35
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %170 = load ptr, ptr %2, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.jit_State, ptr %170, i32 0, i32 1
  %172 = load ptr, ptr %171, align 8, !tbaa !28
  %173 = getelementptr inbounds %struct.lua_State, ptr %172, i32 0, i32 0
  %174 = getelementptr inbounds %struct.anon.5, ptr %173, i32 0, i32 7
  %175 = load ptr, ptr %174, align 8, !tbaa !20
  store ptr %175, ptr %15, align 8, !tbaa !5
  store i32 0, ptr %14, align 4, !tbaa !21
  br label %176

176:                                              ; preds = %213, %169
  %177 = load i32, ptr %14, align 4, !tbaa !21
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.jit_State, ptr %178, i32 0, i32 7
  %180 = load i32, ptr %179, align 4, !tbaa !29
  %181 = icmp ult i32 %177, %180
  br i1 %181, label %182, label %216

182:                                              ; preds = %176
  %183 = load ptr, ptr %2, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.jit_State, ptr %183, i32 0, i32 5
  %185 = load ptr, ptr %184, align 8, !tbaa !30
  %186 = load i32, ptr %14, align 4, !tbaa !21
  %187 = zext i32 %186 to i64
  %188 = getelementptr inbounds i32, ptr %185, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !21
  %190 = icmp eq i32 %189, 32767
  br i1 %190, label %191, label %212

191:                                              ; preds = %182
  %192 = load ptr, ptr %15, align 8, !tbaa !5
  %193 = load i32, ptr %14, align 4, !tbaa !21
  %194 = zext i32 %193 to i64
  %195 = getelementptr inbounds %union.TValue, ptr %192, i64 %194
  %196 = getelementptr inbounds %struct.anon, ptr %195, i32 0, i32 1
  %197 = load i32, ptr %196, align 4, !tbaa !20
  %198 = icmp eq i32 %197, -1
  br i1 %198, label %212, label %199

199:                                              ; preds = %191
  %200 = load ptr, ptr %2, align 8, !tbaa !5
  %201 = load ptr, ptr %15, align 8, !tbaa !5
  %202 = load i32, ptr %14, align 4, !tbaa !21
  %203 = zext i32 %202 to i64
  %204 = getelementptr inbounds %union.TValue, ptr %201, i64 %203
  %205 = call i32 @lj_record_constify(ptr noundef %200, ptr noundef %204)
  %206 = load ptr, ptr %2, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.jit_State, ptr %206, i32 0, i32 5
  %208 = load ptr, ptr %207, align 8, !tbaa !30
  %209 = load i32, ptr %14, align 4, !tbaa !21
  %210 = zext i32 %209 to i64
  %211 = getelementptr inbounds i32, ptr %208, i64 %210
  store i32 %205, ptr %211, align 4, !tbaa !21
  br label %212

212:                                              ; preds = %199, %191, %182
  br label %213

213:                                              ; preds = %212
  %214 = load i32, ptr %14, align 4, !tbaa !21
  %215 = add i32 %214, 1
  store i32 %215, ptr %14, align 4, !tbaa !21
  br label %176, !llvm.loop !33

216:                                              ; preds = %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %227

217:                                              ; preds = %35
  %218 = load ptr, ptr %2, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.jit_State, ptr %218, i32 0, i32 2
  %220 = load ptr, ptr %219, align 8, !tbaa !34
  %221 = load i32, ptr %220, align 4, !tbaa !21
  %222 = and i32 %221, 255
  %223 = icmp uge i32 %222, 97
  br i1 %223, label %224, label %225

224:                                              ; preds = %217
  store i32 1, ptr %16, align 4
  br label %1589

225:                                              ; preds = %217
  br label %227

226:                                              ; preds = %35
  br label %227

227:                                              ; preds = %226, %225, %216, %168
  %228 = load ptr, ptr %2, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.jit_State, ptr %228, i32 0, i32 32
  store i32 0, ptr %229, align 4, !tbaa !9
  br label %230

230:                                              ; preds = %227, %1
  %231 = load ptr, ptr %2, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.jit_State, ptr %231, i32 0, i32 10
  %233 = load i8, ptr %232, align 1, !tbaa !35
  %234 = icmp ne i8 %233, 0
  br i1 %234, label %235, label %242

235:                                              ; preds = %230
  %236 = load ptr, ptr %2, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.jit_State, ptr %236, i32 0, i32 10
  store i8 0, ptr %237, align 1, !tbaa !35
  %238 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_snap_purge(ptr noundef %238)
  %239 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_snap_add(ptr noundef %239)
  %240 = load ptr, ptr %2, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.jit_State, ptr %240, i32 0, i32 9
  store i8 1, ptr %241, align 4, !tbaa !36
  br label %242

242:                                              ; preds = %235, %230
  %243 = load ptr, ptr %2, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.jit_State, ptr %243, i32 0, i32 12
  %245 = load i8, ptr %244, align 1, !tbaa !37
  %246 = zext i8 %245 to i32
  %247 = icmp sgt i32 %246, 0
  %248 = xor i1 %247, true
  %249 = xor i1 %248, true
  %250 = zext i1 %249 to i32
  %251 = sext i32 %250 to i64
  %252 = call i64 @llvm.expect.i64(i64 %251, i64 0)
  %253 = icmp ne i64 %252, 0
  br i1 %253, label %254, label %259

254:                                              ; preds = %242
  %255 = load ptr, ptr %2, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.jit_State, ptr %255, i32 0, i32 12
  %257 = load i8, ptr %256, align 1, !tbaa !37
  %258 = add i8 %257, -1
  store i8 %258, ptr %256, align 1, !tbaa !37
  store i32 1, ptr %16, align 4
  br label %1589

259:                                              ; preds = %242
  %260 = load ptr, ptr %2, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.jit_State, ptr %260, i32 0, i32 2
  %262 = load ptr, ptr %261, align 8, !tbaa !34
  store ptr %262, ptr %5, align 8, !tbaa !5
  %263 = load ptr, ptr %2, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.jit_State, ptr %263, i32 0, i32 20
  %265 = load i32, ptr %264, align 4, !tbaa !38
  %266 = icmp eq i32 %265, 0
  br i1 %266, label %267, label %282

267:                                              ; preds = %259
  %268 = load ptr, ptr %5, align 8, !tbaa !5
  %269 = load ptr, ptr %2, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.jit_State, ptr %269, i32 0, i32 14
  %271 = load ptr, ptr %270, align 8, !tbaa !39
  %272 = ptrtoint ptr %268 to i64
  %273 = ptrtoint ptr %271 to i64
  %274 = sub i64 %272, %273
  %275 = trunc i64 %274 to i32
  %276 = load ptr, ptr %2, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.jit_State, ptr %276, i32 0, i32 15
  %278 = load i32, ptr %277, align 8, !tbaa !40
  %279 = icmp uge i32 %275, %278
  br i1 %279, label %280, label %282

280:                                              ; preds = %267
  %281 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_trace_err(ptr noundef %281, i32 noundef 8) #7
  unreachable

282:                                              ; preds = %267, %259
  %283 = load ptr, ptr %2, align 8, !tbaa !5
  %284 = load ptr, ptr %5, align 8, !tbaa !5
  call void @rec_profile_ins(ptr noundef %283, ptr noundef %284)
  %285 = load ptr, ptr %2, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.jit_State, ptr %285, i32 0, i32 1
  %287 = load ptr, ptr %286, align 8, !tbaa !28
  %288 = getelementptr inbounds %struct.lua_State, ptr %287, i32 0, i32 0
  %289 = getelementptr inbounds %struct.anon.5, ptr %288, i32 0, i32 7
  %290 = load ptr, ptr %289, align 8, !tbaa !20
  store ptr %290, ptr %3, align 8, !tbaa !5
  %291 = load ptr, ptr %5, align 8, !tbaa !5
  %292 = load i32, ptr %291, align 4, !tbaa !21
  store i32 %292, ptr %6, align 4, !tbaa !21
  %293 = load i32, ptr %6, align 4, !tbaa !21
  %294 = and i32 %293, 255
  store i32 %294, ptr %7, align 4, !tbaa !21
  %295 = load i32, ptr %6, align 4, !tbaa !21
  %296 = lshr i32 %295, 8
  %297 = and i32 %296, 255
  store i32 %297, ptr %8, align 4, !tbaa !21
  %298 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 8
  store i32 0, ptr %298, align 8, !tbaa !41
  %299 = load i32, ptr %7, align 4, !tbaa !21
  %300 = zext i32 %299 to i64
  %301 = getelementptr inbounds [0 x i16], ptr @lj_bc_mode, i64 0, i64 %300
  %302 = load i16, ptr %301, align 2, !tbaa !43
  %303 = zext i16 %302 to i32
  %304 = and i32 %303, 7
  switch i32 %304, label %337 [
    i32 3, label %305
  ]

305:                                              ; preds = %282
  %306 = load ptr, ptr %2, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.jit_State, ptr %306, i32 0, i32 1
  %308 = load ptr, ptr %307, align 8, !tbaa !28
  %309 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 2
  %310 = load ptr, ptr %3, align 8, !tbaa !5
  %311 = load i32, ptr %8, align 4, !tbaa !21
  %312 = zext i32 %311 to i64
  %313 = getelementptr inbounds %union.TValue, ptr %310, i64 %312
  call void @copyTV(ptr noundef %308, ptr noundef %309, ptr noundef %313)
  %314 = load ptr, ptr %2, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.jit_State, ptr %314, i32 0, i32 5
  %316 = load ptr, ptr %315, align 8, !tbaa !30
  %317 = load i32, ptr %8, align 4, !tbaa !21
  %318 = zext i32 %317 to i64
  %319 = getelementptr inbounds i32, ptr %316, i64 %318
  %320 = load i32, ptr %319, align 4, !tbaa !21
  %321 = icmp ne i32 %320, 0
  br i1 %321, label %322, label %330

322:                                              ; preds = %305
  %323 = load ptr, ptr %2, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.jit_State, ptr %323, i32 0, i32 5
  %325 = load ptr, ptr %324, align 8, !tbaa !30
  %326 = load i32, ptr %8, align 4, !tbaa !21
  %327 = zext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %325, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !21
  br label %334

330:                                              ; preds = %305
  %331 = load ptr, ptr %2, align 8, !tbaa !5
  %332 = load i32, ptr %8, align 4, !tbaa !21
  %333 = call i32 @sload(ptr noundef %331, i32 noundef %332)
  br label %334

334:                                              ; preds = %330, %322
  %335 = phi i32 [ %329, %322 ], [ %333, %330 ]
  store i32 %335, ptr %8, align 4, !tbaa !21
  %336 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 8
  store i32 %335, ptr %336, align 8, !tbaa !41
  br label %338

337:                                              ; preds = %282
  br label %338

338:                                              ; preds = %337, %334
  %339 = load i32, ptr %6, align 4, !tbaa !21
  %340 = lshr i32 %339, 24
  store i32 %340, ptr %9, align 4, !tbaa !21
  %341 = load i32, ptr %6, align 4, !tbaa !21
  %342 = lshr i32 %341, 16
  %343 = and i32 %342, 255
  store i32 %343, ptr %10, align 4, !tbaa !21
  %344 = load i32, ptr %7, align 4, !tbaa !21
  %345 = zext i32 %344 to i64
  %346 = getelementptr inbounds [0 x i16], ptr @lj_bc_mode, i64 0, i64 %345
  %347 = load i16, ptr %346, align 2, !tbaa !43
  %348 = zext i16 %347 to i32
  %349 = ashr i32 %348, 3
  %350 = and i32 %349, 15
  switch i32 %350, label %386 [
    i32 0, label %351
    i32 3, label %354
  ]

351:                                              ; preds = %338
  store i32 0, ptr %9, align 4, !tbaa !21
  %352 = load i32, ptr %6, align 4, !tbaa !21
  %353 = lshr i32 %352, 16
  store i32 %353, ptr %10, align 4, !tbaa !21
  br label %387

354:                                              ; preds = %338
  %355 = load ptr, ptr %2, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.jit_State, ptr %355, i32 0, i32 1
  %357 = load ptr, ptr %356, align 8, !tbaa !28
  %358 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 0
  %359 = load ptr, ptr %3, align 8, !tbaa !5
  %360 = load i32, ptr %9, align 4, !tbaa !21
  %361 = zext i32 %360 to i64
  %362 = getelementptr inbounds %union.TValue, ptr %359, i64 %361
  call void @copyTV(ptr noundef %357, ptr noundef %358, ptr noundef %362)
  %363 = load ptr, ptr %2, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.jit_State, ptr %363, i32 0, i32 5
  %365 = load ptr, ptr %364, align 8, !tbaa !30
  %366 = load i32, ptr %9, align 4, !tbaa !21
  %367 = zext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %365, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !21
  %370 = icmp ne i32 %369, 0
  br i1 %370, label %371, label %379

371:                                              ; preds = %354
  %372 = load ptr, ptr %2, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.jit_State, ptr %372, i32 0, i32 5
  %374 = load ptr, ptr %373, align 8, !tbaa !30
  %375 = load i32, ptr %9, align 4, !tbaa !21
  %376 = zext i32 %375 to i64
  %377 = getelementptr inbounds i32, ptr %374, i64 %376
  %378 = load i32, ptr %377, align 4, !tbaa !21
  br label %383

379:                                              ; preds = %354
  %380 = load ptr, ptr %2, align 8, !tbaa !5
  %381 = load i32, ptr %9, align 4, !tbaa !21
  %382 = call i32 @sload(ptr noundef %380, i32 noundef %381)
  br label %383

383:                                              ; preds = %379, %371
  %384 = phi i32 [ %378, %371 ], [ %382, %379 ]
  store i32 %384, ptr %9, align 4, !tbaa !21
  %385 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 6
  store i32 %384, ptr %385, align 8, !tbaa !44
  br label %387

386:                                              ; preds = %338
  br label %387

387:                                              ; preds = %386, %383, %351
  %388 = load i32, ptr %7, align 4, !tbaa !21
  %389 = zext i32 %388 to i64
  %390 = getelementptr inbounds [0 x i16], ptr @lj_bc_mode, i64 0, i64 %389
  %391 = load i16, ptr %390, align 2, !tbaa !43
  %392 = zext i16 %391 to i32
  %393 = ashr i32 %392, 7
  %394 = and i32 %393, 15
  switch i32 %394, label %488 [
    i32 3, label %395
    i32 8, label %427
    i32 9, label %440
    i32 10, label %462
  ]

395:                                              ; preds = %387
  %396 = load ptr, ptr %2, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.jit_State, ptr %396, i32 0, i32 1
  %398 = load ptr, ptr %397, align 8, !tbaa !28
  %399 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %400 = load ptr, ptr %3, align 8, !tbaa !5
  %401 = load i32, ptr %10, align 4, !tbaa !21
  %402 = zext i32 %401 to i64
  %403 = getelementptr inbounds %union.TValue, ptr %400, i64 %402
  call void @copyTV(ptr noundef %398, ptr noundef %399, ptr noundef %403)
  %404 = load ptr, ptr %2, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.jit_State, ptr %404, i32 0, i32 5
  %406 = load ptr, ptr %405, align 8, !tbaa !30
  %407 = load i32, ptr %10, align 4, !tbaa !21
  %408 = zext i32 %407 to i64
  %409 = getelementptr inbounds i32, ptr %406, i64 %408
  %410 = load i32, ptr %409, align 4, !tbaa !21
  %411 = icmp ne i32 %410, 0
  br i1 %411, label %412, label %420

412:                                              ; preds = %395
  %413 = load ptr, ptr %2, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.jit_State, ptr %413, i32 0, i32 5
  %415 = load ptr, ptr %414, align 8, !tbaa !30
  %416 = load i32, ptr %10, align 4, !tbaa !21
  %417 = zext i32 %416 to i64
  %418 = getelementptr inbounds i32, ptr %415, i64 %417
  %419 = load i32, ptr %418, align 4, !tbaa !21
  br label %424

420:                                              ; preds = %395
  %421 = load ptr, ptr %2, align 8, !tbaa !5
  %422 = load i32, ptr %10, align 4, !tbaa !21
  %423 = call i32 @sload(ptr noundef %421, i32 noundef %422)
  br label %424

424:                                              ; preds = %420, %412
  %425 = phi i32 [ %419, %412 ], [ %423, %420 ]
  store i32 %425, ptr %10, align 4, !tbaa !21
  %426 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 7
  store i32 %425, ptr %426, align 4, !tbaa !45
  br label %489

427:                                              ; preds = %387
  %428 = load i32, ptr %10, align 4, !tbaa !21
  %429 = xor i32 %428, -1
  %430 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %431 = getelementptr inbounds %struct.anon, ptr %430, i32 0, i32 1
  store i32 %429, ptr %431, align 4, !tbaa !20
  %432 = load i32, ptr %10, align 4, !tbaa !21
  %433 = add i32 0, %432
  %434 = sub i32 32767, %433
  %435 = load i32, ptr %10, align 4, !tbaa !21
  %436 = add i32 0, %435
  %437 = shl i32 %436, 24
  %438 = add i32 %434, %437
  store i32 %438, ptr %10, align 4, !tbaa !21
  %439 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 7
  store i32 %438, ptr %439, align 4, !tbaa !45
  br label %489

440:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %441 = load ptr, ptr %2, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.jit_State, ptr %441, i32 0, i32 4
  %443 = load ptr, ptr %442, align 8, !tbaa !46
  %444 = getelementptr inbounds %struct.GCproto, ptr %443, i32 0, i32 7
  %445 = getelementptr inbounds %struct.MRef, ptr %444, i32 0, i32 0
  %446 = load i32, ptr %445, align 4, !tbaa !47
  %447 = zext i32 %446 to i64
  %448 = inttoptr i64 %447 to ptr
  %449 = load i32, ptr %10, align 4, !tbaa !21
  %450 = zext i32 %449 to i64
  %451 = getelementptr inbounds %union.TValue, ptr %448, i64 %450
  store ptr %451, ptr %17, align 8, !tbaa !5
  %452 = load ptr, ptr %2, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.jit_State, ptr %452, i32 0, i32 1
  %454 = load ptr, ptr %453, align 8, !tbaa !28
  %455 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %456 = load ptr, ptr %17, align 8, !tbaa !5
  call void @copyTV(ptr noundef %454, ptr noundef %455, ptr noundef %456)
  %457 = load ptr, ptr %2, align 8, !tbaa !5
  %458 = load ptr, ptr %17, align 8, !tbaa !5
  %459 = load double, ptr %458, align 8, !tbaa !20
  %460 = call i32 @lj_ir_knumint(ptr noundef %457, double noundef %459)
  store i32 %460, ptr %10, align 4, !tbaa !21
  %461 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 7
  store i32 %460, ptr %461, align 4, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %489

462:                                              ; preds = %387
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %463 = load ptr, ptr %2, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.jit_State, ptr %463, i32 0, i32 4
  %465 = load ptr, ptr %464, align 8, !tbaa !46
  %466 = getelementptr inbounds %struct.GCproto, ptr %465, i32 0, i32 7
  %467 = getelementptr inbounds %struct.MRef, ptr %466, i32 0, i32 0
  %468 = load i32, ptr %467, align 4, !tbaa !47
  %469 = zext i32 %468 to i64
  %470 = inttoptr i64 %469 to ptr
  %471 = load i32, ptr %10, align 4, !tbaa !21
  %472 = zext i32 %471 to i64
  %473 = xor i64 %472, -1
  %474 = getelementptr inbounds %struct.GCRef, ptr %470, i64 %473
  %475 = getelementptr inbounds %struct.GCRef, ptr %474, i32 0, i32 0
  %476 = load i32, ptr %475, align 4, !tbaa !49
  %477 = zext i32 %476 to i64
  %478 = inttoptr i64 %477 to ptr
  store ptr %478, ptr %18, align 8, !tbaa !5
  %479 = load ptr, ptr %2, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.jit_State, ptr %479, i32 0, i32 1
  %481 = load ptr, ptr %480, align 8, !tbaa !28
  %482 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %483 = load ptr, ptr %18, align 8, !tbaa !5
  call void @setstrV(ptr noundef %481, ptr noundef %482, ptr noundef %483)
  %484 = load ptr, ptr %2, align 8, !tbaa !5
  %485 = load ptr, ptr %18, align 8, !tbaa !5
  %486 = call i32 @lj_ir_kgc(ptr noundef %484, ptr noundef %485, i32 noundef 4)
  store i32 %486, ptr %10, align 4, !tbaa !21
  %487 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 7
  store i32 %486, ptr %487, align 4, !tbaa !45
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  br label %489

488:                                              ; preds = %387
  br label %489

489:                                              ; preds = %488, %462, %440, %427, %424
  %490 = load i32, ptr %7, align 4, !tbaa !21
  switch i32 %490, label %1534 [
    i32 0, label %491
    i32 1, label %491
    i32 2, label %491
    i32 3, label %491
    i32 4, label %703
    i32 5, label %703
    i32 6, label %703
    i32 7, label %703
    i32 8, label %703
    i32 9, label %703
    i32 10, label %703
    i32 11, label %703
    i32 12, label %769
    i32 13, label %769
    i32 14, label %782
    i32 15, label %782
    i32 16, label %801
    i32 17, label %801
    i32 19, label %826
    i32 21, label %835
    i32 20, label %860
    i32 27, label %886
    i32 28, label %886
    i32 29, label %886
    i32 30, label %886
    i32 31, label %886
    i32 22, label %912
    i32 23, label %912
    i32 24, label %912
    i32 25, label %912
    i32 32, label %912
    i32 33, label %912
    i32 34, label %912
    i32 35, label %912
    i32 26, label %953
    i32 36, label %953
    i32 37, label %984
    i32 38, label %1016
    i32 18, label %1021
    i32 39, label %1036
    i32 42, label %1036
    i32 43, label %1036
    i32 41, label %1037
    i32 44, label %1043
    i32 40, label %1068
    i32 45, label %1087
    i32 46, label %1091
    i32 47, label %1091
    i32 48, label %1091
    i32 49, label %1091
    i32 54, label %1096
    i32 55, label %1096
    i32 58, label %1119
    i32 62, label %1119
    i32 56, label %1126
    i32 57, label %1126
    i32 60, label %1126
    i32 61, label %1126
    i32 59, label %1130
    i32 64, label %1130
    i32 63, label %1134
    i32 52, label %1157
    i32 53, label %1161
    i32 69, label %1184
    i32 65, label %1326
    i32 66, label %1347
    i32 67, label %1353
    i32 68, label %1374
    i32 71, label %1380
    i32 73, label %1386
    i32 74, label %1407
    i32 75, label %1407
    i32 76, label %1407
    i32 77, label %1414
    i32 78, label %1427
    i32 79, label %1442
    i32 82, label %1452
    i32 85, label %1459
    i32 81, label %1465
    i32 84, label %1487
    i32 87, label %1504
    i32 80, label %1510
    i32 83, label %1510
    i32 86, label %1510
    i32 90, label %1510
    i32 93, label %1510
    i32 88, label %1512
    i32 89, label %1523
    i32 91, label %1525
    i32 92, label %1528
    i32 94, label %1531
    i32 95, label %1532
    i32 96, label %1532
    i32 70, label %1540
    i32 72, label %1540
    i32 50, label %1540
    i32 51, label %1540
  ]

491:                                              ; preds = %489, %489, %489, %489
  %492 = load i32, ptr %8, align 4, !tbaa !21
  %493 = and i32 %492, 520093696
  %494 = icmp eq i32 %493, 167772160
  br i1 %494, label %499, label %495

495:                                              ; preds = %491
  %496 = load i32, ptr %10, align 4, !tbaa !21
  %497 = and i32 %496, 520093696
  %498 = icmp eq i32 %497, 167772160
  br i1 %498, label %499, label %507

499:                                              ; preds = %495, %491
  %500 = load ptr, ptr %2, align 8, !tbaa !5
  %501 = load i32, ptr %7, align 4, !tbaa !21
  %502 = load i32, ptr %7, align 4, !tbaa !21
  %503 = and i32 %502, 2
  %504 = icmp ne i32 %503, 0
  %505 = zext i1 %504 to i64
  %506 = select i1 %504, i32 7, i32 6
  call void @rec_mm_comp_cdata(ptr noundef %500, ptr noundef %4, i32 noundef %501, i32 noundef %506)
  br label %1545

507:                                              ; preds = %495
  %508 = load i32, ptr %8, align 4, !tbaa !21
  %509 = load i32, ptr %10, align 4, !tbaa !21
  %510 = or i32 %508, %509
  %511 = trunc i32 %510 to i16
  %512 = zext i16 %511 to i32
  %513 = icmp slt i32 %512, 32768
  br i1 %513, label %514, label %534

514:                                              ; preds = %507
  %515 = load i32, ptr %8, align 4, !tbaa !21
  %516 = lshr i32 %515, 24
  %517 = and i32 %516, 31
  %518 = sub i32 %517, 14
  %519 = icmp ule i32 %518, 5
  br i1 %519, label %524, label %520

520:                                              ; preds = %514
  %521 = load i32, ptr %8, align 4, !tbaa !21
  %522 = and i32 %521, 520093696
  %523 = icmp eq i32 %522, 67108864
  br i1 %523, label %524, label %534

524:                                              ; preds = %520, %514
  %525 = load i32, ptr %10, align 4, !tbaa !21
  %526 = lshr i32 %525, 24
  %527 = and i32 %526, 31
  %528 = sub i32 %527, 14
  %529 = icmp ule i32 %528, 5
  br i1 %529, label %702, label %530

530:                                              ; preds = %524
  %531 = load i32, ptr %10, align 4, !tbaa !21
  %532 = and i32 %531, 520093696
  %533 = icmp eq i32 %532, 67108864
  br i1 %533, label %702, label %534

534:                                              ; preds = %530, %520, %507
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %535 = load i32, ptr %8, align 4, !tbaa !21
  %536 = lshr i32 %535, 24
  %537 = and i32 %536, 31
  %538 = sub i32 %537, 15
  %539 = icmp ule i32 %538, 4
  br i1 %539, label %540, label %541

540:                                              ; preds = %534
  br label %545

541:                                              ; preds = %534
  %542 = load i32, ptr %8, align 4, !tbaa !21
  %543 = lshr i32 %542, 24
  %544 = and i32 %543, 31
  br label %545

545:                                              ; preds = %541, %540
  %546 = phi i32 [ 19, %540 ], [ %544, %541 ]
  store i32 %546, ptr %19, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %547 = load i32, ptr %10, align 4, !tbaa !21
  %548 = lshr i32 %547, 24
  %549 = and i32 %548, 31
  %550 = sub i32 %549, 15
  %551 = icmp ule i32 %550, 4
  br i1 %551, label %552, label %553

552:                                              ; preds = %545
  br label %557

553:                                              ; preds = %545
  %554 = load i32, ptr %10, align 4, !tbaa !21
  %555 = lshr i32 %554, 24
  %556 = and i32 %555, 31
  br label %557

557:                                              ; preds = %553, %552
  %558 = phi i32 [ 19, %552 ], [ %556, %553 ]
  store i32 %558, ptr %20, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  %559 = load i32, ptr %19, align 4, !tbaa !21
  %560 = load i32, ptr %20, align 4, !tbaa !21
  %561 = icmp ne i32 %559, %560
  br i1 %561, label %562, label %602

562:                                              ; preds = %557
  %563 = load i32, ptr %19, align 4, !tbaa !21
  %564 = icmp eq i32 %563, 19
  br i1 %564, label %565, label %574

565:                                              ; preds = %562
  %566 = load i32, ptr %20, align 4, !tbaa !21
  %567 = icmp eq i32 %566, 14
  br i1 %567, label %568, label %574

568:                                              ; preds = %565
  %569 = load ptr, ptr %2, align 8, !tbaa !5
  %570 = load i32, ptr %8, align 4, !tbaa !21
  %571 = trunc i32 %570 to i16
  call void @lj_ir_set_(ptr noundef %569, i16 noundef zeroext 23054, i16 noundef zeroext %571, i16 noundef zeroext 467)
  %572 = load ptr, ptr %2, align 8, !tbaa !5
  %573 = call i32 @lj_opt_fold(ptr noundef %572)
  store i32 %573, ptr %8, align 4, !tbaa !21
  store i32 14, ptr %19, align 4, !tbaa !21
  br label %601

574:                                              ; preds = %565, %562
  %575 = load i32, ptr %19, align 4, !tbaa !21
  %576 = icmp eq i32 %575, 14
  br i1 %576, label %577, label %586

577:                                              ; preds = %574
  %578 = load i32, ptr %20, align 4, !tbaa !21
  %579 = icmp eq i32 %578, 19
  br i1 %579, label %580, label %586

580:                                              ; preds = %577
  %581 = load ptr, ptr %2, align 8, !tbaa !5
  %582 = load i32, ptr %10, align 4, !tbaa !21
  %583 = trunc i32 %582 to i16
  call void @lj_ir_set_(ptr noundef %581, i16 noundef zeroext 23054, i16 noundef zeroext %583, i16 noundef zeroext 467)
  %584 = load ptr, ptr %2, align 8, !tbaa !5
  %585 = call i32 @lj_opt_fold(ptr noundef %584)
  store i32 %585, ptr %10, align 4, !tbaa !21
  br label %600

586:                                              ; preds = %577, %574
  %587 = load i32, ptr %19, align 4, !tbaa !21
  %588 = icmp eq i32 %587, 1
  br i1 %588, label %592, label %589

589:                                              ; preds = %586
  %590 = load i32, ptr %19, align 4, !tbaa !21
  %591 = icmp eq i32 %590, 2
  br i1 %591, label %592, label %598

592:                                              ; preds = %589, %586
  %593 = load i32, ptr %20, align 4, !tbaa !21
  %594 = icmp eq i32 %593, 1
  br i1 %594, label %599, label %595

595:                                              ; preds = %592
  %596 = load i32, ptr %20, align 4, !tbaa !21
  %597 = icmp eq i32 %596, 2
  br i1 %597, label %599, label %598

598:                                              ; preds = %595, %589
  store i32 12, ptr %16, align 4
  br label %699

599:                                              ; preds = %595, %592
  br label %600

600:                                              ; preds = %599, %580
  br label %601

601:                                              ; preds = %600, %568
  br label %602

602:                                              ; preds = %601, %557
  %603 = load ptr, ptr %2, align 8, !tbaa !5
  call void @rec_comp_prep(ptr noundef %603)
  %604 = load i32, ptr %7, align 4, !tbaa !21
  %605 = sub nsw i32 %604, 0
  %606 = add nsw i32 %605, 0
  store i32 %606, ptr %21, align 4, !tbaa !21
  %607 = load i32, ptr %19, align 4, !tbaa !21
  %608 = icmp eq i32 %607, 14
  br i1 %608, label %609, label %628

609:                                              ; preds = %602
  %610 = load i32, ptr %21, align 4, !tbaa !21
  %611 = and i32 %610, 1
  %612 = icmp ne i32 %611, 0
  br i1 %612, label %613, label %616

613:                                              ; preds = %609
  %614 = load i32, ptr %21, align 4, !tbaa !21
  %615 = xor i32 %614, 4
  store i32 %615, ptr %21, align 4, !tbaa !21
  br label %616

616:                                              ; preds = %613, %609
  %617 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 2
  %618 = call double @numberVnum(ptr noundef %617)
  %619 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %620 = call double @numberVnum(ptr noundef %619)
  %621 = load i32, ptr %21, align 4, !tbaa !21
  %622 = call i32 @lj_ir_numcmp(double noundef %618, double noundef %620, i32 noundef %621)
  %623 = icmp ne i32 %622, 0
  br i1 %623, label %627, label %624

624:                                              ; preds = %616
  %625 = load i32, ptr %21, align 4, !tbaa !21
  %626 = xor i32 %625, 5
  store i32 %626, ptr %21, align 4, !tbaa !21
  br label %627

627:                                              ; preds = %624, %616
  br label %677

628:                                              ; preds = %602
  %629 = load i32, ptr %19, align 4, !tbaa !21
  %630 = icmp eq i32 %629, 19
  br i1 %630, label %631, label %643

631:                                              ; preds = %628
  %632 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 2
  %633 = call double @numberVnum(ptr noundef %632)
  %634 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %635 = call double @numberVnum(ptr noundef %634)
  %636 = load i32, ptr %21, align 4, !tbaa !21
  %637 = call i32 @lj_ir_numcmp(double noundef %633, double noundef %635, i32 noundef %636)
  %638 = icmp ne i32 %637, 0
  br i1 %638, label %642, label %639

639:                                              ; preds = %631
  %640 = load i32, ptr %21, align 4, !tbaa !21
  %641 = xor i32 %640, 1
  store i32 %641, ptr %21, align 4, !tbaa !21
  br label %642

642:                                              ; preds = %639, %631
  br label %676

643:                                              ; preds = %628
  %644 = load i32, ptr %19, align 4, !tbaa !21
  %645 = icmp eq i32 %644, 4
  br i1 %645, label %646, label %672

646:                                              ; preds = %643
  %647 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 2
  %648 = getelementptr inbounds %struct.anon, ptr %647, i32 0, i32 0
  %649 = getelementptr inbounds %struct.GCRef, ptr %648, i32 0, i32 0
  %650 = load i32, ptr %649, align 8, !tbaa !20
  %651 = zext i32 %650 to i64
  %652 = inttoptr i64 %651 to ptr
  %653 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %654 = getelementptr inbounds %struct.anon, ptr %653, i32 0, i32 0
  %655 = getelementptr inbounds %struct.GCRef, ptr %654, i32 0, i32 0
  %656 = load i32, ptr %655, align 8, !tbaa !20
  %657 = zext i32 %656 to i64
  %658 = inttoptr i64 %657 to ptr
  %659 = load i32, ptr %21, align 4, !tbaa !21
  %660 = call i32 @lj_ir_strcmp(ptr noundef %652, ptr noundef %658, i32 noundef %659)
  %661 = icmp ne i32 %660, 0
  br i1 %661, label %665, label %662

662:                                              ; preds = %646
  %663 = load i32, ptr %21, align 4, !tbaa !21
  %664 = xor i32 %663, 1
  store i32 %664, ptr %21, align 4, !tbaa !21
  br label %665

665:                                              ; preds = %662, %646
  %666 = load ptr, ptr %2, align 8, !tbaa !5
  %667 = load i32, ptr %8, align 4, !tbaa !21
  %668 = load i32, ptr %10, align 4, !tbaa !21
  %669 = call i32 (ptr, i32, ...) @lj_ir_call(ptr noundef %666, i32 noundef 0, i32 noundef %667, i32 noundef %668)
  store i32 %669, ptr %8, align 4, !tbaa !21
  %670 = load ptr, ptr %2, align 8, !tbaa !5
  %671 = call i32 @lj_ir_kint(ptr noundef %670, i32 noundef 0)
  store i32 %671, ptr %10, align 4, !tbaa !21
  store i32 19, ptr %19, align 4, !tbaa !21
  br label %675

672:                                              ; preds = %643
  %673 = load ptr, ptr %2, align 8, !tbaa !5
  %674 = load i32, ptr %7, align 4, !tbaa !21
  call void @rec_mm_comp(ptr noundef %673, ptr noundef %4, i32 noundef %674)
  store i32 12, ptr %16, align 4
  br label %699

675:                                              ; preds = %665
  br label %676

676:                                              ; preds = %675, %642
  br label %677

677:                                              ; preds = %676, %627
  %678 = load ptr, ptr %2, align 8, !tbaa !5
  %679 = load i32, ptr %21, align 4, !tbaa !21
  %680 = shl i32 %679, 8
  %681 = load i32, ptr %19, align 4, !tbaa !21
  %682 = or i32 128, %681
  %683 = or i32 %680, %682
  %684 = trunc i32 %683 to i16
  %685 = load i32, ptr %8, align 4, !tbaa !21
  %686 = trunc i32 %685 to i16
  %687 = load i32, ptr %10, align 4, !tbaa !21
  %688 = trunc i32 %687 to i16
  call void @lj_ir_set_(ptr noundef %678, i16 noundef zeroext %684, i16 noundef zeroext %686, i16 noundef zeroext %688)
  %689 = load ptr, ptr %2, align 8, !tbaa !5
  %690 = call i32 @lj_opt_fold(ptr noundef %689)
  %691 = load ptr, ptr %2, align 8, !tbaa !5
  %692 = load ptr, ptr %2, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.jit_State, ptr %692, i32 0, i32 2
  %694 = load ptr, ptr %693, align 8, !tbaa !34
  %695 = load i32, ptr %7, align 4, !tbaa !21
  %696 = load i32, ptr %21, align 4, !tbaa !21
  %697 = xor i32 %695, %696
  %698 = and i32 %697, 1
  call void @rec_comp_fixup(ptr noundef %691, ptr noundef %694, i32 noundef %698)
  store i32 0, ptr %16, align 4
  br label %699

699:                                              ; preds = %677, %672, %598
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  %700 = load i32, ptr %16, align 4
  switch i32 %700, label %1592 [
    i32 0, label %701
    i32 12, label %1545
  ]

701:                                              ; preds = %699
  br label %702

702:                                              ; preds = %701, %530, %524
  br label %1545

703:                                              ; preds = %489, %489, %489, %489, %489, %489, %489, %489
  %704 = load i32, ptr %8, align 4, !tbaa !21
  %705 = and i32 %704, 520093696
  %706 = icmp eq i32 %705, 167772160
  br i1 %706, label %711, label %707

707:                                              ; preds = %703
  %708 = load i32, ptr %10, align 4, !tbaa !21
  %709 = and i32 %708, 520093696
  %710 = icmp eq i32 %709, 167772160
  br i1 %710, label %711, label %714

711:                                              ; preds = %707, %703
  %712 = load ptr, ptr %2, align 8, !tbaa !5
  %713 = load i32, ptr %7, align 4, !tbaa !21
  call void @rec_mm_comp_cdata(ptr noundef %712, ptr noundef %4, i32 noundef %713, i32 noundef 4)
  br label %1545

714:                                              ; preds = %707
  %715 = load i32, ptr %8, align 4, !tbaa !21
  %716 = load i32, ptr %10, align 4, !tbaa !21
  %717 = or i32 %715, %716
  %718 = trunc i32 %717 to i16
  %719 = zext i16 %718 to i32
  %720 = icmp slt i32 %719, 32768
  br i1 %720, label %721, label %729

721:                                              ; preds = %714
  %722 = load i32, ptr %8, align 4, !tbaa !21
  %723 = and i32 %722, 520093696
  %724 = icmp eq i32 %723, 184549376
  br i1 %724, label %729, label %725

725:                                              ; preds = %721
  %726 = load i32, ptr %8, align 4, !tbaa !21
  %727 = and i32 %726, 520093696
  %728 = icmp eq i32 %727, 201326592
  br i1 %728, label %729, label %768

729:                                              ; preds = %725, %721, %714
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  %730 = load ptr, ptr %2, align 8, !tbaa !5
  call void @rec_comp_prep(ptr noundef %730)
  %731 = load ptr, ptr %2, align 8, !tbaa !5
  %732 = load i32, ptr %8, align 4, !tbaa !21
  %733 = load i32, ptr %10, align 4, !tbaa !21
  %734 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 2
  %735 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %736 = call i32 @lj_record_objcmp(ptr noundef %731, i32 noundef %732, i32 noundef %733, ptr noundef %734, ptr noundef %735)
  store i32 %736, ptr %22, align 4, !tbaa !21
  %737 = load i32, ptr %22, align 4, !tbaa !21
  %738 = icmp eq i32 %737, 2
  br i1 %738, label %747, label %739

739:                                              ; preds = %729
  %740 = load i32, ptr %8, align 4, !tbaa !21
  %741 = and i32 %740, 520093696
  %742 = icmp eq i32 %741, 184549376
  br i1 %742, label %760, label %743

743:                                              ; preds = %739
  %744 = load i32, ptr %8, align 4, !tbaa !21
  %745 = and i32 %744, 520093696
  %746 = icmp eq i32 %745, 201326592
  br i1 %746, label %760, label %747

747:                                              ; preds = %743, %729
  %748 = load ptr, ptr %2, align 8, !tbaa !5
  %749 = load ptr, ptr %2, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.jit_State, ptr %749, i32 0, i32 2
  %751 = load ptr, ptr %750, align 8, !tbaa !34
  %752 = load i32, ptr %7, align 4, !tbaa !21
  %753 = and i32 %752, 1
  %754 = load i32, ptr %22, align 4, !tbaa !21
  %755 = icmp ne i32 %754, 0
  %756 = xor i1 %755, true
  %757 = zext i1 %756 to i32
  %758 = icmp eq i32 %753, %757
  %759 = zext i1 %758 to i32
  call void @rec_comp_fixup(ptr noundef %748, ptr noundef %751, i32 noundef %759)
  br label %767

760:                                              ; preds = %743, %739
  %761 = load i32, ptr %22, align 4, !tbaa !21
  %762 = icmp eq i32 %761, 1
  br i1 %762, label %763, label %766

763:                                              ; preds = %760
  %764 = load ptr, ptr %2, align 8, !tbaa !5
  %765 = load i32, ptr %7, align 4, !tbaa !21
  call void @rec_mm_equal(ptr noundef %764, ptr noundef %4, i32 noundef %765)
  br label %766

766:                                              ; preds = %763, %760
  br label %767

767:                                              ; preds = %766, %747
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  br label %768

768:                                              ; preds = %767, %725
  br label %1545

769:                                              ; preds = %489, %489
  %770 = load i32, ptr %7, align 4, !tbaa !21
  %771 = and i32 %770, 1
  %772 = load i32, ptr %10, align 4, !tbaa !21
  %773 = lshr i32 %772, 24
  %774 = and i32 %773, 31
  %775 = sub i32 %774, 0
  %776 = icmp ule i32 %775, 1
  %777 = xor i1 %776, true
  %778 = zext i1 %777 to i32
  %779 = icmp eq i32 %771, %778
  br i1 %779, label %780, label %781

780:                                              ; preds = %769
  store i32 0, ptr %10, align 4, !tbaa !21
  br label %781

781:                                              ; preds = %780, %769
  br label %782

782:                                              ; preds = %781, %489, %489
  %783 = load ptr, ptr %5, align 8, !tbaa !5
  %784 = getelementptr inbounds i32, ptr %783, i64 1
  %785 = load i32, ptr %784, align 4, !tbaa !21
  %786 = lshr i32 %785, 8
  %787 = and i32 %786, 255
  %788 = load ptr, ptr %2, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.jit_State, ptr %788, i32 0, i32 7
  %790 = load i32, ptr %789, align 4, !tbaa !29
  %791 = icmp ult i32 %787, %790
  br i1 %791, label %792, label %800

792:                                              ; preds = %782
  %793 = load ptr, ptr %5, align 8, !tbaa !5
  %794 = getelementptr inbounds i32, ptr %793, i64 1
  %795 = load i32, ptr %794, align 4, !tbaa !21
  %796 = lshr i32 %795, 8
  %797 = and i32 %796, 255
  %798 = load ptr, ptr %2, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.jit_State, ptr %798, i32 0, i32 7
  store i32 %797, ptr %799, align 4, !tbaa !29
  br label %800

800:                                              ; preds = %792, %782
  br label %1545

801:                                              ; preds = %489, %489
  %802 = load i32, ptr %10, align 4, !tbaa !21
  %803 = icmp eq i32 %802, 15
  br i1 %803, label %804, label %808

804:                                              ; preds = %801
  %805 = load ptr, ptr %2, align 8, !tbaa !5
  %806 = load i32, ptr %8, align 4, !tbaa !21
  %807 = call i32 @lj_ir_tonum(ptr noundef %805, i32 noundef %806)
  store i32 %807, ptr %8, align 4, !tbaa !21
  br label %816

808:                                              ; preds = %801
  %809 = load i32, ptr %10, align 4, !tbaa !21
  %810 = icmp eq i32 %809, 5
  br i1 %810, label %811, label %815

811:                                              ; preds = %808
  %812 = load ptr, ptr %2, align 8, !tbaa !5
  %813 = load i32, ptr %8, align 4, !tbaa !21
  %814 = call i32 @lj_ir_tostr(ptr noundef %812, i32 noundef %813)
  store i32 %814, ptr %8, align 4, !tbaa !21
  br label %815

815:                                              ; preds = %811, %808
  br label %816

816:                                              ; preds = %815, %804
  %817 = load i32, ptr %8, align 4, !tbaa !21
  %818 = load ptr, ptr %2, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.jit_State, ptr %818, i32 0, i32 5
  %820 = load ptr, ptr %819, align 8, !tbaa !30
  %821 = load i32, ptr %6, align 4, !tbaa !21
  %822 = lshr i32 %821, 8
  %823 = and i32 %822, 255
  %824 = zext i32 %823 to i64
  %825 = getelementptr inbounds i32, ptr %820, i64 %824
  store i32 %817, ptr %825, align 4, !tbaa !21
  br label %1545

826:                                              ; preds = %489
  %827 = load i32, ptr %10, align 4, !tbaa !21
  %828 = lshr i32 %827, 24
  %829 = and i32 %828, 31
  %830 = sub i32 %829, 0
  %831 = icmp ule i32 %830, 1
  %832 = xor i1 %831, true
  %833 = zext i1 %832 to i64
  %834 = select i1 %832, i32 16809982, i32 33587197
  store i32 %834, ptr %10, align 4, !tbaa !21
  br label %1545

835:                                              ; preds = %489
  %836 = load i32, ptr %10, align 4, !tbaa !21
  %837 = and i32 %836, 520093696
  %838 = icmp eq i32 %837, 67108864
  br i1 %838, label %839, label %845

839:                                              ; preds = %835
  %840 = load ptr, ptr %2, align 8, !tbaa !5
  %841 = load i32, ptr %10, align 4, !tbaa !21
  %842 = trunc i32 %841 to i16
  call void @lj_ir_set_(ptr noundef %840, i16 noundef zeroext 17683, i16 noundef zeroext %842, i16 noundef zeroext 0)
  %843 = load ptr, ptr %2, align 8, !tbaa !5
  %844 = call i32 @lj_opt_fold(ptr noundef %843)
  store i32 %844, ptr %10, align 4, !tbaa !21
  br label %859

845:                                              ; preds = %835
  %846 = load i32, ptr %10, align 4, !tbaa !21
  %847 = and i32 %846, 520093696
  %848 = icmp eq i32 %847, 184549376
  br i1 %848, label %849, label %853

849:                                              ; preds = %845
  %850 = load ptr, ptr %2, align 8, !tbaa !5
  %851 = load i32, ptr %10, align 4, !tbaa !21
  %852 = call i32 (ptr, i32, ...) @lj_ir_call(ptr noundef %850, i32 noundef 30, i32 noundef %851)
  store i32 %852, ptr %10, align 4, !tbaa !21
  br label %858

853:                                              ; preds = %845
  %854 = load ptr, ptr %2, align 8, !tbaa !5
  %855 = load i32, ptr %10, align 4, !tbaa !21
  %856 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %857 = call i32 @rec_mm_len(ptr noundef %854, i32 noundef %855, ptr noundef %856)
  store i32 %857, ptr %10, align 4, !tbaa !21
  br label %858

858:                                              ; preds = %853, %849
  br label %859

859:                                              ; preds = %858, %839
  br label %1545

860:                                              ; preds = %489
  %861 = load i32, ptr %10, align 4, !tbaa !21
  %862 = lshr i32 %861, 24
  %863 = and i32 %862, 31
  %864 = sub i32 %863, 14
  %865 = icmp ule i32 %864, 5
  br i1 %865, label %870, label %866

866:                                              ; preds = %860
  %867 = load i32, ptr %10, align 4, !tbaa !21
  %868 = and i32 %867, 520093696
  %869 = icmp eq i32 %868, 67108864
  br i1 %869, label %870, label %875

870:                                              ; preds = %866, %860
  %871 = load ptr, ptr %2, align 8, !tbaa !5
  %872 = load i32, ptr %10, align 4, !tbaa !21
  %873 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %874 = call i32 @lj_opt_narrow_unm(ptr noundef %871, i32 noundef %872, ptr noundef %873)
  store i32 %874, ptr %10, align 4, !tbaa !21
  br label %885

875:                                              ; preds = %866
  %876 = load i32, ptr %10, align 4, !tbaa !21
  %877 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 6
  store i32 %876, ptr %877, align 8, !tbaa !44
  %878 = load ptr, ptr %2, align 8, !tbaa !5
  %879 = getelementptr inbounds %struct.jit_State, ptr %878, i32 0, i32 1
  %880 = load ptr, ptr %879, align 8, !tbaa !28
  %881 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 0
  %882 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  call void @copyTV(ptr noundef %880, ptr noundef %881, ptr noundef %882)
  %883 = load ptr, ptr %2, align 8, !tbaa !5
  %884 = call i32 @rec_mm_arith(ptr noundef %883, ptr noundef %4, i32 noundef 16)
  store i32 %884, ptr %10, align 4, !tbaa !21
  br label %885

885:                                              ; preds = %875, %870
  br label %1545

886:                                              ; preds = %489, %489, %489, %489, %489
  %887 = load i32, ptr %10, align 4, !tbaa !21
  %888 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 6
  store i32 %887, ptr %888, align 8, !tbaa !44
  %889 = load i32, ptr %9, align 4, !tbaa !21
  store i32 %889, ptr %10, align 4, !tbaa !21
  %890 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 7
  store i32 %889, ptr %890, align 4, !tbaa !45
  %891 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 6
  %892 = load i32, ptr %891, align 8, !tbaa !44
  store i32 %892, ptr %9, align 4, !tbaa !21
  %893 = load ptr, ptr %2, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.jit_State, ptr %893, i32 0, i32 1
  %895 = load ptr, ptr %894, align 8, !tbaa !28
  %896 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 2
  %897 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 0
  call void @copyTV(ptr noundef %895, ptr noundef %896, ptr noundef %897)
  %898 = load ptr, ptr %2, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.jit_State, ptr %898, i32 0, i32 1
  %900 = load ptr, ptr %899, align 8, !tbaa !28
  %901 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 0
  %902 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  call void @copyTV(ptr noundef %900, ptr noundef %901, ptr noundef %902)
  %903 = load ptr, ptr %2, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.jit_State, ptr %903, i32 0, i32 1
  %905 = load ptr, ptr %904, align 8, !tbaa !28
  %906 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %907 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 2
  call void @copyTV(ptr noundef %905, ptr noundef %906, ptr noundef %907)
  %908 = load i32, ptr %7, align 4, !tbaa !21
  %909 = icmp eq i32 %908, 31
  br i1 %909, label %910, label %911

910:                                              ; preds = %886
  br label %954

911:                                              ; preds = %886
  br label %912

912:                                              ; preds = %911, %489, %489, %489, %489, %489, %489, %489, %489
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  %913 = load i32, ptr %7, align 4, !tbaa !21
  %914 = zext i32 %913 to i64
  %915 = getelementptr inbounds [0 x i16], ptr @lj_bc_mode, i64 0, i64 %914
  %916 = load i16, ptr %915, align 2, !tbaa !43
  %917 = zext i16 %916 to i32
  %918 = ashr i32 %917, 11
  store i32 %918, ptr %23, align 4, !tbaa !21
  %919 = load i32, ptr %9, align 4, !tbaa !21
  %920 = lshr i32 %919, 24
  %921 = and i32 %920, 31
  %922 = sub i32 %921, 14
  %923 = icmp ule i32 %922, 5
  br i1 %923, label %928, label %924

924:                                              ; preds = %912
  %925 = load i32, ptr %9, align 4, !tbaa !21
  %926 = and i32 %925, 520093696
  %927 = icmp eq i32 %926, 67108864
  br i1 %927, label %928, label %948

928:                                              ; preds = %924, %912
  %929 = load i32, ptr %10, align 4, !tbaa !21
  %930 = lshr i32 %929, 24
  %931 = and i32 %930, 31
  %932 = sub i32 %931, 14
  %933 = icmp ule i32 %932, 5
  br i1 %933, label %938, label %934

934:                                              ; preds = %928
  %935 = load i32, ptr %10, align 4, !tbaa !21
  %936 = and i32 %935, 520093696
  %937 = icmp eq i32 %936, 67108864
  br i1 %937, label %938, label %948

938:                                              ; preds = %934, %928
  %939 = load ptr, ptr %2, align 8, !tbaa !5
  %940 = load i32, ptr %9, align 4, !tbaa !21
  %941 = load i32, ptr %10, align 4, !tbaa !21
  %942 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 0
  %943 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %944 = load i32, ptr %23, align 4, !tbaa !21
  %945 = sub nsw i32 %944, 10
  %946 = add nsw i32 %945, 41
  %947 = call i32 @lj_opt_narrow_arith(ptr noundef %939, i32 noundef %940, i32 noundef %941, ptr noundef %942, ptr noundef %943, i32 noundef %946)
  store i32 %947, ptr %10, align 4, !tbaa !21
  br label %952

948:                                              ; preds = %934, %924
  %949 = load ptr, ptr %2, align 8, !tbaa !5
  %950 = load i32, ptr %23, align 4, !tbaa !21
  %951 = call i32 @rec_mm_arith(ptr noundef %949, ptr noundef %4, i32 noundef %950)
  store i32 %951, ptr %10, align 4, !tbaa !21
  br label %952

952:                                              ; preds = %948, %938
  store i32 12, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  br label %1545

953:                                              ; preds = %489, %489
  br label %954

954:                                              ; preds = %953, %910
  %955 = load i32, ptr %9, align 4, !tbaa !21
  %956 = lshr i32 %955, 24
  %957 = and i32 %956, 31
  %958 = sub i32 %957, 14
  %959 = icmp ule i32 %958, 5
  br i1 %959, label %964, label %960

960:                                              ; preds = %954
  %961 = load i32, ptr %9, align 4, !tbaa !21
  %962 = and i32 %961, 520093696
  %963 = icmp eq i32 %962, 67108864
  br i1 %963, label %964, label %980

964:                                              ; preds = %960, %954
  %965 = load i32, ptr %10, align 4, !tbaa !21
  %966 = lshr i32 %965, 24
  %967 = and i32 %966, 31
  %968 = sub i32 %967, 14
  %969 = icmp ule i32 %968, 5
  br i1 %969, label %974, label %970

970:                                              ; preds = %964
  %971 = load i32, ptr %10, align 4, !tbaa !21
  %972 = and i32 %971, 520093696
  %973 = icmp eq i32 %972, 67108864
  br i1 %973, label %974, label %980

974:                                              ; preds = %970, %964
  %975 = load ptr, ptr %2, align 8, !tbaa !5
  %976 = load i32, ptr %9, align 4, !tbaa !21
  %977 = load i32, ptr %10, align 4, !tbaa !21
  %978 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %979 = call i32 @lj_opt_narrow_mod(ptr noundef %975, i32 noundef %976, i32 noundef %977, ptr noundef %978)
  store i32 %979, ptr %10, align 4, !tbaa !21
  br label %983

980:                                              ; preds = %970, %960
  %981 = load ptr, ptr %2, align 8, !tbaa !5
  %982 = call i32 @rec_mm_arith(ptr noundef %981, ptr noundef %4, i32 noundef 14)
  store i32 %982, ptr %10, align 4, !tbaa !21
  br label %983

983:                                              ; preds = %980, %974
  br label %1545

984:                                              ; preds = %489
  %985 = load i32, ptr %9, align 4, !tbaa !21
  %986 = lshr i32 %985, 24
  %987 = and i32 %986, 31
  %988 = sub i32 %987, 14
  %989 = icmp ule i32 %988, 5
  br i1 %989, label %994, label %990

990:                                              ; preds = %984
  %991 = load i32, ptr %9, align 4, !tbaa !21
  %992 = and i32 %991, 520093696
  %993 = icmp eq i32 %992, 67108864
  br i1 %993, label %994, label %1012

994:                                              ; preds = %990, %984
  %995 = load i32, ptr %10, align 4, !tbaa !21
  %996 = lshr i32 %995, 24
  %997 = and i32 %996, 31
  %998 = sub i32 %997, 14
  %999 = icmp ule i32 %998, 5
  br i1 %999, label %1004, label %1000

1000:                                             ; preds = %994
  %1001 = load i32, ptr %10, align 4, !tbaa !21
  %1002 = and i32 %1001, 520093696
  %1003 = icmp eq i32 %1002, 67108864
  br i1 %1003, label %1004, label %1012

1004:                                             ; preds = %1000, %994
  %1005 = load ptr, ptr %2, align 8, !tbaa !5
  %1006 = load ptr, ptr %2, align 8, !tbaa !5
  %1007 = load i32, ptr %9, align 4, !tbaa !21
  %1008 = call i32 @lj_ir_tonum(ptr noundef %1006, i32 noundef %1007)
  %1009 = load i32, ptr %10, align 4, !tbaa !21
  %1010 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %1011 = call i32 @lj_opt_narrow_pow(ptr noundef %1005, i32 noundef %1008, i32 noundef %1009, ptr noundef %1010)
  store i32 %1011, ptr %10, align 4, !tbaa !21
  br label %1015

1012:                                             ; preds = %1000, %990
  %1013 = load ptr, ptr %2, align 8, !tbaa !5
  %1014 = call i32 @rec_mm_arith(ptr noundef %1013, ptr noundef %4, i32 noundef 15)
  store i32 %1014, ptr %10, align 4, !tbaa !21
  br label %1015

1015:                                             ; preds = %1012, %1004
  br label %1545

1016:                                             ; preds = %489
  %1017 = load ptr, ptr %2, align 8, !tbaa !5
  %1018 = load i32, ptr %9, align 4, !tbaa !21
  %1019 = load i32, ptr %10, align 4, !tbaa !21
  %1020 = call i32 @rec_cat(ptr noundef %1017, i32 noundef %1018, i32 noundef %1019)
  store i32 %1020, ptr %10, align 4, !tbaa !21
  br label %1545

1021:                                             ; preds = %489
  %1022 = load i32, ptr %8, align 4, !tbaa !21
  %1023 = load ptr, ptr %2, align 8, !tbaa !5
  %1024 = getelementptr inbounds %struct.jit_State, ptr %1023, i32 0, i32 7
  %1025 = load i32, ptr %1024, align 4, !tbaa !29
  %1026 = icmp ugt i32 %1022, %1025
  br i1 %1026, label %1027, label %1035

1027:                                             ; preds = %1021
  %1028 = load ptr, ptr %2, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.jit_State, ptr %1028, i32 0, i32 5
  %1030 = load ptr, ptr %1029, align 8, !tbaa !30
  %1031 = load i32, ptr %8, align 4, !tbaa !21
  %1032 = sub i32 %1031, 1
  %1033 = zext i32 %1032 to i64
  %1034 = getelementptr inbounds i32, ptr %1030, i64 %1033
  store i32 0, ptr %1034, align 4, !tbaa !21
  br label %1035

1035:                                             ; preds = %1027, %1021
  br label %1545

1036:                                             ; preds = %489, %489, %489
  br label %1545

1037:                                             ; preds = %489
  %1038 = load ptr, ptr %2, align 8, !tbaa !5
  %1039 = load i32, ptr %10, align 4, !tbaa !21
  %1040 = trunc i32 %1039 to i16
  %1041 = sext i16 %1040 to i32
  %1042 = call i32 @lj_ir_kint(ptr noundef %1038, i32 noundef %1041)
  store i32 %1042, ptr %10, align 4, !tbaa !21
  br label %1545

1043:                                             ; preds = %489
  br label %1044

1044:                                             ; preds = %1048, %1043
  %1045 = load i32, ptr %8, align 4, !tbaa !21
  %1046 = load i32, ptr %10, align 4, !tbaa !21
  %1047 = icmp ule i32 %1045, %1046
  br i1 %1047, label %1048, label %1056

1048:                                             ; preds = %1044
  %1049 = load ptr, ptr %2, align 8, !tbaa !5
  %1050 = getelementptr inbounds %struct.jit_State, ptr %1049, i32 0, i32 5
  %1051 = load ptr, ptr %1050, align 8, !tbaa !30
  %1052 = load i32, ptr %8, align 4, !tbaa !21
  %1053 = add i32 %1052, 1
  store i32 %1053, ptr %8, align 4, !tbaa !21
  %1054 = zext i32 %1052 to i64
  %1055 = getelementptr inbounds i32, ptr %1051, i64 %1054
  store i32 32767, ptr %1055, align 4, !tbaa !21
  br label %1044, !llvm.loop !50

1056:                                             ; preds = %1044
  %1057 = load i32, ptr %10, align 4, !tbaa !21
  %1058 = load ptr, ptr %2, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.jit_State, ptr %1058, i32 0, i32 7
  %1060 = load i32, ptr %1059, align 4, !tbaa !29
  %1061 = icmp uge i32 %1057, %1060
  br i1 %1061, label %1062, label %1067

1062:                                             ; preds = %1056
  %1063 = load i32, ptr %10, align 4, !tbaa !21
  %1064 = add i32 %1063, 1
  %1065 = load ptr, ptr %2, align 8, !tbaa !5
  %1066 = getelementptr inbounds %struct.jit_State, ptr %1065, i32 0, i32 7
  store i32 %1064, ptr %1066, align 4, !tbaa !29
  br label %1067

1067:                                             ; preds = %1062, %1056
  br label %1545

1068:                                             ; preds = %489
  %1069 = load ptr, ptr %2, align 8, !tbaa !5
  %1070 = load ptr, ptr %2, align 8, !tbaa !5
  %1071 = getelementptr inbounds %struct.jit_State, ptr %1070, i32 0, i32 4
  %1072 = load ptr, ptr %1071, align 8, !tbaa !46
  %1073 = getelementptr inbounds %struct.GCproto, ptr %1072, i32 0, i32 7
  %1074 = getelementptr inbounds %struct.MRef, ptr %1073, i32 0, i32 0
  %1075 = load i32, ptr %1074, align 4, !tbaa !47
  %1076 = zext i32 %1075 to i64
  %1077 = inttoptr i64 %1076 to ptr
  %1078 = load i32, ptr %10, align 4, !tbaa !21
  %1079 = zext i32 %1078 to i64
  %1080 = xor i64 %1079, -1
  %1081 = getelementptr inbounds %struct.GCRef, ptr %1077, i64 %1080
  %1082 = getelementptr inbounds %struct.GCRef, ptr %1081, i32 0, i32 0
  %1083 = load i32, ptr %1082, align 4, !tbaa !49
  %1084 = zext i32 %1083 to i64
  %1085 = inttoptr i64 %1084 to ptr
  %1086 = call i32 @lj_ir_kgc(ptr noundef %1069, ptr noundef %1085, i32 noundef 10)
  store i32 %1086, ptr %10, align 4, !tbaa !21
  br label %1545

1087:                                             ; preds = %489
  %1088 = load ptr, ptr %2, align 8, !tbaa !5
  %1089 = load i32, ptr %10, align 4, !tbaa !21
  %1090 = call i32 @rec_upvalue(ptr noundef %1088, i32 noundef %1089, i32 noundef 0)
  store i32 %1090, ptr %10, align 4, !tbaa !21
  br label %1545

1091:                                             ; preds = %489, %489, %489, %489
  %1092 = load ptr, ptr %2, align 8, !tbaa !5
  %1093 = load i32, ptr %8, align 4, !tbaa !21
  %1094 = load i32, ptr %10, align 4, !tbaa !21
  %1095 = call i32 @rec_upvalue(ptr noundef %1092, i32 noundef %1093, i32 noundef %1094)
  br label %1545

1096:                                             ; preds = %489, %489
  %1097 = load ptr, ptr %2, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.jit_State, ptr %1097, i32 0, i32 1
  %1099 = load ptr, ptr %1098, align 8, !tbaa !28
  %1100 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 0
  %1101 = load ptr, ptr %2, align 8, !tbaa !5
  %1102 = getelementptr inbounds %struct.jit_State, ptr %1101, i32 0, i32 3
  %1103 = load ptr, ptr %1102, align 8, !tbaa !51
  %1104 = getelementptr inbounds %struct.GCfuncL, ptr %1103, i32 0, i32 5
  %1105 = getelementptr inbounds %struct.GCRef, ptr %1104, i32 0, i32 0
  %1106 = load i32, ptr %1105, align 8, !tbaa !20
  %1107 = zext i32 %1106 to i64
  %1108 = inttoptr i64 %1107 to ptr
  call void @settabV(ptr noundef %1099, ptr noundef %1100, ptr noundef %1108)
  %1109 = load ptr, ptr %2, align 8, !tbaa !5
  %1110 = load ptr, ptr %2, align 8, !tbaa !5
  %1111 = call i32 @getcurrf(ptr noundef %1110)
  %1112 = trunc i32 %1111 to i16
  call void @lj_ir_set_(ptr noundef %1109, i16 noundef zeroext 17675, i16 noundef zeroext %1112, i16 noundef zeroext 1)
  %1113 = load ptr, ptr %2, align 8, !tbaa !5
  %1114 = call i32 @lj_opt_fold(ptr noundef %1113)
  %1115 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 6
  store i32 %1114, ptr %1115, align 8, !tbaa !44
  %1116 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 11
  store i32 100, ptr %1116, align 4, !tbaa !52
  %1117 = load ptr, ptr %2, align 8, !tbaa !5
  %1118 = call i32 @lj_record_idx(ptr noundef %1117, ptr noundef %4)
  store i32 %1118, ptr %10, align 4, !tbaa !21
  br label %1545

1119:                                             ; preds = %489, %489
  %1120 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %1121 = load i32, ptr %10, align 4, !tbaa !21
  call void @setintV(ptr noundef %1120, i32 noundef %1121)
  %1122 = load ptr, ptr %2, align 8, !tbaa !5
  %1123 = load i32, ptr %10, align 4, !tbaa !21
  %1124 = call i32 @lj_ir_kint(ptr noundef %1122, i32 noundef %1123)
  %1125 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 7
  store i32 %1124, ptr %1125, align 4, !tbaa !45
  br label %1126

1126:                                             ; preds = %1119, %489, %489, %489, %489
  %1127 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 11
  store i32 100, ptr %1127, align 4, !tbaa !52
  %1128 = load ptr, ptr %2, align 8, !tbaa !5
  %1129 = call i32 @lj_record_idx(ptr noundef %1128, ptr noundef %4)
  store i32 %1129, ptr %10, align 4, !tbaa !21
  br label %1545

1130:                                             ; preds = %489, %489
  %1131 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 11
  store i32 0, ptr %1131, align 4, !tbaa !52
  %1132 = load ptr, ptr %2, align 8, !tbaa !5
  %1133 = call i32 @lj_record_idx(ptr noundef %1132, ptr noundef %4)
  store i32 %1133, ptr %10, align 4, !tbaa !21
  br label %1545

1134:                                             ; preds = %489
  %1135 = load ptr, ptr %2, align 8, !tbaa !5
  %1136 = load i32, ptr %8, align 4, !tbaa !21
  %1137 = load ptr, ptr %2, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.jit_State, ptr %1137, i32 0, i32 1
  %1139 = load ptr, ptr %1138, align 8, !tbaa !28
  %1140 = getelementptr inbounds %struct.lua_State, ptr %1139, i32 0, i32 0
  %1141 = getelementptr inbounds %struct.anon.5, ptr %1140, i32 0, i32 8
  %1142 = load ptr, ptr %1141, align 8, !tbaa !20
  %1143 = load ptr, ptr %2, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.jit_State, ptr %1143, i32 0, i32 1
  %1145 = load ptr, ptr %1144, align 8, !tbaa !28
  %1146 = getelementptr inbounds %struct.lua_State, ptr %1145, i32 0, i32 0
  %1147 = getelementptr inbounds %struct.anon.5, ptr %1146, i32 0, i32 7
  %1148 = load ptr, ptr %1147, align 8, !tbaa !20
  %1149 = ptrtoint ptr %1142 to i64
  %1150 = ptrtoint ptr %1148 to i64
  %1151 = sub i64 %1149, %1150
  %1152 = sdiv exact i64 %1151, 8
  %1153 = trunc i64 %1152 to i32
  %1154 = getelementptr inbounds %struct.RecordIndex, ptr %4, i32 0, i32 1
  %1155 = getelementptr inbounds %struct.anon.1, ptr %1154, i32 0, i32 0
  %1156 = load i32, ptr %1155, align 8, !tbaa !20
  call void @rec_tsetm(ptr noundef %1135, i32 noundef %1136, i32 noundef %1153, i32 noundef %1156)
  br label %1545

1157:                                             ; preds = %489
  %1158 = load ptr, ptr %2, align 8, !tbaa !5
  %1159 = load i32, ptr %10, align 4, !tbaa !21
  %1160 = call i32 @rec_tnew(ptr noundef %1158, i32 noundef %1159)
  store i32 %1160, ptr %10, align 4, !tbaa !21
  br label %1545

1161:                                             ; preds = %489
  %1162 = load ptr, ptr %2, align 8, !tbaa !5
  %1163 = load ptr, ptr %2, align 8, !tbaa !5
  %1164 = load ptr, ptr %2, align 8, !tbaa !5
  %1165 = getelementptr inbounds %struct.jit_State, ptr %1164, i32 0, i32 4
  %1166 = load ptr, ptr %1165, align 8, !tbaa !46
  %1167 = getelementptr inbounds %struct.GCproto, ptr %1166, i32 0, i32 7
  %1168 = getelementptr inbounds %struct.MRef, ptr %1167, i32 0, i32 0
  %1169 = load i32, ptr %1168, align 4, !tbaa !47
  %1170 = zext i32 %1169 to i64
  %1171 = inttoptr i64 %1170 to ptr
  %1172 = load i32, ptr %10, align 4, !tbaa !21
  %1173 = zext i32 %1172 to i64
  %1174 = xor i64 %1173, -1
  %1175 = getelementptr inbounds %struct.GCRef, ptr %1171, i64 %1174
  %1176 = getelementptr inbounds %struct.GCRef, ptr %1175, i32 0, i32 0
  %1177 = load i32, ptr %1176, align 4, !tbaa !49
  %1178 = zext i32 %1177 to i64
  %1179 = inttoptr i64 %1178 to ptr
  %1180 = call i32 @lj_ir_kgc(ptr noundef %1163, ptr noundef %1179, i32 noundef 11)
  %1181 = trunc i32 %1180 to i16
  call void @lj_ir_set_(ptr noundef %1162, i16 noundef zeroext 20875, i16 noundef zeroext %1181, i16 noundef zeroext 0)
  %1182 = load ptr, ptr %2, align 8, !tbaa !5
  %1183 = call i32 @lj_opt_fold(ptr noundef %1182)
  store i32 %1183, ptr %10, align 4, !tbaa !21
  br label %1545

1184:                                             ; preds = %489
  %1185 = load ptr, ptr %2, align 8, !tbaa !5
  %1186 = getelementptr inbounds %struct.jit_State, ptr %1185, i32 0, i32 5
  %1187 = load ptr, ptr %1186, align 8, !tbaa !30
  %1188 = load i32, ptr %8, align 4, !tbaa !21
  %1189 = sub i32 %1188, 3
  %1190 = sub i32 %1189, 0
  %1191 = zext i32 %1190 to i64
  %1192 = getelementptr inbounds i32, ptr %1187, i64 %1191
  %1193 = load i32, ptr %1192, align 4, !tbaa !21
  %1194 = icmp ne i32 %1193, 0
  br i1 %1194, label %1195, label %1205

1195:                                             ; preds = %1184
  %1196 = load ptr, ptr %2, align 8, !tbaa !5
  %1197 = getelementptr inbounds %struct.jit_State, ptr %1196, i32 0, i32 5
  %1198 = load ptr, ptr %1197, align 8, !tbaa !30
  %1199 = load i32, ptr %8, align 4, !tbaa !21
  %1200 = sub i32 %1199, 3
  %1201 = sub i32 %1200, 0
  %1202 = zext i32 %1201 to i64
  %1203 = getelementptr inbounds i32, ptr %1198, i64 %1202
  %1204 = load i32, ptr %1203, align 4, !tbaa !21
  br label %1211

1205:                                             ; preds = %1184
  %1206 = load ptr, ptr %2, align 8, !tbaa !5
  %1207 = load i32, ptr %8, align 4, !tbaa !21
  %1208 = sub i32 %1207, 3
  %1209 = sub i32 %1208, 0
  %1210 = call i32 @sload(ptr noundef %1206, i32 noundef %1209)
  br label %1211

1211:                                             ; preds = %1205, %1195
  %1212 = phi i32 [ %1204, %1195 ], [ %1210, %1205 ]
  %1213 = load ptr, ptr %2, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.jit_State, ptr %1213, i32 0, i32 5
  %1215 = load ptr, ptr %1214, align 8, !tbaa !30
  %1216 = load i32, ptr %8, align 4, !tbaa !21
  %1217 = zext i32 %1216 to i64
  %1218 = getelementptr inbounds i32, ptr %1215, i64 %1217
  store i32 %1212, ptr %1218, align 4, !tbaa !21
  %1219 = load ptr, ptr %2, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.jit_State, ptr %1219, i32 0, i32 5
  %1221 = load ptr, ptr %1220, align 8, !tbaa !30
  %1222 = load i32, ptr %8, align 4, !tbaa !21
  %1223 = sub i32 %1222, 2
  %1224 = sub i32 %1223, 0
  %1225 = zext i32 %1224 to i64
  %1226 = getelementptr inbounds i32, ptr %1221, i64 %1225
  %1227 = load i32, ptr %1226, align 4, !tbaa !21
  %1228 = icmp ne i32 %1227, 0
  br i1 %1228, label %1229, label %1239

1229:                                             ; preds = %1211
  %1230 = load ptr, ptr %2, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.jit_State, ptr %1230, i32 0, i32 5
  %1232 = load ptr, ptr %1231, align 8, !tbaa !30
  %1233 = load i32, ptr %8, align 4, !tbaa !21
  %1234 = sub i32 %1233, 2
  %1235 = sub i32 %1234, 0
  %1236 = zext i32 %1235 to i64
  %1237 = getelementptr inbounds i32, ptr %1232, i64 %1236
  %1238 = load i32, ptr %1237, align 4, !tbaa !21
  br label %1245

1239:                                             ; preds = %1211
  %1240 = load ptr, ptr %2, align 8, !tbaa !5
  %1241 = load i32, ptr %8, align 4, !tbaa !21
  %1242 = sub i32 %1241, 2
  %1243 = sub i32 %1242, 0
  %1244 = call i32 @sload(ptr noundef %1240, i32 noundef %1243)
  br label %1245

1245:                                             ; preds = %1239, %1229
  %1246 = phi i32 [ %1238, %1229 ], [ %1244, %1239 ]
  %1247 = load ptr, ptr %2, align 8, !tbaa !5
  %1248 = getelementptr inbounds %struct.jit_State, ptr %1247, i32 0, i32 5
  %1249 = load ptr, ptr %1248, align 8, !tbaa !30
  %1250 = load i32, ptr %8, align 4, !tbaa !21
  %1251 = add i32 %1250, 1
  %1252 = zext i32 %1251 to i64
  %1253 = getelementptr inbounds i32, ptr %1249, i64 %1252
  store i32 %1246, ptr %1253, align 4, !tbaa !21
  %1254 = load ptr, ptr %2, align 8, !tbaa !5
  %1255 = getelementptr inbounds %struct.jit_State, ptr %1254, i32 0, i32 5
  %1256 = load ptr, ptr %1255, align 8, !tbaa !30
  %1257 = load i32, ptr %8, align 4, !tbaa !21
  %1258 = sub i32 %1257, 1
  %1259 = sub i32 %1258, 0
  %1260 = zext i32 %1259 to i64
  %1261 = getelementptr inbounds i32, ptr %1256, i64 %1260
  %1262 = load i32, ptr %1261, align 4, !tbaa !21
  %1263 = icmp ne i32 %1262, 0
  br i1 %1263, label %1264, label %1274

1264:                                             ; preds = %1245
  %1265 = load ptr, ptr %2, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.jit_State, ptr %1265, i32 0, i32 5
  %1267 = load ptr, ptr %1266, align 8, !tbaa !30
  %1268 = load i32, ptr %8, align 4, !tbaa !21
  %1269 = sub i32 %1268, 1
  %1270 = sub i32 %1269, 0
  %1271 = zext i32 %1270 to i64
  %1272 = getelementptr inbounds i32, ptr %1267, i64 %1271
  %1273 = load i32, ptr %1272, align 4, !tbaa !21
  br label %1280

1274:                                             ; preds = %1245
  %1275 = load ptr, ptr %2, align 8, !tbaa !5
  %1276 = load i32, ptr %8, align 4, !tbaa !21
  %1277 = sub i32 %1276, 1
  %1278 = sub i32 %1277, 0
  %1279 = call i32 @sload(ptr noundef %1275, i32 noundef %1278)
  br label %1280

1280:                                             ; preds = %1274, %1264
  %1281 = phi i32 [ %1273, %1264 ], [ %1279, %1274 ]
  %1282 = load ptr, ptr %2, align 8, !tbaa !5
  %1283 = getelementptr inbounds %struct.jit_State, ptr %1282, i32 0, i32 5
  %1284 = load ptr, ptr %1283, align 8, !tbaa !30
  %1285 = load i32, ptr %8, align 4, !tbaa !21
  %1286 = add i32 %1285, 2
  %1287 = zext i32 %1286 to i64
  %1288 = getelementptr inbounds i32, ptr %1284, i64 %1287
  store i32 %1281, ptr %1288, align 4, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  %1289 = load ptr, ptr %2, align 8, !tbaa !5
  %1290 = getelementptr inbounds %struct.jit_State, ptr %1289, i32 0, i32 1
  %1291 = load ptr, ptr %1290, align 8, !tbaa !28
  %1292 = getelementptr inbounds %struct.lua_State, ptr %1291, i32 0, i32 0
  %1293 = getelementptr inbounds %struct.anon.5, ptr %1292, i32 0, i32 7
  %1294 = load ptr, ptr %1293, align 8, !tbaa !20
  %1295 = load i32, ptr %8, align 4, !tbaa !21
  %1296 = zext i32 %1295 to i64
  %1297 = getelementptr inbounds %union.TValue, ptr %1294, i64 %1296
  store ptr %1297, ptr %24, align 8, !tbaa !5
  %1298 = load ptr, ptr %2, align 8, !tbaa !5
  %1299 = getelementptr inbounds %struct.jit_State, ptr %1298, i32 0, i32 1
  %1300 = load ptr, ptr %1299, align 8, !tbaa !28
  %1301 = load ptr, ptr %24, align 8, !tbaa !5
  %1302 = load ptr, ptr %24, align 8, !tbaa !5
  %1303 = getelementptr inbounds %union.TValue, ptr %1302, i64 -3
  %1304 = getelementptr inbounds %union.TValue, ptr %1303, i64 0
  call void @copyTV(ptr noundef %1300, ptr noundef %1301, ptr noundef %1304)
  %1305 = load ptr, ptr %2, align 8, !tbaa !5
  %1306 = getelementptr inbounds %struct.jit_State, ptr %1305, i32 0, i32 1
  %1307 = load ptr, ptr %1306, align 8, !tbaa !28
  %1308 = load ptr, ptr %24, align 8, !tbaa !5
  %1309 = getelementptr inbounds %union.TValue, ptr %1308, i64 1
  %1310 = load ptr, ptr %24, align 8, !tbaa !5
  %1311 = getelementptr inbounds %union.TValue, ptr %1310, i64 -2
  %1312 = getelementptr inbounds %union.TValue, ptr %1311, i64 0
  call void @copyTV(ptr noundef %1307, ptr noundef %1309, ptr noundef %1312)
  %1313 = load ptr, ptr %2, align 8, !tbaa !5
  %1314 = getelementptr inbounds %struct.jit_State, ptr %1313, i32 0, i32 1
  %1315 = load ptr, ptr %1314, align 8, !tbaa !28
  %1316 = load ptr, ptr %24, align 8, !tbaa !5
  %1317 = getelementptr inbounds %union.TValue, ptr %1316, i64 2
  %1318 = load ptr, ptr %24, align 8, !tbaa !5
  %1319 = getelementptr inbounds %union.TValue, ptr %1318, i64 -1
  %1320 = getelementptr inbounds %union.TValue, ptr %1319, i64 0
  call void @copyTV(ptr noundef %1315, ptr noundef %1317, ptr noundef %1320)
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  %1321 = load ptr, ptr %2, align 8, !tbaa !5
  %1322 = load i32, ptr %8, align 4, !tbaa !21
  %1323 = load i32, ptr %10, align 4, !tbaa !21
  %1324 = zext i32 %1323 to i64
  %1325 = sub nsw i64 %1324, 1
  call void @lj_record_call(ptr noundef %1321, i32 noundef %1322, i64 noundef %1325)
  br label %1545

1326:                                             ; preds = %489
  %1327 = load ptr, ptr %2, align 8, !tbaa !5
  %1328 = getelementptr inbounds %struct.jit_State, ptr %1327, i32 0, i32 1
  %1329 = load ptr, ptr %1328, align 8, !tbaa !28
  %1330 = getelementptr inbounds %struct.lua_State, ptr %1329, i32 0, i32 0
  %1331 = getelementptr inbounds %struct.anon.5, ptr %1330, i32 0, i32 8
  %1332 = load ptr, ptr %1331, align 8, !tbaa !20
  %1333 = load ptr, ptr %2, align 8, !tbaa !5
  %1334 = getelementptr inbounds %struct.jit_State, ptr %1333, i32 0, i32 1
  %1335 = load ptr, ptr %1334, align 8, !tbaa !28
  %1336 = getelementptr inbounds %struct.lua_State, ptr %1335, i32 0, i32 0
  %1337 = getelementptr inbounds %struct.anon.5, ptr %1336, i32 0, i32 7
  %1338 = load ptr, ptr %1337, align 8, !tbaa !20
  %1339 = ptrtoint ptr %1332 to i64
  %1340 = ptrtoint ptr %1338 to i64
  %1341 = sub i64 %1339, %1340
  %1342 = sdiv exact i64 %1341, 8
  %1343 = trunc i64 %1342 to i32
  %1344 = load i32, ptr %8, align 4, !tbaa !21
  %1345 = sub i32 %1343, %1344
  %1346 = sub i32 %1345, 0
  store i32 %1346, ptr %10, align 4, !tbaa !21
  br label %1347

1347:                                             ; preds = %1326, %489
  %1348 = load ptr, ptr %2, align 8, !tbaa !5
  %1349 = load i32, ptr %8, align 4, !tbaa !21
  %1350 = load i32, ptr %10, align 4, !tbaa !21
  %1351 = zext i32 %1350 to i64
  %1352 = sub nsw i64 %1351, 1
  call void @lj_record_call(ptr noundef %1348, i32 noundef %1349, i64 noundef %1352)
  br label %1545

1353:                                             ; preds = %489
  %1354 = load ptr, ptr %2, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.jit_State, ptr %1354, i32 0, i32 1
  %1356 = load ptr, ptr %1355, align 8, !tbaa !28
  %1357 = getelementptr inbounds %struct.lua_State, ptr %1356, i32 0, i32 0
  %1358 = getelementptr inbounds %struct.anon.5, ptr %1357, i32 0, i32 8
  %1359 = load ptr, ptr %1358, align 8, !tbaa !20
  %1360 = load ptr, ptr %2, align 8, !tbaa !5
  %1361 = getelementptr inbounds %struct.jit_State, ptr %1360, i32 0, i32 1
  %1362 = load ptr, ptr %1361, align 8, !tbaa !28
  %1363 = getelementptr inbounds %struct.lua_State, ptr %1362, i32 0, i32 0
  %1364 = getelementptr inbounds %struct.anon.5, ptr %1363, i32 0, i32 7
  %1365 = load ptr, ptr %1364, align 8, !tbaa !20
  %1366 = ptrtoint ptr %1359 to i64
  %1367 = ptrtoint ptr %1365 to i64
  %1368 = sub i64 %1366, %1367
  %1369 = sdiv exact i64 %1368, 8
  %1370 = trunc i64 %1369 to i32
  %1371 = load i32, ptr %8, align 4, !tbaa !21
  %1372 = sub i32 %1370, %1371
  %1373 = sub i32 %1372, 0
  store i32 %1373, ptr %10, align 4, !tbaa !21
  br label %1374

1374:                                             ; preds = %1353, %489
  %1375 = load ptr, ptr %2, align 8, !tbaa !5
  %1376 = load i32, ptr %8, align 4, !tbaa !21
  %1377 = load i32, ptr %10, align 4, !tbaa !21
  %1378 = zext i32 %1377 to i64
  %1379 = sub nsw i64 %1378, 1
  call void @lj_record_tailcall(ptr noundef %1375, i32 noundef %1376, i64 noundef %1379)
  br label %1545

1380:                                             ; preds = %489
  %1381 = load ptr, ptr %2, align 8, !tbaa !5
  %1382 = load i32, ptr %8, align 4, !tbaa !21
  %1383 = load i32, ptr %9, align 4, !tbaa !21
  %1384 = zext i32 %1383 to i64
  %1385 = sub nsw i64 %1384, 1
  call void @rec_varg(ptr noundef %1381, i32 noundef %1382, i64 noundef %1385)
  br label %1545

1386:                                             ; preds = %489
  %1387 = load ptr, ptr %2, align 8, !tbaa !5
  %1388 = getelementptr inbounds %struct.jit_State, ptr %1387, i32 0, i32 1
  %1389 = load ptr, ptr %1388, align 8, !tbaa !28
  %1390 = getelementptr inbounds %struct.lua_State, ptr %1389, i32 0, i32 0
  %1391 = getelementptr inbounds %struct.anon.5, ptr %1390, i32 0, i32 8
  %1392 = load ptr, ptr %1391, align 8, !tbaa !20
  %1393 = load ptr, ptr %2, align 8, !tbaa !5
  %1394 = getelementptr inbounds %struct.jit_State, ptr %1393, i32 0, i32 1
  %1395 = load ptr, ptr %1394, align 8, !tbaa !28
  %1396 = getelementptr inbounds %struct.lua_State, ptr %1395, i32 0, i32 0
  %1397 = getelementptr inbounds %struct.anon.5, ptr %1396, i32 0, i32 7
  %1398 = load ptr, ptr %1397, align 8, !tbaa !20
  %1399 = ptrtoint ptr %1392 to i64
  %1400 = ptrtoint ptr %1398 to i64
  %1401 = sub i64 %1399, %1400
  %1402 = sdiv exact i64 %1401, 8
  %1403 = trunc i64 %1402 to i32
  %1404 = load i32, ptr %8, align 4, !tbaa !21
  %1405 = sub i32 %1403, %1404
  %1406 = add i32 %1405, 1
  store i32 %1406, ptr %10, align 4, !tbaa !21
  br label %1407

1407:                                             ; preds = %1386, %489, %489, %489
  %1408 = load ptr, ptr %2, align 8, !tbaa !5
  call void @rec_profile_ret(ptr noundef %1408)
  %1409 = load ptr, ptr %2, align 8, !tbaa !5
  %1410 = load i32, ptr %8, align 4, !tbaa !21
  %1411 = load i32, ptr %10, align 4, !tbaa !21
  %1412 = zext i32 %1411 to i64
  %1413 = sub nsw i64 %1412, 1
  call void @lj_record_ret(ptr noundef %1409, i32 noundef %1410, i64 noundef %1413)
  br label %1545

1414:                                             ; preds = %489
  %1415 = load ptr, ptr %2, align 8, !tbaa !5
  %1416 = load ptr, ptr %5, align 8, !tbaa !5
  %1417 = call i32 @rec_for(ptr noundef %1415, ptr noundef %1416, i32 noundef 0)
  %1418 = icmp ne i32 %1417, 0
  br i1 %1418, label %1419, label %1426

1419:                                             ; preds = %1414
  %1420 = load ptr, ptr %2, align 8, !tbaa !5
  %1421 = getelementptr inbounds %struct.jit_State, ptr %1420, i32 0, i32 0
  %1422 = getelementptr inbounds %struct.GCtrace, ptr %1421, i32 0, i32 5
  %1423 = load i32, ptr %1422, align 8, !tbaa !53
  %1424 = load ptr, ptr %2, align 8, !tbaa !5
  %1425 = getelementptr inbounds %struct.jit_State, ptr %1424, i32 0, i32 27
  store i32 %1423, ptr %1425, align 8, !tbaa !54
  br label %1426

1426:                                             ; preds = %1419, %1414
  br label %1545

1427:                                             ; preds = %489
  %1428 = load ptr, ptr %2, align 8, !tbaa !5
  %1429 = load ptr, ptr %5, align 8, !tbaa !5
  %1430 = call i32 @rec_for(ptr noundef %1428, ptr noundef %1429, i32 noundef 0)
  %1431 = icmp ne i32 %1430, 0
  br i1 %1431, label %1432, label %1441

1432:                                             ; preds = %1427
  %1433 = load ptr, ptr %2, align 8, !tbaa !5
  %1434 = load ptr, ptr %5, align 8, !tbaa !5
  %1435 = load i32, ptr %10, align 4, !tbaa !21
  %1436 = zext i32 %1435 to i64
  %1437 = sub nsw i64 %1436, 32768
  %1438 = getelementptr inbounds i32, ptr %1434, i64 %1437
  %1439 = load i32, ptr %1438, align 4, !tbaa !21
  %1440 = lshr i32 %1439, 16
  call void @lj_record_stop(ptr noundef %1433, i32 noundef 1, i32 noundef %1440)
  br label %1441

1441:                                             ; preds = %1432, %1427
  br label %1545

1442:                                             ; preds = %489
  %1443 = load ptr, ptr %2, align 8, !tbaa !5
  %1444 = load ptr, ptr %5, align 8, !tbaa !5
  %1445 = load ptr, ptr %2, align 8, !tbaa !5
  %1446 = load ptr, ptr %5, align 8, !tbaa !5
  %1447 = load i32, ptr %10, align 4, !tbaa !21
  %1448 = zext i32 %1447 to i64
  %1449 = sub nsw i64 %1448, 32768
  %1450 = getelementptr inbounds i32, ptr %1446, i64 %1449
  %1451 = call i32 @rec_for(ptr noundef %1445, ptr noundef %1450, i32 noundef 1)
  call void @rec_loop_interp(ptr noundef %1443, ptr noundef %1444, i32 noundef %1451)
  br label %1545

1452:                                             ; preds = %489
  %1453 = load ptr, ptr %2, align 8, !tbaa !5
  %1454 = load ptr, ptr %5, align 8, !tbaa !5
  %1455 = load ptr, ptr %2, align 8, !tbaa !5
  %1456 = load ptr, ptr %5, align 8, !tbaa !5
  %1457 = load i32, ptr %1456, align 4, !tbaa !21
  %1458 = call i32 @rec_iterl(ptr noundef %1455, i32 noundef %1457)
  call void @rec_loop_interp(ptr noundef %1453, ptr noundef %1454, i32 noundef %1458)
  br label %1545

1459:                                             ; preds = %489
  %1460 = load ptr, ptr %2, align 8, !tbaa !5
  %1461 = load ptr, ptr %5, align 8, !tbaa !5
  %1462 = load ptr, ptr %2, align 8, !tbaa !5
  %1463 = load i32, ptr %8, align 4, !tbaa !21
  %1464 = call i32 @rec_loop(ptr noundef %1462, i32 noundef %1463)
  call void @rec_loop_interp(ptr noundef %1460, ptr noundef %1461, i32 noundef %1464)
  br label %1545

1465:                                             ; preds = %489
  %1466 = load ptr, ptr %2, align 8, !tbaa !5
  %1467 = load i32, ptr %10, align 4, !tbaa !21
  %1468 = load ptr, ptr %2, align 8, !tbaa !5
  %1469 = load ptr, ptr %5, align 8, !tbaa !5
  %1470 = load ptr, ptr %2, align 8, !tbaa !5
  %1471 = getelementptr inbounds %struct.jit_State, ptr %1470, i32 0, i32 34
  %1472 = load ptr, ptr %1471, align 8, !tbaa !55
  %1473 = load i32, ptr %10, align 4, !tbaa !21
  %1474 = zext i32 %1473 to i64
  %1475 = getelementptr inbounds %struct.GCRef, ptr %1472, i64 %1474
  %1476 = getelementptr inbounds %struct.GCRef, ptr %1475, i32 0, i32 0
  %1477 = load i32, ptr %1476, align 4, !tbaa !49
  %1478 = zext i32 %1477 to i64
  %1479 = inttoptr i64 %1478 to ptr
  %1480 = getelementptr inbounds %struct.GCtrace, ptr %1479, i32 0, i32 15
  %1481 = load i32, ptr %1480, align 8, !tbaa !56
  %1482 = lshr i32 %1481, 16
  %1483 = zext i32 %1482 to i64
  %1484 = sub nsw i64 %1483, 32768
  %1485 = getelementptr inbounds i32, ptr %1469, i64 %1484
  %1486 = call i32 @rec_for(ptr noundef %1468, ptr noundef %1485, i32 noundef 1)
  call void @rec_loop_jit(ptr noundef %1466, i32 noundef %1467, i32 noundef %1486)
  br label %1545

1487:                                             ; preds = %489
  %1488 = load ptr, ptr %2, align 8, !tbaa !5
  %1489 = load i32, ptr %10, align 4, !tbaa !21
  %1490 = load ptr, ptr %2, align 8, !tbaa !5
  %1491 = load ptr, ptr %2, align 8, !tbaa !5
  %1492 = getelementptr inbounds %struct.jit_State, ptr %1491, i32 0, i32 34
  %1493 = load ptr, ptr %1492, align 8, !tbaa !55
  %1494 = load i32, ptr %10, align 4, !tbaa !21
  %1495 = zext i32 %1494 to i64
  %1496 = getelementptr inbounds %struct.GCRef, ptr %1493, i64 %1495
  %1497 = getelementptr inbounds %struct.GCRef, ptr %1496, i32 0, i32 0
  %1498 = load i32, ptr %1497, align 4, !tbaa !49
  %1499 = zext i32 %1498 to i64
  %1500 = inttoptr i64 %1499 to ptr
  %1501 = getelementptr inbounds %struct.GCtrace, ptr %1500, i32 0, i32 15
  %1502 = load i32, ptr %1501, align 8, !tbaa !56
  %1503 = call i32 @rec_iterl(ptr noundef %1490, i32 noundef %1502)
  call void @rec_loop_jit(ptr noundef %1488, i32 noundef %1489, i32 noundef %1503)
  br label %1545

1504:                                             ; preds = %489
  %1505 = load ptr, ptr %2, align 8, !tbaa !5
  %1506 = load i32, ptr %10, align 4, !tbaa !21
  %1507 = load ptr, ptr %2, align 8, !tbaa !5
  %1508 = load i32, ptr %8, align 4, !tbaa !21
  %1509 = call i32 @rec_loop(ptr noundef %1507, i32 noundef %1508)
  call void @rec_loop_jit(ptr noundef %1505, i32 noundef %1506, i32 noundef %1509)
  br label %1545

1510:                                             ; preds = %489, %489, %489, %489, %489
  %1511 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_trace_err(ptr noundef %1511, i32 noundef 5) #7
  unreachable

1512:                                             ; preds = %489
  %1513 = load i32, ptr %8, align 4, !tbaa !21
  %1514 = load ptr, ptr %2, align 8, !tbaa !5
  %1515 = getelementptr inbounds %struct.jit_State, ptr %1514, i32 0, i32 7
  %1516 = load i32, ptr %1515, align 4, !tbaa !29
  %1517 = icmp ult i32 %1513, %1516
  br i1 %1517, label %1518, label %1522

1518:                                             ; preds = %1512
  %1519 = load i32, ptr %8, align 4, !tbaa !21
  %1520 = load ptr, ptr %2, align 8, !tbaa !5
  %1521 = getelementptr inbounds %struct.jit_State, ptr %1520, i32 0, i32 7
  store i32 %1519, ptr %1521, align 4, !tbaa !29
  br label %1522

1522:                                             ; preds = %1518, %1512
  br label %1545

1523:                                             ; preds = %489
  %1524 = load ptr, ptr %2, align 8, !tbaa !5
  call void @rec_func_lua(ptr noundef %1524)
  br label %1545

1525:                                             ; preds = %489
  %1526 = load ptr, ptr %2, align 8, !tbaa !5
  %1527 = load i32, ptr %10, align 4, !tbaa !21
  call void @rec_func_jit(ptr noundef %1526, i32 noundef %1527)
  br label %1545

1528:                                             ; preds = %489
  %1529 = load ptr, ptr %2, align 8, !tbaa !5
  call void @rec_func_vararg(ptr noundef %1529)
  %1530 = load ptr, ptr %2, align 8, !tbaa !5
  call void @rec_func_lua(ptr noundef %1530)
  br label %1545

1531:                                             ; preds = %489
  br label %1545

1532:                                             ; preds = %489, %489
  %1533 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_ffrecord_func(ptr noundef %1533)
  br label %1545

1534:                                             ; preds = %489
  %1535 = load i32, ptr %7, align 4, !tbaa !21
  %1536 = icmp uge i32 %1535, 97
  br i1 %1536, label %1537, label %1539

1537:                                             ; preds = %1534
  %1538 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_ffrecord_func(ptr noundef %1538)
  br label %1545

1539:                                             ; preds = %1534
  br label %1540

1540:                                             ; preds = %1539, %489, %489, %489, %489
  %1541 = load ptr, ptr %2, align 8, !tbaa !5
  %1542 = getelementptr inbounds %struct.jit_State, ptr %1541, i32 0, i32 59
  %1543 = load i32, ptr %7, align 4, !tbaa !21
  call void @setintV(ptr noundef %1542, i32 noundef %1543)
  %1544 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_trace_err_info(ptr noundef %1544, i32 noundef 7) #7
  unreachable

1545:                                             ; preds = %1537, %1532, %1531, %1528, %1525, %1523, %1522, %1504, %1487, %1465, %1459, %1452, %1442, %1441, %1426, %1407, %1380, %1374, %1347, %1280, %1161, %1157, %1134, %1130, %1126, %1096, %1091, %1087, %1068, %1067, %1037, %1036, %1035, %1016, %1015, %983, %952, %885, %859, %826, %816, %800, %768, %711, %702, %699, %499
  %1546 = load i32, ptr %7, align 4, !tbaa !21
  %1547 = zext i32 %1546 to i64
  %1548 = getelementptr inbounds [0 x i16], ptr @lj_bc_mode, i64 0, i64 %1547
  %1549 = load i16, ptr %1548, align 2, !tbaa !43
  %1550 = zext i16 %1549 to i32
  %1551 = and i32 %1550, 7
  %1552 = icmp eq i32 %1551, 1
  br i1 %1552, label %1553, label %1575

1553:                                             ; preds = %1545
  %1554 = load i32, ptr %10, align 4, !tbaa !21
  %1555 = icmp ne i32 %1554, 0
  br i1 %1555, label %1556, label %1575

1556:                                             ; preds = %1553
  %1557 = load i32, ptr %10, align 4, !tbaa !21
  %1558 = load ptr, ptr %2, align 8, !tbaa !5
  %1559 = getelementptr inbounds %struct.jit_State, ptr %1558, i32 0, i32 5
  %1560 = load ptr, ptr %1559, align 8, !tbaa !30
  %1561 = load i32, ptr %8, align 4, !tbaa !21
  %1562 = zext i32 %1561 to i64
  %1563 = getelementptr inbounds i32, ptr %1560, i64 %1562
  store i32 %1557, ptr %1563, align 4, !tbaa !21
  %1564 = load i32, ptr %8, align 4, !tbaa !21
  %1565 = load ptr, ptr %2, align 8, !tbaa !5
  %1566 = getelementptr inbounds %struct.jit_State, ptr %1565, i32 0, i32 7
  %1567 = load i32, ptr %1566, align 4, !tbaa !29
  %1568 = icmp uge i32 %1564, %1567
  br i1 %1568, label %1569, label %1574

1569:                                             ; preds = %1556
  %1570 = load i32, ptr %8, align 4, !tbaa !21
  %1571 = add i32 %1570, 1
  %1572 = load ptr, ptr %2, align 8, !tbaa !5
  %1573 = getelementptr inbounds %struct.jit_State, ptr %1572, i32 0, i32 7
  store i32 %1571, ptr %1573, align 4, !tbaa !29
  br label %1574

1574:                                             ; preds = %1569, %1556
  br label %1575

1575:                                             ; preds = %1574, %1553, %1545
  %1576 = load ptr, ptr %2, align 8, !tbaa !5
  %1577 = getelementptr inbounds %struct.jit_State, ptr %1576, i32 0, i32 0
  %1578 = getelementptr inbounds %struct.GCtrace, ptr %1577, i32 0, i32 5
  %1579 = load i32, ptr %1578, align 8, !tbaa !53
  %1580 = load ptr, ptr %2, align 8, !tbaa !5
  %1581 = getelementptr inbounds %struct.jit_State, ptr %1580, i32 0, i32 40
  %1582 = getelementptr inbounds [15 x i32], ptr %1581, i64 0, i64 1
  %1583 = load i32, ptr %1582, align 4, !tbaa !21
  %1584 = add i32 32769, %1583
  %1585 = icmp ugt i32 %1579, %1584
  br i1 %1585, label %1586, label %1588

1586:                                             ; preds = %1575
  %1587 = load ptr, ptr %2, align 8, !tbaa !5
  call void @lj_trace_err(ptr noundef %1587, i32 noundef 2) #7
  unreachable

1588:                                             ; preds = %1575
  store i32 0, ptr %16, align 4
  br label %1589

1589:                                             ; preds = %1588, %254, %224
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 72, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #6
  %1590 = load i32, ptr %16, align 4
  switch i32 %1590, label %1592 [
    i32 0, label %1591
    i32 1, label %1591
  ]

1591:                                             ; preds = %1589, %1589
  ret void

1592:                                             ; preds = %1589, %699
  unreachable
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.expect.i64(i64, i64) #5

; Function Attrs: nounwind uwtable
declare hidden void @rec_comp_fixup(ptr noundef, ptr noundef, i32 noundef) #0

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

; Function Attrs: nounwind uwtable
declare hidden void @rec_mm_comp_cdata(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #0

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

declare hidden i32 @lj_ir_numcmp(double noundef, double noundef, i32 noundef) #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden double @numberVnum(ptr noundef) #2

declare hidden i32 @lj_ir_strcmp(ptr noundef, ptr noundef, i32 noundef) #3

declare hidden i32 @lj_ir_call(ptr noundef, i32 noundef, ...) #3

; Function Attrs: nounwind uwtable
declare hidden void @rec_mm_comp(ptr noundef, ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @rec_mm_equal(ptr noundef, ptr noundef, i32 noundef) #0

declare hidden i32 @lj_ir_tonum(ptr noundef, i32 noundef) #3

declare hidden i32 @lj_ir_tostr(ptr noundef, i32 noundef) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_mm_len(ptr noundef, i32 noundef, ptr noundef) #0

declare hidden i32 @lj_opt_narrow_unm(ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_mm_arith(ptr noundef, ptr noundef, i32 noundef) #0

declare hidden i32 @lj_opt_narrow_arith(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef) #3

declare hidden i32 @lj_opt_narrow_mod(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #3

declare hidden i32 @lj_opt_narrow_pow(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_upvalue(ptr noundef, i32 noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @getcurrf(ptr noundef) #0

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @setintV(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @rec_tsetm(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_tnew(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @rec_varg(ptr noundef, i32 noundef, i64 noundef) #0

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

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_for(ptr noundef, ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @rec_loop_interp(ptr noundef, ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_iterl(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_loop(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @rec_loop_jit(ptr noundef, i32 noundef, i32 noundef) #0

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

; Function Attrs: nounwind uwtable
declare hidden void @rec_func_jit(ptr noundef, i32 noundef) #0

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

declare hidden void @lj_ffrecord_func(ptr noundef) #3

; Function Attrs: noreturn
declare hidden void @lj_trace_err_info(ptr noundef, i32 noundef) #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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { alwaysinline 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 #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 = { noreturn "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn }

!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, !13, i64 300}
!10 = !{!"jit_State", !11, i64 0, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !13, i64 136, !13, i64 140, !13, i64 144, !7, i64 148, !7, i64 149, !16, i64 150, !7, i64 151, !17, i64 152, !6, i64 176, !13, i64 184, !13, i64 188, !13, i64 192, !13, i64 196, !13, i64 200, !13, i64 204, !13, i64 208, !15, i64 212, !7, i64 216, !6, i64 256, !13, i64 264, !13, i64 268, !13, i64 272, !13, i64 276, !6, i64 280, !6, i64 288, !13, i64 296, !13, i64 300, !7, i64 304, !6, i64 312, !13, i64 320, !13, i64 324, !6, i64 328, !7, i64 336, !7, i64 536, !7, i64 1556, !7, i64 1616, !7, i64 1744, !13, i64 2256, !13, i64 2260, !7, i64 2264, !13, i64 2392, !18, i64 2396, !6, i64 2416, !13, i64 2424, !13, i64 2428, !6, i64 2432, !13, i64 2440, !13, i64 2444, !6, i64 2448, !6, i64 2456, !6, i64 2464, !19, i64 2472, !19, i64 2480, !7, i64 2488, !6, i64 2496, !13, i64 2504, !13, i64 2508}
!11 = !{!"GCtrace", !12, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !13, i64 8, !12, i64 12, !6, i64 16, !13, i64 24, !14, i64 28, !14, i64 30, !6, i64 32, !6, i64 40, !12, i64 48, !15, i64 52, !13, i64 56, !13, i64 60, !6, i64 64, !13, i64 72, !14, i64 76, !14, i64 78, !14, i64 80, !14, i64 82, !14, i64 84, !14, i64 86, !14, i64 88, !7, i64 90, !7, i64 91}
!12 = !{!"GCRef", !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = !{!"MRef", !13, i64 0}
!16 = !{!"IRType1", !7, i64 0}
!17 = !{!"FoldState", !7, i64 0, !7, i64 8, !7, i64 16}
!18 = !{!"ScEvEntry", !15, i64 0, !14, i64 4, !14, i64 6, !14, i64 8, !14, i64 10, !16, i64 12, !7, i64 13}
!19 = !{!"long", !7, i64 0}
!20 = !{!7, !7, i64 0}
!21 = !{!13, !13, i64 0}
!22 = !{!10, !6, i64 32}
!23 = !{!10, !14, i64 28}
!24 = !{!10, !6, i64 40}
!25 = !{!26, !14, i64 0}
!26 = !{!"SnapShot", !14, i64 0, !14, i64 2, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7}
!27 = !{!26, !7, i64 6}
!28 = !{!10, !6, i64 96}
!29 = !{!10, !13, i64 140}
!30 = !{!10, !6, i64 128}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = !{!10, !6, i64 104}
!35 = !{!10, !7, i64 149}
!36 = !{!10, !7, i64 148}
!37 = !{!10, !7, i64 151}
!38 = !{!10, !13, i64 204}
!39 = !{!10, !6, i64 176}
!40 = !{!10, !13, i64 184}
!41 = !{!42, !13, i64 56}
!42 = !{!"RecordIndex", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68}
!43 = !{!14, !14, i64 0}
!44 = !{!42, !13, i64 48}
!45 = !{!42, !13, i64 52}
!46 = !{!10, !6, i64 120}
!47 = !{!48, !13, i64 16}
!48 = !{!"GCproto", !12, i64 0, !7, i64 4, !7, i64 5, !7, i64 6, !7, i64 7, !13, i64 8, !12, i64 12, !15, i64 16, !15, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !7, i64 36, !7, i64 37, !14, i64 38, !12, i64 40, !13, i64 44, !13, i64 48, !15, i64 52, !15, i64 56, !15, i64 60}
!49 = !{!12, !13, i64 0}
!50 = distinct !{!50, !32}
!51 = !{!10, !6, i64 112}
!52 = !{!42, !13, i64 68}
!53 = !{!10, !13, i64 8}
!54 = !{!10, !13, i64 272}
!55 = !{!10, !6, i64 312}
!56 = !{!11, !13, i64 56}


; 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.RecordIndex = type { %union.TValue, %union.TValue, %union.TValue, %union.TValue, ptr, ptr, i32, i32, i32, i32, i32, i32 }
%union.TValue = type { i64 }
%struct.SnapShot = type { i16, i16, i8, i8, i8, i8 }
%struct.GCRef = type { i32 }

@lj_bc_mode = external hidden local_unnamed_addr constant [0 x i16], align 2

; Function Attrs: nounwind uwtable
declare hidden i32 @lj_record_objcmp(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) 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: alwaysinline nounwind uwtable
declare hidden void @lj_ir_set_(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #2

declare hidden i32 @lj_opt_fold(ptr noundef) local_unnamed_addr #3

; 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 hidden i32 @lj_record_constify(ptr noundef, ptr noundef) local_unnamed_addr #0

declare hidden i32 @lj_ir_kgc(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare hidden i32 @lj_ir_knumint(ptr noundef, double noundef) local_unnamed_addr #3

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

declare hidden void @lj_snap_add(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden void @lj_record_call(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @lj_record_tailcall(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: noreturn
declare hidden void @lj_trace_err(ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden void @lj_record_ret(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i32 @sload(ptr noundef, i32 noundef) local_unnamed_addr #0

declare hidden void @lj_snap_purge(ptr noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @copyTV(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_cat(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare hidden i32 @lj_ir_kint(ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @settabV(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @setstrV(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @lj_record_idx(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define hidden void @lj_record_ins(ptr noundef %0) local_unnamed_addr #0 {
  %2 = alloca %struct.RecordIndex, align 8
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %2) #6
  %3 = getelementptr inbounds i8, ptr %0, i64 300
  %4 = load i32, ptr %3, align 4, !tbaa !5
  switch i32 %4, label %.loopexit [
    i32 0, label %105
    i32 1, label %5
    i32 2, label %16
    i32 3, label %16
    i32 4, label %48
    i32 5, label %71
    i32 6, label %99
  ], !prof !19

5:                                                ; preds = %1
  %6 = getelementptr inbounds i8, ptr %0, i64 -272
  %7 = load i64, ptr %6, align 8, !tbaa !20
  %8 = inttoptr i64 %7 to ptr
  %9 = getelementptr inbounds i8, ptr %0, i64 -260
  %10 = load i32, ptr %9, align 4, !tbaa !20
  %11 = icmp ugt i32 %10, -3
  %12 = zext i1 %11 to i32
  %13 = load i32, ptr %8, align 4, !tbaa !21
  %14 = and i32 %13, 1
  %15 = xor i32 %14, %12
  tail call void @rec_comp_fixup(ptr noundef nonnull %0, ptr noundef nonnull %8, i32 noundef %15)
  br label %16

16:                                               ; preds = %1, %1, %5
  %17 = getelementptr inbounds i8, ptr %0, i64 -260
  %18 = load i32, ptr %17, align 4, !tbaa !20
  %19 = icmp ult i32 %18, -2
  br i1 %19, label %46, label %20

20:                                               ; preds = %16
  %21 = getelementptr inbounds i8, ptr %0, i64 157
  %22 = load i8, ptr %21, align 1, !tbaa !20
  %23 = xor i8 %22, 1
  store i8 %23, ptr %21, align 1, !tbaa !20
  %24 = load i32, ptr %3, align 4, !tbaa !5
  %25 = icmp eq i32 %24, 3
  br i1 %25, label %26, label %46

26:                                               ; preds = %20
  %27 = getelementptr inbounds i8, ptr %0, i64 32
  %28 = load ptr, ptr %27, align 8, !tbaa !22
  %29 = getelementptr inbounds i8, ptr %0, i64 28
  %30 = load i16, ptr %29, align 4, !tbaa !23
  %31 = zext i16 %30 to i64
  %32 = getelementptr %struct.SnapShot, ptr %28, i64 %31
  %33 = getelementptr i8, ptr %32, i64 -8
  %34 = getelementptr inbounds i8, ptr %0, i64 40
  %35 = load ptr, ptr %34, align 8, !tbaa !24
  %36 = load i16, ptr %33, align 2, !tbaa !25
  %37 = zext i16 %36 to i64
  %38 = getelementptr i8, ptr %32, i64 -2
  %39 = load i8, ptr %38, align 2, !tbaa !27
  %40 = zext i8 %39 to i64
  %41 = getelementptr i32, ptr %35, i64 %37
  %42 = getelementptr i32, ptr %41, i64 %40
  %43 = getelementptr i8, ptr %42, i64 -4
  %44 = load i32, ptr %43, align 4, !tbaa !21
  %45 = add i32 %44, -1
  store i32 %45, ptr %43, align 4, !tbaa !21
  br label %46

46:                                               ; preds = %20, %26, %16
  %47 = tail call i32 @lj_opt_fold(ptr noundef nonnull %0) #6
  br label %48

48:                                               ; preds = %1, %46
  %49 = getelementptr inbounds i8, ptr %0, i64 -260
  %50 = load i32, ptr %49, align 4, !tbaa !20
  %51 = icmp ult i32 %50, -2
  br i1 %51, label %.loopexit, label %52

52:                                               ; preds = %48
  %53 = getelementptr inbounds i8, ptr %0, i64 96
  %54 = load ptr, ptr %53, align 8, !tbaa !28
  %55 = getelementptr inbounds i8, ptr %54, i64 16
  %56 = load ptr, ptr %55, align 8, !tbaa !20
  %57 = getelementptr inbounds i8, ptr %0, i64 140
  %58 = load i32, ptr %57, align 4, !tbaa !29
  %invariant.gep = getelementptr inbounds i8, ptr %56, i64 4
  %.not535 = icmp eq i32 %58, 0
  br i1 %.not535, label %.loopexit, label %.lr.ph531

.lr.ph531:                                        ; preds = %52
  %59 = getelementptr inbounds i8, ptr %0, i64 128
  %60 = load ptr, ptr %59, align 8, !tbaa !30
  %wide.trip.count = zext i32 %58 to i64
  br label %61

61:                                               ; preds = %.lr.ph531, %70
  %indvars.iv541 = phi i64 [ 0, %.lr.ph531 ], [ %indvars.iv.next542, %70 ]
  %62 = getelementptr inbounds i32, ptr %60, i64 %indvars.iv541
  %63 = load i32, ptr %62, align 4, !tbaa !21
  %64 = icmp eq i32 %63, 33587197
  br i1 %64, label %65, label %70

65:                                               ; preds = %61
  %gep = getelementptr inbounds %union.TValue, ptr %invariant.gep, i64 %indvars.iv541
  %66 = load i32, ptr %gep, align 4, !tbaa !20
  %67 = icmp eq i32 %66, -2
  br i1 %67, label %68, label %70

68:                                               ; preds = %65
  %69 = getelementptr inbounds i32, ptr %60, i64 %indvars.iv541
  store i32 16809982, ptr %69, align 4, !tbaa !21
  br label %.loopexit

70:                                               ; preds = %61, %65
  %indvars.iv.next542 = add nuw nsw i64 %indvars.iv541, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next542, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %61, !llvm.loop !31

71:                                               ; preds = %1
  %72 = getelementptr inbounds i8, ptr %0, i64 96
  %73 = load ptr, ptr %72, align 8, !tbaa !28
  %74 = getelementptr inbounds i8, ptr %73, i64 16
  %75 = load ptr, ptr %74, align 8, !tbaa !20
  %76 = getelementptr inbounds i8, ptr %0, i64 140
  %77 = load i32, ptr %76, align 4, !tbaa !29
  %.not = icmp eq i32 %77, 0
  br i1 %.not, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %71
  %78 = getelementptr inbounds i8, ptr %0, i64 128
  %.pre = load ptr, ptr %78, align 8, !tbaa !30
  br label %79

79:                                               ; preds = %.lr.ph, %94
  %80 = phi i32 [ %77, %.lr.ph ], [ %95, %94 ]
  %81 = phi ptr [ %.pre, %.lr.ph ], [ %96, %94 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %94 ]
  %82 = getelementptr inbounds i32, ptr %81, i64 %indvars.iv
  %83 = load i32, ptr %82, align 4, !tbaa !21
  %84 = icmp eq i32 %83, 32767
  br i1 %84, label %85, label %94

85:                                               ; preds = %79
  %86 = getelementptr inbounds %union.TValue, ptr %75, i64 %indvars.iv
  %87 = getelementptr inbounds i8, ptr %86, i64 4
  %88 = load i32, ptr %87, align 4, !tbaa !20
  %89 = icmp eq i32 %88, -1
  br i1 %89, label %94, label %90

90:                                               ; preds = %85
  %91 = tail call i32 @lj_record_constify(ptr noundef nonnull %0, ptr noundef nonnull %86)
  %92 = load ptr, ptr %78, align 8, !tbaa !30
  %93 = getelementptr inbounds i32, ptr %92, i64 %indvars.iv
  store i32 %91, ptr %93, align 4, !tbaa !21
  %.pre544 = load i32, ptr %76, align 4, !tbaa !29
  br label %94

94:                                               ; preds = %79, %85, %90
  %95 = phi i32 [ %80, %79 ], [ %80, %85 ], [ %.pre544, %90 ]
  %96 = phi ptr [ %81, %79 ], [ %81, %85 ], [ %92, %90 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %97 = zext i32 %95 to i64
  %98 = icmp ult i64 %indvars.iv.next, %97
  br i1 %98, label %79, label %.loopexit, !llvm.loop !33

99:                                               ; preds = %1
  %100 = getelementptr inbounds i8, ptr %0, i64 104
  %101 = load ptr, ptr %100, align 8, !tbaa !34
  %102 = load i32, ptr %101, align 4, !tbaa !21
  %103 = and i32 %102, 255
  %104 = icmp ugt i32 %103, 96
  br i1 %104, label %755, label %.loopexit

.loopexit:                                        ; preds = %94, %70, %71, %52, %68, %1, %99, %48
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %105

105:                                              ; preds = %1, %.loopexit
  %106 = getelementptr inbounds i8, ptr %0, i64 149
  %107 = load i8, ptr %106, align 1, !tbaa !35
  %.not471 = icmp eq i8 %107, 0
  br i1 %.not471, label %110, label %108

108:                                              ; preds = %105
  store i8 0, ptr %106, align 1, !tbaa !35
  tail call void @lj_snap_purge(ptr noundef nonnull %0) #6
  tail call void @lj_snap_add(ptr noundef nonnull %0) #6
  %109 = getelementptr inbounds i8, ptr %0, i64 148
  store i8 1, ptr %109, align 4, !tbaa !36
  br label %110

110:                                              ; preds = %108, %105
  %111 = getelementptr inbounds i8, ptr %0, i64 151
  %112 = load i8, ptr %111, align 1, !tbaa !37
  %.not472 = icmp eq i8 %112, 0
  br i1 %.not472, label %115, label %113, !prof !38

113:                                              ; preds = %110
  %114 = add i8 %112, -1
  store i8 %114, ptr %111, align 1, !tbaa !37
  br label %755

115:                                              ; preds = %110
  %116 = getelementptr inbounds i8, ptr %0, i64 104
  %117 = load ptr, ptr %116, align 8, !tbaa !34
  %118 = getelementptr inbounds i8, ptr %0, i64 204
  %119 = load i32, ptr %118, align 4, !tbaa !39
  %120 = icmp eq i32 %119, 0
  br i1 %120, label %121, label %131

121:                                              ; preds = %115
  %122 = getelementptr inbounds i8, ptr %0, i64 176
  %123 = load ptr, ptr %122, align 8, !tbaa !40
  %124 = ptrtoint ptr %117 to i64
  %125 = ptrtoint ptr %123 to i64
  %126 = sub i64 %124, %125
  %127 = trunc i64 %126 to i32
  %128 = getelementptr inbounds i8, ptr %0, i64 184
  %129 = load i32, ptr %128, align 8, !tbaa !41
  %.not473 = icmp ugt i32 %129, %127
  br i1 %.not473, label %131, label %130

130:                                              ; preds = %121
  tail call void @lj_trace_err(ptr noundef nonnull %0, i32 noundef 8) #7
  unreachable

131:                                              ; preds = %121, %115
  tail call void @rec_profile_ins(ptr noundef nonnull %0, ptr noundef %117)
  %132 = getelementptr inbounds i8, ptr %0, i64 96
  %133 = load ptr, ptr %132, align 8, !tbaa !28
  %134 = getelementptr inbounds i8, ptr %133, i64 16
  %135 = load ptr, ptr %134, align 8, !tbaa !20
  %136 = load i32, ptr %117, align 4, !tbaa !21
  %137 = and i32 %136, 255
  %138 = lshr i32 %136, 8
  %139 = and i32 %138, 255
  %140 = getelementptr inbounds i8, ptr %2, i64 56
  store i32 0, ptr %140, align 8, !tbaa !42
  %141 = zext nneg i32 %137 to i64
  %142 = getelementptr inbounds [0 x i16], ptr @lj_bc_mode, i64 0, i64 %141
  %143 = load i16, ptr %142, align 2, !tbaa !44
  %144 = and i16 %143, 7
  %cond = icmp eq i16 %144, 3
  br i1 %cond, label %145, label %157

145:                                              ; preds = %131
  %146 = getelementptr inbounds i8, ptr %2, i64 16
  %147 = zext nneg i32 %139 to i64
  %148 = getelementptr inbounds %union.TValue, ptr %135, i64 %147
  call void @copyTV(ptr noundef nonnull %133, ptr noundef nonnull %146, ptr noundef %148)
  %149 = getelementptr inbounds i8, ptr %0, i64 128
  %150 = load ptr, ptr %149, align 8, !tbaa !30
  %151 = getelementptr inbounds i32, ptr %150, i64 %147
  %152 = load i32, ptr %151, align 4, !tbaa !21
  %.not474 = icmp eq i32 %152, 0
  br i1 %.not474, label %153, label %155

153:                                              ; preds = %145
  %154 = call i32 @sload(ptr noundef nonnull %0, i32 noundef %139)
  br label %155

155:                                              ; preds = %145, %153
  %156 = phi i32 [ %154, %153 ], [ %152, %145 ]
  store i32 %156, ptr %140, align 8, !tbaa !42
  br label %157

157:                                              ; preds = %131, %155
  %.0 = phi i32 [ %156, %155 ], [ %139, %131 ]
  %158 = lshr i32 %136, 24
  %159 = lshr i32 %136, 16
  %160 = and i32 %159, 255
  %161 = lshr i16 %143, 3
  %162 = and i16 %161, 15
  switch i16 %162, label %177 [
    i16 0, label %163
    i16 3, label %164
  ]

163:                                              ; preds = %157
  br label %177

164:                                              ; preds = %157
  %165 = load ptr, ptr %132, align 8, !tbaa !28
  %166 = zext nneg i32 %158 to i64
  %167 = getelementptr inbounds %union.TValue, ptr %135, i64 %166
  call void @copyTV(ptr noundef %165, ptr noundef nonnull %2, ptr noundef %167)
  %168 = getelementptr inbounds i8, ptr %0, i64 128
  %169 = load ptr, ptr %168, align 8, !tbaa !30
  %170 = getelementptr inbounds i32, ptr %169, i64 %166
  %171 = load i32, ptr %170, align 4, !tbaa !21
  %.not475 = icmp eq i32 %171, 0
  br i1 %.not475, label %172, label %174

172:                                              ; preds = %164
  %173 = call i32 @sload(ptr noundef nonnull %0, i32 noundef %158)
  br label %174

174:                                              ; preds = %164, %172
  %175 = phi i32 [ %173, %172 ], [ %171, %164 ]
  %176 = getelementptr inbounds i8, ptr %2, i64 48
  store i32 %175, ptr %176, align 8, !tbaa !45
  br label %177

177:                                              ; preds = %157, %174, %163
  %.0444 = phi i32 [ %160, %157 ], [ %160, %174 ], [ %159, %163 ]
  %.0438 = phi i32 [ %158, %157 ], [ %175, %174 ], [ 0, %163 ]
  %178 = lshr i16 %143, 7
  %179 = and i16 %178, 15
  switch i16 %179, label %225 [
    i16 3, label %180
    i16 8, label %191
    i16 9, label %195
    i16 10, label %208
  ]

180:                                              ; preds = %177
  %181 = load ptr, ptr %132, align 8, !tbaa !28
  %182 = getelementptr inbounds i8, ptr %2, i64 8
  %183 = zext nneg i32 %.0444 to i64
  %184 = getelementptr inbounds %union.TValue, ptr %135, i64 %183
  call void @copyTV(ptr noundef %181, ptr noundef nonnull %182, ptr noundef %184)
  %185 = getelementptr inbounds i8, ptr %0, i64 128
  %186 = load ptr, ptr %185, align 8, !tbaa !30
  %187 = getelementptr inbounds i32, ptr %186, i64 %183
  %188 = load i32, ptr %187, align 4, !tbaa !21
  %.not476 = icmp eq i32 %188, 0
  br i1 %.not476, label %189, label %.sink.split

189:                                              ; preds = %180
  %190 = call i32 @sload(ptr noundef nonnull %0, i32 noundef %.0444)
  br label %.sink.split

191:                                              ; preds = %177
  %192 = xor i32 %.0444, -1
  %193 = getelementptr inbounds i8, ptr %2, i64 12
  store i32 %192, ptr %193, align 4, !tbaa !20
  %reass.sub = mul i32 %.0444, 16777215
  %194 = add i32 %reass.sub, 32767
  br label %.sink.split

195:                                              ; preds = %177
  %196 = getelementptr inbounds i8, ptr %0, i64 120
  %197 = load ptr, ptr %196, align 8, !tbaa !46
  %198 = getelementptr inbounds i8, ptr %197, i64 16
  %199 = load i32, ptr %198, align 4, !tbaa !47
  %200 = zext i32 %199 to i64
  %201 = inttoptr i64 %200 to ptr
  %202 = zext nneg i32 %.0444 to i64
  %203 = getelementptr inbounds %union.TValue, ptr %201, i64 %202
  %204 = load ptr, ptr %132, align 8, !tbaa !28
  %205 = getelementptr inbounds i8, ptr %2, i64 8
  call void @copyTV(ptr noundef %204, ptr noundef nonnull %205, ptr noundef %203)
  %206 = load double, ptr %203, align 8, !tbaa !20
  %207 = call i32 @lj_ir_knumint(ptr noundef nonnull %0, double noundef %206) #6
  br label %.sink.split

208:                                              ; preds = %177
  %209 = getelementptr inbounds i8, ptr %0, i64 120
  %210 = load ptr, ptr %209, align 8, !tbaa !46
  %211 = getelementptr inbounds i8, ptr %210, i64 16
  %212 = load i32, ptr %211, align 4, !tbaa !47
  %213 = zext i32 %212 to i64
  %214 = inttoptr i64 %213 to ptr
  %215 = xor i32 %.0444, -1
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds %struct.GCRef, ptr %214, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !49
  %219 = zext i32 %218 to i64
  %220 = inttoptr i64 %219 to ptr
  %221 = load ptr, ptr %132, align 8, !tbaa !28
  %222 = getelementptr inbounds i8, ptr %2, i64 8
  call void @setstrV(ptr noundef %221, ptr noundef nonnull %222, ptr noundef %220)
  %223 = call i32 @lj_ir_kgc(ptr noundef nonnull %0, ptr noundef %220, i32 noundef 4) #6
  br label %.sink.split

.sink.split:                                      ; preds = %189, %180, %191, %195, %208
  %.sink = phi i32 [ %223, %208 ], [ %207, %195 ], [ %194, %191 ], [ %190, %189 ], [ %188, %180 ]
  %224 = getelementptr inbounds i8, ptr %2, i64 52
  store i32 %.sink, ptr %224, align 4, !tbaa !50
  br label %225

225:                                              ; preds = %.sink.split, %177
  %.1445 = phi i32 [ %.0444, %177 ], [ %.sink, %.sink.split ]
  %trunc = trunc i32 %136 to i8
  switch i8 %trunc, label %730 [
    i8 0, label %239
    i8 1, label %239
    i8 2, label %239
    i8 3, label %239
    i8 4, label %328
    i8 5, label %328
    i8 6, label %328
    i8 7, label %328
    i8 8, label %328
    i8 9, label %328
    i8 10, label %328
    i8 11, label %328
    i8 12, label %352
    i8 13, label %352
    i8 14, label %357
    i8 15, label %357
    i8 16, label %366
    i8 17, label %366
    i8 19, label %376
    i8 21, label %379
    i8 20, label %389
    i8 27, label %404
    i8 28, label %404
    i8 29, label %404
    i8 30, label %404
    i8 31, label %404
    i8 22, label %413
    i8 23, label %413
    i8 24, label %413
    i8 25, label %413
    i8 32, label %413
    i8 33, label %413
    i8 34, label %413
    i8 35, label %413
    i8 26, label %435
    i8 36, label %435
    i8 37, label %454
    i8 38, label %474
    i8 18, label %476
    i8 39, label %735
    i8 42, label %735
    i8 43, label %735
    i8 41, label %486
    i8 44, label %.preheader
    i8 40, label %496
    i8 45, label %510
    i8 46, label %512
    i8 47, label %512
    i8 48, label %512
    i8 49, label %512
    i8 54, label %514
    i8 55, label %514
    i8 58, label %528
    i8 62, label %528
    i8 56, label %532
    i8 57, label %532
    i8 60, label %532
    i8 61, label %532
    i8 59, label %535
    i8 64, label %535
    i8 63, label %538
    i8 52, label %551
    i8 53, label %553
    i8 69, label %569
    i8 65, label %620
    i8 66, label %632
    i8 67, label %635
    i8 68, label %647
    i8 71, label %650
    i8 73, label %653
    i8 74, label %665
    i8 75, label %665
    i8 76, label %665
    i8 77, label %668
    i8 78, label %674
    i8 79, label %682
    i8 82, label %687
    i8 85, label %690
    i8 81, label %692
    i8 84, label %707
    i8 87, label %718
    i8 80, label %720
    i8 83, label %720
    i8 86, label %720
    i8 90, label %720
    i8 93, label %720
    i8 88, label %721
    i8 89, label %726
    i8 91, label %727
    i8 92, label %728
    i8 94, label %735
    i8 95, label %729
    i8 96, label %729
    i8 70, label %733
    i8 72, label %733
    i8 50, label %733
    i8 51, label %733
  ]

.preheader:                                       ; preds = %225
  %.not482532 = icmp ugt i32 %.0, %.1445
  br i1 %.not482532, label %._crit_edge, label %.lr.ph534

.lr.ph534:                                        ; preds = %.preheader
  %226 = getelementptr inbounds i8, ptr %0, i64 128
  %227 = load ptr, ptr %226, align 8, !tbaa !30
  %228 = add i32 %.0, 1
  %229 = add i32 %.1445, 1
  %umax556 = call i32 @llvm.umax.i32(i32 %228, i32 %229)
  %230 = sub i32 %umax556, %.0
  %min.iters.check = icmp ult i32 %230, 20
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.scevcheck, %.lr.ph534
  %.5533.ph = phi i32 [ %.0, %vector.scevcheck ], [ %.0, %.lr.ph534 ], [ %ind.end, %middle.block ]
  br label %scalar.ph

vector.scevcheck:                                 ; preds = %.lr.ph534
  %231 = add i32 %.0, 1
  %232 = add i32 %.1445, 1
  %umax = call i32 @llvm.umax.i32(i32 %231, i32 %232)
  %233 = add i32 %umax, -1
  %234 = icmp ult i32 %233, %.0
  br i1 %234, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.scevcheck
  %n.vec = and i32 %230, -8
  %ind.end = add i32 %.0, %n.vec
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = add i32 %.0, %index
  %235 = zext i32 %offset.idx to i64
  %236 = getelementptr inbounds i32, ptr %227, i64 %235
  %237 = getelementptr inbounds i8, ptr %236, i64 16
  store <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>, ptr %236, align 4, !tbaa !21
  store <4 x i32> <i32 32767, i32 32767, i32 32767, i32 32767>, ptr %237, align 4, !tbaa !21
  %index.next = add nuw i32 %index, 8
  %238 = icmp eq i32 %index.next, %n.vec
  br i1 %238, label %middle.block, label %vector.body, !llvm.loop !51

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i32 %230, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

239:                                              ; preds = %225, %225, %225, %225
  %240 = and i32 %.0, 520093696
  %241 = icmp eq i32 %240, 167772160
  br i1 %241, label %245, label %242

242:                                              ; preds = %239
  %243 = and i32 %.1445, 520093696
  %244 = icmp eq i32 %243, 167772160
  br i1 %244, label %245, label %248

245:                                              ; preds = %242, %239
  %246 = and i32 %136, 2
  %.not493 = icmp eq i32 %246, 0
  %247 = select i1 %.not493, i32 6, i32 7
  call void @rec_mm_comp_cdata(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef %137, i32 noundef %247)
  br label %735

248:                                              ; preds = %242
  %249 = or i32 %.1445, %.0
  %250 = and i32 %249, 32768
  %.not487.not = icmp eq i32 %250, 0
  %251 = lshr i32 %.0, 24
  br i1 %.not487.not, label %252, label %._crit_edge548

252:                                              ; preds = %248
  %253 = and i32 %251, 30
  %254 = add nsw i32 %253, -14
  %255 = icmp ult i32 %254, 6
  %256 = icmp eq i32 %240, 67108864
  %or.cond495 = or i1 %256, %255
  br i1 %or.cond495, label %257, label %._crit_edge548

257:                                              ; preds = %252
  %258 = lshr i32 %.1445, 24
  %259 = and i32 %258, 30
  %260 = add nsw i32 %259, -14
  %261 = icmp ult i32 %260, 6
  %262 = icmp eq i32 %243, 67108864
  %or.cond496 = or i1 %262, %261
  br i1 %or.cond496, label %735, label %._crit_edge548

._crit_edge548:                                   ; preds = %248, %257, %252
  %263 = and i32 %251, 31
  %264 = add nsw i32 %263, -15
  %265 = icmp ult i32 %264, 5
  %266 = select i1 %265, i32 19, i32 %263
  %267 = lshr i32 %.1445, 24
  %268 = and i32 %267, 31
  %269 = add nsw i32 %268, -15
  %270 = icmp ult i32 %269, 5
  %271 = select i1 %270, i32 19, i32 %268
  %.not488 = icmp eq i32 %266, %271
  br i1 %.not488, label %287, label %272

272:                                              ; preds = %._crit_edge548
  %273 = icmp eq i32 %266, 19
  %274 = icmp eq i32 %271, 14
  %or.cond = and i1 %273, %274
  br i1 %or.cond, label %275, label %278

275:                                              ; preds = %272
  %276 = trunc i32 %.0 to i16
  call void @lj_ir_set_(ptr noundef nonnull %0, i16 noundef zeroext 23054, i16 noundef zeroext %276, i16 noundef zeroext 467)
  %277 = call i32 @lj_opt_fold(ptr noundef nonnull %0) #6
  br label %.thread

278:                                              ; preds = %272
  %279 = icmp eq i32 %266, 14
  %280 = icmp eq i32 %271, 19
  %or.cond3 = and i1 %279, %280
  br i1 %or.cond3, label %281, label %284

281:                                              ; preds = %278
  %282 = trunc i32 %.1445 to i16
  call void @lj_ir_set_(ptr noundef nonnull %0, i16 noundef zeroext 23054, i16 noundef zeroext %282, i16 noundef zeroext 467)
  %283 = call i32 @lj_opt_fold(ptr noundef nonnull %0) #6
  br label %.thread

284:                                              ; preds = %278
  %285 = add nsw i32 %266, -1
  %or.cond5 = icmp ult i32 %285, 2
  %286 = add nsw i32 %271, -1
  %or.cond7 = icmp ult i32 %286, 2
  %or.cond497 = select i1 %or.cond5, i1 %or.cond7, i1 false
  br i1 %or.cond497, label %287, label %735

.thread:                                          ; preds = %275, %281
  %.2446.ph = phi i32 [ %283, %281 ], [ %.1445, %275 ]
  %.1.ph = phi i32 [ %.0, %281 ], [ %277, %275 ]
  call void @rec_comp_prep(ptr noundef nonnull %0)
  br label %288

287:                                              ; preds = %284, %._crit_edge548
  %.0451 = phi i32 [ %266, %._crit_edge548 ], [ %263, %284 ]
  call void @rec_comp_prep(ptr noundef nonnull %0)
  switch i32 %.0451, label %317 [
    i32 14, label %288
    i32 19, label %297
    i32 4, label %304
  ]

288:                                              ; preds = %.thread, %287
  %.1524 = phi i32 [ %.1.ph, %.thread ], [ %.0, %287 ]
  %.2446523 = phi i32 [ %.2446.ph, %.thread ], [ %.1445, %287 ]
  %289 = shl i32 %136, 2
  %290 = and i32 %289, 4
  %spec.select = xor i32 %290, %137
  %291 = getelementptr inbounds i8, ptr %2, i64 16
  %292 = call double @numberVnum(ptr noundef nonnull %291)
  %293 = getelementptr inbounds i8, ptr %2, i64 8
  %294 = call double @numberVnum(ptr noundef nonnull %293)
  %295 = call i32 @lj_ir_numcmp(double noundef %292, double noundef %294, i32 noundef %spec.select) #6
  %.not492 = icmp eq i32 %295, 0
  %296 = xor i32 %spec.select, 5
  %spec.select519 = select i1 %.not492, i32 %296, i32 %spec.select
  br label %318

297:                                              ; preds = %287
  %298 = getelementptr inbounds i8, ptr %2, i64 16
  %299 = call double @numberVnum(ptr noundef nonnull %298)
  %300 = getelementptr inbounds i8, ptr %2, i64 8
  %301 = call double @numberVnum(ptr noundef nonnull %300)
  %302 = call i32 @lj_ir_numcmp(double noundef %299, double noundef %301, i32 noundef %137) #6
  %.not490 = icmp eq i32 %302, 0
  %303 = zext i1 %.not490 to i32
  %spec.select498 = xor i32 %137, %303
  br label %318

304:                                              ; preds = %287
  %305 = getelementptr inbounds i8, ptr %2, i64 16
  %306 = load i32, ptr %305, align 8, !tbaa !20
  %307 = zext i32 %306 to i64
  %308 = inttoptr i64 %307 to ptr
  %309 = getelementptr inbounds i8, ptr %2, i64 8
  %310 = load i32, ptr %309, align 8, !tbaa !20
  %311 = zext i32 %310 to i64
  %312 = inttoptr i64 %311 to ptr
  %313 = call i32 @lj_ir_strcmp(ptr noundef %308, ptr noundef %312, i32 noundef %137) #6
  %.not489 = icmp eq i32 %313, 0
  %314 = zext i1 %.not489 to i32
  %spec.select499 = xor i32 %137, %314
  %315 = call i32 (ptr, i32, ...) @lj_ir_call(ptr noundef nonnull %0, i32 noundef 0, i32 noundef %.0, i32 noundef %.1445) #6
  %316 = call i32 @lj_ir_kint(ptr noundef nonnull %0, i32 noundef 0) #6
  br label %318

317:                                              ; preds = %287
  call void @rec_mm_comp(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef %137)
  br label %735

318:                                              ; preds = %288, %297, %304
  %.1452 = phi i32 [ 147, %304 ], [ 147, %297 ], [ 142, %288 ]
  %.3447 = phi i32 [ %316, %304 ], [ %.1445, %297 ], [ %.2446523, %288 ]
  %.2443 = phi i32 [ %spec.select499, %304 ], [ %spec.select498, %297 ], [ %spec.select519, %288 ]
  %.2 = phi i32 [ %315, %304 ], [ %.0, %297 ], [ %.1524, %288 ]
  %319 = shl nuw nsw i32 %.2443, 8
  %320 = or disjoint i32 %319, %.1452
  %321 = trunc nuw i32 %320 to i16
  %322 = trunc i32 %.2 to i16
  %323 = trunc i32 %.3447 to i16
  call void @lj_ir_set_(ptr noundef nonnull %0, i16 noundef zeroext %321, i16 noundef zeroext %322, i16 noundef zeroext %323)
  %324 = call i32 @lj_opt_fold(ptr noundef nonnull %0) #6
  %325 = load ptr, ptr %116, align 8, !tbaa !34
  %326 = xor i32 %.2443, %136
  %327 = and i32 %326, 1
  call void @rec_comp_fixup(ptr noundef nonnull %0, ptr noundef %325, i32 noundef %327)
  br label %735

328:                                              ; preds = %225, %225, %225, %225, %225, %225, %225, %225
  %329 = and i32 %.0, 520093696
  %330 = icmp eq i32 %329, 167772160
  %331 = and i32 %.1445, 520093696
  %332 = icmp eq i32 %331, 167772160
  %or.cond501 = select i1 %330, i1 true, i1 %332
  br i1 %or.cond501, label %333, label %334

333:                                              ; preds = %328
  call void @rec_mm_comp_cdata(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef %137, i32 noundef 4)
  br label %735

334:                                              ; preds = %328
  %335 = or i32 %.1445, %.0
  %.fr525 = freeze i32 %335
  %336 = and i32 %.fr525, 32768
  %.not485.not.not = icmp eq i32 %336, 0
  br i1 %.not485.not.not, label %switch.early.test, label %337

switch.early.test:                                ; preds = %334
  switch i32 %329, label %735 [
    i32 201326592, label %337
    i32 184549376, label %337
  ]

337:                                              ; preds = %switch.early.test, %switch.early.test, %334
  call void @rec_comp_prep(ptr noundef nonnull %0)
  %338 = getelementptr inbounds i8, ptr %2, i64 16
  %339 = getelementptr inbounds i8, ptr %2, i64 8
  %340 = call i32 @lj_record_objcmp(ptr noundef nonnull %0, i32 noundef %.0, i32 noundef %.1445, ptr noundef nonnull %338, ptr noundef nonnull %339)
  %341 = icmp eq i32 %340, 2
  br i1 %341, label %343, label %342

342:                                              ; preds = %337
  switch i32 %329, label %343 [
    i32 184549376, label %349
    i32 201326592, label %349
  ]

343:                                              ; preds = %342, %337
  %344 = load ptr, ptr %116, align 8, !tbaa !34
  %345 = trunc i32 %136 to i1
  %346 = icmp ne i32 %340, 0
  %347 = xor i1 %346, %345
  %348 = zext i1 %347 to i32
  call void @rec_comp_fixup(ptr noundef nonnull %0, ptr noundef %344, i32 noundef %348)
  br label %735

349:                                              ; preds = %342, %342
  %350 = icmp eq i32 %340, 1
  br i1 %350, label %351, label %735

351:                                              ; preds = %349
  call void @rec_mm_equal(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef %137)
  br label %735

352:                                              ; preds = %225, %225
  %353 = and i32 %.1445, 503316480
  %354 = trunc i32 %136 to i1
  %355 = icmp eq i32 %353, 0
  %356 = xor i1 %355, %354
  %spec.select504 = select i1 %356, i32 0, i32 %.1445
  br label %357

357:                                              ; preds = %352, %225, %225
  %.5449 = phi i32 [ %.1445, %225 ], [ %.1445, %225 ], [ %spec.select504, %352 ]
  %358 = getelementptr inbounds i8, ptr %117, i64 4
  %359 = load i32, ptr %358, align 4, !tbaa !21
  %360 = lshr i32 %359, 8
  %361 = and i32 %360, 255
  %362 = getelementptr inbounds i8, ptr %0, i64 140
  %363 = load i32, ptr %362, align 4, !tbaa !29
  %364 = icmp ult i32 %361, %363
  br i1 %364, label %365, label %735

365:                                              ; preds = %357
  store i32 %361, ptr %362, align 4, !tbaa !29
  br label %735

366:                                              ; preds = %225, %225
  switch i32 %.1445, label %371 [
    i32 15, label %367
    i32 5, label %369
  ]

367:                                              ; preds = %366
  %368 = call i32 @lj_ir_tonum(ptr noundef nonnull %0, i32 noundef %.0) #6
  br label %371

369:                                              ; preds = %366
  %370 = call i32 @lj_ir_tostr(ptr noundef nonnull %0, i32 noundef %.0) #6
  br label %371

371:                                              ; preds = %366, %369, %367
  %.4 = phi i32 [ %368, %367 ], [ %370, %369 ], [ %.0, %366 ]
  %372 = getelementptr inbounds i8, ptr %0, i64 128
  %373 = load ptr, ptr %372, align 8, !tbaa !30
  %374 = zext nneg i32 %139 to i64
  %375 = getelementptr inbounds i32, ptr %373, i64 %374
  store i32 %.4, ptr %375, align 4, !tbaa !21
  br label %735

376:                                              ; preds = %225
  %377 = and i32 %.1445, 503316480
  %.not484 = icmp eq i32 %377, 0
  %378 = select i1 %.not484, i32 33587197, i32 16809982
  br label %735

379:                                              ; preds = %225
  %380 = and i32 %.1445, 520093696
  switch i32 %380, label %386 [
    i32 67108864, label %381
    i32 184549376, label %384
  ]

381:                                              ; preds = %379
  %382 = trunc i32 %.1445 to i16
  call void @lj_ir_set_(ptr noundef nonnull %0, i16 noundef zeroext 17683, i16 noundef zeroext %382, i16 noundef zeroext 0)
  %383 = call i32 @lj_opt_fold(ptr noundef nonnull %0) #6
  br label %735

384:                                              ; preds = %379
  %385 = call i32 (ptr, i32, ...) @lj_ir_call(ptr noundef nonnull %0, i32 noundef 30, i32 noundef %.1445) #6
  br label %735

386:                                              ; preds = %379
  %387 = getelementptr inbounds i8, ptr %2, i64 8
  %388 = call i32 @rec_mm_len(ptr noundef nonnull %0, i32 noundef %.1445, ptr noundef nonnull %387)
  br label %735

389:                                              ; preds = %225
  %390 = lshr i32 %.1445, 24
  %391 = and i32 %390, 30
  %392 = add nsw i32 %391, -14
  %393 = icmp ult i32 %392, 6
  %394 = and i32 %.1445, 520093696
  %395 = icmp eq i32 %394, 67108864
  %or.cond506 = select i1 %393, i1 true, i1 %395
  br i1 %or.cond506, label %396, label %399

396:                                              ; preds = %389
  %397 = getelementptr inbounds i8, ptr %2, i64 8
  %398 = call i32 @lj_opt_narrow_unm(ptr noundef nonnull %0, i32 noundef %.1445, ptr noundef nonnull %397) #6
  br label %735

399:                                              ; preds = %389
  %400 = getelementptr inbounds i8, ptr %2, i64 48
  store i32 %.1445, ptr %400, align 8, !tbaa !45
  %401 = load ptr, ptr %132, align 8, !tbaa !28
  %402 = getelementptr inbounds i8, ptr %2, i64 8
  call void @copyTV(ptr noundef %401, ptr noundef nonnull %2, ptr noundef nonnull %402)
  %403 = call i32 @rec_mm_arith(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef 16)
  br label %735

404:                                              ; preds = %225, %225, %225, %225, %225
  %405 = getelementptr inbounds i8, ptr %2, i64 48
  store i32 %.1445, ptr %405, align 8, !tbaa !45
  %406 = getelementptr inbounds i8, ptr %2, i64 52
  store i32 %.0438, ptr %406, align 4, !tbaa !50
  %407 = load ptr, ptr %132, align 8, !tbaa !28
  %408 = getelementptr inbounds i8, ptr %2, i64 16
  call void @copyTV(ptr noundef %407, ptr noundef nonnull %408, ptr noundef nonnull %2)
  %409 = load ptr, ptr %132, align 8, !tbaa !28
  %410 = getelementptr inbounds i8, ptr %2, i64 8
  call void @copyTV(ptr noundef %409, ptr noundef nonnull %2, ptr noundef nonnull %410)
  %411 = load ptr, ptr %132, align 8, !tbaa !28
  call void @copyTV(ptr noundef %411, ptr noundef nonnull %410, ptr noundef nonnull %408)
  %412 = icmp eq i32 %137, 31
  br i1 %412, label %435, label %413

413:                                              ; preds = %404, %225, %225, %225, %225, %225, %225, %225, %225
  %.6450 = phi i32 [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.0438, %404 ]
  %.1439 = phi i32 [ %.0438, %225 ], [ %.0438, %225 ], [ %.0438, %225 ], [ %.0438, %225 ], [ %.0438, %225 ], [ %.0438, %225 ], [ %.0438, %225 ], [ %.0438, %225 ], [ %.1445, %404 ]
  %414 = lshr i16 %143, 11
  %415 = zext nneg i16 %414 to i32
  %416 = lshr i32 %.1439, 24
  %417 = and i32 %416, 30
  %418 = add nsw i32 %417, -14
  %419 = icmp ult i32 %418, 6
  %420 = and i32 %.1439, 520093696
  %421 = icmp eq i32 %420, 67108864
  %or.cond508 = or i1 %421, %419
  br i1 %or.cond508, label %422, label %433

422:                                              ; preds = %413
  %423 = lshr i32 %.6450, 24
  %424 = and i32 %423, 30
  %425 = add nsw i32 %424, -14
  %426 = icmp ult i32 %425, 6
  %427 = and i32 %.6450, 520093696
  %428 = icmp eq i32 %427, 67108864
  %or.cond510 = select i1 %426, i1 true, i1 %428
  br i1 %or.cond510, label %429, label %433

429:                                              ; preds = %422
  %430 = getelementptr inbounds i8, ptr %2, i64 8
  %431 = add nuw nsw i32 %415, 31
  %432 = call i32 @lj_opt_narrow_arith(ptr noundef nonnull %0, i32 noundef %.1439, i32 noundef %.6450, ptr noundef nonnull %2, ptr noundef nonnull %430, i32 noundef %431) #6
  br label %735

433:                                              ; preds = %422, %413
  %434 = call i32 @rec_mm_arith(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef %415)
  br label %735

435:                                              ; preds = %225, %225, %404
  %.8 = phi i32 [ %.1445, %225 ], [ %.1445, %225 ], [ %.0438, %404 ]
  %.2440 = phi i32 [ %.0438, %225 ], [ %.0438, %225 ], [ %.1445, %404 ]
  %436 = lshr i32 %.2440, 24
  %437 = and i32 %436, 30
  %438 = add nsw i32 %437, -14
  %439 = icmp ult i32 %438, 6
  %440 = and i32 %.2440, 520093696
  %441 = icmp eq i32 %440, 67108864
  %or.cond512 = or i1 %441, %439
  br i1 %or.cond512, label %442, label %452

442:                                              ; preds = %435
  %443 = lshr i32 %.8, 24
  %444 = and i32 %443, 30
  %445 = add nsw i32 %444, -14
  %446 = icmp ult i32 %445, 6
  %447 = and i32 %.8, 520093696
  %448 = icmp eq i32 %447, 67108864
  %or.cond514 = select i1 %446, i1 true, i1 %448
  br i1 %or.cond514, label %449, label %452

449:                                              ; preds = %442
  %450 = getelementptr inbounds i8, ptr %2, i64 8
  %451 = call i32 @lj_opt_narrow_mod(ptr noundef nonnull %0, i32 noundef %.2440, i32 noundef %.8, ptr noundef nonnull %450) #6
  br label %735

452:                                              ; preds = %442, %435
  %453 = call i32 @rec_mm_arith(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef 14)
  br label %735

454:                                              ; preds = %225
  %455 = lshr i32 %.0438, 24
  %456 = and i32 %455, 30
  %457 = add nsw i32 %456, -14
  %458 = icmp ult i32 %457, 6
  %459 = and i32 %.0438, 520093696
  %460 = icmp eq i32 %459, 67108864
  %or.cond516 = select i1 %458, i1 true, i1 %460
  br i1 %or.cond516, label %461, label %472

461:                                              ; preds = %454
  %462 = lshr i32 %.1445, 24
  %463 = and i32 %462, 30
  %464 = add nsw i32 %463, -14
  %465 = icmp ult i32 %464, 6
  %466 = and i32 %.1445, 520093696
  %467 = icmp eq i32 %466, 67108864
  %or.cond518 = select i1 %465, i1 true, i1 %467
  br i1 %or.cond518, label %468, label %472

468:                                              ; preds = %461
  %469 = call i32 @lj_ir_tonum(ptr noundef nonnull %0, i32 noundef %.0438) #6
  %470 = getelementptr inbounds i8, ptr %2, i64 8
  %471 = call i32 @lj_opt_narrow_pow(ptr noundef nonnull %0, i32 noundef %469, i32 noundef %.1445, ptr noundef nonnull %470) #6
  br label %735

472:                                              ; preds = %461, %454
  %473 = call i32 @rec_mm_arith(ptr noundef nonnull %0, ptr noundef nonnull %2, i32 noundef 15)
  br label %735

474:                                              ; preds = %225
  %475 = call i32 @rec_cat(ptr noundef nonnull %0, i32 noundef %.0438, i32 noundef %.1445)
  br label %735

476:                                              ; preds = %225
  %477 = getelementptr inbounds i8, ptr %0, i64 140
  %478 = load i32, ptr %477, align 4, !tbaa !29
  %479 = icmp ugt i32 %.0, %478
  br i1 %479, label %480, label %735

480:                                              ; preds = %476
  %481 = getelementptr inbounds i8, ptr %0, i64 128
  %482 = load ptr, ptr %481, align 8, !tbaa !30
  %483 = add i32 %.0, -1
  %484 = zext i32 %483 to i64
  %485 = getelementptr inbounds i32, ptr %482, i64 %484
  store i32 0, ptr %485, align 4, !tbaa !21
  br label %735

486:                                              ; preds = %225
  %sext = shl i32 %.1445, 16
  %487 = ashr exact i32 %sext, 16
  %488 = call i32 @lj_ir_kint(ptr noundef nonnull %0, i32 noundef %487) #6
  br label %735

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %.5533 = phi i32 [ %489, %scalar.ph ], [ %.5533.ph, %scalar.ph.preheader ]
  %489 = add i32 %.5533, 1
  %490 = zext i32 %.5533 to i64
  %491 = getelementptr inbounds i32, ptr %227, i64 %490
  store i32 32767, ptr %491, align 4, !tbaa !21
  %.not482 = icmp ugt i32 %489, %.1445
  br i1 %.not482, label %._crit_edge, label %scalar.ph, !llvm.loop !54

._crit_edge:                                      ; preds = %scalar.ph, %middle.block, %.preheader
  %.5.lcssa = phi i32 [ %.0, %.preheader ], [ %ind.end, %middle.block ], [ %489, %scalar.ph ]
  %492 = getelementptr inbounds i8, ptr %0, i64 140
  %493 = load i32, ptr %492, align 4, !tbaa !29
  %.not483 = icmp ult i32 %.1445, %493
  br i1 %.not483, label %735, label %494

494:                                              ; preds = %._crit_edge
  %495 = add nuw i32 %.1445, 1
  store i32 %495, ptr %492, align 4, !tbaa !29
  br label %735

496:                                              ; preds = %225
  %497 = getelementptr inbounds i8, ptr %0, i64 120
  %498 = load ptr, ptr %497, align 8, !tbaa !46
  %499 = getelementptr inbounds i8, ptr %498, i64 16
  %500 = load i32, ptr %499, align 4, !tbaa !47
  %501 = zext i32 %500 to i64
  %502 = inttoptr i64 %501 to ptr
  %503 = zext i32 %.1445 to i64
  %504 = xor i64 %503, -1
  %505 = getelementptr inbounds %struct.GCRef, ptr %502, i64 %504
  %506 = load i32, ptr %505, align 4, !tbaa !49
  %507 = zext i32 %506 to i64
  %508 = inttoptr i64 %507 to ptr
  %509 = call i32 @lj_ir_kgc(ptr noundef nonnull %0, ptr noundef %508, i32 noundef 10) #6
  br label %735

510:                                              ; preds = %225
  %511 = call i32 @rec_upvalue(ptr noundef nonnull %0, i32 noundef %.1445, i32 noundef 0)
  br label %735

512:                                              ; preds = %225, %225, %225, %225
  %513 = call i32 @rec_upvalue(ptr noundef nonnull %0, i32 noundef %.0, i32 noundef %.1445)
  br label %735

514:                                              ; preds = %225, %225
  %515 = load ptr, ptr %132, align 8, !tbaa !28
  %516 = getelementptr inbounds i8, ptr %0, i64 112
  %517 = load ptr, ptr %516, align 8, !tbaa !55
  %518 = getelementptr inbounds i8, ptr %517, i64 8
  %519 = load i32, ptr %518, align 8, !tbaa !20
  %520 = zext i32 %519 to i64
  %521 = inttoptr i64 %520 to ptr
  call void @settabV(ptr noundef %515, ptr noundef nonnull %2, ptr noundef %521)
  %522 = call i32 @getcurrf(ptr noundef nonnull %0)
  %523 = trunc i32 %522 to i16
  call void @lj_ir_set_(ptr noundef nonnull %0, i16 noundef zeroext 17675, i16 noundef zeroext %523, i16 noundef zeroext 1)
  %524 = call i32 @lj_opt_fold(ptr noundef nonnull %0) #6
  %525 = getelementptr inbounds i8, ptr %2, i64 48
  store i32 %524, ptr %525, align 8, !tbaa !45
  %526 = getelementptr inbounds i8, ptr %2, i64 68
  store i32 100, ptr %526, align 4, !tbaa !56
  %527 = call i32 @lj_record_idx(ptr noundef nonnull %0, ptr noundef nonnull %2)
  br label %735

528:                                              ; preds = %225, %225
  %529 = getelementptr inbounds i8, ptr %2, i64 8
  call void @setintV(ptr noundef nonnull %529, i32 noundef %.1445)
  %530 = call i32 @lj_ir_kint(ptr noundef nonnull %0, i32 noundef %.1445) #6
  %531 = getelementptr inbounds i8, ptr %2, i64 52
  store i32 %530, ptr %531, align 4, !tbaa !50
  br label %532

532:                                              ; preds = %528, %225, %225, %225, %225
  %533 = getelementptr inbounds i8, ptr %2, i64 68
  store i32 100, ptr %533, align 4, !tbaa !56
  %534 = call i32 @lj_record_idx(ptr noundef nonnull %0, ptr noundef nonnull %2)
  br label %735

535:                                              ; preds = %225, %225
  %536 = getelementptr inbounds i8, ptr %2, i64 68
  store i32 0, ptr %536, align 4, !tbaa !56
  %537 = call i32 @lj_record_idx(ptr noundef nonnull %0, ptr noundef nonnull %2)
  br label %735

538:                                              ; preds = %225
  %539 = load ptr, ptr %132, align 8, !tbaa !28
  %540 = getelementptr inbounds i8, ptr %539, i64 24
  %541 = load ptr, ptr %540, align 8, !tbaa !20
  %542 = getelementptr inbounds i8, ptr %539, i64 16
  %543 = load ptr, ptr %542, align 8, !tbaa !20
  %544 = ptrtoint ptr %541 to i64
  %545 = ptrtoint ptr %543 to i64
  %546 = sub i64 %544, %545
  %547 = lshr exact i64 %546, 3
  %548 = trunc i64 %547 to i32
  %549 = getelementptr inbounds i8, ptr %2, i64 8
  %550 = load i32, ptr %549, align 8, !tbaa !20
  call void @rec_tsetm(ptr noundef nonnull %0, i32 noundef %.0, i32 noundef %548, i32 noundef %550)
  br label %735

551:                                              ; preds = %225
  %552 = call i32 @rec_tnew(ptr noundef nonnull %0, i32 noundef %.1445)
  br label %735

553:                                              ; preds = %225
  %554 = getelementptr inbounds i8, ptr %0, i64 120
  %555 = load ptr, ptr %554, align 8, !tbaa !46
  %556 = getelementptr inbounds i8, ptr %555, i64 16
  %557 = load i32, ptr %556, align 4, !tbaa !47
  %558 = zext i32 %557 to i64
  %559 = inttoptr i64 %558 to ptr
  %560 = zext i32 %.1445 to i64
  %561 = xor i64 %560, -1
  %562 = getelementptr inbounds %struct.GCRef, ptr %559, i64 %561
  %563 = load i32, ptr %562, align 4, !tbaa !49
  %564 = zext i32 %563 to i64
  %565 = inttoptr i64 %564 to ptr
  %566 = call i32 @lj_ir_kgc(ptr noundef nonnull %0, ptr noundef %565, i32 noundef 11) #6
  %567 = trunc i32 %566 to i16
  call void @lj_ir_set_(ptr noundef nonnull %0, i16 noundef zeroext 20875, i16 noundef zeroext %567, i16 noundef zeroext 0)
  %568 = call i32 @lj_opt_fold(ptr noundef nonnull %0) #6
  br label %735

569:                                              ; preds = %225
  %570 = getelementptr inbounds i8, ptr %0, i64 128
  %571 = load ptr, ptr %570, align 8, !tbaa !30
  %572 = add i32 %.0, -3
  %573 = zext i32 %572 to i64
  %574 = getelementptr inbounds i32, ptr %571, i64 %573
  %575 = load i32, ptr %574, align 4, !tbaa !21
  %.not479 = icmp eq i32 %575, 0
  br i1 %.not479, label %576, label %578

576:                                              ; preds = %569
  %577 = call i32 @sload(ptr noundef nonnull %0, i32 noundef %572)
  %.pre545 = load ptr, ptr %570, align 8, !tbaa !30
  br label %578

578:                                              ; preds = %569, %576
  %579 = phi ptr [ %.pre545, %576 ], [ %571, %569 ]
  %580 = phi i32 [ %577, %576 ], [ %575, %569 ]
  %581 = zext i32 %.0 to i64
  %582 = getelementptr inbounds i32, ptr %579, i64 %581
  store i32 %580, ptr %582, align 4, !tbaa !21
  %583 = add i32 %.0, -2
  %584 = zext i32 %583 to i64
  %585 = getelementptr inbounds i32, ptr %579, i64 %584
  %586 = load i32, ptr %585, align 4, !tbaa !21
  %.not480 = icmp eq i32 %586, 0
  br i1 %.not480, label %587, label %589

587:                                              ; preds = %578
  %588 = call i32 @sload(ptr noundef nonnull %0, i32 noundef %583)
  %.pre546 = load ptr, ptr %570, align 8, !tbaa !30
  br label %589

589:                                              ; preds = %578, %587
  %590 = phi ptr [ %.pre546, %587 ], [ %579, %578 ]
  %591 = phi i32 [ %588, %587 ], [ %586, %578 ]
  %592 = add i32 %.0, 1
  %593 = zext i32 %592 to i64
  %594 = getelementptr inbounds i32, ptr %590, i64 %593
  store i32 %591, ptr %594, align 4, !tbaa !21
  %595 = add i32 %.0, -1
  %596 = zext i32 %595 to i64
  %597 = getelementptr inbounds i32, ptr %590, i64 %596
  %598 = load i32, ptr %597, align 4, !tbaa !21
  %.not481 = icmp eq i32 %598, 0
  br i1 %.not481, label %599, label %601

599:                                              ; preds = %589
  %600 = call i32 @sload(ptr noundef nonnull %0, i32 noundef %595)
  %.pre547 = load ptr, ptr %570, align 8, !tbaa !30
  br label %601

601:                                              ; preds = %589, %599
  %602 = phi ptr [ %.pre547, %599 ], [ %590, %589 ]
  %603 = phi i32 [ %600, %599 ], [ %598, %589 ]
  %604 = add i32 %.0, 2
  %605 = zext i32 %604 to i64
  %606 = getelementptr inbounds i32, ptr %602, i64 %605
  store i32 %603, ptr %606, align 4, !tbaa !21
  %607 = load ptr, ptr %132, align 8, !tbaa !28
  %608 = getelementptr inbounds i8, ptr %607, i64 16
  %609 = load ptr, ptr %608, align 8, !tbaa !20
  %610 = getelementptr inbounds %union.TValue, ptr %609, i64 %581
  %611 = getelementptr inbounds i8, ptr %610, i64 -24
  call void @copyTV(ptr noundef %607, ptr noundef %610, ptr noundef nonnull %611)
  %612 = load ptr, ptr %132, align 8, !tbaa !28
  %613 = getelementptr inbounds i8, ptr %610, i64 8
  %614 = getelementptr inbounds i8, ptr %610, i64 -16
  call void @copyTV(ptr noundef %612, ptr noundef nonnull %613, ptr noundef nonnull %614)
  %615 = load ptr, ptr %132, align 8, !tbaa !28
  %616 = getelementptr inbounds i8, ptr %610, i64 16
  %617 = getelementptr inbounds i8, ptr %610, i64 -8
  call void @copyTV(ptr noundef %615, ptr noundef nonnull %616, ptr noundef nonnull %617)
  %618 = zext i32 %.1445 to i64
  %619 = add nsw i64 %618, -1
  call void @lj_record_call(ptr noundef nonnull %0, i32 noundef %.0, i64 noundef %619)
  br label %735

620:                                              ; preds = %225
  %621 = load ptr, ptr %132, align 8, !tbaa !28
  %622 = getelementptr inbounds i8, ptr %621, i64 24
  %623 = load ptr, ptr %622, align 8, !tbaa !20
  %624 = getelementptr inbounds i8, ptr %621, i64 16
  %625 = load ptr, ptr %624, align 8, !tbaa !20
  %626 = ptrtoint ptr %623 to i64
  %627 = ptrtoint ptr %625 to i64
  %628 = sub i64 %626, %627
  %629 = lshr exact i64 %628, 3
  %630 = trunc i64 %629 to i32
  %631 = sub i32 %630, %.0
  br label %632

632:                                              ; preds = %620, %225
  %.9 = phi i32 [ %.1445, %225 ], [ %631, %620 ]
  %633 = zext i32 %.9 to i64
  %634 = add nsw i64 %633, -1
  call void @lj_record_call(ptr noundef nonnull %0, i32 noundef %.0, i64 noundef %634)
  br label %735

635:                                              ; preds = %225
  %636 = load ptr, ptr %132, align 8, !tbaa !28
  %637 = getelementptr inbounds i8, ptr %636, i64 24
  %638 = load ptr, ptr %637, align 8, !tbaa !20
  %639 = getelementptr inbounds i8, ptr %636, i64 16
  %640 = load ptr, ptr %639, align 8, !tbaa !20
  %641 = ptrtoint ptr %638 to i64
  %642 = ptrtoint ptr %640 to i64
  %643 = sub i64 %641, %642
  %644 = lshr exact i64 %643, 3
  %645 = trunc i64 %644 to i32
  %646 = sub i32 %645, %.0
  br label %647

647:                                              ; preds = %635, %225
  %.10 = phi i32 [ %.1445, %225 ], [ %646, %635 ]
  %648 = zext i32 %.10 to i64
  %649 = add nsw i64 %648, -1
  call void @lj_record_tailcall(ptr noundef nonnull %0, i32 noundef %.0, i64 noundef %649)
  br label %735

650:                                              ; preds = %225
  %651 = zext i32 %.0438 to i64
  %652 = add nsw i64 %651, -1
  call void @rec_varg(ptr noundef nonnull %0, i32 noundef %.0, i64 noundef %652)
  br label %735

653:                                              ; preds = %225
  %654 = load ptr, ptr %132, align 8, !tbaa !28
  %655 = getelementptr inbounds i8, ptr %654, i64 24
  %656 = load ptr, ptr %655, align 8, !tbaa !20
  %657 = getelementptr inbounds i8, ptr %654, i64 16
  %658 = load ptr, ptr %657, align 8, !tbaa !20
  %659 = ptrtoint ptr %656 to i64
  %660 = ptrtoint ptr %658 to i64
  %661 = sub i64 %659, %660
  %662 = lshr exact i64 %661, 3
  %663 = trunc i64 %662 to i32
  %reass.sub536 = sub i32 %663, %.0
  %664 = add i32 %reass.sub536, 1
  br label %665

665:                                              ; preds = %653, %225, %225, %225
  %.11 = phi i32 [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %664, %653 ]
  call void @rec_profile_ret(ptr noundef nonnull %0)
  %666 = zext i32 %.11 to i64
  %667 = add nsw i64 %666, -1
  call void @lj_record_ret(ptr noundef nonnull %0, i32 noundef %.0, i64 noundef %667)
  br label %735

668:                                              ; preds = %225
  %669 = call i32 @rec_for(ptr noundef nonnull %0, ptr noundef nonnull %117, i32 noundef 0)
  %.not478 = icmp eq i32 %669, 0
  br i1 %.not478, label %735, label %670

670:                                              ; preds = %668
  %671 = getelementptr inbounds i8, ptr %0, i64 8
  %672 = load i32, ptr %671, align 8, !tbaa !57
  %673 = getelementptr inbounds i8, ptr %0, i64 272
  store i32 %672, ptr %673, align 8, !tbaa !58
  br label %735

674:                                              ; preds = %225
  %675 = call i32 @rec_for(ptr noundef nonnull %0, ptr noundef nonnull %117, i32 noundef 0)
  %.not477 = icmp eq i32 %675, 0
  br i1 %.not477, label %735, label %676

676:                                              ; preds = %674
  %677 = zext i32 %.1445 to i64
  %678 = getelementptr i32, ptr %117, i64 %677
  %679 = getelementptr i8, ptr %678, i64 -131072
  %680 = load i32, ptr %679, align 4, !tbaa !21
  %681 = lshr i32 %680, 16
  call void @lj_record_stop(ptr noundef nonnull %0, i32 noundef 1, i32 noundef %681)
  br label %735

682:                                              ; preds = %225
  %683 = zext i32 %.1445 to i64
  %684 = getelementptr i32, ptr %117, i64 %683
  %685 = getelementptr i8, ptr %684, i64 -131072
  %686 = call i32 @rec_for(ptr noundef nonnull %0, ptr noundef %685, i32 noundef 1)
  call void @rec_loop_interp(ptr noundef nonnull %0, ptr noundef nonnull %117, i32 noundef %686)
  br label %735

687:                                              ; preds = %225
  %688 = load i32, ptr %117, align 4, !tbaa !21
  %689 = call i32 @rec_iterl(ptr noundef nonnull %0, i32 noundef %688)
  call void @rec_loop_interp(ptr noundef nonnull %0, ptr noundef nonnull %117, i32 noundef %689)
  br label %735

690:                                              ; preds = %225
  %691 = call i32 @rec_loop(ptr noundef nonnull %0, i32 noundef %.0)
  call void @rec_loop_interp(ptr noundef nonnull %0, ptr noundef nonnull %117, i32 noundef %691)
  br label %735

692:                                              ; preds = %225
  %693 = getelementptr inbounds i8, ptr %0, i64 312
  %694 = load ptr, ptr %693, align 8, !tbaa !59
  %695 = zext i32 %.1445 to i64
  %696 = getelementptr inbounds %struct.GCRef, ptr %694, i64 %695
  %697 = load i32, ptr %696, align 4, !tbaa !49
  %698 = zext i32 %697 to i64
  %699 = inttoptr i64 %698 to ptr
  %700 = getelementptr inbounds i8, ptr %699, i64 56
  %701 = load i32, ptr %700, align 8, !tbaa !60
  %702 = lshr i32 %701, 16
  %703 = zext nneg i32 %702 to i64
  %704 = getelementptr i32, ptr %117, i64 %703
  %705 = getelementptr i8, ptr %704, i64 -131072
  %706 = call i32 @rec_for(ptr noundef nonnull %0, ptr noundef %705, i32 noundef 1)
  call void @rec_loop_jit(ptr noundef nonnull %0, i32 noundef %.1445, i32 noundef %706)
  br label %735

707:                                              ; preds = %225
  %708 = getelementptr inbounds i8, ptr %0, i64 312
  %709 = load ptr, ptr %708, align 8, !tbaa !59
  %710 = zext i32 %.1445 to i64
  %711 = getelementptr inbounds %struct.GCRef, ptr %709, i64 %710
  %712 = load i32, ptr %711, align 4, !tbaa !49
  %713 = zext i32 %712 to i64
  %714 = inttoptr i64 %713 to ptr
  %715 = getelementptr inbounds i8, ptr %714, i64 56
  %716 = load i32, ptr %715, align 8, !tbaa !60
  %717 = call i32 @rec_iterl(ptr noundef nonnull %0, i32 noundef %716)
  call void @rec_loop_jit(ptr noundef nonnull %0, i32 noundef %.1445, i32 noundef %717)
  br label %735

718:                                              ; preds = %225
  %719 = call i32 @rec_loop(ptr noundef nonnull %0, i32 noundef %.0)
  call void @rec_loop_jit(ptr noundef nonnull %0, i32 noundef %.1445, i32 noundef %719)
  br label %735

720:                                              ; preds = %225, %225, %225, %225, %225
  call void @lj_trace_err(ptr noundef nonnull %0, i32 noundef 5) #7
  unreachable

721:                                              ; preds = %225
  %722 = getelementptr inbounds i8, ptr %0, i64 140
  %723 = load i32, ptr %722, align 4, !tbaa !29
  %724 = icmp ult i32 %.0, %723
  br i1 %724, label %725, label %735

725:                                              ; preds = %721
  store i32 %.0, ptr %722, align 4, !tbaa !29
  br label %735

726:                                              ; preds = %225
  call void @rec_func_lua(ptr noundef nonnull %0)
  br label %735

727:                                              ; preds = %225
  call void @rec_func_jit(ptr noundef nonnull %0, i32 noundef %.1445)
  br label %735

728:                                              ; preds = %225
  call void @rec_func_vararg(ptr noundef nonnull %0)
  call void @rec_func_lua(ptr noundef nonnull %0)
  br label %735

729:                                              ; preds = %225, %225
  call void @lj_ffrecord_func(ptr noundef nonnull %0) #6
  br label %735

730:                                              ; preds = %225
  %731 = icmp ugt i32 %137, 96
  br i1 %731, label %732, label %733

732:                                              ; preds = %730
  call void @lj_ffrecord_func(ptr noundef nonnull %0) #6
  br label %735

733:                                              ; preds = %730, %225, %225, %225, %225
  %734 = getelementptr inbounds i8, ptr %0, i64 2488
  call void @setintV(ptr noundef nonnull %734, i32 noundef %137)
  call void @lj_trace_err_info(ptr noundef nonnull %0, i32 noundef 7) #7
  unreachable

735:                                              ; preds = %switch.early.test, %429, %433, %343, %351, %349, %317, %318, %284, %225, %721, %725, %674, %676, %668, %670, %._crit_edge, %494, %225, %225, %225, %476, %480, %468, %472, %449, %452, %396, %399, %381, %386, %384, %357, %365, %257, %732, %729, %728, %727, %726, %718, %707, %692, %690, %687, %682, %665, %650, %647, %632, %601, %553, %551, %538, %535, %532, %514, %512, %510, %496, %486, %474, %376, %371, %333, %245
  %.12 = phi i32 [ %.1445, %732 ], [ %.1445, %729 ], [ %.1445, %728 ], [ %.1445, %727 ], [ %.1445, %726 ], [ %.1445, %725 ], [ %.1445, %721 ], [ %.1445, %718 ], [ %.1445, %707 ], [ %.1445, %692 ], [ %.1445, %690 ], [ %.1445, %687 ], [ %.1445, %682 ], [ %.1445, %676 ], [ %.1445, %674 ], [ %.1445, %670 ], [ %.1445, %668 ], [ %.11, %665 ], [ %.1445, %650 ], [ %.10, %647 ], [ %.9, %632 ], [ %.1445, %601 ], [ %568, %553 ], [ %552, %551 ], [ %.1445, %538 ], [ %537, %535 ], [ %534, %532 ], [ %527, %514 ], [ %.1445, %512 ], [ %511, %510 ], [ %509, %496 ], [ %.1445, %494 ], [ %.1445, %._crit_edge ], [ %488, %486 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %225 ], [ %.1445, %480 ], [ %.1445, %476 ], [ %475, %474 ], [ %471, %468 ], [ %473, %472 ], [ %451, %449 ], [ %453, %452 ], [ %398, %396 ], [ %403, %399 ], [ %383, %381 ], [ %385, %384 ], [ %388, %386 ], [ %378, %376 ], [ %.1445, %371 ], [ %.5449, %365 ], [ %.5449, %357 ], [ %.1445, %333 ], [ %.1445, %245 ], [ %.1445, %257 ], [ %.3447, %318 ], [ %.1445, %317 ], [ %.1445, %284 ], [ %.1445, %switch.early.test ], [ %.1445, %349 ], [ %.1445, %351 ], [ %.1445, %343 ], [ %432, %429 ], [ %434, %433 ]
  %.6 = phi i32 [ %.0, %732 ], [ %.0, %729 ], [ %.0, %728 ], [ %.0, %727 ], [ %.0, %726 ], [ %.0, %725 ], [ %.0, %721 ], [ %.0, %718 ], [ %.0, %707 ], [ %.0, %692 ], [ %.0, %690 ], [ %.0, %687 ], [ %.0, %682 ], [ %.0, %676 ], [ %.0, %674 ], [ %.0, %670 ], [ %.0, %668 ], [ %.0, %665 ], [ %.0, %650 ], [ %.0, %647 ], [ %.0, %632 ], [ %.0, %601 ], [ %.0, %553 ], [ %.0, %551 ], [ %.0, %538 ], [ %.0, %535 ], [ %.0, %532 ], [ %.0, %514 ], [ %.0, %512 ], [ %.0, %510 ], [ %.0, %496 ], [ %.5.lcssa, %494 ], [ %.5.lcssa, %._crit_edge ], [ %.0, %486 ], [ %.0, %225 ], [ %.0, %225 ], [ %.0, %225 ], [ %.0, %225 ], [ %.0, %480 ], [ %.0, %476 ], [ %.0, %474 ], [ %.0, %468 ], [ %.0, %472 ], [ %.0, %449 ], [ %.0, %452 ], [ %.0, %396 ], [ %.0, %399 ], [ %.0, %381 ], [ %.0, %384 ], [ %.0, %386 ], [ %.0, %376 ], [ %.4, %371 ], [ %.0, %365 ], [ %.0, %357 ], [ %.0, %333 ], [ %.0, %245 ], [ %.0, %257 ], [ %.2, %318 ], [ %.0, %317 ], [ %.0, %284 ], [ %.0, %switch.early.test ], [ %.0, %349 ], [ %.0, %351 ], [ %.0, %343 ], [ %.0, %429 ], [ %.0, %433 ]
  %736 = icmp eq i16 %144, 1
  %737 = icmp ne i32 %.12, 0
  %or.cond9 = select i1 %736, i1 %737, i1 false
  br i1 %or.cond9, label %738, label %747

738:                                              ; preds = %735
  %739 = getelementptr inbounds i8, ptr %0, i64 128
  %740 = load ptr, ptr %739, align 8, !tbaa !30
  %741 = zext i32 %.6 to i64
  %742 = getelementptr inbounds i32, ptr %740, i64 %741
  store i32 %.12, ptr %742, align 4, !tbaa !21
  %743 = getelementptr inbounds i8, ptr %0, i64 140
  %744 = load i32, ptr %743, align 4, !tbaa !29
  %.not494 = icmp ult i32 %.6, %744
  br i1 %.not494, label %747, label %745

745:                                              ; preds = %738
  %746 = add i32 %.6, 1
  store i32 %746, ptr %743, align 4, !tbaa !29
  br label %747

747:                                              ; preds = %738, %745, %735
  %748 = getelementptr inbounds i8, ptr %0, i64 8
  %749 = load i32, ptr %748, align 8, !tbaa !57
  %750 = getelementptr inbounds i8, ptr %0, i64 1560
  %751 = load i32, ptr %750, align 4, !tbaa !21
  %752 = add i32 %751, 32769
  %753 = icmp ugt i32 %749, %752
  br i1 %753, label %754, label %755

754:                                              ; preds = %747
  call void @lj_trace_err(ptr noundef nonnull %0, i32 noundef 2) #7
  unreachable

755:                                              ; preds = %747, %99, %113
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %2) #6
  ret void
}

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

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

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

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

declare hidden i32 @lj_ir_numcmp(double noundef, double noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline nounwind uwtable
declare hidden double @numberVnum(ptr noundef) local_unnamed_addr #2

declare hidden i32 @lj_ir_strcmp(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare hidden i32 @lj_ir_call(ptr noundef, i32 noundef, ...) local_unnamed_addr #3

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

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

declare hidden i32 @lj_ir_tonum(ptr noundef, i32 noundef) local_unnamed_addr #3

declare hidden i32 @lj_ir_tostr(ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_mm_len(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

declare hidden i32 @lj_opt_narrow_unm(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_mm_arith(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

declare hidden i32 @lj_opt_narrow_arith(ptr noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

declare hidden i32 @lj_opt_narrow_mod(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare hidden i32 @lj_opt_narrow_pow(ptr noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_upvalue(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

; Function Attrs: alwaysinline nounwind uwtable
declare hidden void @setintV(ptr noundef, i32 noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_tnew(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @rec_varg(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_for(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_iterl(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i32 @rec_loop(ptr noundef, i32 noundef) local_unnamed_addr #0

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

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

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

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

declare hidden void @lj_ffrecord_func(ptr noundef) local_unnamed_addr #3

; Function Attrs: noreturn
declare hidden void @lj_trace_err_info(ptr noundef, i32 noundef) local_unnamed_addr #4

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

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 = { alwaysinline 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 #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 = { noreturn "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !9, i64 300}
!6 = !{!"jit_State", !7, i64 0, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !9, i64 136, !9, i64 140, !9, i64 144, !10, i64 148, !10, i64 149, !15, i64 150, !10, i64 151, !16, i64 152, !12, i64 176, !9, i64 184, !9, i64 188, !9, i64 192, !9, i64 196, !9, i64 200, !9, i64 204, !9, i64 208, !14, i64 212, !10, i64 216, !12, i64 256, !9, i64 264, !9, i64 268, !9, i64 272, !9, i64 276, !12, i64 280, !12, i64 288, !9, i64 296, !9, i64 300, !10, i64 304, !12, i64 312, !9, i64 320, !9, i64 324, !12, i64 328, !10, i64 336, !10, i64 536, !10, i64 1556, !10, i64 1616, !10, i64 1744, !9, i64 2256, !9, i64 2260, !10, i64 2264, !9, i64 2392, !17, i64 2396, !12, i64 2416, !9, i64 2424, !9, i64 2428, !12, i64 2432, !9, i64 2440, !9, i64 2444, !12, i64 2448, !12, i64 2456, !12, i64 2464, !18, i64 2472, !18, i64 2480, !10, i64 2488, !12, i64 2496, !9, i64 2504, !9, i64 2508}
!7 = !{!"GCtrace", !8, i64 0, !10, i64 4, !10, i64 5, !10, i64 6, !10, i64 7, !9, i64 8, !8, i64 12, !12, i64 16, !9, i64 24, !13, i64 28, !13, i64 30, !12, i64 32, !12, i64 40, !8, i64 48, !14, i64 52, !9, i64 56, !9, i64 60, !12, i64 64, !9, i64 72, !13, i64 76, !13, i64 78, !13, i64 80, !13, i64 82, !13, i64 84, !13, i64 86, !13, i64 88, !10, i64 90, !10, i64 91}
!8 = !{!"GCRef", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C/C++ TBAA"}
!12 = !{!"any pointer", !10, i64 0}
!13 = !{!"short", !10, i64 0}
!14 = !{!"MRef", !9, i64 0}
!15 = !{!"IRType1", !10, i64 0}
!16 = !{!"FoldState", !10, i64 0, !10, i64 8, !10, i64 16}
!17 = !{!"ScEvEntry", !14, i64 0, !13, i64 4, !13, i64 6, !13, i64 8, !13, i64 10, !15, i64 12, !10, i64 13}
!18 = !{!"long", !10, i64 0}
!19 = !{!"branch_weights", i32 1, i32 14000, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1}
!20 = !{!10, !10, i64 0}
!21 = !{!9, !9, i64 0}
!22 = !{!6, !12, i64 32}
!23 = !{!6, !13, i64 28}
!24 = !{!6, !12, i64 40}
!25 = !{!26, !13, i64 0}
!26 = !{!"SnapShot", !13, i64 0, !13, i64 2, !10, i64 4, !10, i64 5, !10, i64 6, !10, i64 7}
!27 = !{!26, !10, i64 6}
!28 = !{!6, !12, i64 96}
!29 = !{!6, !9, i64 140}
!30 = !{!6, !12, i64 128}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = !{!6, !12, i64 104}
!35 = !{!6, !10, i64 149}
!36 = !{!6, !10, i64 148}
!37 = !{!6, !10, i64 151}
!38 = !{!"branch_weights", !"expected", i32 2000, i32 1}
!39 = !{!6, !9, i64 204}
!40 = !{!6, !12, i64 176}
!41 = !{!6, !9, i64 184}
!42 = !{!43, !9, i64 56}
!43 = !{!"RecordIndex", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !12, i64 32, !12, i64 40, !9, i64 48, !9, i64 52, !9, i64 56, !9, i64 60, !9, i64 64, !9, i64 68}
!44 = !{!13, !13, i64 0}
!45 = !{!43, !9, i64 48}
!46 = !{!6, !12, i64 120}
!47 = !{!48, !9, i64 16}
!48 = !{!"GCproto", !8, i64 0, !10, i64 4, !10, i64 5, !10, i64 6, !10, i64 7, !9, i64 8, !8, i64 12, !14, i64 16, !14, i64 20, !9, i64 24, !9, i64 28, !9, i64 32, !10, i64 36, !10, i64 37, !13, i64 38, !8, i64 40, !9, i64 44, !9, i64 48, !14, i64 52, !14, i64 56, !14, i64 60}
!49 = !{!8, !9, i64 0}
!50 = !{!43, !9, i64 52}
!51 = distinct !{!51, !32, !52, !53}
!52 = !{!"llvm.loop.isvectorized", i32 1}
!53 = !{!"llvm.loop.unroll.runtime.disable"}
!54 = distinct !{!54, !32, !52}
!55 = !{!6, !12, i64 112}
!56 = !{!43, !9, i64 68}
!57 = !{!6, !9, i64 8}
!58 = !{!6, !9, i64 272}
!59 = !{!6, !12, i64 312}
!60 = !{!7, !9, i64 56}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,LowerExpectIntrinsicPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass