Skip to content

Commit 43efce8

Browse files
committed
Add rest of test fixes
1 parent de734a3 commit 43efce8

File tree

12 files changed

+82
-92
lines changed

12 files changed

+82
-92
lines changed

compiler/rustc_codegen_llvm/src/builder/autodiff.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ pub(crate) fn generate_enzyme_call<'ll, 'tcx>(
276276
// %0 = fmul double %x, %x
277277
// ret double %0
278278
// }
279-
// ```
279+
//
280280
// define double @dsquare(double %x) {
281281
// return 0.0;
282282
// }

tests/codegen-llvm/autodiff/generic.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,23 @@ fn square<T: std::ops::Mul<Output = T> + Copy>(x: &T) -> T {
1111
*x * *x
1212
}
1313

14-
// Ensure that `d_square::<f64>` code is generated even if `square::<f64>` was never called
14+
// Ensure that `d_square::<f32>` code is generated
1515
//
1616
// CHECK: ; generic::square
17-
// CHECK-NEXT: ; Function Attrs:
18-
// CHECK-NEXT: define internal {{.*}} double
17+
// CHECK-NEXT: ; Function Attrs: {{.*}}
18+
// CHECK-NEXT: define internal {{.*}} float
1919
// CHECK-NEXT: start:
2020
// CHECK-NOT: ret
21-
// CHECK: fmul double
21+
// CHECK: fmul float
2222

23-
// Ensure that `d_square::<f32>` code is generated
23+
// Ensure that `d_square::<f64>` code is generated even if `square::<f64>` was never called
2424
//
2525
// CHECK: ; generic::square
26-
// CHECK-NEXT: ; Function Attrs: {{.*}}
27-
// CHECK-NEXT: define internal {{.*}} float
26+
// CHECK-NEXT: ; Function Attrs:
27+
// CHECK-NEXT: define internal {{.*}} double
2828
// CHECK-NEXT: start:
2929
// CHECK-NOT: ret
30-
// CHECK: fmul float
30+
// CHECK: fmul double
3131

3232
fn main() {
3333
let xf32: f32 = std::hint::black_box(3.0);

tests/codegen-llvm/autodiff/identical_fnc.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ fn square2(x: &f64) -> f64 {
2626

2727
// CHECK:; identical_fnc::main
2828
// CHECK-NEXT:; Function Attrs:
29-
// CHECK-NEXT:define internal void @_ZN13identical_fnc4main17hf4dbc69c8d2f9130E()
29+
// CHECK-NEXT:define internal void @_ZN13identical_fnc4main17h6009e4f751bf9407E()
3030
// CHECK-NEXT:start:
3131
// CHECK-NOT:br
3232
// CHECK-NOT:ret
33-
// CHECK:call fastcc void @diffe_ZN13identical_fnc6square17hdfa1c645848284b7E(double %x.val, ptr %dx1)
34-
// CHECK-NEXT:call fastcc void @diffe_ZN13identical_fnc6square17hdfa1c645848284b7E(double %x.val, ptr %dx2)
33+
// CHECK:call fastcc void @diffe_ZN13identical_fnc6square17h67c6eccd3051fb4cE(double %x.val, ptr %dx1)
34+
// CHECK-NEXT:call fastcc void @diffe_ZN13identical_fnc6square17h67c6eccd3051fb4cE(double %x.val, ptr %dx2)
3535

3636
fn main() {
3737
let x = std::hint::black_box(3.0);

tests/codegen-llvm/autodiff/inline.rs

Lines changed: 0 additions & 24 deletions
This file was deleted.

tests/codegen-llvm/autodiffv2.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
// in our frontend and in the llvm backend to avoid these issues.
2626

2727
#![feature(autodiff)]
28+
#![feature(core_intrinsics)]
2829

29-
use std::autodiff::autodiff;
30+
use std::autodiff::autodiff_forward;
3031

32+
// CHECK: ;
3133
#[no_mangle]
3234
//#[autodiff(d_square1, Forward, Dual, Dual)]
33-
#[autodiff(d_square2, Forward, 4, Dualv, Dualv)]
34-
#[autodiff(d_square3, Forward, 4, Dual, Dual)]
35+
#[autodiff_forward(d_square2, 4, Dualv, Dualv)]
36+
#[autodiff_forward(d_square3, 4, Dual, Dual)]
3537
fn square(x: &[f32], y: &mut [f32]) {
3638
assert!(x.len() >= 4);
3739
assert!(y.len() >= 5);

tests/pretty/autodiff/autodiff_forward.pp

Lines changed: 46 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//@ needs-enzyme
44

55
#![feature(autodiff)]
6-
#![feature(intrinsics)]
6+
#![feature(core_intrinsics)]
77
#[prelude_import]
88
use ::std::prelude::rust_2015::*;
99
#[macro_use]
@@ -37,92 +37,105 @@
3737
::core::panicking::panic("not implemented")
3838
}
3939
#[rustc_autodiff(Forward, 1, Dual, Const, Dual)]
40-
#[rustc_intrinsic]
41-
pub fn df1(x: &[f64], bx_0: &[f64], y: f64) -> (f64, f64);
40+
pub fn df1(x: &[f64], bx_0: &[f64], y: f64) -> (f64, f64) {
41+
std::intrinsics::enzyme_autodiff(f1::<>, df1::<>, (x, bx_0, y))
42+
}
4243
#[rustc_autodiff]
4344
#[inline(never)]
4445
pub fn f2(x: &[f64], y: f64) -> f64 {
4546
::core::panicking::panic("not implemented")
4647
}
4748
#[rustc_autodiff(Forward, 1, Dual, Const, Const)]
48-
#[rustc_intrinsic]
49-
pub fn df2(x: &[f64], bx_0: &[f64], y: f64) -> f64;
49+
pub fn df2(x: &[f64], bx_0: &[f64], y: f64) -> f64 {
50+
std::intrinsics::enzyme_autodiff(f2::<>, df2::<>, (x, bx_0, y))
51+
}
5052
#[rustc_autodiff]
5153
#[inline(never)]
5254
pub fn f3(x: &[f64], y: f64) -> f64 {
5355
::core::panicking::panic("not implemented")
5456
}
5557
#[rustc_autodiff(Forward, 1, Dual, Const, Const)]
56-
#[rustc_intrinsic]
57-
pub fn df3(x: &[f64], bx_0: &[f64], y: f64) -> f64;
58+
pub fn df3(x: &[f64], bx_0: &[f64], y: f64) -> f64 {
59+
std::intrinsics::enzyme_autodiff(f3::<>, df3::<>, (x, bx_0, y))
60+
}
5861
#[rustc_autodiff]
5962
#[inline(never)]
6063
pub fn f4() {}
6164
#[rustc_autodiff(Forward, 1, None)]
62-
#[rustc_intrinsic]
63-
pub fn df4() -> ();
65+
pub fn df4() -> () { std::intrinsics::enzyme_autodiff(f4::<>, df4::<>, ()) }
6466
#[rustc_autodiff]
6567
#[inline(never)]
6668
pub fn f5(x: &[f64], y: f64) -> f64 {
6769
::core::panicking::panic("not implemented")
6870
}
6971
#[rustc_autodiff(Forward, 1, Const, Dual, Const)]
70-
#[rustc_intrinsic]
71-
pub fn df5_y(x: &[f64], y: f64, by_0: f64) -> f64;
72+
pub fn df5_y(x: &[f64], y: f64, by_0: f64) -> f64 {
73+
std::intrinsics::enzyme_autodiff(f5::<>, df5_y::<>, (x, y, by_0))
74+
}
7275
#[rustc_autodiff(Forward, 1, Dual, Const, Const)]
73-
#[rustc_intrinsic]
74-
pub fn df5_x(x: &[f64], bx_0: &[f64], y: f64) -> f64;
76+
pub fn df5_x(x: &[f64], bx_0: &[f64], y: f64) -> f64 {
77+
std::intrinsics::enzyme_autodiff(f5::<>, df5_x::<>, (x, bx_0, y))
78+
}
7579
#[rustc_autodiff(Reverse, 1, Duplicated, Const, Active)]
76-
#[rustc_intrinsic]
77-
pub fn df5_rev(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64;
80+
pub fn df5_rev(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64 {
81+
std::intrinsics::enzyme_autodiff(f5::<>, df5_rev::<>, (x, dx_0, y, dret))
82+
}
7883
struct DoesNotImplDefault;
7984
#[rustc_autodiff]
8085
#[inline(never)]
8186
pub fn f6() -> DoesNotImplDefault {
8287
::core::panicking::panic("not implemented")
8388
}
8489
#[rustc_autodiff(Forward, 1, Const)]
85-
#[rustc_intrinsic]
86-
pub fn df6() -> DoesNotImplDefault;
90+
pub fn df6() -> DoesNotImplDefault {
91+
std::intrinsics::enzyme_autodiff(f6::<>, df6::<>, ())
92+
}
8793
#[rustc_autodiff]
8894
#[inline(never)]
8995
pub fn f7(x: f32) -> () {}
9096
#[rustc_autodiff(Forward, 1, Const, None)]
91-
#[rustc_intrinsic]
92-
pub fn df7(x: f32) -> ();
97+
pub fn df7(x: f32) -> () {
98+
std::intrinsics::enzyme_autodiff(f7::<>, df7::<>, (x,))
99+
}
93100
#[no_mangle]
94101
#[rustc_autodiff]
95102
#[inline(never)]
96103
fn f8(x: &f32) -> f32 { ::core::panicking::panic("not implemented") }
97104
#[rustc_autodiff(Forward, 4, Dual, Dual)]
98-
#[rustc_intrinsic]
99105
fn f8_3(x: &f32, bx_0: &f32, bx_1: &f32, bx_2: &f32, bx_3: &f32)
100-
-> [f32; 5usize];
106+
-> [f32; 5usize] {
107+
std::intrinsics::enzyme_autodiff(f8::<>, f8_3::<>,
108+
(x, bx_0, bx_1, bx_2, bx_3))
109+
}
101110
#[rustc_autodiff(Forward, 4, Dual, DualOnly)]
102-
#[rustc_intrinsic]
103111
fn f8_2(x: &f32, bx_0: &f32, bx_1: &f32, bx_2: &f32, bx_3: &f32)
104-
-> [f32; 4usize];
112+
-> [f32; 4usize] {
113+
std::intrinsics::enzyme_autodiff(f8::<>, f8_2::<>,
114+
(x, bx_0, bx_1, bx_2, bx_3))
115+
}
105116
#[rustc_autodiff(Forward, 1, Dual, DualOnly)]
106-
#[rustc_intrinsic]
107-
fn f8_1(x: &f32, bx_0: &f32) -> f32;
117+
fn f8_1(x: &f32, bx_0: &f32) -> f32 {
118+
std::intrinsics::enzyme_autodiff(f8::<>, f8_1::<>, (x, bx_0))
119+
}
108120
pub fn f9() {
109121
#[rustc_autodiff]
110122
#[inline(never)]
111123
fn inner(x: f32) -> f32 { x * x }
112124
#[rustc_autodiff(Forward, 1, Dual, Dual)]
113-
#[rustc_intrinsic]
114-
fn d_inner_2(x: f32, bx_0: f32)
115-
-> (f32, f32);
125+
fn d_inner_2(x: f32, bx_0: f32) -> (f32, f32) {
126+
std::intrinsics::enzyme_autodiff(inner::<>, d_inner_2::<>, (x, bx_0))
127+
}
116128
#[rustc_autodiff(Forward, 1, Dual, DualOnly)]
117-
#[rustc_intrinsic]
118-
fn d_inner_1(x: f32, bx_0: f32)
119-
-> f32;
129+
fn d_inner_1(x: f32, bx_0: f32) -> f32 {
130+
std::intrinsics::enzyme_autodiff(inner::<>, d_inner_1::<>, (x, bx_0))
131+
}
120132
}
121133
#[rustc_autodiff]
122134
#[inline(never)]
123135
pub fn f10<T: std::ops::Mul<Output = T> + Copy>(x: &T) -> T { *x * *x }
124136
#[rustc_autodiff(Reverse, 1, Duplicated, Active)]
125-
#[rustc_intrinsic]
126137
pub fn d_square<T: std::ops::Mul<Output = T> +
127-
Copy>(x: &T, dx_0: &mut T, dret: T) -> T;
138+
Copy>(x: &T, dx_0: &mut T, dret: T) -> T {
139+
std::intrinsics::enzyme_autodiff(f10::<T>, d_square::<T>, (x, dx_0, dret))
140+
}
128141
fn main() {}

tests/pretty/autodiff/autodiff_forward.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//@ needs-enzyme
22

33
#![feature(autodiff)]
4-
#![feature(intrinsics)]
4+
#![feature(core_intrinsics)]
55
//@ pretty-mode:expanded
66
//@ pretty-compare-only
77
//@ pp-exact:autodiff_forward.pp

tests/pretty/autodiff/autodiff_reverse.pp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//@ needs-enzyme
44

55
#![feature(autodiff)]
6-
#![feature(intrinsics)]
6+
#![feature(core_intrinsics)]
77
#[prelude_import]
88
use ::std::prelude::rust_2015::*;
99
#[macro_use]
@@ -30,36 +30,37 @@
3030
::core::panicking::panic("not implemented")
3131
}
3232
#[rustc_autodiff(Reverse, 1, Duplicated, Const, Active)]
33-
#[rustc_intrinsic]
34-
pub fn df1(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64;
33+
pub fn df1(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64 {
34+
std::intrinsics::enzyme_autodiff(f1::<>, df1::<>, (x, dx_0, y, dret))
35+
}
3536
#[rustc_autodiff]
3637
#[inline(never)]
3738
pub fn f2() {}
3839
#[rustc_autodiff(Reverse, 1, None)]
39-
#[rustc_intrinsic]
40-
pub fn df2();
40+
pub fn df2() { std::intrinsics::enzyme_autodiff(f2::<>, df2::<>, ()) }
4141
#[rustc_autodiff]
4242
#[inline(never)]
4343
pub fn f3(x: &[f64], y: f64) -> f64 {
4444
::core::panicking::panic("not implemented")
4545
}
4646
#[rustc_autodiff(Reverse, 1, Duplicated, Const, Active)]
47-
#[rustc_intrinsic]
48-
pub fn df3(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64;
47+
pub fn df3(x: &[f64], dx_0: &mut [f64], y: f64, dret: f64) -> f64 {
48+
std::intrinsics::enzyme_autodiff(f3::<>, df3::<>, (x, dx_0, y, dret))
49+
}
4950
enum Foo { Reverse, }
5051
use Foo::Reverse;
5152
#[rustc_autodiff]
5253
#[inline(never)]
5354
pub fn f4(x: f32) { ::core::panicking::panic("not implemented") }
5455
#[rustc_autodiff(Reverse, 1, Const, None)]
55-
#[rustc_intrinsic]
56-
pub fn df4(x: f32);
56+
pub fn df4(x: f32) { std::intrinsics::enzyme_autodiff(f4::<>, df4::<>, (x,)) }
5757
#[rustc_autodiff]
5858
#[inline(never)]
5959
pub fn f5(x: *const f32, y: &f32) {
6060
::core::panicking::panic("not implemented")
6161
}
6262
#[rustc_autodiff(Reverse, 1, DuplicatedOnly, Duplicated, None)]
63-
#[rustc_intrinsic]
64-
pub unsafe fn df5(x: *const f32, dx_0: *mut f32, y: &f32, dy_0: &mut f32);
63+
pub unsafe fn df5(x: *const f32, dx_0: *mut f32, y: &f32, dy_0: &mut f32) {
64+
std::intrinsics::enzyme_autodiff(f5::<>, df5::<>, (x, dx_0, y, dy_0))
65+
}
6566
fn main() {}

tests/pretty/autodiff/autodiff_reverse.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//@ needs-enzyme
22

33
#![feature(autodiff)]
4-
#![feature(intrinsics)]
4+
#![feature(core_intrinsics)]
55
//@ pretty-mode:expanded
66
//@ pretty-compare-only
77
//@ pp-exact:autodiff_reverse.pp

tests/pretty/autodiff/inherent_impl.pp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//@ needs-enzyme
44

55
#![feature(autodiff)]
6-
#![feature(intrinsics)]
6+
#![feature(core_intrinsics)]
77
#[prelude_import]
88
use ::std::prelude::rust_2015::*;
99
#[macro_use]
@@ -32,11 +32,8 @@
3232
self.a * 0.25 * (x * x - 1.0 - 2.0 * x.ln())
3333
}
3434
#[rustc_autodiff(Reverse, 1, Const, Active, Active)]
35-
#[rustc_intrinsic]
3635
fn df(&self, x: f64, dret: f64) -> (f64, f64) {
37-
unsafe { asm!("NOP", options(pure, nomem)); };
38-
::core::hint::black_box(self.f(x));
39-
::core::hint::black_box((dret,));
40-
::core::hint::black_box((self.f(x), f64::default()))
36+
std::intrinsics::enzyme_autodiff(Self::f::<>, Self::df::<>,
37+
(self, x, dret))
4138
}
4239
}

0 commit comments

Comments
 (0)