Mercurial > octave
diff src/interp-core/pt-jit.cc @ 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 |
line wrap: on
line diff
--- a/src/interp-core/pt-jit.cc Fri Aug 10 15:05:29 2012 -0500 +++ b/src/interp-core/pt-jit.cc Fri Aug 10 16:19:27 2012 -0500 @@ -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); } }