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

; 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.lua_State = type { %union.anon }
%union.anon = type { %struct.anon, [320 x i8] }
%struct.anon = type { %struct.GCRef, i8, i8, i8, i8, %struct.MRef, %struct.GCRef, ptr, ptr, %struct.MRef, %struct.MRef, %struct.GCRef, %struct.GCRef, ptr, i32 }
%struct.MRef = type { i32 }
%struct.GCRef = type { i32 }
%union.TValue = type { i64 }
%struct.anon.0 = type { %union.anon.1, i32 }
%union.anon.1 = type { %struct.GCRef }
%struct.lj_Debug = type { i32, ptr, ptr, ptr, ptr, i32, i32, i32, i32, [60 x i8], i32, i32, i32 }
%struct.anon.2 = type { %struct.GCRef, %union.FrameLink }
%union.FrameLink = type { i32 }
%struct.GCfuncC = type { %struct.GCRef, i8, i8, i8, i8, %struct.GCRef, %struct.GCRef, %struct.MRef, ptr, [1 x %union.TValue] }
%struct.GCfuncL = type { %struct.GCRef, i8, i8, i8, i8, %struct.GCRef, %struct.GCRef, %struct.MRef, [1 x %struct.GCRef] }
%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.GCstr = type { %struct.GCRef, i8, i8, i8, i8, i32, i32 }
%struct.GCtab = type { %struct.GCRef, i8, i8, i8, i8, %struct.MRef, %struct.GCRef, %struct.GCRef, ptr, %struct.MRef, i32, i32 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
declare hidden ptr @lj_debug_funcname(ptr noundef, ptr noundef, ptr noundef) #1

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

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

declare hidden void @lj_state_growstack1(ptr noundef) #2

; Function Attrs: nounwind uwtable
define hidden i32 @lj_debug_getinfo(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3) #1 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  store ptr null, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  store ptr null, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  %31 = load ptr, ptr %7, align 8, !tbaa !5
  %32 = load i8, ptr %31, align 1, !tbaa !11
  %33 = sext i8 %32 to i32
  %34 = icmp eq i32 %33, 62
  br i1 %34, label %35, label %55

35:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %36 = load ptr, ptr %6, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.lua_State, ptr %36, i32 0, i32 0
  %38 = getelementptr inbounds %struct.anon, ptr %37, i32 0, i32 8
  %39 = load ptr, ptr %38, align 8, !tbaa !11
  %40 = getelementptr inbounds %union.TValue, ptr %39, i64 -1
  store ptr %40, ptr %15, align 8, !tbaa !5
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = load ptr, ptr %15, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.anon.0, ptr %42, i32 0, i32 0
  %44 = getelementptr inbounds %struct.GCRef, ptr %43, i32 0, i32 0
  %45 = load i32, ptr %44, align 8, !tbaa !11
  %46 = zext i32 %45 to i64
  %47 = inttoptr i64 %46 to ptr
  store ptr %47, ptr %14, align 8, !tbaa !5
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.lua_State, ptr %48, i32 0, i32 0
  %50 = getelementptr inbounds %struct.anon, ptr %49, i32 0, i32 8
  %51 = load ptr, ptr %50, align 8, !tbaa !11
  %52 = getelementptr inbounds %union.TValue, ptr %51, i32 -1
  store ptr %52, ptr %50, align 8, !tbaa !11
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds i8, ptr %53, i32 1
  store ptr %54, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  br label %88

55:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %56 = load ptr, ptr %8, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.lj_Debug, ptr %56, i32 0, i32 10
  %58 = load i32, ptr %57, align 4, !tbaa !12
  %59 = and i32 %58, 65535
  store i32 %59, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %60 = load ptr, ptr %8, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.lj_Debug, ptr %60, i32 0, i32 10
  %62 = load i32, ptr %61, align 4, !tbaa !12
  %63 = lshr i32 %62, 16
  store i32 %63, ptr %17, align 4, !tbaa !9
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.lua_State, ptr %64, i32 0, i32 0
  %66 = getelementptr inbounds %struct.anon, ptr %65, i32 0, i32 10
  %67 = getelementptr inbounds %struct.MRef, ptr %66, i32 0, i32 0
  %68 = load i32, ptr %67, align 4, !tbaa !11
  %69 = zext i32 %68 to i64
  %70 = inttoptr i64 %69 to ptr
  %71 = load i32, ptr %16, align 4, !tbaa !9
  %72 = zext i32 %71 to i64
  %73 = getelementptr inbounds %union.TValue, ptr %70, i64 %72
  store ptr %73, ptr %12, align 8, !tbaa !5
  %74 = load i32, ptr %17, align 4, !tbaa !9
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %76, label %81

76:                                               ; preds = %55
  %77 = load ptr, ptr %12, align 8, !tbaa !5
  %78 = load i32, ptr %17, align 4, !tbaa !9
  %79 = zext i32 %78 to i64
  %80 = getelementptr inbounds %union.TValue, ptr %77, i64 %79
  store ptr %80, ptr %13, align 8, !tbaa !5
  br label %81

81:                                               ; preds = %76, %55
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.anon.2, ptr %82, i32 0, i32 0
  %84 = getelementptr inbounds %struct.GCRef, ptr %83, i32 0, i32 0
  %85 = load i32, ptr %84, align 8, !tbaa !11
  %86 = zext i32 %85 to i64
  %87 = inttoptr i64 %86 to ptr
  store ptr %87, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %88

88:                                               ; preds = %81, %35
  br label %89

89:                                               ; preds = %296, %88
  %90 = load ptr, ptr %7, align 8, !tbaa !5
  %91 = load i8, ptr %90, align 1, !tbaa !11
  %92 = icmp ne i8 %91, 0
  br i1 %92, label %93, label %299

93:                                               ; preds = %89
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  %95 = load i8, ptr %94, align 1, !tbaa !11
  %96 = sext i8 %95 to i32
  %97 = icmp eq i32 %96, 83
  br i1 %97, label %98, label %178

98:                                               ; preds = %93
  %99 = load ptr, ptr %14, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.GCfuncC, ptr %99, i32 0, i32 3
  %101 = load i8, ptr %100, align 2, !tbaa !11
  %102 = zext i8 %101 to i32
  %103 = icmp eq i32 %102, 0
  br i1 %103, label %104, label %156

104:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  %105 = load ptr, ptr %14, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.GCfuncL, ptr %105, i32 0, i32 7
  %107 = getelementptr inbounds %struct.MRef, ptr %106, i32 0, i32 0
  %108 = load i32, ptr %107, align 8, !tbaa !11
  %109 = zext i32 %108 to i64
  %110 = inttoptr i64 %109 to ptr
  %111 = getelementptr inbounds i8, ptr %110, i64 -64
  store ptr %111, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %112 = load ptr, ptr %18, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.GCproto, ptr %112, i32 0, i32 16
  %114 = load i32, ptr %113, align 4, !tbaa !14
  store i32 %114, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  %115 = load ptr, ptr %18, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.GCproto, ptr %115, i32 0, i32 15
  %117 = getelementptr inbounds %struct.GCRef, ptr %116, i32 0, i32 0
  %118 = load i32, ptr %117, align 4, !tbaa !19
  %119 = zext i32 %118 to i64
  %120 = inttoptr i64 %119 to ptr
  store ptr %120, ptr %20, align 8, !tbaa !5
  %121 = load ptr, ptr %20, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.GCstr, ptr %121, i64 1
  %123 = load ptr, ptr %8, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.lj_Debug, ptr %123, i32 0, i32 4
  store ptr %122, ptr %124, align 8, !tbaa !20
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.lj_Debug, ptr %125, i32 0, i32 9
  %127 = getelementptr inbounds [60 x i8], ptr %126, i64 0, i64 0
  %128 = load ptr, ptr %20, align 8, !tbaa !5
  %129 = load ptr, ptr %18, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.GCproto, ptr %129, i32 0, i32 16
  %131 = load i32, ptr %130, align 4, !tbaa !14
  call void @lj_debug_shortname(ptr noundef %127, ptr noundef %128, i32 noundef %131)
  %132 = load i32, ptr %19, align 4, !tbaa !9
  %133 = load ptr, ptr %8, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.lj_Debug, ptr %133, i32 0, i32 7
  store i32 %132, ptr %134, align 8, !tbaa !21
  %135 = load i32, ptr %19, align 4, !tbaa !9
  %136 = load ptr, ptr %18, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.GCproto, ptr %136, i32 0, i32 17
  %138 = load i32, ptr %137, align 4, !tbaa !22
  %139 = add nsw i32 %135, %138
  %140 = load ptr, ptr %8, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.lj_Debug, ptr %140, i32 0, i32 8
  store i32 %139, ptr %141, align 4, !tbaa !23
  %142 = load i32, ptr %19, align 4, !tbaa !9
  %143 = icmp ne i32 %142, 0
  br i1 %143, label %150, label %144

144:                                              ; preds = %104
  %145 = load ptr, ptr %18, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.GCproto, ptr %145, i32 0, i32 17
  %147 = load i32, ptr %146, align 4, !tbaa !22
  %148 = icmp ne i32 %147, 0
  %149 = xor i1 %148, true
  br label %150

150:                                              ; preds = %144, %104
  %151 = phi i1 [ true, %104 ], [ %149, %144 ]
  %152 = zext i1 %151 to i64
  %153 = select i1 %151, ptr @.str.18, ptr @.str.19
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.lj_Debug, ptr %154, i32 0, i32 3
  store ptr %153, ptr %155, align 8, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  br label %177

156:                                              ; preds = %98
  %157 = load ptr, ptr %8, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.lj_Debug, ptr %157, i32 0, i32 4
  store ptr @.str.20, ptr %158, align 8, !tbaa !20
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.lj_Debug, ptr %159, i32 0, i32 9
  %161 = getelementptr inbounds [60 x i8], ptr %160, i64 0, i64 0
  store i8 91, ptr %161, align 8, !tbaa !11
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.lj_Debug, ptr %162, i32 0, i32 9
  %164 = getelementptr inbounds [60 x i8], ptr %163, i64 0, i64 1
  store i8 67, ptr %164, align 1, !tbaa !11
  %165 = load ptr, ptr %8, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.lj_Debug, ptr %165, i32 0, i32 9
  %167 = getelementptr inbounds [60 x i8], ptr %166, i64 0, i64 2
  store i8 93, ptr %167, align 2, !tbaa !11
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.lj_Debug, ptr %168, i32 0, i32 9
  %170 = getelementptr inbounds [60 x i8], ptr %169, i64 0, i64 3
  store i8 0, ptr %170, align 1, !tbaa !11
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.lj_Debug, ptr %171, i32 0, i32 7
  store i32 -1, ptr %172, align 8, !tbaa !21
  %173 = load ptr, ptr %8, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.lj_Debug, ptr %173, i32 0, i32 8
  store i32 -1, ptr %174, align 4, !tbaa !23
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.lj_Debug, ptr %175, i32 0, i32 3
  store ptr @.str.21, ptr %176, align 8, !tbaa !24
  br label %177

177:                                              ; preds = %156, %150
  br label %295

178:                                              ; preds = %93
  %179 = load ptr, ptr %7, align 8, !tbaa !5
  %180 = load i8, ptr %179, align 1, !tbaa !11
  %181 = sext i8 %180 to i32
  %182 = icmp eq i32 %181, 108
  br i1 %182, label %183, label %196

183:                                              ; preds = %178
  %184 = load ptr, ptr %12, align 8, !tbaa !5
  %185 = icmp ne ptr %184, null
  br i1 %185, label %186, label %191

186:                                              ; preds = %183
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = load ptr, ptr %14, align 8, !tbaa !5
  %189 = load ptr, ptr %13, align 8, !tbaa !5
  %190 = call i32 @debug_frameline(ptr noundef %187, ptr noundef %188, ptr noundef %189)
  br label %192

191:                                              ; preds = %183
  br label %192

192:                                              ; preds = %191, %186
  %193 = phi i32 [ %190, %186 ], [ -1, %191 ]
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.lj_Debug, ptr %194, i32 0, i32 5
  store i32 %193, ptr %195, align 8, !tbaa !25
  br label %294

196:                                              ; preds = %178
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = load i8, ptr %197, align 1, !tbaa !11
  %199 = sext i8 %198 to i32
  %200 = icmp eq i32 %199, 117
  br i1 %200, label %201, label %248

201:                                              ; preds = %196
  %202 = load ptr, ptr %14, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.GCfuncC, ptr %202, i32 0, i32 4
  %204 = load i8, ptr %203, align 1, !tbaa !11
  %205 = zext i8 %204 to i32
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.lj_Debug, ptr %206, i32 0, i32 6
  store i32 %205, ptr %207, align 4, !tbaa !26
  %208 = load i32, ptr %9, align 4, !tbaa !9
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %210, label %247

210:                                              ; preds = %201
  %211 = load ptr, ptr %14, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.GCfuncC, ptr %211, i32 0, i32 3
  %213 = load i8, ptr %212, align 2, !tbaa !11
  %214 = zext i8 %213 to i32
  %215 = icmp eq i32 %214, 0
  br i1 %215, label %216, label %241

216:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %217 = load ptr, ptr %14, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.GCfuncL, ptr %217, i32 0, i32 7
  %219 = getelementptr inbounds %struct.MRef, ptr %218, i32 0, i32 0
  %220 = load i32, ptr %219, align 8, !tbaa !11
  %221 = zext i32 %220 to i64
  %222 = inttoptr i64 %221 to ptr
  %223 = getelementptr inbounds i8, ptr %222, i64 -64
  store ptr %223, ptr %21, align 8, !tbaa !5
  %224 = load ptr, ptr %21, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.GCproto, ptr %224, i32 0, i32 3
  %226 = load i8, ptr %225, align 2, !tbaa !27
  %227 = zext i8 %226 to i32
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.lj_Debug, ptr %228, i32 0, i32 11
  store i32 %227, ptr %229, align 8, !tbaa !28
  %230 = load ptr, ptr %21, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.GCproto, ptr %230, i32 0, i32 13
  %232 = load i8, ptr %231, align 1, !tbaa !29
  %233 = zext i8 %232 to i32
  %234 = and i32 %233, 2
  %235 = icmp ne i32 %234, 0
  %236 = xor i1 %235, true
  %237 = xor i1 %236, true
  %238 = zext i1 %237 to i32
  %239 = load ptr, ptr %8, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.lj_Debug, ptr %239, i32 0, i32 12
  store i32 %238, ptr %240, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  br label %246

241:                                              ; preds = %210
  %242 = load ptr, ptr %8, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.lj_Debug, ptr %242, i32 0, i32 11
  store i32 0, ptr %243, align 8, !tbaa !28
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.lj_Debug, ptr %244, i32 0, i32 12
  store i32 1, ptr %245, align 4, !tbaa !30
  br label %246

246:                                              ; preds = %241, %216
  br label %247

247:                                              ; preds = %246, %201
  br label %293

248:                                              ; preds = %196
  %249 = load ptr, ptr %7, align 8, !tbaa !5
  %250 = load i8, ptr %249, align 1, !tbaa !11
  %251 = sext i8 %250 to i32
  %252 = icmp eq i32 %251, 110
  br i1 %252, label %253, label %277

253:                                              ; preds = %248
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = icmp ne ptr %254, null
  br i1 %255, label %256, label %262

256:                                              ; preds = %253
  %257 = load ptr, ptr %6, align 8, !tbaa !5
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.lj_Debug, ptr %259, i32 0, i32 1
  %261 = call ptr @lj_debug_funcname(ptr noundef %257, ptr noundef %258, ptr noundef %260)
  br label %263

262:                                              ; preds = %253
  br label %263

263:                                              ; preds = %262, %256
  %264 = phi ptr [ %261, %256 ], [ null, %262 ]
  %265 = load ptr, ptr %8, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.lj_Debug, ptr %265, i32 0, i32 2
  store ptr %264, ptr %266, align 8, !tbaa !31
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.lj_Debug, ptr %267, i32 0, i32 2
  %269 = load ptr, ptr %268, align 8, !tbaa !31
  %270 = icmp eq ptr %269, null
  br i1 %270, label %271, label %276

271:                                              ; preds = %263
  %272 = load ptr, ptr %8, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.lj_Debug, ptr %272, i32 0, i32 2
  store ptr @.str, ptr %273, align 8, !tbaa !31
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.lj_Debug, ptr %274, i32 0, i32 1
  store ptr null, ptr %275, align 8, !tbaa !32
  br label %276

276:                                              ; preds = %271, %263
  br label %292

277:                                              ; preds = %248
  %278 = load ptr, ptr %7, align 8, !tbaa !5
  %279 = load i8, ptr %278, align 1, !tbaa !11
  %280 = sext i8 %279 to i32
  %281 = icmp eq i32 %280, 102
  br i1 %281, label %282, label %283

282:                                              ; preds = %277
  store i32 1, ptr %10, align 4, !tbaa !9
  br label %291

283:                                              ; preds = %277
  %284 = load ptr, ptr %7, align 8, !tbaa !5
  %285 = load i8, ptr %284, align 1, !tbaa !11
  %286 = sext i8 %285 to i32
  %287 = icmp eq i32 %286, 76
  br i1 %287, label %288, label %289

288:                                              ; preds = %283
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %290

289:                                              ; preds = %283
  store i32 0, ptr %5, align 4
  store i32 1, ptr %22, align 4
  br label %472

290:                                              ; preds = %288
  br label %291

291:                                              ; preds = %290, %282
  br label %292

292:                                              ; preds = %291, %276
  br label %293

293:                                              ; preds = %292, %247
  br label %294

294:                                              ; preds = %293, %192
  br label %295

295:                                              ; preds = %294, %177
  br label %296

296:                                              ; preds = %295
  %297 = load ptr, ptr %7, align 8, !tbaa !5
  %298 = getelementptr inbounds i8, ptr %297, i32 1
  store ptr %298, ptr %7, align 8, !tbaa !5
  br label %89, !llvm.loop !33

299:                                              ; preds = %89
  %300 = load i32, ptr %10, align 4, !tbaa !9
  %301 = icmp ne i32 %300, 0
  br i1 %301, label %302, label %327

302:                                              ; preds = %299
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = load ptr, ptr %6, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.lua_State, ptr %304, i32 0, i32 0
  %306 = getelementptr inbounds %struct.anon, ptr %305, i32 0, i32 8
  %307 = load ptr, ptr %306, align 8, !tbaa !11
  %308 = load ptr, ptr %14, align 8, !tbaa !5
  call void @setfuncV(ptr noundef %303, ptr noundef %307, ptr noundef %308)
  %309 = load ptr, ptr %6, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct.lua_State, ptr %309, i32 0, i32 0
  %311 = getelementptr inbounds %struct.anon, ptr %310, i32 0, i32 8
  %312 = load ptr, ptr %311, align 8, !tbaa !11
  %313 = getelementptr inbounds %union.TValue, ptr %312, i32 1
  store ptr %313, ptr %311, align 8, !tbaa !11
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.lua_State, ptr %314, i32 0, i32 0
  %316 = getelementptr inbounds %struct.anon, ptr %315, i32 0, i32 9
  %317 = getelementptr inbounds %struct.MRef, ptr %316, i32 0, i32 0
  %318 = load i32, ptr %317, align 8, !tbaa !11
  %319 = zext i32 %318 to i64
  %320 = inttoptr i64 %319 to ptr
  %321 = icmp uge ptr %313, %320
  br i1 %321, label %322, label %324

322:                                              ; preds = %302
  %323 = load ptr, ptr %6, align 8, !tbaa !5
  call void @lj_state_growstack1(ptr noundef %323)
  br label %324

324:                                              ; preds = %322, %302
  %325 = phi i1 [ false, %302 ], [ false, %322 ]
  %326 = zext i1 %325 to i32
  br label %327

327:                                              ; preds = %324, %299
  %328 = load i32, ptr %11, align 4, !tbaa !9
  %329 = icmp ne i32 %328, 0
  br i1 %329, label %330, label %471

330:                                              ; preds = %327
  %331 = load ptr, ptr %14, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.GCfuncC, ptr %331, i32 0, i32 3
  %333 = load i8, ptr %332, align 2, !tbaa !11
  %334 = zext i8 %333 to i32
  %335 = icmp eq i32 %334, 0
  br i1 %335, label %336, label %446

336:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %337 = load ptr, ptr %6, align 8, !tbaa !5
  %338 = call ptr @lj_tab_new(ptr noundef %337, i32 noundef 0, i32 noundef 0)
  store ptr %338, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %339 = load ptr, ptr %14, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.GCfuncL, ptr %339, i32 0, i32 7
  %341 = getelementptr inbounds %struct.MRef, ptr %340, i32 0, i32 0
  %342 = load i32, ptr %341, align 8, !tbaa !11
  %343 = zext i32 %342 to i64
  %344 = inttoptr i64 %343 to ptr
  %345 = getelementptr inbounds i8, ptr %344, i64 -64
  store ptr %345, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %346 = load ptr, ptr %24, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.GCproto, ptr %346, i32 0, i32 18
  %348 = getelementptr inbounds %struct.MRef, ptr %347, i32 0, i32 0
  %349 = load i32, ptr %348, align 4, !tbaa !35
  %350 = zext i32 %349 to i64
  %351 = inttoptr i64 %350 to ptr
  store ptr %351, ptr %25, align 8, !tbaa !5
  %352 = load ptr, ptr %25, align 8, !tbaa !5
  %353 = icmp ne ptr %352, null
  br i1 %353, label %354, label %439

354:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %355 = load ptr, ptr %24, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.GCproto, ptr %355, i32 0, i32 16
  %357 = load i32, ptr %356, align 4, !tbaa !14
  store i32 %357, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %358 = load ptr, ptr %24, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.GCproto, ptr %358, i32 0, i32 17
  %360 = load i32, ptr %359, align 4, !tbaa !22
  %361 = icmp slt i32 %360, 256
  br i1 %361, label %362, label %363

362:                                              ; preds = %354
  br label %370

363:                                              ; preds = %354
  %364 = load ptr, ptr %24, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.GCproto, ptr %364, i32 0, i32 17
  %366 = load i32, ptr %365, align 4, !tbaa !22
  %367 = icmp slt i32 %366, 65536
  %368 = zext i1 %367 to i64
  %369 = select i1 %367, i32 2, i32 4
  br label %370

370:                                              ; preds = %363, %362
  %371 = phi i32 [ 1, %362 ], [ %369, %363 ]
  store i32 %371, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %372 = load ptr, ptr %24, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.GCproto, ptr %372, i32 0, i32 5
  %374 = load i32, ptr %373, align 4, !tbaa !36
  %375 = sub i32 %374, 1
  store i32 %375, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %376

376:                                              ; preds = %435, %370
  %377 = load i32, ptr %28, align 4, !tbaa !9
  %378 = load i32, ptr %29, align 4, !tbaa !9
  %379 = icmp ult i32 %377, %378
  br i1 %379, label %380, label %438

380:                                              ; preds = %376
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %381 = load i32, ptr %26, align 4, !tbaa !9
  %382 = load i32, ptr %27, align 4, !tbaa !9
  %383 = icmp eq i32 %382, 1
  br i1 %383, label %384, label %391

384:                                              ; preds = %380
  %385 = load ptr, ptr %25, align 8, !tbaa !5
  %386 = load i32, ptr %28, align 4, !tbaa !9
  %387 = zext i32 %386 to i64
  %388 = getelementptr inbounds i8, ptr %385, i64 %387
  %389 = load i8, ptr %388, align 1, !tbaa !11
  %390 = zext i8 %389 to i32
  br label %409

391:                                              ; preds = %380
  %392 = load i32, ptr %27, align 4, !tbaa !9
  %393 = icmp eq i32 %392, 2
  br i1 %393, label %394, label %401

394:                                              ; preds = %391
  %395 = load ptr, ptr %25, align 8, !tbaa !5
  %396 = load i32, ptr %28, align 4, !tbaa !9
  %397 = zext i32 %396 to i64
  %398 = getelementptr inbounds i16, ptr %395, i64 %397
  %399 = load i16, ptr %398, align 2, !tbaa !37
  %400 = zext i16 %399 to i32
  br label %407

401:                                              ; preds = %391
  %402 = load ptr, ptr %25, align 8, !tbaa !5
  %403 = load i32, ptr %28, align 4, !tbaa !9
  %404 = zext i32 %403 to i64
  %405 = getelementptr inbounds i32, ptr %402, i64 %404
  %406 = load i32, ptr %405, align 4, !tbaa !9
  br label %407

407:                                              ; preds = %401, %394
  %408 = phi i32 [ %400, %394 ], [ %406, %401 ]
  br label %409

409:                                              ; preds = %407, %384
  %410 = phi i32 [ %390, %384 ], [ %408, %407 ]
  %411 = add nsw i32 %381, %410
  store i32 %411, ptr %30, align 4, !tbaa !9
  %412 = load i32, ptr %30, align 4, !tbaa !9
  %413 = load ptr, ptr %23, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.GCtab, ptr %413, i32 0, i32 10
  %415 = load i32, ptr %414, align 4, !tbaa !38
  %416 = icmp ult i32 %412, %415
  br i1 %416, label %417, label %427

417:                                              ; preds = %409
  %418 = load ptr, ptr %23, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.GCtab, ptr %418, i32 0, i32 5
  %420 = getelementptr inbounds %struct.MRef, ptr %419, i32 0, i32 0
  %421 = load i32, ptr %420, align 8, !tbaa !40
  %422 = zext i32 %421 to i64
  %423 = inttoptr i64 %422 to ptr
  %424 = load i32, ptr %30, align 4, !tbaa !9
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds %union.TValue, ptr %423, i64 %425
  br label %432

427:                                              ; preds = %409
  %428 = load ptr, ptr %6, align 8, !tbaa !5
  %429 = load ptr, ptr %23, align 8, !tbaa !5
  %430 = load i32, ptr %30, align 4, !tbaa !9
  %431 = call ptr @lj_tab_setinth(ptr noundef %428, ptr noundef %429, i32 noundef %430)
  br label %432

432:                                              ; preds = %427, %417
  %433 = phi ptr [ %426, %417 ], [ %431, %427 ]
  %434 = getelementptr inbounds %struct.anon.0, ptr %433, i32 0, i32 1
  store i32 -3, ptr %434, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %435

435:                                              ; preds = %432
  %436 = load i32, ptr %28, align 4, !tbaa !9
  %437 = add i32 %436, 1
  store i32 %437, ptr %28, align 4, !tbaa !9
  br label %376, !llvm.loop !41

438:                                              ; preds = %376
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %439

439:                                              ; preds = %438, %336
  %440 = load ptr, ptr %6, align 8, !tbaa !5
  %441 = load ptr, ptr %6, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.lua_State, ptr %441, i32 0, i32 0
  %443 = getelementptr inbounds %struct.anon, ptr %442, i32 0, i32 8
  %444 = load ptr, ptr %443, align 8, !tbaa !11
  %445 = load ptr, ptr %23, align 8, !tbaa !5
  call void @settabV(ptr noundef %440, ptr noundef %444, ptr noundef %445)
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  br label %452

446:                                              ; preds = %330
  %447 = load ptr, ptr %6, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.lua_State, ptr %447, i32 0, i32 0
  %449 = getelementptr inbounds %struct.anon, ptr %448, i32 0, i32 8
  %450 = load ptr, ptr %449, align 8, !tbaa !11
  %451 = getelementptr inbounds %struct.anon.0, ptr %450, i32 0, i32 1
  store i32 -1, ptr %451, align 4, !tbaa !11
  br label %452

452:                                              ; preds = %446, %439
  %453 = load ptr, ptr %6, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.lua_State, ptr %453, i32 0, i32 0
  %455 = getelementptr inbounds %struct.anon, ptr %454, i32 0, i32 8
  %456 = load ptr, ptr %455, align 8, !tbaa !11
  %457 = getelementptr inbounds %union.TValue, ptr %456, i32 1
  store ptr %457, ptr %455, align 8, !tbaa !11
  %458 = load ptr, ptr %6, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.lua_State, ptr %458, i32 0, i32 0
  %460 = getelementptr inbounds %struct.anon, ptr %459, i32 0, i32 9
  %461 = getelementptr inbounds %struct.MRef, ptr %460, i32 0, i32 0
  %462 = load i32, ptr %461, align 8, !tbaa !11
  %463 = zext i32 %462 to i64
  %464 = inttoptr i64 %463 to ptr
  %465 = icmp uge ptr %457, %464
  br i1 %465, label %466, label %468

466:                                              ; preds = %452
  %467 = load ptr, ptr %6, align 8, !tbaa !5
  call void @lj_state_growstack1(ptr noundef %467)
  br label %468

468:                                              ; preds = %466, %452
  %469 = phi i1 [ false, %452 ], [ false, %466 ]
  %470 = zext i1 %469 to i32
  br label %471

471:                                              ; preds = %468, %327
  store i32 1, ptr %5, align 4
  store i32 1, ptr %22, align 4
  br label %472

472:                                              ; preds = %471, %289
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %473 = load i32, ptr %5, align 4
  ret i32 %473
}

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

