Skip to content

Commit 335151f

Browse files
committed
adding first autodiff test
1 parent 7f36543 commit 335151f

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

tests/codegen/autodiff.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//@ compile-flags: -C opt-level=3 -Clto=fat -Zllvm-plugins=/home/manuel/prog/rust-middle/build/x86_64-unknown-linux-gnu/enzyme/build/Enzyme/libEnzyme-19.so -Cpasses=enzyme
2+
//@ no-prefer-dynamic
3+
//@ needs-enzyme
4+
#![feature(autodiff)]
5+
6+
use std::autodiff::autodiff;
7+
8+
#[autodiff(d_square, Reverse, Duplicated, Active)]
9+
#[no_mangle]
10+
fn square(x: &f64) -> f64 {
11+
x * x
12+
}
13+
14+
// CHECK:define internal fastcc double @diffesquare(double %x.0.val, ptr nocapture align 8 %"x'"
15+
// CHECK-NEXT:invertstart:
16+
// CHECK-NEXT: %_0 = fmul double %x.0.val, %x.0.val
17+
// CHECK-NEXT: %0 = fadd fast double %x.0.val, %x.0.val
18+
// CHECK-NEXT: %1 = load double, ptr %"x'", align 8, !alias.scope !17816, !noalias !17819
19+
// CHECK-NEXT: %2 = fadd fast double %1, %0
20+
// CHECK-NEXT: store double %2, ptr %"x'", align 8, !alias.scope !17816, !noalias !17819
21+
// CHECK-NEXT: ret double %_0
22+
// CHECK-NEXT:}
23+
24+
fn main() {
25+
let x = 3.0;
26+
let output = square(&x);
27+
assert_eq!(9.0, output);
28+
29+
let mut df_dx = 0.0;
30+
let output_ = d_square(&x, &mut df_dx, 1.0);
31+
assert_eq!(output, output_);
32+
assert_eq!(6.0, df_dx);
33+
}

0 commit comments

Comments
 (0)