diff --git a/lld/ELF/ICF.cpp b/lld/ELF/ICF.cpp index 849f6bdd445f9..1882116d4d5f0 100644 --- a/lld/ELF/ICF.cpp +++ b/lld/ELF/ICF.cpp @@ -120,7 +120,7 @@ template class ICF { void forEachClassRange(size_t begin, size_t end, llvm::function_ref fn); - void forEachClass(llvm::function_ref fn); + void parallelForEachClass(llvm::function_ref fn); Ctx &ctx; SmallVector sections; @@ -432,8 +432,10 @@ void ICF::forEachClassRange(size_t begin, size_t end, } // Call Fn on each equivalence class. + template -void ICF::forEachClass(llvm::function_ref fn) { +void ICF::parallelForEachClass( + llvm::function_ref fn) { // If threading is disabled or the number of sections are // too small to use threading, call Fn sequentially. if (parallel::strategy.ThreadsRequested == 1 || sections.size() < 1024) { @@ -541,14 +543,14 @@ template void ICF::run() { // static content. Use a base offset for these IDs to ensure no overlap with // the unique IDs already assigned. uint32_t eqClassBase = ++uniqueId; - forEachClass([&](size_t begin, size_t end) { + parallelForEachClass([&](size_t begin, size_t end) { segregate(begin, end, eqClassBase, true); }); // Split groups by comparing relocations until convergence is obtained. do { repeat = false; - forEachClass([&](size_t begin, size_t end) { + parallelForEachClass([&](size_t begin, size_t end) { segregate(begin, end, eqClassBase, false); }); } while (repeat);