declare hidden ptr @lj_tab_new(ptr noundef, i32 noundef, i32 noundef) #2

declare hidden ptr @lj_tab_setinth(ptr noundef, ptr noundef, i32 noundef) #2

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

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

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

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


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

%union.TValue = type { i64 }

@.str = external hidden unnamed_addr constant [1 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1

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

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

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

declare hidden void @lj_state_growstack1(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define hidden range(i32 0, 2) i32 @lj_debug_getinfo(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, i32 noundef %3) local_unnamed_addr #0 {
  %5 = load i8, ptr %1, align 1, !tbaa !5
  %6 = icmp eq i8 %5, 62
  br i1 %6, label %7, label %13

7:                                                ; preds = %4
  %8 = getelementptr inbounds i8, ptr %0, i64 24
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %9, i64 -8
  %11 = load i32, ptr %10, align 8, !tbaa !5
  store ptr %10, ptr %8, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %1, i64 1
  br label %27

13:                                               ; preds = %4
  %14 = getelementptr inbounds i8, ptr %2, i64 116
  %15 = load i32, ptr %14, align 4, !tbaa !8
  %16 = and i32 %15, 65535
  %17 = getelementptr inbounds i8, ptr %0, i64 36
  %18 = load i32, ptr %17, align 4, !tbaa !5
  %19 = zext i32 %18 to i64
  %20 = inttoptr i64 %19 to ptr
  %21 = zext nneg i32 %16 to i64
  %22 = getelementptr inbounds %union.TValue, ptr %20, i64 %21
  %.not = icmp ult i32 %15, 65536
  %23 = lshr i32 %15, 16
  %24 = zext nneg i32 %23 to i64
  %25 = getelementptr inbounds %union.TValue, ptr %22, i64 %24
  %.0121 = select i1 %.not, ptr null, ptr %25
  %26 = load i32, ptr %22, align 8, !tbaa !5
  br label %27

27:                                               ; preds = %13, %7
  %.0123.in.in = phi i32 [ %11, %7 ], [ %26, %13 ]
  %.1122 = phi ptr [ null, %7 ], [ %.0121, %13 ]
  %.0120 = phi ptr [ null, %7 ], [ %22, %13 ]
  %.0114 = phi ptr [ %12, %7 ], [ %1, %13 ]
  %.0123.in = zext i32 %.0123.in.in to i64
  %.0123 = inttoptr i64 %.0123.in to ptr
  %.not138 = icmp eq ptr %.0120, null
  %28 = getelementptr inbounds i8, ptr %2, i64 8
  %29 = getelementptr inbounds i8, ptr %2, i64 16
  %30 = getelementptr inbounds i8, ptr %.0123, i64 7
  %31 = getelementptr inbounds i8, ptr %2, i64 44
  %.not139 = icmp eq i32 %3, 0
  %32 = getelementptr inbounds i8, ptr %.0123, i64 6
  %33 = getelementptr inbounds i8, ptr %2, i64 120
  %34 = getelementptr inbounds i8, ptr %2, i64 124
  %35 = getelementptr inbounds i8, ptr %.0123, i64 16
  %36 = getelementptr inbounds i8, ptr %2, i64 40
  %37 = getelementptr inbounds i8, ptr %2, i64 32
  %38 = getelementptr inbounds i8, ptr %2, i64 56
  %39 = getelementptr inbounds i8, ptr %2, i64 48
  %40 = getelementptr inbounds i8, ptr %2, i64 52
  %41 = getelementptr inbounds i8, ptr %2, i64 24
  br label %42

42:                                               ; preds = %91, %27
  %.0118 = phi i32 [ 0, %27 ], [ %.1119, %91 ]
  %.0116 = phi i32 [ 0, %27 ], [ %.1117, %91 ]
  %.1 = phi ptr [ %.0114, %27 ], [ %92, %91 ]
  %43 = load i8, ptr %.1, align 1, !tbaa !5
  switch i8 %43, label %.loopexit145 [
    i8 0, label %93
    i8 83, label %44
    i8 108, label %63
    i8 117, label %68
    i8 110, label %86
    i8 102, label %91
    i8 76, label %90
  ]

44:                                               ; preds = %42
  %45 = load i8, ptr %32, align 2, !tbaa !5
  %46 = icmp eq i8 %45, 0
  br i1 %46, label %47, label %62

47:                                               ; preds = %44
  %48 = load i32, ptr %35, align 8, !tbaa !5
  %49 = zext i32 %48 to i64
  %50 = inttoptr i64 %49 to ptr
  %51 = getelementptr inbounds i8, ptr %50, i64 -20
  %52 = load i32, ptr %51, align 4, !tbaa !12
  %53 = getelementptr inbounds i8, ptr %50, i64 -24
  %54 = load i32, ptr %53, align 4, !tbaa !17
  %55 = zext i32 %54 to i64
  %56 = inttoptr i64 %55 to ptr
  %57 = getelementptr inbounds i8, ptr %56, i64 16
  store ptr %57, ptr %37, align 8, !tbaa !18
  tail call void @lj_debug_shortname(ptr noundef nonnull %38, ptr noundef %56, i32 noundef %52)
  store i32 %52, ptr %39, align 8, !tbaa !19
  %58 = getelementptr inbounds i8, ptr %50, i64 -16
  %59 = load i32, ptr %58, align 4, !tbaa !20
  %.fr = freeze i32 %59
  %60 = add nsw i32 %.fr, %52
  store i32 %60, ptr %40, align 4, !tbaa !21
  %.not141 = icmp ne i32 %52, 0
  %.not142 = icmp eq i32 %.fr, 0
  %or.cond = or i1 %.not141, %.not142
  %61 = select i1 %or.cond, ptr @.str.18, ptr @.str.19
  store ptr %61, ptr %41, align 8, !tbaa !22
  br label %91

62:                                               ; preds = %44
  store ptr @.str.20, ptr %37, align 8, !tbaa !18
  store <4 x i8> <i8 91, i8 67, i8 93, i8 0>, ptr %38, align 8, !tbaa !5
  store i32 -1, ptr %39, align 8, !tbaa !19
  store i32 -1, ptr %40, align 4, !tbaa !21
  store ptr @.str.21, ptr %41, align 8, !tbaa !22
  br label %91

63:                                               ; preds = %42
  br i1 %.not138, label %66, label %64

64:                                               ; preds = %63
  %65 = tail call i32 @debug_frameline(ptr noundef %0, ptr noundef %.0123, ptr noundef %.1122)
  br label %66

66:                                               ; preds = %63, %64
  %67 = phi i32 [ %65, %64 ], [ -1, %63 ]
  store i32 %67, ptr %36, align 8, !tbaa !23
  br label %91

68:                                               ; preds = %42
  %69 = load i8, ptr %30, align 1, !tbaa !5
  %70 = zext i8 %69 to i32
  store i32 %70, ptr %31, align 4, !tbaa !24
  br i1 %.not139, label %91, label %71

71:                                               ; preds = %68
  %72 = load i8, ptr %32, align 2, !tbaa !5
  %73 = icmp eq i8 %72, 0
  br i1 %73, label %74, label %85

74:                                               ; preds = %71
  %75 = load i32, ptr %35, align 8, !tbaa !5
  %76 = zext i32 %75 to i64
  %77 = inttoptr i64 %76 to ptr
  %78 = getelementptr inbounds i8, ptr %77, i64 -58
  %79 = load i8, ptr %78, align 2, !tbaa !25
  %80 = zext i8 %79 to i32
  store i32 %80, ptr %33, align 8, !tbaa !26
  %81 = getelementptr inbounds i8, ptr %77, i64 -27
  %82 = load i8, ptr %81, align 1, !tbaa !27
  %83 = lshr i8 %82, 1
  %.lobit = and i8 %83, 1
  %84 = zext nneg i8 %.lobit to i32
  store i32 %84, ptr %34, align 4, !tbaa !28
  br label %91

85:                                               ; preds = %71
  store i32 0, ptr %33, align 8, !tbaa !26
  store i32 1, ptr %34, align 4, !tbaa !28
  br label %91

86:                                               ; preds = %42
  br i1 %.not138, label %.thread144, label %87

87:                                               ; preds = %86
  %88 = tail call ptr @lj_debug_funcname(ptr noundef %0, ptr noundef nonnull %.0120, ptr noundef nonnull %28)
  store ptr %88, ptr %29, align 8, !tbaa !29
  %89 = icmp eq ptr %88, null
  br i1 %89, label %.thread144, label %91

.thread144:                                       ; preds = %86, %87
  store ptr @.str, ptr %29, align 8, !tbaa !29
  store ptr null, ptr %28, align 8, !tbaa !30
  br label %91

90:                                               ; preds = %42
  br label %91

91:                                               ; preds = %42, %62, %47, %74, %85, %68, %90, %87, %.thread144, %66
  %.1119 = phi i32 [ %.0118, %47 ], [ %.0118, %62 ], [ %.0118, %66 ], [ %.0118, %74 ], [ %.0118, %85 ], [ %.0118, %68 ], [ %.0118, %.thread144 ], [ %.0118, %87 ], [ 1, %90 ], [ %.0118, %42 ]
  %.1117 = phi i32 [ %.0116, %47 ], [ %.0116, %62 ], [ %.0116, %66 ], [ %.0116, %74 ], [ %.0116, %85 ], [ %.0116, %68 ], [ %.0116, %.thread144 ], [ %.0116, %87 ], [ %.0116, %90 ], [ 1, %42 ]
  %92 = getelementptr inbounds i8, ptr %.1, i64 1
  br label %42, !llvm.loop !31

93:                                               ; preds = %42
  %.not133 = icmp eq i32 %.0116, 0
  br i1 %.not133, label %104, label %94

94:                                               ; preds = %93
  %95 = getelementptr inbounds i8, ptr %0, i64 24
  %96 = load ptr, ptr %95, align 8, !tbaa !5
  tail call void @setfuncV(ptr noundef %0, ptr noundef %96, ptr noundef %.0123)
  %97 = load ptr, ptr %95, align 8, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %97, i64 8
  store ptr %98, ptr %95, align 8, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %0, i64 32
  %100 = load i32, ptr %99, align 8, !tbaa !5
  %101 = zext i32 %100 to i64
  %102 = inttoptr i64 %101 to ptr
  %.not134 = icmp ult ptr %98, %102
  br i1 %.not134, label %104, label %103

103:                                              ; preds = %94
  tail call void @lj_state_growstack1(ptr noundef nonnull %0) #3
  br label %104

104:                                              ; preds = %94, %103, %93
  %.not135 = icmp eq i32 %.0118, 0
  br i1 %.not135, label %.loopexit145, label %105

105:                                              ; preds = %104
  %106 = load i8, ptr %32, align 2, !tbaa !5
  %107 = icmp eq i8 %106, 0
  br i1 %107, label %108, label %183

108:                                              ; preds = %105
  %109 = tail call ptr @lj_tab_new(ptr noundef %0, i32 noundef 0, i32 noundef 0) #3
  %110 = load i32, ptr %35, align 8, !tbaa !5
  %111 = zext i32 %110 to i64
  %112 = inttoptr i64 %111 to ptr
  %113 = getelementptr inbounds i8, ptr %112, i64 -12
  %114 = load i32, ptr %113, align 4, !tbaa !33
  %115 = zext i32 %114 to i64
  %116 = inttoptr i64 %115 to ptr
  %.not136 = icmp eq i32 %114, 0
  br i1 %.not136, label %.loopexit, label %117

117:                                              ; preds = %108
  %118 = getelementptr inbounds i8, ptr %112, i64 -20
  %119 = load i32, ptr %118, align 4, !tbaa !12
  %120 = getelementptr inbounds i8, ptr %112, i64 -56
  %121 = load i32, ptr %120, align 4, !tbaa !34
  %122 = add i32 %121, -1
  %.not151 = icmp eq i32 %122, 0
  br i1 %.not151, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %117
  %123 = getelementptr inbounds i8, ptr %112, i64 -16
  %124 = load i32, ptr %123, align 4, !tbaa !20
  %125 = icmp slt i32 %124, 256
  %126 = icmp slt i32 %124, 65536
  %127 = select i1 %126, i32 2, i32 4
  %128 = select i1 %125, i32 1, i32 %127
  %129 = getelementptr inbounds i8, ptr %109, i64 36
  %130 = getelementptr inbounds i8, ptr %109, i64 8
  %wide.trip.count165 = zext i32 %122 to i64
  switch i32 %128, label %.lr.ph.split [
    i32 1, label %.lr.ph.split.us
    i32 2, label %.lr.ph.split.us149
  ]

.lr.ph.split.us:                                  ; preds = %.lr.ph, %145
  %indvars.iv157 = phi i64 [ %indvars.iv.next158, %145 ], [ 0, %.lr.ph ]
  %131 = getelementptr inbounds i8, ptr %116, i64 %indvars.iv157
  %132 = load i8, ptr %131, align 1, !tbaa !5
  %133 = zext i8 %132 to i32
  %134 = add nsw i32 %119, %133
  %135 = load i32, ptr %129, align 4, !tbaa !35
  %136 = icmp ult i32 %134, %135
  br i1 %136, label %139, label %137

137:                                              ; preds = %.lr.ph.split.us
  %138 = tail call ptr @lj_tab_setinth(ptr noundef %0, ptr noundef nonnull %109, i32 noundef %134) #3
  br label %145

139:                                              ; preds = %.lr.ph.split.us
  %140 = load i32, ptr %130, align 8, !tbaa !37
  %141 = zext i32 %140 to i64
  %142 = inttoptr i64 %141 to ptr
  %143 = sext i32 %134 to i64
  %144 = getelementptr inbounds %union.TValue, ptr %142, i64 %143
  br label %145

145:                                              ; preds = %139, %137
  %146 = phi ptr [ %144, %139 ], [ %138, %137 ]
  %147 = getelementptr inbounds i8, ptr %146, i64 4
  store i32 -3, ptr %147, align 4, !tbaa !5
  %indvars.iv.next158 = add nuw nsw i64 %indvars.iv157, 1
  %exitcond161.not = icmp eq i64 %indvars.iv.next158, %wide.trip.count165
  br i1 %exitcond161.not, label %.loopexit, label %.lr.ph.split.us, !llvm.loop !38

.lr.ph.split.us149:                               ; preds = %.lr.ph, %162
  %indvars.iv = phi i64 [ %indvars.iv.next, %162 ], [ 0, %.lr.ph ]
  %148 = getelementptr inbounds i16, ptr %116, i64 %indvars.iv
  %149 = load i16, ptr %148, align 2, !tbaa !39
  %150 = zext i16 %149 to i32
  %151 = add nsw i32 %119, %150
  %152 = load i32, ptr %129, align 4, !tbaa !35
  %153 = icmp ult i32 %151, %152
  br i1 %153, label %156, label %154

154:                                              ; preds = %.lr.ph.split.us149
  %155 = tail call ptr @lj_tab_setinth(ptr noundef %0, ptr noundef nonnull %109, i32 noundef %151) #3
  br label %162

156:                                              ; preds = %.lr.ph.split.us149
  %157 = load i32, ptr %130, align 8, !tbaa !37
  %158 = zext i32 %157 to i64
  %159 = inttoptr i64 %158 to ptr
  %160 = sext i32 %151 to i64
  %161 = getelementptr inbounds %union.TValue, ptr %159, i64 %160
  br label %162

162:                                              ; preds = %156, %154
  %163 = phi ptr [ %161, %156 ], [ %155, %154 ]
  %164 = getelementptr inbounds i8, ptr %163, i64 4
  store i32 -3, ptr %164, align 4, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count165
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph.split.us149, !llvm.loop !38

.lr.ph.split:                                     ; preds = %.lr.ph, %178
  %indvars.iv162 = phi i64 [ %indvars.iv.next163, %178 ], [ 0, %.lr.ph ]
  %165 = getelementptr inbounds i32, ptr %116, i64 %indvars.iv162
  %166 = load i32, ptr %165, align 4, !tbaa !40
  %167 = add nsw i32 %166, %119
  %168 = load i32, ptr %129, align 4, !tbaa !35
  %169 = icmp ult i32 %167, %168
  br i1 %169, label %170, label %176

170:                                              ; preds = %.lr.ph.split
  %171 = load i32, ptr %130, align 8, !tbaa !37
  %172 = zext i32 %171 to i64
  %173 = inttoptr i64 %172 to ptr
  %174 = sext i32 %167 to i64
  %175 = getelementptr inbounds %union.TValue, ptr %173, i64 %174
  br label %178

176:                                              ; preds = %.lr.ph.split
  %177 = tail call ptr @lj_tab_setinth(ptr noundef %0, ptr noundef nonnull %109, i32 noundef %167) #3
  br label %178

178:                                              ; preds = %176, %170
  %179 = phi ptr [ %175, %170 ], [ %177, %176 ]
  %180 = getelementptr inbounds i8, ptr %179, i64 4
  store i32 -3, ptr %180, align 4, !tbaa !5
  %indvars.iv.next163 = add nuw nsw i64 %indvars.iv162, 1
  %exitcond166.not = icmp eq i64 %indvars.iv.next163, %wide.trip.count165
  br i1 %exitcond166.not, label %.loopexit, label %.lr.ph.split, !llvm.loop !38

.loopexit:                                        ; preds = %162, %145, %178, %117, %108
  %181 = getelementptr inbounds i8, ptr %0, i64 24
  %182 = load ptr, ptr %181, align 8, !tbaa !5
  tail call void @settabV(ptr noundef %0, ptr noundef %182, ptr noundef %109)
  br label %187

183:                                              ; preds = %105
  %184 = getelementptr inbounds i8, ptr %0, i64 24
  %185 = load ptr, ptr %184, align 8, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %185, i64 4
  store i32 -1, ptr %186, align 4, !tbaa !5
  br label %187

187:                                              ; preds = %183, %.loopexit
  %188 = getelementptr inbounds i8, ptr %0, i64 24
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  %190 = getelementptr inbounds i8, ptr %189, i64 8
  store ptr %190, ptr %188, align 8, !tbaa !5
  %191 = getelementptr inbounds i8, ptr %0, i64 32
  %192 = load i32, ptr %191, align 8, !tbaa !5
  %193 = zext i32 %192 to i64
  %194 = inttoptr i64 %193 to ptr
  %.not137 = icmp ult ptr %190, %194
  br i1 %.not137, label %.loopexit145, label %195

195:                                              ; preds = %187
  tail call void @lj_state_growstack1(ptr noundef nonnull %0) #3
  br label %.loopexit145

.loopexit145:                                     ; preds = %42, %104, %195, %187
  %.0 = phi i32 [ 1, %187 ], [ 1, %195 ], [ 1, %104 ], [ 0, %42 ]
  ret i32 %.0
}

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

declare hidden ptr @lj_tab_new(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare hidden ptr @lj_tab_setinth(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

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

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

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

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


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