hotspot/src/share/vm/opto/memnode.cpp
changeset 11568 e48ad3769aa5
parent 11562 969748c25d89
child 12953 39d868c36dcd
equal deleted inserted replaced
11566:351229eec596 11568:e48ad3769aa5
  1762 }
  1762 }
  1763 
  1763 
  1764 const Type* LoadBNode::Value(PhaseTransform *phase) const {
  1764 const Type* LoadBNode::Value(PhaseTransform *phase) const {
  1765   Node* mem = in(MemNode::Memory);
  1765   Node* mem = in(MemNode::Memory);
  1766   Node* value = can_see_stored_value(mem,phase);
  1766   Node* value = can_see_stored_value(mem,phase);
  1767   if (value != NULL && value->is_Con()) {
  1767   if (value != NULL && value->is_Con() &&
       
  1768       !value->bottom_type()->higher_equal(_type)) {
  1768     // If the input to the store does not fit with the load's result type,
  1769     // If the input to the store does not fit with the load's result type,
  1769     // it must be truncated. We can't delay until Ideal call since
  1770     // it must be truncated. We can't delay until Ideal call since
  1770     // a singleton Value is needed for split_thru_phi optimization.
  1771     // a singleton Value is needed for split_thru_phi optimization.
  1771     int con = value->get_int();
  1772     int con = value->get_int();
  1772     return TypeInt::make((con << 24) >> 24);
  1773     return TypeInt::make((con << 24) >> 24);
  1791 }
  1792 }
  1792 
  1793 
  1793 const Type* LoadUBNode::Value(PhaseTransform *phase) const {
  1794 const Type* LoadUBNode::Value(PhaseTransform *phase) const {
  1794   Node* mem = in(MemNode::Memory);
  1795   Node* mem = in(MemNode::Memory);
  1795   Node* value = can_see_stored_value(mem,phase);
  1796   Node* value = can_see_stored_value(mem,phase);
  1796   if (value != NULL && value->is_Con()) {
  1797   if (value != NULL && value->is_Con() &&
       
  1798       !value->bottom_type()->higher_equal(_type)) {
  1797     // If the input to the store does not fit with the load's result type,
  1799     // If the input to the store does not fit with the load's result type,
  1798     // it must be truncated. We can't delay until Ideal call since
  1800     // it must be truncated. We can't delay until Ideal call since
  1799     // a singleton Value is needed for split_thru_phi optimization.
  1801     // a singleton Value is needed for split_thru_phi optimization.
  1800     int con = value->get_int();
  1802     int con = value->get_int();
  1801     return TypeInt::make(con & 0xFF);
  1803     return TypeInt::make(con & 0xFF);
  1820 }
  1822 }
  1821 
  1823 
  1822 const Type* LoadUSNode::Value(PhaseTransform *phase) const {
  1824 const Type* LoadUSNode::Value(PhaseTransform *phase) const {
  1823   Node* mem = in(MemNode::Memory);
  1825   Node* mem = in(MemNode::Memory);
  1824   Node* value = can_see_stored_value(mem,phase);
  1826   Node* value = can_see_stored_value(mem,phase);
  1825   if (value != NULL && value->is_Con()) {
  1827   if (value != NULL && value->is_Con() &&
       
  1828       !value->bottom_type()->higher_equal(_type)) {
  1826     // If the input to the store does not fit with the load's result type,
  1829     // If the input to the store does not fit with the load's result type,
  1827     // it must be truncated. We can't delay until Ideal call since
  1830     // it must be truncated. We can't delay until Ideal call since
  1828     // a singleton Value is needed for split_thru_phi optimization.
  1831     // a singleton Value is needed for split_thru_phi optimization.
  1829     int con = value->get_int();
  1832     int con = value->get_int();
  1830     return TypeInt::make(con & 0xFFFF);
  1833     return TypeInt::make(con & 0xFFFF);
  1851 }
  1854 }
  1852 
  1855 
  1853 const Type* LoadSNode::Value(PhaseTransform *phase) const {
  1856 const Type* LoadSNode::Value(PhaseTransform *phase) const {
  1854   Node* mem = in(MemNode::Memory);
  1857   Node* mem = in(MemNode::Memory);
  1855   Node* value = can_see_stored_value(mem,phase);
  1858   Node* value = can_see_stored_value(mem,phase);
  1856   if (value != NULL && value->is_Con()) {
  1859   if (value != NULL && value->is_Con() &&
       
  1860       !value->bottom_type()->higher_equal(_type)) {
  1857     // If the input to the store does not fit with the load's result type,
  1861     // If the input to the store does not fit with the load's result type,
  1858     // it must be truncated. We can't delay until Ideal call since
  1862     // it must be truncated. We can't delay until Ideal call since
  1859     // a singleton Value is needed for split_thru_phi optimization.
  1863     // a singleton Value is needed for split_thru_phi optimization.
  1860     int con = value->get_int();
  1864     int con = value->get_int();
  1861     return TypeInt::make((con << 16) >> 16);
  1865     return TypeInt::make((con << 16) >> 16);