[llvm] 2c3cf62 - Make TableGenGlobalISel an object library

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 31 14:18:15 PDT 2021


You can see my exact build scripts here: 
https://github.com/preames/llvm-aws-builder

It's a pretty basic release + assertions built on ubuntu on an x86 AWS 
instance.  Really nothing that interesting.

Philip

On 3/31/21 1:47 PM, Aaron Puchert wrote:
> What's the build configuration that you're using? There are many 
> supported configurations out there (shared libraries, static 
> libraries, both, LLVM_LINK_LLVM_DYLIB and so on) and of course I 
> couldn't test all of them.
>
> CMake should be able to figure what needs to be rebuild, so that 
> shouldn't be an issue.
>
> So far I haven't gotten any bot complaints, I just have your mail.
>
> Am 31.03.21 um 22:28 schrieb Philip Reames:
>> 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