|  | //@ 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); | 
|  | } |