@@ -607,23 +607,30 @@ mod llvm_enzyme {
607
607
exprs = ecx. expr_call ( new_decl_span, bb_call_expr, thin_vec ! [ default_call_expr] ) ;
608
608
}
609
609
} else if x. mode . is_rev ( ) {
610
- //if x.width == 1 {
611
- // if primal_ret {
612
- // // We have extra handling above for the primal ret
613
- // d_ret_ty = d_ret_ty[1..].to_vec().into();
614
- // }
615
-
616
- // for arg in d_ret_ty.iter() {
617
- // let arg = arg.kind.is_simple_path().unwrap();
618
- // let sl: Vec<Symbol> = vec![arg, kw::Default];
619
- // let tmp = ecx.def_site_path(&sl);
620
- // let default_call_expr = ecx.expr_path(ecx.path(span, tmp));
621
- // let default_call_expr =
622
- // ecx.expr_call(new_decl_span, default_call_expr, thin_vec![]);
623
- // exprs = default_call_expr;
624
- // //exprs.push(default_call_expr);
625
- // }
626
- //}
610
+ if x. width == 1 {
611
+ // We either have `-> ArbitraryType` or `-> (ArbitraryType, repeated_float_scalars)`.
612
+ match d_ret_ty. kind {
613
+ TyKind :: Tup ( ref args) => {
614
+ // We have a tuple return type. We need to create a tuple of the same size
615
+ // and fill it with default values.
616
+ let mut exprs2 = thin_vec ! [ exprs] ;
617
+ for arg in args. iter ( ) . skip ( 1 ) {
618
+ let arg = arg. kind . is_simple_path ( ) . unwrap ( ) ;
619
+ let sl: Vec < Symbol > = vec ! [ arg, kw:: Default ] ;
620
+ let tmp = ecx. def_site_path ( & sl) ;
621
+ let default_call_expr = ecx. expr_path ( ecx. path ( span, tmp) ) ;
622
+ let default_call_expr =
623
+ ecx. expr_call ( new_decl_span, default_call_expr, thin_vec ! [ ] ) ;
624
+ exprs2. push ( default_call_expr) ;
625
+ }
626
+ exprs = ecx. expr_tuple ( new_decl_span, exprs2) ;
627
+ }
628
+ _ => {
629
+ panic ! ( "Unsupported return type: {:?}" , d_ret_ty) ;
630
+ }
631
+ }
632
+ }
633
+ exprs = ecx. expr_call ( new_decl_span, bb_call_expr, thin_vec ! [ exprs] ) ;
627
634
} else {
628
635
// The return type of our dummy function is the same as the return type of our primal.
629
636
// In that case, we can just use the primal call as last instruction.
0 commit comments