# HG changeset patch # User Max Brister # Date 1339787424 18000 # Node ID 609dcc297db5b0644e2c06c67851b8be908dc37c # Parent 2871d5f8d92243711cf6b48ea8aaddd12f1a1d01 src/pt-jit.cc (jit_info::~jit_info): New function diff -r 2871d5f8d922 -r 609dcc297db5 src/pt-jit.cc --- a/src/pt-jit.cc Fri Jun 15 13:35:35 2012 -0500 +++ b/src/pt-jit.cc Fri Jun 15 14:10:24 2012 -0500 @@ -2820,13 +2820,12 @@ // -------------------- jit_info -------------------- jit_info::jit_info (tree_jit& tjit, tree& tee) - : engine (tjit.get_engine ()) + : engine (tjit.get_engine ()), llvm_function (0) { - llvm::Function *fun = 0; try { jit_convert conv (tjit.get_module (), tee); - fun = conv.get_function (); + llvm_function = conv.get_function (); arguments = conv.get_arguments (); bounds = conv.get_bounds (); } @@ -2838,22 +2837,28 @@ #endif } - if (! fun) + if (! llvm_function) { function = 0; return; } - tjit.optimize (fun); + tjit.optimize (llvm_function); #ifdef OCTAVE_JIT_DEBUG std::cout << "-------------------- optimized llvm ir --------------------\n"; llvm::raw_os_ostream llvm_cout (std::cout); - fun->print (llvm_cout); + llvm_function->print (llvm_cout); std::cout << std::endl; #endif - function = reinterpret_cast(engine->getPointerToFunction (fun)); + function = reinterpret_cast(engine->getPointerToFunction (llvm_function)); +} + +jit_info::~jit_info (void) +{ + if (llvm_function) + llvm_function->eraseFromParent (); } bool diff -r 2871d5f8d922 -r 609dcc297db5 src/pt-jit.h --- a/src/pt-jit.h Fri Jun 15 13:35:35 2012 -0500 +++ b/src/pt-jit.h Fri Jun 15 14:10:24 2012 -0500 @@ -2273,6 +2273,8 @@ public: jit_info (tree_jit& tjit, tree& tee); + ~jit_info (void); + bool execute (void) const; bool match (void) const; @@ -2283,6 +2285,7 @@ llvm::ExecutionEngine *engine; jited_function function; + llvm::Function *llvm_function; std::vector > arguments; type_bound_vector bounds;