//@ compile-flags: -Zautodiff=Enable -C opt-level=3 -Clto=fat //@ no-prefer-dynamic //@ needs-enzyme // Test that basic autodiff still works with our TypeTree infrastructure #![feature(autodiff)] use std::autodiff::autodiff_reverse; #[autodiff_reverse(d_simple, Duplicated, Active)] #[no_mangle] #[inline(never)] fn simple(x: &f64) -> f64 { 2.0 * x } // CHECK-LABEL: @simple // CHECK: fmul double // The derivative function should be generated normally // CHECK-LABEL: diffesimple // CHECK: fadd fast double fn main() { let x = std::hint::black_box(3.0); let output = simple(&x); assert_eq!(6.0, output); let mut df_dx = 0.0; let output_ = d_simple(&x, &mut df_dx, 1.0); assert_eq!(output, output_); assert_eq!(2.0, df_dx); }