Просмотр исходного кода

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 3 лет назад
Родитель
Сommit
c200a7b7c6
1 измененных файлов с 1 добавлено и 8 удалено
  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)