Skip to content

Cross-language inlining with LTO #45865

Description

@ruuda

I link against a C library with a very small function, and I would like its code to be inlined in the Rust function that calls it. I had hoped that it would be possible by setting lto = true in Cargo.toml, but there is still a call in the final executable. This comment confirms that at the moment there is no LTO between Rust and C.

I remember seeing an issue comment here that explained how to do it manually by emitting LLVM IR with rustc and clang and linking it together with llvm-link, then opt, but I cannot seem to find it any more.

The call overhead can be substantial. For my current use case that calls a C function in an inner loop, it causes the running time to be 9 times as long as the equivalent program where the function is inlined. (It relies on a number of unstable features to be able to express the function in Rust.)

So for “efficient C bindings”, LTO that can inline across C and Rust objects would be nice to have.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-linkageArea: linking into static, shared libraries and binariesC-enhancementCategory: An issue proposing an enhancement or a PR with one.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions