[gcjx] Patch: FYI: optimizer fixlet

Tom Tromey tromey@redhat.com
Wed Sep 14 21:23:00 GMT 2005


I'm checking this in on the gcjx branch.

This fixes another bug that Dalibor discovered.  gcjx was being
over-eager in doing an optimization on conditional branches.

I rebuilt classpath with 'gcjx -fverify' and it pointed out a number
of problems.  I'll be looking into those next.

Tom

Index: ChangeLog
from  Tom Tromey  <tromey@redhat.com>

	* bytecode/block.cc (optimize): Ensure conditional occurs just
	before goto before removing.

Index: bytecode/block.cc
===================================================================
RCS file: /cvs/gcc/gcc/gcjx/bytecode/Attic/block.cc,v
retrieving revision 1.1.2.4
diff -u -r1.1.2.4 block.cc
--- bytecode/block.cc 14 Sep 2005 03:59:04 -0000 1.1.2.4
+++ bytecode/block.cc 14 Sep 2005 21:14:59 -0000
@@ -69,6 +69,8 @@
 	  ref_relocation last_but_one = *last_it;
 	  if (last_but_one->conditional_p ()
 	      && last_but_one->get_target () == next_block
+	      // The conditional must be directly before the goto.
+	      && last_but_one->get_offset () + 1 == last->get_offset ()
 	      && last->get_kind () == reloc_goto)
 	    {
 	      // Remove the goto relocation and the byte representing
@@ -90,6 +92,8 @@
 	}
       else if (last->conditional_p ()
 	       && last->get_target () == next_block->next_block
+	       // The conditional must be directly before the goto.
+	       && last->get_offset () == bytecode.size () - 1
 	       && ! next_block->relocations.empty ())
 	{
 	  // We might also encounter this case if the next block



More information about the Java-patches mailing list