[llvm-branch-commits] [CodeGen] Fix non-determinism in MachineBlockHashInfo hashes (PR #192826)

Thurston Dang via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Apr 18 22:16:37 PDT 2026


================
@@ -11,12 +11,100 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/CodeGen/MachineBlockHashInfo.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
 #include "llvm/CodeGen/Passes.h"
 #include "llvm/InitializePasses.h"
 #include "llvm/Target/TargetMachine.h"
 
 using namespace llvm;
 
+template <typename T>
+std::enable_if_t<is_integral_or_enum<T>::value, uint64_t>
+hashValue(const T &Val) {
+  return static_cast<uint64_t>(Val);
+}
+
+static uint64_t hashValue(const void *P) { return 1; }
+
+static uint64_t hashValue(StringRef S) {
+  uint64_t Hash = 0;
+  for (char C : S)
+    Hash = hashing::detail::hash_16_bytes(Hash, C);
+  return Hash;
+}
+
+template <typename T> uint64_t hashValue(ArrayRef<T> A) {
+  uint64_t Hash = 0;
+  for (const auto &C : A)
+    Hash = hashing::detail::hash_16_bytes(Hash, C);
+  return Hash;
+}
+
+static uint64_t hashCombine() { return 0; }
+
+template <typename T, typename... Ts>
+uint64_t hashCombine(const T &Hash, const Ts &...Args) {
+  return hashing::detail::hash_16_bytes(hashValue(Hash), hashCombine(Args...));
+}
+
+static uint64_t hashOpearand(const MachineOperand &MO) {
----------------
thurstond wrote:

"hashOperand"?

https://github.com/llvm/llvm-project/pull/192826


More information about the llvm-branch-commits mailing list