diff options
author | kvn <none@none> | 2012-01-12 12:28:59 -0800 |
---|---|---|
committer | kvn <none@none> | 2012-01-12 12:28:59 -0800 |
commit | 451c02ba5031ebbb08d09c8a7010384ad0d1b3c9 (patch) | |
tree | 02180545daad2ba1ad07ab99e8e6a90f579d9316 /src/share/vm/opto/loopopts.cpp | |
parent | cb0d28b0c24231f398f1055c9dcc9891438672b2 (diff) |
7064302: JDK7 build 147 crashed after testing my java 6-compiled web app
Summary: Don't split CMove node if it's control edge is different from split region.
Reviewed-by: never
Diffstat (limited to 'src/share/vm/opto/loopopts.cpp')
-rw-r--r-- | src/share/vm/opto/loopopts.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/share/vm/opto/loopopts.cpp b/src/share/vm/opto/loopopts.cpp index 93c181973..e93fb4d08 100644 --- a/src/share/vm/opto/loopopts.cpp +++ b/src/share/vm/opto/loopopts.cpp @@ -819,6 +819,8 @@ void PhaseIdealLoop::split_if_with_blocks_post( Node *n ) { if( iff->is_If() ) { // Classic split-if? if( iff->in(0) != n_ctrl ) return; // Compare must be in same blk as if } else if (iff->is_CMove()) { // Trying to split-up a CMOVE + // Can't split CMove with different control edge. + if (iff->in(0) != NULL && iff->in(0) != n_ctrl ) return; if( get_ctrl(iff->in(2)) == n_ctrl || get_ctrl(iff->in(3)) == n_ctrl ) return; // Inputs not yet split-up @@ -937,7 +939,7 @@ void PhaseIdealLoop::split_if_with_blocks_post( Node *n ) { } bool did_break = (i < imax); // Did we break out of the previous loop? if (!did_break && n->outcnt() > 1) { // All uses in outer loops! - Node *late_load_ctrl; + Node *late_load_ctrl = NULL; if (n->is_Load()) { // If n is a load, get and save the result from get_late_ctrl(), // to be later used in calculating the control for n's clones. |