comparison src/share/vm/opto/split_if.cpp @ 1273:877a14af58e1

6663854: assert(n != __null,"Bad immediate dominator info.") in C2 with -Xcomp Reviewed-by: kvn
author never
date Thu, 18 Feb 2010 15:05:10 -0800
parents b2b6a9bf6238
children c18cbe5936b8
comparison
equal deleted inserted replaced
1267:72f1840531a4 1273:877a14af58e1
1 /* 1 /*
2 * Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved. 2 * Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
185 tty->print("Cloning up: "); 185 tty->print("Cloning up: ");
186 n->dump(); 186 n->dump();
187 } 187 }
188 #endif 188 #endif
189 189
190 // ConvI2L may have type information on it which becomes invalid if
191 // it moves up in the graph so change any clones so widen the type
192 // to TypeLong::INT when pushing it up.
193 const Type* rtype = NULL;
194 if (n->Opcode() == Op_ConvI2L && n->bottom_type() != TypeLong::INT) {
195 rtype = TypeLong::INT;
196 }
197
190 // Now actually split-up this guy. One copy per control path merging. 198 // Now actually split-up this guy. One copy per control path merging.
191 Node *phi = PhiNode::make_blank(blk1, n); 199 Node *phi = PhiNode::make_blank(blk1, n);
192 for( uint j = 1; j < blk1->req(); j++ ) { 200 for( uint j = 1; j < blk1->req(); j++ ) {
193 Node *x = n->clone(); 201 Node *x = n->clone();
202 // Widen the type of the ConvI2L when pushing up.
203 if (rtype != NULL) x->as_Type()->set_type(rtype);
194 if( n->in(0) && n->in(0) == blk1 ) 204 if( n->in(0) && n->in(0) == blk1 )
195 x->set_req( 0, blk1->in(j) ); 205 x->set_req( 0, blk1->in(j) );
196 for( uint i = 1; i < n->req(); i++ ) { 206 for( uint i = 1; i < n->req(); i++ ) {
197 Node *m = n->in(i); 207 Node *m = n->in(i);
198 if( get_ctrl(m) == blk1 ) { 208 if( get_ctrl(m) == blk1 ) {