about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2025-02-10 18:12:10 +0000
committerbors <bors@rust-lang.org>2025-02-10 18:12:10 +0000
commit4bb6ec05b0d4d471d029e093b0396e110366d7d6 (patch)
tree06e6dd7d5b275d095e639000df03c1fcb790cfa1 /tests
parent4b293d99275cc63b07eec9e2de38f4b776989069 (diff)
parent4fff3209df23e432539260f609c79c0acbdf8472 (diff)
downloadrust-4bb6ec05b0d4d471d029e093b0396e110366d7d6.tar.gz
rust-4bb6ec05b0d4d471d029e093b0396e110366d7d6.zip
Auto merge of #136823 - matthiaskrgr:rollup-vp20mk1, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #136419 (adding autodiff tests)
 - #136628 (ci: upgrade to crosstool-ng 1.27.0)
 - #136681 (resolve `llvm-config` path properly on cross builds)
 - #136714 (Update `compiler-builtins` to 0.1.146)
 - #136731 (rustc_middle: parallel: TyCtxt: remove "unsafe impl DynSend/DynSync")
 - #136791 (Disable DWARF in linker options for i686-unknown-uefi)

Failed merges:

 - #136767 (improve host/cross target checking)

r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'tests')
-rw-r--r--tests/codegen/autodiff.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/codegen/autodiff.rs b/tests/codegen/autodiff.rs
new file mode 100644
index 00000000000..abf7fcf3e4b
--- /dev/null
+++ b/tests/codegen/autodiff.rs
@@ -0,0 +1,33 @@
+//@ compile-flags: -C opt-level=3  -Clto=fat
+//@ no-prefer-dynamic
+//@ needs-enzyme
+#![feature(autodiff)]
+
+use std::autodiff::autodiff;
+
+#[autodiff(d_square, Reverse, Duplicated, Active)]
+#[no_mangle]
+fn square(x: &f64) -> f64 {
+    x * x
+}
+
+// CHECK:define internal fastcc double @diffesquare(double %x.0.val, ptr nocapture align 8 %"x'"
+// CHECK-NEXT:invertstart:
+// CHECK-NEXT:  %_0 = fmul double %x.0.val, %x.0.val
+// CHECK-NEXT:  %0 = fadd fast double %x.0.val, %x.0.val
+// CHECK-NEXT:  %1 = load double, ptr %"x'", align 8
+// CHECK-NEXT:  %2 = fadd fast double %1, %0
+// CHECK-NEXT:  store double %2, ptr %"x'", align 8
+// CHECK-NEXT:  ret double %_0
+// CHECK-NEXT:}
+
+fn main() {
+    let x = 3.0;
+    let output = square(&x);
+    assert_eq!(9.0, output);
+
+    let mut df_dx = 0.0;
+    let output_ = d_square(&x, &mut df_dx, 1.0);
+    assert_eq!(output, output_);
+    assert_eq!(6.0, df_dx);
+}