@@ -26,8 +26,8 @@ pub(crate) fn handle_gpu_code<'ll>(
2626 kernels. push ( kernel) ;
2727 }
2828 }
29- gen_call_handling ( & cx, & kernels, & o_types) ;
3029 generate_launcher ( & cx) ;
30+ gen_call_handling ( & cx, & kernels, & o_types) ;
3131 crate :: builder:: gpu_wrapper:: gen_image_wrapper_module ( & cgcx) ;
3232}
3333
@@ -347,8 +347,9 @@ fn gen_call_handling<'ll>(
347347 let ty2 = cx. type_array ( cx. type_i64 ( ) , num_args) ;
348348 let a4 = builder. direct_alloca ( ty2, Align :: EIGHT , ".offload_sizes" ) ;
349349
350- let a5 = builder. direct_alloca ( tgt_kernel_decl, Align :: EIGHT , "kernel_args" ) ;
351350 //%kernel_args = alloca %struct.__tgt_kernel_arguments, align 8
351+ let a5 = builder. direct_alloca ( tgt_kernel_decl, Align :: EIGHT , "kernel_args" ) ;
352+
352353 // Now we allocate once per function param, a copy to be passed to one of our maps.
353354 let mut vals = vec ! [ ] ;
354355 let mut geps = vec ! [ ] ;
@@ -441,7 +442,51 @@ fn gen_call_handling<'ll>(
441442
442443 // Step 3)
443444 // Here we will add code for the actual kernel launches in a follow-up PR.
445+ //%28 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 0
446+ //store i32 3, ptr %28, align 4
447+ //%29 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 1
448+ //store i32 3, ptr %29, align 4
449+ //%30 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 2
450+ //store ptr %26, ptr %30, align 8
451+ //%31 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 3
452+ //store ptr %27, ptr %31, align 8
453+ //%32 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 4
454+ //store ptr @.offload_sizes, ptr %32, align 8
455+ //%33 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 5
456+ //store ptr @.offload_maptypes, ptr %33, align 8
457+ //%34 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 6
458+ //store ptr null, ptr %34, align 8
459+ //%35 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 7
460+ //store ptr null, ptr %35, align 8
461+ //%36 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 8
462+ //store i64 0, ptr %36, align 8
463+ //%37 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 9
464+ //store i64 0, ptr %37, align 8
465+ //%38 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 10
466+ //store [3 x i32] [i32 2097152, i32 0, i32 0], ptr %38, align 4
467+ //%39 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 11
468+ //store [3 x i32] [i32 256, i32 0, i32 0], ptr %39, align 4
469+ //%40 = getelementptr inbounds nuw %struct.__tgt_kernel_arguments, ptr %kernel_args, i32 0, i32 12
470+ //store i32 0, ptr %40, align 4
444471 // FIXME(offload): launch kernels
472+ let mut values = vec ! [ ] ;
473+ values. push ( cx. get_const_i32 ( 3 ) ) ;
474+ values. push ( cx. get_const_i32 ( 3 ) ) ;
475+ values. push ( geps. 0 ) ;
476+ values. push ( geps. 1 ) ;
477+ values. push ( geps. 2 ) ;
478+ values. push ( o_types[ 0 ] ) ;
479+ values. push ( cx. const_null ( cx. type_ptr ( ) ) ) ;
480+ values. push ( cx. const_null ( cx. type_ptr ( ) ) ) ;
481+ values. push ( cx. get_const_i64 ( 0 ) ) ;
482+ values. push ( cx. get_const_i64 ( 0 ) ) ;
483+ values. push ( ) ;
484+ values. push ( ) ;
485+ values. push ( cx. get_const_i32 ( 0 ) ) ;
486+ for ( value, i) in values. enumerate ( ) {
487+ let gep1 = builder. inbounds_gep ( ty, a1, & [ i32_0, cx. get_const_i32 ( i) ] ) ;
488+ builder. store ( p, alloca, Align :: EIGHT ) ;
489+ }
445490
446491 // Step 4)
447492 unsafe { llvm:: LLVMRustPositionAfter ( builder. llbuilder , kernel_call) } ;
0 commit comments