fix value numbering for frozen strings
authorSergey Andreenko <seandree@microsoft.com>
Thu, 20 Oct 2016 22:49:08 +0000 (15:49 -0700)
committerSergey Andreenko <seandree@microsoft.com>
Thu, 20 Oct 2016 22:50:07 +0000 (15:50 -0700)
As Pat found it was value numbering issue.

src/jit/valuenum.cpp

index 82b9278..fb305d0 100644 (file)
@@ -4805,8 +4805,16 @@ void Compiler::fgValueNumberTreeConst(GenTreePtr tree)
             tree->gtVNPair.SetBoth(vnStore->VNForDoubleCon(tree->gtDblCon.gtDconVal));
             break;
         case TYP_REF:
-            // Null is the only constant.  (Except maybe for String?)
-            tree->gtVNPair.SetBoth(ValueNumStore::VNForNull());
+            if (tree->gtIntConCommon.IconValue() == 0)
+            {
+                tree->gtVNPair.SetBoth(ValueNumStore::VNForNull());
+            }
+            else
+            {
+                assert(tree->gtFlags == GTF_ICON_STR_HDL); // Constant object can be only frozen string.
+                tree->gtVNPair.SetBoth(
+                    vnStore->VNForHandle(ssize_t(tree->gtIntConCommon.IconValue()), tree->GetIconHandleFlag()));
+            }
             break;
 
         case TYP_BYREF: