@@ -133,7 +133,7 @@ void RaviCodeGenerator::emit_EQ(RaviFunctionDef *def, int A, int B, int C,
llvm::Value *val = emit_gep_register(def, jA - 1);

// Call luaF_close
CreateCall2(def->builder, def->luaF_closeF, def->L, val);
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
}
// Do the jump
def->builder->CreateBr(def->jmp_targets[j].jmp1);
@@ -239,7 +239,7 @@ void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, int A, int B, int C,
llvm::Value *val = emit_gep_register(def, jA - 1);

// Call luaF_close
CreateCall2(def->builder, def->luaF_closeF, def->L, val);
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
}
// Do the jump
def->builder->CreateBr(def->jmp_targets[j].jmp1);
@@ -311,7 +311,7 @@ void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, int A, int B, int C,
llvm::Value *val = emit_gep_register(def, jA - 1);

// Call luaF_close
CreateCall2(def->builder, def->luaF_closeF, def->L, val);
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
}
// Do the jump
def->builder->CreateBr(def->jmp_targets[j].jmp1);
@@ -77,7 +77,7 @@ void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, int A, int B,
def->builder->SetInsertPoint(then_block);

// Call luaF_close
CreateCall2(def->builder, def->luaF_closeF, def->L, def->base_ptr);
CreateCall3(def->builder, def->luaF_closeF, def->L, def->base_ptr, def->types->kInt[LUA_OK]);
def->builder->CreateBr(else_block);

def->f->getBasicBlockList().push_back(else_block);
@@ -694,7 +694,8 @@ LuaLLVMTypes::LuaLLVMTypes(llvm::LLVMContext &context) : mdbuilder(context) {

// struct UpVal {
// struct TValue *v; /* points to stack or to its own value */
// unsigned long long refcount; /* reference counter */
// unsigned int refcount; /* reference counter */
// unsigned int flags; /* Used to mark deferred values */
// union {
// struct { /* (when open) */
// struct UpVal *next; /* linked list */
@@ -705,7 +706,8 @@ LuaLLVMTypes::LuaLLVMTypes(llvm::LLVMContext &context) : mdbuilder(context) {
//};
elements.clear();
elements.push_back(pTValueT);
elements.push_back(C_size_t);
elements.push_back(C_intT);
elements.push_back(C_intT);
elements.push_back(TValueT);
UpValT->setBody(elements);

@@ -745,12 +747,13 @@ LuaLLVMTypes::LuaLLVMTypes(llvm::LLVMContext &context) : mdbuilder(context) {
elements.push_back(plua_StateT);
luaV_executeT = llvm::FunctionType::get(C_intT, elements, false);

// void luaF_close (lua_State *L, StkId level)
// int luaF_close (lua_State *L, StkId level, int status)
elements.clear();
elements.push_back(plua_StateT);
elements.push_back(StkIdT);
elements.push_back(C_intT);
luaF_closeT =
llvm::FunctionType::get(llvm::Type::getVoidTy(context), elements, false);
llvm::FunctionType::get(C_intT, elements, false);

// int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2)
elements.clear();
@@ -1256,10 +1259,12 @@ LuaLLVMTypes::LuaLLVMTypes(llvm::LLVMContext &context) : mdbuilder(context) {

nodes.clear();
nodes.push_back(std::pair<llvm::MDNode *, uint64_t>(tbaa_pointerT, 0));
nodes.push_back(std::pair<llvm::MDNode *, uint64_t>(tbaa_longlongT, 8));
nodes.push_back(std::pair<llvm::MDNode *, uint64_t>(tbaa_intT, 4));
nodes.push_back(std::pair<llvm::MDNode *, uint64_t>(tbaa_intT, 4));
nodes.push_back(std::pair<llvm::MDNode *, uint64_t>(tbaa_TValueT, 16));
tbaa_UpValT = mdbuilder.createTBAAStructTypeNode("UpVal", nodes);
tbaa_UpVal_vT =

mdbuilder.createTBAAStructTagNode(tbaa_UpValT, tbaa_pointerT, 0);

// RaviArray