Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/connode.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 | 9c2ecc2ffb12 |
children | 36ccc817fca4 |
comparison
equal
deleted
inserted
replaced
304:dc7f315e41f7 | 305:ab075d07f1ba |
---|---|
99 //------------------------------Ideal------------------------------------------ | 99 //------------------------------Ideal------------------------------------------ |
100 // Return a node which is more "ideal" than the current node. | 100 // Return a node which is more "ideal" than the current node. |
101 // Move constants to the right. | 101 // Move constants to the right. |
102 Node *CMoveNode::Ideal(PhaseGVN *phase, bool can_reshape) { | 102 Node *CMoveNode::Ideal(PhaseGVN *phase, bool can_reshape) { |
103 if( in(0) && remove_dead_region(phase, can_reshape) ) return this; | 103 if( in(0) && remove_dead_region(phase, can_reshape) ) return this; |
104 // Don't bother trying to transform a dead node | |
105 if( in(0) && in(0)->is_top() ) return NULL; | |
104 assert( !phase->eqv(in(Condition), this) && | 106 assert( !phase->eqv(in(Condition), this) && |
105 !phase->eqv(in(IfFalse), this) && | 107 !phase->eqv(in(IfFalse), this) && |
106 !phase->eqv(in(IfTrue), this), "dead loop in CMoveNode::Ideal" ); | 108 !phase->eqv(in(IfTrue), this), "dead loop in CMoveNode::Ideal" ); |
107 if( phase->type(in(Condition)) == Type::TOP ) | 109 if( phase->type(in(Condition)) == Type::TOP ) |
108 return NULL; // return NULL when Condition is dead | 110 return NULL; // return NULL when Condition is dead |