[PATCH] D12205: LTO: Simplify merged module ownership.
Duncan P. N. Exon Smith via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 24 15:15:08 PDT 2015
> On 2015-Aug-24, at 14:32, Peter Collingbourne <peter at pcc.me.uk> wrote:
>
> On Fri, Aug 21, 2015 at 05:48:10PM -0700, Duncan P. N. Exon Smith wrote:
>>> Index: lib/LTO/LTOCodeGenerator.cpp
>>> ===================================================================
>>> --- lib/LTO/LTOCodeGenerator.cpp
>>> +++ lib/LTO/LTOCodeGenerator.cpp
>>> @@ -64,29 +64,20 @@
>>> }
>>>
>>> LTOCodeGenerator::LTOCodeGenerator()
>>> - : Context(getGlobalContext()), IRLinker(new Module("ld-temp.o", Context)) {
>>> + : Context(getGlobalContext()),
>>> + OwnedModule(new Module("ld-temp.o", Context)),
>>
>> "OwnedContext" made sense as a name because the context isn't always
>> owned. We access the context through `Context`, but rely on the
>> destructor in `OwnedContext` to clean up memory.
>>
>> Here, we *always* own the module, so we don't need to distinguish. I
>> think a clearer name might be "MergedModule", a correctly-capitalized
>> version of the local variable name used in a few places.
>
> Done in new patch.
>
Latest patch LGTM (and I've checked with ld64 as well). Thanks!
>>> + IRLinker(OwnedModule.get()) {
>>> initializeLTOPasses();
>>> }
>>>
>>> LTOCodeGenerator::LTOCodeGenerator(std::unique_ptr<LLVMContext> Context)
>>> : OwnedContext(std::move(Context)), Context(*OwnedContext),
>>> - IRLinker(new Module("ld-temp.o", *OwnedContext)) {
>>> + OwnedModule(new Module("ld-temp.o", *OwnedContext)),
>>> + IRLinker(OwnedModule.get()) {
>>> initializeLTOPasses();
>>> }
>>>
>>> -void LTOCodeGenerator::destroyMergedModule() {
>>> - if (OwnedModule) {
>>> - assert(IRLinker.getModule() == &OwnedModule->getModule() &&
>>> - "The linker's module should be the same as the owned module");
>>> - delete OwnedModule;
>>> - OwnedModule = nullptr;
>>> - } else if (IRLinker.getModule())
>>> - IRLinker.deleteModule();
>>> -}
>>> -
>>> -LTOCodeGenerator::~LTOCodeGenerator() {
>>> - destroyMergedModule();
>>> -}
>>> +LTOCodeGenerator::~LTOCodeGenerator() {}
>>>
>>> // Initialize LTO passes. Please keep this funciton in sync with
>>> // PassManagerBuilder::populateLTOPassManager(), and make sure all LTO
>>> @@ -408,7 +397,6 @@
>>> void LTOCodeGenerator::applyScopeRestrictions() {
>>> if (ScopeRestrictionsDone || !ShouldInternalize)
>>> return;
>>> - Module *mergedModule = IRLinker.getModule();
>>
>> If you rename this variable in a separate NFC commit to 'MergedModule'
>> it would minimize noise in the semantic change.
>
> r245874, this also renames elsewhere and converts the loops to range-for.
>
> Thanks,
> --
> Peter
More information about the llvm-commits
mailing list