Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

autodiff fails when differentiating two identical functions #139471

Open
ZuseZ4 opened this issue Apr 7, 2025 · 0 comments
Open

autodiff fails when differentiating two identical functions #139471

ZuseZ4 opened this issue Apr 7, 2025 · 0 comments
Labels
C-bug Category: This is a bug. F-autodiff `#![feature(autodiff)]`

Comments

@ZuseZ4
Copy link
Member

ZuseZ4 commented Apr 7, 2025

I tried this code:

#![feature(autodiff)]

    use std::autodiff::autodiff;

    #[autodiff(d_square, Reverse, Duplicated, Active)]
    fn square(x: &f64) -> f64 {
        x * x
    }

    #[autodiff(d_square2, Reverse, Duplicated, Active)]
    fn square2(x: &f64) -> f64 {
        x * x
    }

fn main() {
    let x = 3.0;
    let mut dx = 1.0;
    d_square(&x, &mut dx, 1.0);
    d_square2(&x, &mut dx, 1.0);
}

I expected to see this happen: d_square and d_square2 should both compute the derivative of x*x, thus 2.0 * x. However, LLVM (or something earlier?) recognizes that square and square2 are identical, and fuses them (ReplaceAllUsesWith, or RAUW for LLVM). autodiff then is missing a (source) function to differentiate, giving the following error. This is often happening in our test cases, where we just test the same dummy functions in a lot of different configurations.

Instead, this happened:

error: failed to prepare autodiff: src: _ZN2ad7square217h920417192f1e5f52E, target: _ZN2ad9d_square217he1a6ffbcf6ea74f2E, could not find source function

Meta

rustc --version --verbose:

build from source
Backtrace

<backtrace>

Tracking:

@ZuseZ4 ZuseZ4 added the C-bug Category: This is a bug. label Apr 7, 2025
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Apr 7, 2025
@ZuseZ4 ZuseZ4 added F-autodiff `#![feature(autodiff)]` and removed needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Apr 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. F-autodiff `#![feature(autodiff)]`
Projects
None yet
Development

No branches or pull requests

2 participants