[llvm] [llvm-(min-)tblgen] Avoid redundant source compilation (PR #114494)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 1 05:09:17 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-tablegen
Author: Michael Kruse (Meinersbur)
<details>
<summary>Changes</summary>
All the sources of `llvm-min-tblgen` are also used for `llvm-tblgen`, with identical compilation flags. Reuse the object files of `llvm-min-tblgen` for `llvm-tblgen`.
While this slightly reduces build time, the main motivation is ccache. Using the [hard_link](https://ccache.dev/manual/latest.html#config_hard_link) option, building the object files for `llvm-tblgen` will result in a hard link to the same object file already used for `llvm-min-tblgen`. To signal the build system that the file is new, ccache will update the file's time stamp. Unfortunately, time stamps a shared between all hard-linked file s.t. this will also update the time stamps for the object files used for `llvm-min-tblgen`. At the next run, Ninja will recognize this time stamp discrepancy to the expected stamp recorded in `.ninja_log` and rebuild those object files for `llvm-min-tblgen`, which again will also update the stamp for the `llvm-min-tblgen`... . This is especially annoying for `llvm-(min)-tablegen` because it means Ninja will rerun all tablegenning in every build.
I am using the hard_link option because it reduces the cost of having multiple build-trees of the same LLVM source tree and reduces the wear to the SSD they are stored on.
---
Full diff: https://github.com/llvm/llvm-project/pull/114494.diff
1 Files Affected:
- (modified) llvm/utils/TableGen/CMakeLists.txt (+2-7)
``````````diff
diff --git a/llvm/utils/TableGen/CMakeLists.txt b/llvm/utils/TableGen/CMakeLists.txt
index ba1e4aa01b48d6..ded2e228dcd6de 100644
--- a/llvm/utils/TableGen/CMakeLists.txt
+++ b/llvm/utils/TableGen/CMakeLists.txt
@@ -32,10 +32,8 @@ set(LLVM_LINK_COMPONENTS
add_tablegen(llvm-tblgen LLVM
DESTINATION "${LLVM_TOOLS_INSTALL_DIR}"
EXPORT LLVM
- ARMTargetDefEmitter.cpp
AsmMatcherEmitter.cpp
AsmWriterEmitter.cpp
- Attributes.cpp
CallingConvEmitter.cpp
CodeEmitterGen.cpp
CodeGenMapTable.cpp
@@ -48,7 +46,6 @@ add_tablegen(llvm-tblgen LLVM
DecoderEmitter.cpp
DFAEmitter.cpp
DFAPacketizerEmitter.cpp
- DirectiveEmitter.cpp
DisassemblerEmitter.cpp
DXILEmitter.cpp
ExegesisEmitter.cpp
@@ -57,18 +54,14 @@ add_tablegen(llvm-tblgen LLVM
GlobalISelEmitter.cpp
InstrDocsEmitter.cpp
InstrInfoEmitter.cpp
- IntrinsicEmitter.cpp
MacroFusionPredicatorEmitter.cpp
OptionParserEmitter.cpp
OptionRSTEmitter.cpp
PseudoLoweringEmitter.cpp
RegisterBankEmitter.cpp
RegisterInfoEmitter.cpp
- RISCVTargetDefEmitter.cpp
SearchableTableEmitter.cpp
SubtargetEmitter.cpp
- TableGen.cpp
- VTEmitter.cpp
WebAssemblyDisassemblerEmitter.cpp
X86InstrMappingEmitter.cpp
X86DisassemblerTables.cpp
@@ -76,6 +69,8 @@ add_tablegen(llvm-tblgen LLVM
X86MnemonicTables.cpp
X86ModRMFilters.cpp
X86RecognizableInstr.cpp
+
+ $<TARGET_OBJECTS:llvm-min-tblgen>
$<TARGET_OBJECTS:obj.LLVMTableGenBasic>
$<TARGET_OBJECTS:obj.LLVMTableGenCommon>
``````````
</details>
https://github.com/llvm/llvm-project/pull/114494
More information about the llvm-commits
mailing list