Explorar o código

ARMeilleure: Hash _data pointer instead of value for Operand (#4156)

I noticed a weirdly high cost for dictionary accesses from MarkLabel etc. Turns out that the hash code was always the same for labels, so the whole point of having a dictionary was missed and it was putting everything in the same bucket. I made it always hash the _data pointer as that's a good source of identifiable and "random" data.
riperiperi %!s(int64=3) %!d(string=hai) anos
pai
achega
c200a7b7c6
Modificáronse 1 ficheiros con 1 adicións e 8 borrados
  1. 1 8
      ARMeilleure/IntermediateRepresentation/Operand.cs

+ 1 - 8
ARMeilleure/IntermediateRepresentation/Operand.cs

@@ -378,14 +378,7 @@ namespace ARMeilleure.IntermediateRepresentation
 
         public override int GetHashCode()
         {
-            if (Kind == OperandKind.LocalVariable)
-            {
-                return base.GetHashCode();
-            }
-            else
-            {
-                return (int)Value ^ ((int)Kind << 16) ^ ((int)Type << 20);
-            }
+            return ((ulong)_data).GetHashCode();
         }
 
         public bool Equals(Operand operand)