[llvm] 2c3cf62 - Make TableGenGlobalISel an object library

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 31 13:28:24 PDT 2021


Reverted due to link errors.

usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `(anonymous namespace)::CombineRule::reorientToRoots()':
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_111CombineRule15reorientToRootsEv+0xeb5): 
undefined reference to `llvm::GIMatchDagEdge::reverse()'
/usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `llvm::GIMatchDag::dump() const':
GICombinerEmitter.cpp:(.text._ZNK4llvm10GIMatchDag4dumpEv[_ZNK4llvm10GIMatchDag4dumpEv]+0x15): 
undefined reference to `llvm::GIMatchDag::print(llvm::raw_ostream&) const'
/usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > 
llvm::to_string<llvm::GIMatchDagInstr>(llvm::GIMatchDagInstr const&)':
GICombinerEmitter.cpp:(.text._ZN4llvm9to_stringINS_15GIMatchDagInstrEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_[_ZN4llvm9to_stringINS_15GIMatchDagInstrEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_]+0xa0): 
undefined reference to `llvm::operator<<(llvm::raw_ostream&, 
llvm::GIMatchDagInstr const&)'
/usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > 
llvm::to_string<llvm::GIMatchDagEdge>(llvm::GIMatchDagEdge const&)':
GICombinerEmitter.cpp:(.text._ZN4llvm9to_stringINS_14GIMatchDagEdgeEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_[_ZN4llvm9to_stringINS_14GIMatchDagEdgeEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_]+0xa0): 
undefined reference to `llvm::operator<<(llvm::raw_ostream&, 
llvm::GIMatchDagEdge const&)'
/usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `(anonymous 
namespace)::GICombinerEmitter::generateCodeForTree(llvm::raw_ostream&, 
llvm::GIMatchTree const&, llvm::StringRef) const':
GICombinerEmitter.cpp:(.text._ZNK12_GLOBAL__N_117GICombinerEmitter19generateCodeForTreeERN4llvm11raw_ostreamERKNS1_11GIMatchTreeENS1_9StringRefE+0x168a): 
undefined reference to `llvm::CodeExpander::emit(llvm::raw_ostream&) const'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZNK12_GLOBAL__N_117GICombinerEmitter19generateCodeForTreeERN4llvm11raw_ostreamERKNS1_11GIMatchTreeENS1_9StringRefE+0x1cba): 
undefined reference to `llvm::CodeExpander::emit(llvm::raw_ostream&) const'
/usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `(anonymous 
namespace)::CombineRule::parseInstructionMatcher(llvm::CodeGenTarget 
const&, llvm::StringInit*, llvm::Init const&, 
llvm::StringMap<std::vector<(anonymous namespace)::CombineRule::VarInfo, 
std::allocator<(anonymous namespace)::CombineRule::VarInfo> >, 
llvm::MallocAllocator>&, llvm::StringMap<std::vector<(anonymous 
namespace)::CombineRule::VarInfo, std::allocator<(anonymous 
namespace)::CombineRule::VarInfo> >, llvm::MallocAllocator>&)':
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_111CombineRule23parseInstructionMatcherERKN4llvm13CodeGenTargetEPNS1_10StringInitERKNS1_4InitERNS1_9StringMapISt6vectorINS0_7VarInfoESaISC_EENS1_15MallocAllocatorEEESH_+0x1f2): 
undefined reference to 
`llvm::GIMatchDagOperandListContext::makeOperandList(llvm::CodeGenInstruction 
const&)'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_111CombineRule23parseInstructionMatcherERKN4llvm13CodeGenTargetEPNS1_10StringInitERKNS1_4InitERNS1_9StringMapISt6vectorINS0_7VarInfoESaISC_EENS1_15MallocAllocatorEEESH_+0x3d3): 
undefined reference to 
`llvm::GIMatchDagOpcodePredicate::GIMatchDagOpcodePredicate(llvm::GIMatchDagContext&, 
llvm::StringRef, llvm::CodeGenInstruction const&)'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_111CombineRule23parseInstructionMatcherERKN4llvm13CodeGenTargetEPNS1_10StringInitERKNS1_4InitERNS1_9StringMapISt6vectorINS0_7VarInfoESaISC_EENS1_15MallocAllocatorEEESH_+0x42e): 
undefined reference to 
`llvm::GIMatchDagOperandList::operator[](llvm::StringRef) const'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_111CombineRule23parseInstructionMatcherERKN4llvm13CodeGenTargetEPNS1_10StringInitERKNS1_4InitERNS1_9StringMapISt6vectorINS0_7VarInfoESaISC_EENS1_15MallocAllocatorEEESH_+0x904): 
undefined reference to `llvm::GIMatchDagInstr::setMatchRoot()'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_111CombineRule23parseInstructionMatcherERKN4llvm13CodeGenTargetEPNS1_10StringInitERKNS1_4InitERNS1_9StringMapISt6vectorINS0_7VarInfoESaISC_EENS1_15MallocAllocatorEEESH_+0x10ac): 
undefined reference to 
`llvm::GIMatchDagOperandListContext::makeOperandList(llvm::CodeGenInstruction 
const&)'
/usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `(anonymous 
namespace)::GICombinerEmitter::gatherRules(std::vector<std::unique_ptr<(anonymous 
namespace)::CombineRule, std::default_delete<(anonymous 
namespace)::CombineRule> >, std::allocator<std::unique_ptr<(anonymous 
namespace)::CombineRule, std::default_delete<(anonymous 
namespace)::CombineRule> > > >&, std::vector<llvm::Record*, 
std::allocator<llvm::Record*> > const&&)':
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x899): 
undefined reference to `llvm::GIMatchDagEdge::isDefToUse() const'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x1088): 
undefined reference to 
`llvm::GIMatchDag::writeDOTGraph(llvm::raw_ostream&, llvm::StringRef) const'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x13c6): 
undefined reference to 
`llvm::GIMatchDagOperandListContext::makeEmptyOperandList()'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x15f5): 
undefined reference to `llvm::GIMatchDagInstr::setMatchRoot()'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x16a2): 
undefined reference to 
`llvm::GIMatchDagOneOfOpcodesPredicate::GIMatchDagOneOfOpcodesPredicate(llvm::GIMatchDagContext&, 
llvm::StringRef)'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x16f8): 
undefined reference to 
`llvm::GIMatchDagOperandList::operator[](llvm::StringRef) const'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x19cb): 
undefined reference to 
`llvm::GIMatchDagOperandListContext::makeEmptyOperandList()'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x1c3e): 
undefined reference to 
`llvm::GIMatchDagSameMOPredicate::GIMatchDagSameMOPredicate(llvm::GIMatchDagContext&, 
llvm::StringRef)'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x1c94): 
undefined reference to 
`llvm::GIMatchDagOperandList::operator[](llvm::StringRef) const'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN12_GLOBAL__N_117GICombinerEmitter11gatherRulesERSt6vectorISt10unique_ptrINS_11CombineRuleESt14default_deleteIS3_EESaIS6_EEOKS1_IPN4llvm6RecordESaISC_EE+0x1d2d): 
undefined reference to 
`llvm::GIMatchDagOperandList::operator[](llvm::StringRef) const'
/usr/bin/ld: CMakeFiles/obj.llvm-tblgen.dir/GICombinerEmitter.cpp.o: in 
function `llvm::EmitGICombiner(llvm::RecordKeeper&, llvm::raw_ostream&)':
GICombinerEmitter.cpp:(.text._ZN4llvm14EmitGICombinerERNS_12RecordKeeperERNS_11raw_ostreamE+0x36c): 
undefined reference to 
`llvm::GIMatchTreeBuilderLeafInfo::GIMatchTreeBuilderLeafInfo(llvm::GIMatchTreeBuilder&, 
llvm::StringRef, unsigned int, llvm::GIMatchDag const&, void*)'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN4llvm14EmitGICombinerERNS_12RecordKeeperERNS_11raw_ostreamE+0x463): 
undefined reference to 
`llvm::GIMatchTreeBuilderLeafInfo::GIMatchTreeBuilderLeafInfo(llvm::GIMatchTreeBuilder&, 
llvm::StringRef, unsigned int, llvm::GIMatchDag const&, void*)'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN4llvm14EmitGICombinerERNS_12RecordKeeperERNS_11raw_ostreamE+0x86d): 
undefined reference to `llvm::GIMatchTreeBuilder::run()'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN4llvm14EmitGICombinerERNS_12RecordKeeperERNS_11raw_ostreamE+0x2a71): 
undefined reference to 
`llvm::GIMatchTree::writeDOTGraph(llvm::raw_ostream&) const'
/usr/bin/ld: 
GICombinerEmitter.cpp:(.text._ZN4llvm14EmitGICombinerERNS_12RecordKeeperERNS_11raw_ostreamE+0x2da1): 
undefined reference to 
`llvm::GIMatchDagOperandListContext::print(llvm::raw_ostream&) const'
collect2: error: ld returned 1 exit status
make[3]: Leaving directory '/home/ubuntu/llvm-repo/build'
make[2]: Leaving directory '/home/ubuntu/llvm-repo/build'
make[1]: Leaving directory '/home/ubuntu/llvm-repo/build'
make: Leaving directory '/home/ubuntu/llvm-repo/build'
make[3]: *** [utils/TableGen/CMakeFiles/llvm-tblgen.dir/build.make:180: 
bin/llvm-tblgen] Error 1
make[2]: *** [CMakeFiles/Makefile2:8277: 
utils/TableGen/CMakeFiles/llvm-tblgen.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:22973: 
tools/opt/CMakeFiles/opt.dir/rule] Error 2
make: *** [Makefile:6452: opt] Error 2

