[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