Mercurial > hg > octave-terminal
changeset 15147:98a65d9e426f
Remove uneeded release overloads
* jit-typeinfo.cc (jit_typeinfo::jit_typeinfo): Remove overloads for scalar,
complex, and index release.
* pt-jit.cc (jit_convert::release_temp, jit_convert::release_dead_phi,
jit_convert::convert_llvm::visit): Only release when required.
author | Max Brister <max@2bass.com> |
---|---|
date | Fri, 10 Aug 2012 16:19:27 -0500 |
parents | 709e8928e68c |
children | 1b2fbc30e4e7 |
files | src/interp-core/jit-typeinfo.cc src/interp-core/pt-jit.cc |
diffstat | 2 files changed, 15 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/src/interp-core/jit-typeinfo.cc +++ b/src/interp-core/jit-typeinfo.cc @@ -1159,18 +1159,6 @@ fn.add_mapping (engine, &octave_jit_release_matrix); release_fn.add_overload (fn); - // release scalar - fn = create_identity (scalar); - release_fn.add_overload (fn); - - // release complex - fn = create_identity (complex); - release_fn.add_overload (fn); - - // release index - fn = create_identity (index); - release_fn.add_overload (fn); - // now for binary scalar operations add_binary_op (scalar, octave_value::op_add, llvm::Instruction::FAdd); add_binary_op (scalar, octave_value::op_sub, llvm::Instruction::FSub);
--- a/src/interp-core/pt-jit.cc +++ b/src/interp-core/pt-jit.cc @@ -1145,7 +1145,7 @@ if (instr->needs_release ()) { jit_block *fu_block = instr->first_use_block (); - if (fu_block && fu_block != &ablock) + if (fu_block && fu_block != &ablock && instr->needs_release ()) temp.insert (instr); } @@ -1155,15 +1155,15 @@ for (size_t i = 0; i < instr->argument_count (); ++i) { jit_value *arg = instr->argument (i); - if (arg->needs_release ()) - { - jit_call *release = create<jit_call> (&jit_typeinfo::release, - arg); - release->infer (); - ablock.insert_after (iter, release); - ++iter; - temp.erase (arg); - } + if (! arg->needs_release ()) + continue; + + jit_call *release = create<jit_call> (&jit_typeinfo::release, + arg); + release->infer (); + ablock.insert_after (iter, release); + ++iter; + temp.erase (arg); } } } @@ -1202,6 +1202,9 @@ for (size_t i = 0; i < phi->argument_count (); ++i) { jit_value *arg = phi->argument (i); + if (! arg->needs_release ()) + continue; + jit_block *inc = phi->incomming (i); jit_block *split = inc->maybe_split (*this, ablock); jit_terminator *term = split->terminator (); @@ -1511,7 +1514,8 @@ if (isa<jit_assign_base> (overwrite)) { const jit_function& ol = jit_typeinfo::get_release (overwrite->type ()); - ol.call (builder, overwrite); + if (ol.valid ()) + ol.call (builder, overwrite); } }