Associating Clang Variable Names with Arguments to Offloading Runtime Functions in OpenMP CodeGen


A commonly requested feature in the OpenMP Target Runtime is to be able to associate offloaded pointers with their original variable names. We figured the most straightforward way to accomplish this is to make an additional argument to the mapper functions that contains an array of structs containing source information about the variables similar to how we pass in the size and offset already. This will only happen if debugging symbols are enabled, otherwise we’ll probably just pass a null pointer. So, basically we’re planning on turning this

void __tgt_target_data_begin_mapper(int64_t device_id, int32_t arg_num,
void **args_base, void **args,
int64_t *arg_sizes, int64_t *arg_types,
void **arg_mappers);

Into something like this for better debugging.

void __tgt_target_data_begin_mapper(ident_t *loc, int64_t device_id, int32_t arg_num,
void **args_base, void **args,
int64_t *arg_sizes, arg_info_struct **arg_info, int64_t *arg_types,
void **arg_mappers);

I figured we could trace back the original VarDecls used to create the mapper arguments and just build a struct using the names (if availible). There’s a ValueDecl listed in the BasePointerInfo class at CGOpenMPRuntime.cpp:7048 but when I tried to access its fields it was just a nullptr when I was passing in a single variable. The method 'setDevicePtrDecl` is used to set it, but it’s only called in a single location at CGOpenMPRuntime.cpp:8240 so I’m assuming this is not available in the general case.

What do you think would be the best way to approach this? Basically just getting the name and line number of the variable declaration that was used to build the argument to the offload function.

Joseph Huber


Did you think about using something like Debugger API to translate addresses to the var names?