This was an incremental build, and it looks like you're toggling cmake.  
Do you need to trigger a reconfigure?

Philip

On 3/31/21 1:22 PM, Aaron Puchert via llvm-commits wrote:
> Author: Aaron Puchert
> Date: 2021-03-31T22:20:56+02:00
> New Revision: 2c3cf62d4a26de85aab180bb43a579c913b17f3e
>
> URL: https://github.com/llvm/llvm-project/commit/2c3cf62d4a26de85aab180bb43a579c913b17f3e
> DIFF: https://github.com/llvm/llvm-project/commit/2c3cf62d4a26de85aab180bb43a579c913b17f3e.diff
>
> LOG: Make TableGenGlobalISel an object library
>
> That's how it was originally intended but that wasn't possible because
> we still needed to support older CMake versions.
>
> The problem here is that the sources in TableGenGlobalISel are meant to
> be linked into both llvm-tblgen and TableGenTests (a unit test), but not
> be part of LLVM proper. So they shouldn't be an ordinary LLVM component.
> Because they are used in llvm-tblgen, they can't draw in the LLVM dylib
> dependency, but then we'd have to do the same thing in TableGenTests to
> make sure we don't link both a static Support library and another copy
> through the LLVM dylib.
>
> With an object library we're just reusing the object files and don't
> have to care about dependencies at all.
>
> Reviewed By: beanz
>
> Differential Revision: https://reviews.llvm.org/D74588
>
> Added:
>      
>
> Modified:
>      llvm/unittests/TableGen/CMakeLists.txt
>      llvm/utils/TableGen/CMakeLists.txt
>      llvm/utils/TableGen/GlobalISel/CMakeLists.txt
>
> Removed:
>      
>
>
> ################################################################################
> diff  --git a/llvm/unittests/TableGen/CMakeLists.txt b/llvm/unittests/TableGen/CMakeLists.txt
> index 178018ba89674..c678f2b639d97 100644
> --- a/llvm/unittests/TableGen/CMakeLists.txt
> +++ b/llvm/unittests/TableGen/CMakeLists.txt
> @@ -12,6 +12,7 @@ add_public_tablegen_target(AutomataTestTableGen)
>   add_llvm_unittest(TableGenTests
>     CodeExpanderTest.cpp
>     AutomataTest.cpp
> +  $<TARGET_OBJECTS:obj.LLVMTableGenGlobalISel>
>     )
>   include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../utils/TableGen)
> -target_link_libraries(TableGenTests PRIVATE LLVMTableGenGlobalISel LLVMTableGen)
> +target_link_libraries(TableGenTests PRIVATE LLVMTableGen)
>
> diff  --git a/llvm/utils/TableGen/CMakeLists.txt b/llvm/utils/TableGen/CMakeLists.txt
> index 9e918852b1c0f..8b01a40f3ad58 100644
> --- a/llvm/utils/TableGen/CMakeLists.txt
> +++ b/llvm/utils/TableGen/CMakeLists.txt
> @@ -56,6 +56,6 @@ add_tablegen(llvm-tblgen LLVM
>     X86RecognizableInstr.cpp
>     WebAssemblyDisassemblerEmitter.cpp
>     CTagsEmitter.cpp
> +  $<TARGET_OBJECTS:obj.LLVMTableGenGlobalISel>
>     )
> -target_link_libraries(llvm-tblgen PRIVATE LLVMTableGenGlobalISel)
>   set_target_properties(llvm-tblgen PROPERTIES FOLDER "Tablegenning")
>
> diff  --git a/llvm/utils/TableGen/GlobalISel/CMakeLists.txt b/llvm/utils/TableGen/GlobalISel/CMakeLists.txt
> index c23ef6742f32e..1cd741cd6be1a 100644
> --- a/llvm/utils/TableGen/GlobalISel/CMakeLists.txt
> +++ b/llvm/utils/TableGen/GlobalISel/CMakeLists.txt
> @@ -3,7 +3,7 @@ set(LLVM_LINK_COMPONENTS
>     TableGen
>     )
>   
> -add_llvm_library(LLVMTableGenGlobalISel STATIC DISABLE_LLVM_LINK_LLVM_DYLIB
> +add_llvm_library(LLVMTableGenGlobalISel OBJECT
>                    CodeExpander.cpp
>                    GIMatchDag.cpp
>                    GIMatchDagEdge.cpp
>
>
>          
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list