(original) (raw)

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@apple.com> wrote:

On Oct 3, 2016, at 8:07 AM, Johan Engelen via llvm-dev <llvm-dev@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,@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@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@gmail.com> wrote:
On Mon, Oct 3, 2016 at 4:27 PM, Teresa Johnson <tejohnson@google.com> wrote:


On Mon, Oct 3, 2016 at 6:53 AM, Johan Engelen via llvm-dev <llvm-dev@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@google.com | 408-460-2413

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev