From c200a7b7c668acc733a0c20df865662b86859746 Mon Sep 17 00:00:00 2001 From: riperiperi Date: Wed, 21 Dec 2022 01:28:18 +0000 Subject: [PATCH] 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. --- ARMeilleure/IntermediateRepresentation/Operand.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/ARMeilleure/IntermediateRepresentation/Operand.cs b/ARMeilleure/IntermediateRepresentation/Operand.cs index b3aafa7aed..896d3420c2 100644 --- a/ARMeilleure/IntermediateRepresentation/Operand.cs +++ b/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)