autodiff unnecessarily prevents inlining #138920
Labels
E-easy
Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.
F-autodiff
`#![feature(autodiff)]`
Using
std::autodiff
and thereforeRUSTFLAGS=-Zautodiff=Enable
in release mode currently alters the compilation pipeline in the following way:We have to make sure that functions being differentiated are not getting inlined during 1), since we still need them in step 2). Therefore they all receive
noinline
attributes.The problem we now have is that in Step 3), we potentially want to inline the new function which was generated through enzyme/autodiff. However, all function which got differentiated still have the noinline attribute.
We kept track of which function got differentiated, so it should be comparably easy to go through the llvm-ir module, find all functions which got created during step 2), and remove their noonline attribute before we move on to step 3). This will improve performance for smaller functions.
Here is the second llvm_optimize call, we would want to remove noinline before this call (and after the first call 5 lines above).
rust/compiler/rustc_codegen_llvm/src/back/lto.rs
Line 663 in 1df5aff
This is a good issue to get started, so if you're interested please feel free to start a discussion here, I'm happy to help with the design or implementation.
Tracking:
The text was updated successfully, but these errors were encountered: