[llvm-dev] ThinLTO: module-scope inline assembly blocks

Teresa Johnson via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 4 11:13:07 PDT 2016


Filed https://llvm.org/bugs/show_bug.cgi?id=30610 to track, we can continue
discussion there.

Thanks,
Teresa

On Mon, Oct 3, 2016 at 10:48 AM, Teresa Johnson <tejohnson at google.com>
wrote:

> Ah, you are using 3.9 which explains the lack of additional save-temps
> files. In any case I just reproduced the multiple def issue with a head
> compiler. The module assembly is linked into the importing module as you
> suspected, even though it isn't referenced. Looks like the IRLinker always
> appends the module inline assembly when linking in a module (despite the
> fact that we only link in certain symbols). Will investigate a fix.
>
> Teresa
>
> On Mon, Oct 3, 2016 at 9:40 AM, Johan Engelen <jbc.engelen at gmail.com>
> wrote:
>
>> The plugin version (and LLVM) are LLVM 3.9.0 (the release source tarball).
>>
>> I've attached the source files and the temporary files generated.
>> `a.o` is the "MAIN" module.
>> `b.o` is the "ASM" module.
>>
>> The error I get is:
>> /usr/bin/ld: error: a.o.thinlto.o: multiple definition of 'foo'
>> /usr/bin/ld: b.o.thinlto.o: previous definition here
>>
>> (the files depend on D runtime lib, so upon succes you should see missing
>> symbol errors :-)
>>
>> Thanks,
>>   Johan
>>
>>
>>
>> On Mon, Oct 3, 2016 at 6:17 PM, Mehdi Amini <mehdi.amini at apple.com>
>> wrote:
>>
>>>
>>> On Oct 3, 2016, at 8:07 AM, Johan Engelen via llvm-dev <
>>> llvm-dev at lists.llvm.org> wrote:
>>>
>>> With `save-temps` as plugin option, I get extra files for the MAIN
>>> module (called `a.o`): `a.o.opt.bc` and `a.thinlto.bc`.
>>>
>>>
>>> I’d expect as temps `a.thinlto.bc` for the index + one file per input.
>>> Also there should be a number like: `a.o.4.opt.bc`
>>>
>>> Can you attach the generated temp files?
>>>
>>> Thanks,
>>>
>>>>>> Mehdi
>>>
>>>
>>>
>>> The `a.thinlto.bc` file contains nothing, only `source_filename = ...` .
>>> The `a.o.opt.bc` (this looks like the result after ThinLTO importing and
>>> optimization) contains the assembly block that it should not have:
>>> ```
>>> module asm "\09.text"
>>> module asm "\09.globl\09foo"
>>> module asm "\09.align\0916, 0x90"
>>> module asm "\09.type\09foo, at function"
>>> module asm "foo:"
>>> module asm "\09movq %rdi, %rax"
>>> module asm "\09rorw $8, %ax"
>>> module asm "\09ret "
>>> module asm "\09.size\09foo, .-foo"
>>> module asm ""
>>> ```
>>> The asm is the same as in the other module (where it _should_ be
>>> defined), and the linkage has not been changed.
>>>
>>> Thanks for the help,
>>>   Johan
>>>
>>>
>>> On Mon, Oct 3, 2016 at 4:45 PM, Teresa Johnson <tejohnson at google.com>
>>> wrote:
>>>
>>>> Oh sorry, misunderstood and thought you were implementing in a new
>>>> linker. For gold you can pass -Wl,-plugin-opt,save-temps and look at the
>>>> bitcode after each phase of ThinLTO, e.g. I think the files will have
>>>> .3.import.bc extensions.
>>>>
>>>> Teresa
>>>>
>>>> On Mon, Oct 3, 2016 at 7:42 AM, Johan Engelen <jbc.engelen at gmail.com>
>>>> wrote:
>>>>
>>>>> On Mon, Oct 3, 2016 at 4:27 PM, Teresa Johnson <tejohnson at google.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Oct 3, 2016 at 6:53 AM, Johan Engelen via llvm-dev <
>>>>>> llvm-dev at lists.llvm.org> wrote:
>>>>>>
>>>>>>> Hi all,
>>>>>>>   I am trying to add ThinLTO to the LDC compiler. It seems to work
>>>>>>> well on Mac (XCode 8) and Ubuntu (ld.gold + LLVMgold plugin).
>>>>>>> However, I am running into trouble with module-scope inline assembly
>>>>>>> blocks.
>>>>>>>
>>>>>>
>>>>>> Are you adding the support using the new LTO API or using the libLTO
>>>>>> C interfaces?
>>>>>>
>>>>>
>>>>> Perhaps I don't fully understand, but I think the answer is: neither :)
>>>>> What I do is output the module as bitcode with the module summary
>>>>> index added (`llvm::WriteBitcodeToFile`, summary index created with
>>>>> `llvm::ModuleSummaryIndexBuilder`). This is then passed to the system
>>>>> linker. The problems arise with ld.gold + LLVMgold plugin. I am using LLVM
>>>>> 3.9.0.
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Teresa Johnson |  Software Engineer |  tejohnson at google.com |
>>>> 408-460-2413
>>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>>
>>>
>>
>
>
> --
> Teresa Johnson |  Software Engineer |  tejohnson at google.com |
> 408-460-2413
>



-- 
Teresa Johnson |  Software Engineer |  tejohnson at google.com |  408-460-2413
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161004/9a3fe968/attachment.html>


More information about the llvm-dev mailing list