You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Flang][OpenMP] Appropriately emit present/load/store in all cases in MapInfoFinalization
Currently, we return early whenever we've already generated an allocation for intermediate
descriptor variables (required in certain cases when we can't directly access the base
address of a passes in descriptor function argument due to HLFIR/FIR restrictions). This
unfortunately, skips over the presence check and load/store required to set the
intermediate descriptor allocations values/data. This is fine in most cases, but if a
function happens to have a series of branches with seperate target regions capturing
the same input argument, we'd emit the present/load/store into the first branch with
the first target inside of it, the secondary (or any preceding) branches would not
have the present/load/store, this would lead to the subsequent mapped values in that
branch being empty and then leading to a memory access violation on device.
The fix for the moment is to emit a present/load/store at the relevant location
of every target utilising the input argument, this likely will also lead to fixing
possible issues with the input argument being manipulated inbetween target regions
(primarily resizing, the data should remain the same as we're just copying an address
around, in theory at least). There's possible optimizations/simplifications to emit
less load/stores such as by raising the load/store out of the branches when we can,
but I'm inclined to leave this sort of optimization to lower level passes such as
an LLVM pass (which very possibly already covers it).
0 commit comments