hotspot/src/share/vm/opto/memnode.cpp
changeset 27421 df2b6ff5c959
parent 26442 2944daffe62a
child 27637 cf68c0af6882
--- a/hotspot/src/share/vm/opto/memnode.cpp	Fri Oct 24 14:25:46 2014 +0200
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Fri Oct 24 09:13:12 2014 -0700
@@ -1257,6 +1257,16 @@
               result = new ConvI2LNode(phase->transform(result));
             }
 #endif
+            // Boxing/unboxing can be done from signed & unsigned loads (e.g. LoadUB -> ... -> LoadB pair).
+            // Need to preserve unboxing load type if it is unsigned.
+            switch(this->Opcode()) {
+              case Op_LoadUB:
+                result = new AndINode(phase->transform(result), phase->intcon(0xFF));
+                break;
+              case Op_LoadUS:
+                result = new AndINode(phase->transform(result), phase->intcon(0xFFFF));
+                break;
+            }
             return result;
           }
         }