Mercurial > hg > truffle
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 ) { |