diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2025-07-21 14:34:12 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2025-07-22 14:28:48 +0200 |
| commit | a27f3e3fd1e4d16160f8885b6b06665b5319f56c (patch) | |
| tree | b033935392cbadf6f85d2dbddf433a88e323aeeb /tests/codegen/autodiff/identical_fnc.rs | |
| parent | ed93c1783b404d728d4809973a0550eb33cd293f (diff) | |
| download | rust-a27f3e3fd1e4d16160f8885b6b06665b5319f56c.tar.gz rust-a27f3e3fd1e4d16160f8885b6b06665b5319f56c.zip | |
Rename `tests/codegen` into `tests/codegen-llvm`
Diffstat (limited to 'tests/codegen/autodiff/identical_fnc.rs')
| -rw-r--r-- | tests/codegen/autodiff/identical_fnc.rs | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/tests/codegen/autodiff/identical_fnc.rs b/tests/codegen/autodiff/identical_fnc.rs deleted file mode 100644 index 1c25b3d09ab..00000000000 --- a/tests/codegen/autodiff/identical_fnc.rs +++ /dev/null @@ -1,45 +0,0 @@ -//@ compile-flags: -Zautodiff=Enable -C opt-level=3 -Clto=fat -//@ no-prefer-dynamic -//@ needs-enzyme -// -// Each autodiff invocation creates a new placeholder function, which we will replace on llvm-ir -// level. If a user tries to differentiate two identical functions within the same compilation unit, -// then LLVM might merge them in release mode before AD. In that case we can't rewrite one of the -// merged placeholder function anymore, and compilation would fail. We prevent this by disabling -// LLVM's merge_function pass before AD. Here we implicetely test that our solution keeps working. -// We also explicetly test that we keep running merge_function after AD, by checking for two -// identical function calls in the LLVM-IR, while having two different calls in the Rust code. -#![feature(autodiff)] - -use std::autodiff::autodiff_reverse; - -#[autodiff_reverse(d_square, Duplicated, Active)] -fn square(x: &f64) -> f64 { - x * x -} - -#[autodiff_reverse(d_square2, Duplicated, Active)] -fn square2(x: &f64) -> f64 { - x * x -} - -// CHECK:; identical_fnc::main -// CHECK-NEXT:; Function Attrs: -// CHECK-NEXT:define internal void @_ZN13identical_fnc4main17hf4dbc69c8d2f9130E() -// CHECK-NEXT:start: -// CHECK-NOT:br -// CHECK-NOT:ret -// CHECK:; call identical_fnc::d_square -// CHECK-NEXT: call fastcc void @_ZN13identical_fnc8d_square17h4c364207a2f8e06dE(double %x.val, ptr noalias noundef nonnull align 8 dereferenceable(8) %dx1) -// CHECK-NEXT:; call identical_fnc::d_square -// CHECK-NEXT: call fastcc void @_ZN13identical_fnc8d_square17h4c364207a2f8e06dE(double %x.val, ptr noalias noundef nonnull align 8 dereferenceable(8) %dx2) - -fn main() { - let x = std::hint::black_box(3.0); - let mut dx1 = std::hint::black_box(1.0); - let mut dx2 = std::hint::black_box(1.0); - let _ = d_square(&x, &mut dx1, 1.0); - let _ = d_square2(&x, &mut dx2, 1.0); - assert_eq!(dx1, 6.0); - assert_eq!(dx2, 6.0); -} |
