[lld] f546165 - [lld-macho] Don't create entries in isecPriorities during sorting (NFC)

Daniel Bertalan via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 28 07:55:48 PDT 2022


Author: Daniel Bertalan
Date: 2022-09-28T16:50:18+02:00
New Revision: f546165754d41353010d34b8d4c9f381434ffc68

URL: https://github.com/llvm/llvm-project/commit/f546165754d41353010d34b8d4c9f381434ffc68
DIFF: https://github.com/llvm/llvm-project/commit/f546165754d41353010d34b8d4c9f381434ffc68.diff

LOG: [lld-macho] Don't create entries in isecPriorities during sorting (NFC)

If a value for a given key is not present, `DenseMap::operator[]`
default-constructs one, which is wasteful when we don't do anything with
it afterwards. Fix it by calling `lookup()` instead which only returns
the default value, but does not modify the map.

This speeds up linking a fair bit when only a small portion of all
sections are specified in the order file, like in the case of Chromium
Framework:

      N           Min           Max        Median           Avg        Stddev
  x  25      3.727684     3.8808699      3.753552     3.7702461     0.0397282
  +  25     3.6469049     3.7523289     3.6764321     3.6841622   0.025525047
  Difference at 95.0% confidence
  	-0.0860839 +/- 0.0189924
  	-2.28324% +/- 0.503745%
  	(Student's t, pooled s = 0.0333906)

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

Added: 
    

Modified: 
    lld/MachO/Writer.cpp

Removed: 
    


################################################################################
diff  --git a/lld/MachO/Writer.cpp b/lld/MachO/Writer.cpp
index 014e543e69c2f..b9e6775843b51 100644
--- a/lld/MachO/Writer.cpp
+++ b/lld/MachO/Writer.cpp
@@ -902,10 +902,10 @@ static void sortSegmentsAndSections() {
 
       if (!isecPriorities.empty()) {
         if (auto *merged = dyn_cast<ConcatOutputSection>(osec)) {
-          llvm::stable_sort(merged->inputs,
-                            [&](InputSection *a, InputSection *b) {
-                              return isecPriorities[a] > isecPriorities[b];
-                            });
+          llvm::stable_sort(
+              merged->inputs, [&](InputSection *a, InputSection *b) {
+                return isecPriorities.lookup(a) > isecPriorities.lookup(b);
+              });
         }
       }
     }


        


More information about the llvm-commits mailing list