|
18 | 18 | // but each shadow argument is `width` times larger (thus 16 and 20 elements here).
|
19 | 19 | // `d_square3` instead takes `width` (4) shadow arguments, which are all the same size as the
|
20 | 20 | // original function arguments.
|
21 |
| -// |
22 |
| -// FIXME(autodiff): We currently can't test `d_square1` and `d_square3` in the same file, since they |
23 |
| -// generate the same dummy functions which get merged by LLVM, breaking pieces of our pipeline which |
24 |
| -// try to rewrite the dummy functions later. We should consider to change to pure declarations both |
25 |
| -// in our frontend and in the llvm backend to avoid these issues. |
26 | 21 |
|
27 | 22 | #![feature(autodiff)]
|
28 | 23 |
|
29 | 24 | use std::autodiff::autodiff_forward;
|
30 | 25 |
|
31 | 26 | // CHECK: ;
|
32 | 27 | #[no_mangle]
|
33 |
| -//#[autodiff(d_square1, Forward, Dual, Dual)] |
| 28 | +#[autodiff_forward(d_square1, Dual, Dual)] |
34 | 29 | #[autodiff_forward(d_square2, 4, Dualv, Dualv)]
|
35 | 30 | #[autodiff_forward(d_square3, 4, Dual, Dual)]
|
36 | 31 | fn square(x: &[f32], y: &mut [f32]) {
|
@@ -79,25 +74,25 @@ fn main() {
|
79 | 74 | let mut dy3_4 = std::hint::black_box(vec![0.0; 5]);
|
80 | 75 |
|
81 | 76 | // scalar.
|
82 |
| - //d_square1(&x1, &z1, &mut y1, &mut dy1_1); |
83 |
| - //d_square1(&x1, &z2, &mut y2, &mut dy1_2); |
84 |
| - //d_square1(&x1, &z3, &mut y3, &mut dy1_3); |
85 |
| - //d_square1(&x1, &z4, &mut y4, &mut dy1_4); |
| 77 | + d_square1(&x1, &z1, &mut y1, &mut dy1_1); |
| 78 | + d_square1(&x1, &z2, &mut y2, &mut dy1_2); |
| 79 | + d_square1(&x1, &z3, &mut y3, &mut dy1_3); |
| 80 | + d_square1(&x1, &z4, &mut y4, &mut dy1_4); |
86 | 81 |
|
87 | 82 | // assert y1 == y2 == y3 == y4
|
88 |
| - //for i in 0..5 { |
89 |
| - // assert_eq!(y1[i], y2[i]); |
90 |
| - // assert_eq!(y1[i], y3[i]); |
91 |
| - // assert_eq!(y1[i], y4[i]); |
92 |
| - //} |
| 83 | + for i in 0..5 { |
| 84 | + assert_eq!(y1[i], y2[i]); |
| 85 | + assert_eq!(y1[i], y3[i]); |
| 86 | + assert_eq!(y1[i], y4[i]); |
| 87 | + } |
93 | 88 |
|
94 | 89 | // batch mode A)
|
95 | 90 | d_square2(&x1, &z5, &mut y5, &mut dy2);
|
96 | 91 |
|
97 | 92 | // assert y1 == y2 == y3 == y4 == y5
|
98 |
| - //for i in 0..5 { |
99 |
| - // assert_eq!(y1[i], y5[i]); |
100 |
| - //} |
| 93 | + for i in 0..5 { |
| 94 | + assert_eq!(y1[i], y5[i]); |
| 95 | + } |
101 | 96 |
|
102 | 97 | // batch mode B)
|
103 | 98 | d_square3(&x1, &z1, &z2, &z3, &z4, &mut y6, &mut dy3_1, &mut dy3_2, &mut dy3_3, &mut dy3_4);
|
|
0 commit comments