--- old/src/share/vm/opto/addnode.cpp	Fri Sep  5 09:27:16 2008
+++ new/src/share/vm/opto/addnode.cpp	Fri Sep  5 09:27:16 2008
@@ -157,6 +157,8 @@
     Node *a12 = add1->in(2);
     const Type *t12 = phase->type( a12 );
     if( t12->singleton() && t12 != Type::TOP && (add1 != add1->in(1)) ) {
+      if (add1->in(1) == this)
+        return phase->C->top(); // Dead loop
       add2 = add1->clone();
       add2->set_req(2, in(2));
       add2 = phase->transform(add2);
@@ -173,6 +175,8 @@
     Node *a22 = add2->in(2);
     const Type *t22 = phase->type( a22 );
     if( t22->singleton() && t22 != Type::TOP && (add2 != add2->in(1)) ) {
+      if (add2->in(1) == this)
+        return phase->C->top(); // Dead loop
       Node *addx = add2->clone();
       addx->set_req(1, in(1));
       addx->set_req(2, add2->in(1));
