issue #163 fixes related to loading of base following luaF_close

defer
Dibyendu Majumdar 5 years ago
parent 6f29bc6cd8
commit 07a422eb74

@ -134,7 +134,6 @@ void RaviCodeGenerator::emit_EQ(RaviFunctionDef *def, int A, int B, int C,
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
emit_load_base(def);
}
// Do the jump
def->builder->CreateBr(def->jmp_targets[j].jmp1);
@ -241,7 +240,6 @@ void RaviCodeGenerator::emit_TEST(RaviFunctionDef *def, int A, int B, int C,
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
emit_load_base(def);
}
// Do the jump
def->builder->CreateBr(def->jmp_targets[j].jmp1);
@ -314,7 +312,6 @@ void RaviCodeGenerator::emit_TESTSET(RaviFunctionDef *def, int A, int B, int C,
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, val, def->types->kInt[LUA_OK]);
emit_load_base(def);
}
// Do the jump
def->builder->CreateBr(def->jmp_targets[j].jmp1);

@ -56,12 +56,6 @@ void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, int A, int B,
emit_debug_trace(def, OP_RETURN, pc);
// Load pointer to base
emit_load_base(def);
// Get pointer to register A
llvm::Value *ra_ptr = emit_gep_register(def, A);
// if (cl->p->sizep > 0) luaF_close(L, base);
// Get pointer to Proto->sizep
llvm::Instruction *psize = emit_load_proto_sizep(def);
@ -70,20 +64,26 @@ void RaviCodeGenerator::emit_RETURN(RaviFunctionDef *def, int A, int B,
llvm::Value *psize_gt_0 =
def->builder->CreateICmpSGT(psize, def->types->kInt[0]);
llvm::BasicBlock *then_block = llvm::BasicBlock::Create(
def->jitState->context(), "OP_RETURN_if_close", def->f);
def->jitState->context(), "OP_RETURN_if_closing", def->f);
llvm::BasicBlock *else_block = llvm::BasicBlock::Create(
def->jitState->context(), "OP_RETURN_else_close");
def->jitState->context(), "OP_RETURN_else_closing");
def->builder->CreateCondBr(psize_gt_0, then_block, else_block);
def->builder->SetInsertPoint(then_block);
// Load pointer to base
emit_load_base(def);
// Get pointer to register A
llvm::Value *ra_ptr = emit_gep_register(def, A);
// Call luaF_close
CreateCall3(def->builder, def->luaF_closeF, def->L, def->base_ptr, def->types->kInt[LUA_OK]);
emit_load_base(def);
def->builder->CreateBr(else_block);
def->f->getBasicBlockList().push_back(else_block);
def->builder->SetInsertPoint(else_block);
emit_load_base(def); // As luaF_close() may have changed the stack
ra_ptr = emit_gep_register(def, A); // load RA
//* b = luaD_poscall(L, ra, (b != 0 ? b - 1 : L->top - ra));
llvm::Value *nresults = NULL;
if (B != 0)

Loading…
Cancel
Save