Johan Engelen via llvm-dev
2016-Oct-03 16:40 UTC
[llvm-dev] ThinLTO: module-scope inline assembly blocks
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 > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161003/a3bdbf2a/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: Archive.zip Type: application/zip Size: 10920 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161003/a3bdbf2a/attachment.zip>
Teresa Johnson via llvm-dev
2016-Oct-03 17:48 UTC
[llvm-dev] ThinLTO: module-scope inline assembly blocks
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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161003/cb67f870/attachment.html>
Teresa Johnson via llvm-dev
2016-Oct-04 18:13 UTC
[llvm-dev] ThinLTO: module-scope inline assembly blocks
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>