mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-24 13:04:33 +02:00
6663854: assert(n != __null,"Bad immediate dominator info.") in C2 with -Xcomp
Reviewed-by: kvn
This commit is contained in:
parent
c3066e0605
commit
3e1688a8cd
2 changed files with 1532 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved.
|
* Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -187,10 +187,20 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// ConvI2L may have type information on it which becomes invalid if
|
||||||
|
// it moves up in the graph so change any clones so widen the type
|
||||||
|
// to TypeLong::INT when pushing it up.
|
||||||
|
const Type* rtype = NULL;
|
||||||
|
if (n->Opcode() == Op_ConvI2L && n->bottom_type() != TypeLong::INT) {
|
||||||
|
rtype = TypeLong::INT;
|
||||||
|
}
|
||||||
|
|
||||||
// Now actually split-up this guy. One copy per control path merging.
|
// Now actually split-up this guy. One copy per control path merging.
|
||||||
Node *phi = PhiNode::make_blank(blk1, n);
|
Node *phi = PhiNode::make_blank(blk1, n);
|
||||||
for( uint j = 1; j < blk1->req(); j++ ) {
|
for( uint j = 1; j < blk1->req(); j++ ) {
|
||||||
Node *x = n->clone();
|
Node *x = n->clone();
|
||||||
|
// Widen the type of the ConvI2L when pushing up.
|
||||||
|
if (rtype != NULL) x->as_Type()->set_type(rtype);
|
||||||
if( n->in(0) && n->in(0) == blk1 )
|
if( n->in(0) && n->in(0) == blk1 )
|
||||||
x->set_req( 0, blk1->in(j) );
|
x->set_req( 0, blk1->in(j) );
|
||||||
for( uint i = 1; i < n->req(); i++ ) {
|
for( uint i = 1; i < n->req(); i++ ) {
|
||||||
|
|
1521
hotspot/test/compiler/6663854/Test6663854.java
Normal file
1521
hotspot/test/compiler/6663854/Test6663854.java
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue