[llvm] r257181 - [ThinLTO] Use new in-place symbol changes for exporting module

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 8 09:18:19 PST 2016


On Fri, Jan 8, 2016 at 9:15 AM, Mehdi Amini <mehdi.amini at apple.com> wrote:
>
>> On Jan 8, 2016, at 9:06 AM, Teresa Johnson via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: tejohnson
>> Date: Fri Jan  8 11:06:29 2016
>> New Revision: 257181
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=257181&view=rev
>> Log:
>> [ThinLTO] Use new in-place symbol changes for exporting module
>>
>> Due to the new in-place ThinLTO symbol handling support added in
>> r257174, we now invoke renameModuleForThinLTO on the current
>> module from within the FunctionImport pass.
>
> While this is simpler, this make the FunctionImporter doing more than just importing. It couples two steps.
> Might not be that important, but does not seem straightforward to me either.

Point taken. Open to suggestions on where to move it. I wanted to move
it out of clang though as it isn't needed there anymore. Should it be
a separate (new) pass?

Teresa

>
>> Mehdi
>
>
>
>
>>
>> Additionally, renameModuleForThinLTO no longer needs to return the
>> Module as it is performing the renaming in place on the one provided.
>>
>> This commit will be immediately preceeded by a companion clang patch to
>> remove its invocation of renameModuleForThinLTO.
>>
>> Modified:
>>    llvm/trunk/include/llvm/Linker/Linker.h
>>    llvm/trunk/lib/Linker/LinkModules.cpp
>>    llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
>>
>> Modified: llvm/trunk/include/llvm/Linker/Linker.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Linker/Linker.h?rev=257181&r1=257180&r2=257181&view=diff
>> ==============================================================================
>> --- llvm/trunk/include/llvm/Linker/Linker.h (original)
>> +++ llvm/trunk/include/llvm/Linker/Linker.h Fri Jan  8 11:06:29 2016
>> @@ -69,8 +69,7 @@ public:
>>
>> /// Perform in-place global value handling on the given Module for
>> /// exported local functions renamed and promoted for ThinLTO.
>> -std::unique_ptr<Module> renameModuleForThinLTO(std::unique_ptr<Module> M,
>> -                                               const FunctionInfoIndex *Index);
>> +bool renameModuleForThinLTO(Module &M, const FunctionInfoIndex *Index);
>>
>> } // End llvm namespace
>>
>>
>> Modified: llvm/trunk/lib/Linker/LinkModules.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=257181&r1=257180&r2=257181&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Linker/LinkModules.cpp (original)
>> +++ llvm/trunk/lib/Linker/LinkModules.cpp Fri Jan  8 11:06:29 2016
>> @@ -863,13 +863,9 @@ bool Linker::linkModules(Module &Dest, s
>>   return L.linkInModule(std::move(Src), Flags);
>> }
>>
>> -std::unique_ptr<Module>
>> -llvm::renameModuleForThinLTO(std::unique_ptr<Module> M,
>> -                             const FunctionInfoIndex *Index) {
>> -  ThinLTOGlobalProcessing ThinLTOProcessing(*M, Index);
>> -  if (ThinLTOProcessing.run())
>> -    return nullptr;
>> -  return M;
>> +bool llvm::renameModuleForThinLTO(Module &M, const FunctionInfoIndex *Index) {
>> +  ThinLTOGlobalProcessing ThinLTOProcessing(M, Index);
>> +  return ThinLTOProcessing.run();
>> }
>>
>> //===----------------------------------------------------------------------===//
>>
>> Modified: llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp?rev=257181&r1=257180&r2=257181&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp (original)
>> +++ llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp Fri Jan  8 11:06:29 2016
>> @@ -413,14 +413,19 @@ public:
>>       Index = IndexPtr.get();
>>     }
>>
>> +    // First we need to promote to global scope and rename any local values that
>> +    // are potentially exported to other modules.
>> +    if (renameModuleForThinLTO(M, Index)) {
>> +      errs() << "Error renaming module\n";
>> +      return false;
>> +    }
>> +
>>     // Perform the import now.
>>     auto ModuleLoader = [&M](StringRef Identifier) {
>>       return loadFile(Identifier, M.getContext());
>>     };
>>     FunctionImporter Importer(*Index, ModuleLoader);
>>     return Importer.importFunctions(M);
>> -
>> -    return false;
>>   }
>> };
>> } // anonymous namespace
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>



-- 
Teresa Johnson | Software Engineer | tejohnson at google.com | 408-460-2413


More information about the llvm-commits mailing list