Mercurial > hg > truffle
changeset 4821:52474ec73861
7132936: guarantee(t != NULL) failed: must be con
Summary: Use !higher_equal() check to skip top and values which fit.
Reviewed-by: never
author | kvn |
---|---|
date | Tue, 24 Jan 2012 17:04:51 -0800 |
parents | dddf0be88eb1 |
children | 94f0ce74d48e |
files | src/share/vm/opto/memnode.cpp |
diffstat | 1 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/opto/memnode.cpp Tue Jan 24 17:00:51 2012 -0800 +++ b/src/share/vm/opto/memnode.cpp Tue Jan 24 17:04:51 2012 -0800 @@ -1764,7 +1764,8 @@ const Type* LoadBNode::Value(PhaseTransform *phase) const { Node* mem = in(MemNode::Memory); Node* value = can_see_stored_value(mem,phase); - if (value != NULL && value->is_Con()) { + if (value != NULL && value->is_Con() && + !value->bottom_type()->higher_equal(_type)) { // If the input to the store does not fit with the load's result type, // it must be truncated. We can't delay until Ideal call since // a singleton Value is needed for split_thru_phi optimization. @@ -1793,7 +1794,8 @@ const Type* LoadUBNode::Value(PhaseTransform *phase) const { Node* mem = in(MemNode::Memory); Node* value = can_see_stored_value(mem,phase); - if (value != NULL && value->is_Con()) { + if (value != NULL && value->is_Con() && + !value->bottom_type()->higher_equal(_type)) { // If the input to the store does not fit with the load's result type, // it must be truncated. We can't delay until Ideal call since // a singleton Value is needed for split_thru_phi optimization. @@ -1822,7 +1824,8 @@ const Type* LoadUSNode::Value(PhaseTransform *phase) const { Node* mem = in(MemNode::Memory); Node* value = can_see_stored_value(mem,phase); - if (value != NULL && value->is_Con()) { + if (value != NULL && value->is_Con() && + !value->bottom_type()->higher_equal(_type)) { // If the input to the store does not fit with the load's result type, // it must be truncated. We can't delay until Ideal call since // a singleton Value is needed for split_thru_phi optimization. @@ -1853,7 +1856,8 @@ const Type* LoadSNode::Value(PhaseTransform *phase) const { Node* mem = in(MemNode::Memory); Node* value = can_see_stored_value(mem,phase); - if (value != NULL && value->is_Con()) { + if (value != NULL && value->is_Con() && + !value->bottom_type()->higher_equal(_type)) { // If the input to the store does not fit with the load's result type, // it must be truncated. We can't delay until Ideal call since // a singleton Value is needed for split_thru_phi optimization.