7132936: guarantee(t != NULL) failed: must be con
authorkvn
Tue, 24 Jan 2012 17:04:51 -0800
changeset 11568 e48ad3769aa5
parent 11566 351229eec596
child 11569 7b68349ab1f4
7132936: guarantee(t != NULL) failed: must be con Summary: Use !higher_equal() check to skip top and values which fit. Reviewed-by: never
hotspot/src/share/vm/opto/memnode.cpp
--- a/hotspot/src/share/vm/opto/memnode.cpp	Tue Jan 24 17:00:51 2012 -0800
+++ b/hotspot/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.