[CodeGen] Fix hashing for MO_ExternalSymbol MachineOperands.
authorEli Friedman <efriedma@quicinc.com>
Sat, 1 Jun 2019 00:08:54 +0000 (00:08 +0000)
committerEli Friedman <efriedma@quicinc.com>
Sat, 1 Jun 2019 00:08:54 +0000 (00:08 +0000)
commitd8e8722791e4ce6694673d450fdcaf99e5edcbf9
treee56228779679241cfa465d5e72155f93d513d2da
parenteb4d6142dcd53d79d8f8a86908a035582965fc52
[CodeGen] Fix hashing for MO_ExternalSymbol MachineOperands.

We were hashing the string pointer, not the string, so two instructions
could be identical (isIdenticalTo), but have different hash codes.

This showed up as a very rare, non-deterministic assertion failure
rehashing a DenseMap constructed by MachineOutliner.  So there's no
"real" testcase, just a unittest which checks that the hash function
behaves correctly.

I'm a little scared fixing this is going to cause a regression in
outlining or MachineCSE, but hopefully we won't run into any issues.

Differential Revision: https://reviews.llvm.org/D61975

llvm-svn: 362281
llvm/lib/CodeGen/MachineOperand.cpp
llvm/unittests/CodeGen/MachineOperandTest.cpp