# HG changeset patch # User Max Brister # Date 1344633567 18000 # Node ID 98a65d9e426f322d06fc672c7a243ad328f5695a # Parent 709e8928e68cb1f1c816557cd194beba3d80816a 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. diff -r 709e8928e68c -r 98a65d9e426f src/interp-core/jit-typeinfo.cc --- a/src/interp-core/jit-typeinfo.cc Fri Aug 10 15:05:29 2012 -0500 +++ b/src/interp-core/jit-typeinfo.cc Fri Aug 10 16:19:27 2012 -0500 @@ -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); diff -r 709e8928e68c -r 98a65d9e426f src/interp-core/pt-jit.cc --- 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_typeinfo::release, - arg); - release->infer (); - ablock.insert_after (iter, release); - ++iter; - temp.erase (arg); - } + if (! arg->needs_release ()) + continue; + + jit_call *release = create (&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 (overwrite)) { const jit_function& ol = jit_typeinfo::get_release (overwrite->type ()); - ol.call (builder, overwrite); + if (ol.valid ()) + ol.call (builder, overwrite); } }