|
35 | 35 | ret b
|
36 | 36 | };
|
37 | 37 |
|
38 |
| -// .cn g [a:R32, ret: .Cn [R32, .Cn [R32, .Cn [R32]]]] = { |
39 |
| -// .let f_diff = %autodiff.autodiff (.Cn [R32,.Cn[R32]]) f; |
40 |
| -// f_diff (a,ret) |
41 |
| -// }; |
42 |
| - |
43 |
| -.cn .extern test [[], ret: .Cn [R32]] = { |
44 |
| - // .cn inner [r:R32, pb:.Cn [R32, .Cn [R32]]] = { |
45 |
| - // .cn pb_rec p::[R32] = { |
46 |
| - // // ret (5.0:R32) |
47 |
| - // ret r |
48 |
| - // }; |
49 |
| - // pb (1.0:R32, pb_rec) |
50 |
| - // }; |
51 |
| - // g (5.0:R32, inner) |
| 38 | +.cn g [a:R32, ret: .Cn [R32, .Cn [R32, .Cn [R32]]]] = { |
| 39 | + .let f_diff = %autodiff.autodiff (.Cn [R32,.Cn[R32]]) f; |
| 40 | + f_diff (a,ret) |
| 41 | +}; |
52 | 42 |
|
| 43 | +.cn .extern test [[], ret: .Cn [[R32,R32],[R32,R32]]] = { |
| 44 | + .cn inner [r:R32, pb:.Cn [R32, .Cn [R32]]] = { |
| 45 | + .cn pb_rec p::[R32] = { |
| 46 | + // ret (5.0:R32) |
| 47 | + ret ((25.0:R32,10.0:R32),(r,p)) |
| 48 | + }; |
| 49 | + pb (1.0:R32, pb_rec) |
| 50 | + }; |
| 51 | + g (5.0:R32, inner) |
53 | 52 |
|
54 |
| - // .cn pb_rec p::[R32] = { |
55 |
| - // ret p |
56 |
| - // }; |
| 53 | + |
| 54 | + // .cn pb_rec p::[R32] = { |
| 55 | + // ret (25.0:R32,p) |
| 56 | + // }; |
57 | 57 |
|
58 | 58 | // f (5.0:R32, pb_rec)
|
59 | 59 |
|
60 | 60 |
|
61 | 61 | // ret (6.0:R32)
|
62 | 62 |
|
63 | 63 | // .let b = %core.rop.mul (0, _32) (2.0:R32, 3.0:R32);
|
64 |
| - .let b = 6.0:R32; |
65 |
| - ret b |
| 64 | + // .let b = 6.0:R32; |
| 65 | + // ret b |
66 | 66 | };
|
67 | 67 |
|
68 |
| -// could return pair of (result, pb) |
69 | 68 |
|
70 |
| -// CHECK-DAG: return{{.*}}176484 |
| 69 | +// CHECK-DAG: ret{{.*}}‹2;{{.*}}› |
0 commit comments