Mercurial > hg > truffle
comparison src/share/vm/opto/phaseX.cpp @ 305:ab075d07f1ba
6736417: Fastdebug C2 crashes in StoreBNode::Ideal
Summary: The result of step_through_mergemem() and remove_dead_region() is not checked in some cases.
Reviewed-by: never
author | kvn |
---|---|
date | Wed, 27 Aug 2008 09:15:46 -0700 |
parents | d1605aabd0a1 |
children | 98cb887364d3 |
comparison
equal
deleted
inserted
replaced
304:dc7f315e41f7 | 305:ab075d07f1ba |
---|---|
984 } | 984 } |
985 | 985 |
986 // Apply the Ideal call in a loop until it no longer applies | 986 // Apply the Ideal call in a loop until it no longer applies |
987 Node *k = n; | 987 Node *k = n; |
988 DEBUG_ONLY(dead_loop_check(k);) | 988 DEBUG_ONLY(dead_loop_check(k);) |
989 DEBUG_ONLY(bool is_new = (k->outcnt() == 0);) | |
989 Node *i = k->Ideal(this, /*can_reshape=*/true); | 990 Node *i = k->Ideal(this, /*can_reshape=*/true); |
991 assert(i != k || is_new || i->outcnt() > 0, "don't return dead nodes"); | |
990 #ifndef PRODUCT | 992 #ifndef PRODUCT |
991 if( VerifyIterativeGVN ) | 993 if( VerifyIterativeGVN ) |
992 verify_step(k); | 994 verify_step(k); |
993 if( i && VerifyOpto ) { | 995 if( i && VerifyOpto ) { |
994 if( !allow_progress() ) { | 996 if( !allow_progress() ) { |
1022 subsume_node( k, i ); | 1024 subsume_node( k, i ); |
1023 k = i; | 1025 k = i; |
1024 } | 1026 } |
1025 DEBUG_ONLY(dead_loop_check(k);) | 1027 DEBUG_ONLY(dead_loop_check(k);) |
1026 // Try idealizing again | 1028 // Try idealizing again |
1029 DEBUG_ONLY(is_new = (k->outcnt() == 0);) | |
1027 i = k->Ideal(this, /*can_reshape=*/true); | 1030 i = k->Ideal(this, /*can_reshape=*/true); |
1031 assert(i != k || is_new || i->outcnt() > 0, "don't return dead nodes"); | |
1028 #ifndef PRODUCT | 1032 #ifndef PRODUCT |
1029 if( VerifyIterativeGVN ) | 1033 if( VerifyIterativeGVN ) |
1030 verify_step(k); | 1034 verify_step(k); |
1031 if( i && VerifyOpto ) set_progress(); | 1035 if( i && VerifyOpto ) set_progress(); |
1032 #endif | 1036 #endif |