@@ -19,7 +19,7 @@ use rustc_hir::def_id::LOCAL_CRATE;
1919use rustc_hir:: find_attr;
2020use rustc_middle:: mir:: BinOp ;
2121use rustc_middle:: ty:: layout:: { FnAbiOf , HasTyCtxt , HasTypingEnv , LayoutOf } ;
22- use rustc_middle:: ty:: offload_meta:: OffloadMetadata ;
22+ use rustc_middle:: ty:: offload_meta:: { MappingFlags , OffloadMetadata } ;
2323use rustc_middle:: ty:: { self , GenericArgsRef , Instance , SimdAlign , Ty , TyCtxt , TypingEnv } ;
2424use rustc_middle:: { bug, span_bug} ;
2525use rustc_session:: config:: CrateType ;
@@ -1943,7 +1943,9 @@ fn codegen_offload_preload_mut_drop<'ll, 'tcx>(
19431943
19441944 // Load field 0: `cpu_ptr: *mut T`.
19451945 let cpu_ptr_place = place. project_field ( bx, 0 ) ;
1946+ dbg ! ( & cpu_ptr_place) ;
19461947 let cpu_ptr_operand = bx. load_operand ( cpu_ptr_place) ;
1948+ dbg ! ( & cpu_ptr_operand) ;
19471949
19481950 let args: Vec < & ' ll Value > = match cpu_ptr_operand. val {
19491951 OperandValue :: Immediate ( ptr) => vec ! [ ptr] ,
@@ -1953,7 +1955,9 @@ fn codegen_offload_preload_mut_drop<'ll, 'tcx>(
19531955 _ => bug ! ( "unexpected PreloadMut cpu_ptr operand" ) ,
19541956 } ;
19551957
1956- let meta = OffloadMetadata :: from_ty ( tcx, pointee_ty) ;
1958+ let mut meta = OffloadMetadata :: from_ty ( tcx, pointee_ty) ;
1959+ meta. mode |= MappingFlags :: FROM ;
1960+ dbg ! ( & meta) ;
19571961 let metadata: & [ OffloadMetadata ; 1 ] = & [ meta] ;
19581962
19591963 let types: & Type = cx. layout_of ( pointee_ty) . llvm_type ( cx) ;
@@ -1969,6 +1973,27 @@ fn codegen_offload_preload_mut_drop<'ll, 'tcx>(
19691973
19701974 let target_symbol = cx. generate_local_symbol_name ( "" ) ;
19711975 dbg ! ( "done for now" ) ;
1976+ let offload_data = gen_define_handling ( & cx, metadata, target_symbol, offload_globals) ;
1977+ let has_dynamic = metadata. iter ( ) . any ( |m| !matches ! ( m. payload_size, OffloadSize :: Static ( _) ) ) ;
1978+ let ( ty, ty2, a1, a2, a4) = crate :: builder:: gpu_helper:: preper_datatransfers (
1979+ bx,
1980+ & args,
1981+ & [ types] ,
1982+ offload_data. offload_sizes ,
1983+ metadata,
1984+ has_dynamic,
1985+ ) ;
1986+ let geps = crate :: builder:: gpu_helper:: get_geps ( bx, ty, ty2, a1, a2, a4, has_dynamic) ;
1987+
1988+ crate :: builder:: gpu_helper:: generate_mapper_call (
1989+ bx,
1990+ geps,
1991+ offload_data. memtransfer_end ,
1992+ offload_globals. end_mapper ,
1993+ offload_globals. mapper_fn_ty ,
1994+ 1 ,
1995+ offload_globals. ident_t_global ,
1996+ ) ;
19721997}
19731998
19741999// For each PreLoad *call*, we now use some of our previous declared globals to move data to the gpu.
0 commit comments