[COFF] Switch to xxh3_64bits
authorFangrui Song <i@maskray.me>
Wed, 19 Jul 2023 21:08:13 +0000 (14:08 -0700)
committerFangrui Song <i@maskray.me>
Wed, 19 Jul 2023 21:08:14 +0000 (14:08 -0700)
Similar to recent changes to ELF (e.g., commit
f4b4bc2f18dc0e44afde05735fb673d3de4d5c39) and Mach-O to improve hashing
performance.

lld/COFF/ICF.cpp
lld/COFF/Writer.cpp
lld/test/COFF/icf-safe.s

index 0abd0aa..37f5e75 100644 (file)
@@ -268,7 +268,7 @@ void ICF::run() {
 
   // Initially, we use hash values to partition sections.
   parallelForEach(chunks, [&](SectionChunk *sc) {
-    sc->eqClass[0] = xxHash64(sc->getContents());
+    sc->eqClass[0] = xxh3_64bits(sc->getContents());
   });
 
   // Combine the hashes of the sections referenced by each section into its
index dc38e88..85568a1 100644 (file)
@@ -110,7 +110,7 @@ public:
       // "the timestamp field is really a hash", or a 4-byte size field
       // followed by that many bytes containing a longer hash (with the
       // lowest 4 bytes usually being the timestamp in little-endian order).
-      // Consider storing the full 8 bytes computed by xxHash64 here.
+      // Consider storing the full 8 bytes computed by xxh3_64bits here.
       fillEntry(d, COFF::IMAGE_DEBUG_TYPE_REPRO, 0, 0, 0);
     }
   }
@@ -2001,7 +2001,7 @@ void Writer::writeBuildId() {
       config->mingw && config->debug && config->pdbPath.empty();
 
   if (config->repro || generateSyntheticBuildId)
-    hash = xxHash64(outputFileData);
+    hash = xxh3_64bits(outputFileData);
 
   if (config->repro)
     timestamp = static_cast<uint32_t>(hash);
index e3a20ed..c2897e9 100644 (file)
@@ -5,26 +5,24 @@
 # RUN: lld-link /dll /noentry /out:%t.dll /verbose /opt:noref,icf /export:g3 /export:g4 %t1.obj %t2.obj 2>&1 | FileCheck --check-prefix=EXPORT %s
 # RUN: lld-link /dll /noentry /out:%t.dll /verbose /opt:noref,safeicf %t1.obj %t2.obj 2>&1 | FileCheck %s --check-prefix=SAFEICF
 
-# CHECK-NOT: Selected
-# CHECK: Selected g3
-# CHECK-NEXT:   Removed g4
-# CHECK: Selected f1
+# CHECK-NOT:  Selected
+# CHECK:      Selected f1
 # CHECK-NEXT:   Removed f2
 # CHECK-NEXT:   Removed f3
 # CHECK-NEXT:   Removed f4
-# CHECK-NOT: Removed
-# CHECK-NOT: Selected
+# CHECK-NEXT: Selected g3
+# CHECK-NEXT:   Removed g4
+# CHECK-NOT:  {{.}}
 
 # EXPORT-NOT: Selected g3
 # EXPORT-NOT: Selected g4
 
-# SAFEICF-NOT: Selected
-# SAFEICF: Selected g3
-# SAFEICF-NEXT:   Removed g4
-# SAFEICF: Selected f3
+# SAFEICF-NOT:  Selected
+# SAFEICF:      Selected f3
 # SAFEICF-NEXT:   Removed f4
-# SAFEICF-NOT: Removed
-# SAFEICF-NOT: Selected
+# SAFEICF-NEXT: Selected g3
+# SAFEICF-NEXT:   Removed g4
+# SAFEICF-NOT:  {{.}}
 
 .section .rdata,"dr",one_only,g1
 .globl g1