saiislam added a comment.

In D124525#3491170 <https://reviews.llvm.org/D124525#3491170>, @jhuber6 wrote:

> I'm suggesting instead we define a new `__tgt_device_image` and a new 
> `__tgt_register_lib` function to support this. This new `__tgt_device_image` 
> will simply contain a pointer to an optional information struct.
>
>   struct __tgt_device_image_v2 {
>     void*     ImageStart;
>     void*     ImageEnd;
>     __tgt_offload_entry*      EntriesBegin;
>     __tgt_offload_entry*      EntriesEnd;
>     __tgt_image_into*  ImageInfo;
>   };
>
> This new struct breaks the ABI with the old `__tgt_device_image` because 
> these are put into an array and we change the size, but we should be able to 
> provide backwards compatibility by copying from the old format to the new 
> format and creating a new array. We can detect the new vs. old ABI by 
> expecting that existing applications will call the `__tgt_register_image` 
> function. We will create a new `__tgt_register_image_v2` function for example 
> that all new programs will call. In `libomptarget` we then change 
> `__tgt_register_image` to do the necessary translation.
>
>   struct __tgt_bin_desc {                                                     
>                                                                               
>                                
>     int32_t NumDeviceImages;           // Number of device types supported    
>                                                                               
>                                  
>     __tgt_device_image *DeviceImages;  // Array of device images (1 per dev. 
> type)                                                        
>     __tgt_offload_entry *HostEntriesBegin; // Begin of table with all host 
> entries                                                           
>     __tgt_offload_entry *HostEntriesEnd;   // End of table (non inclusive)    
>                                                                               
>                          
>   };
>   
>   EXTERN void __tgt_register_lib(__tgt_bin_desc *desc) {
>     __tgt_device_image_v2 *new_image = alloc_new_version(desc);
>     desc->DeviceImages = new_Image;
>     __tgt_register_lib_v2(desc);
>   }
>   
>   EXTERN void __tgt_unregister_lib(__tgt_bin_desc *desc) {
>     __tgt_unregister_lib_v2(desc);
>     dealloc(desc->DeviceImages);
>   }
>
> Now the rest of `libomptarget` solely uses the new format, and we check if 
> information is available by seeing that the `ImageInfo` field is non-null.

Thanks for the input. I am going to try it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124525/new/

https://reviews.llvm.org/D124525

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to