Page MenuHomePhabricator

[Clang][OpenMP] Added support for nowait target in CodeGen
Needs ReviewPublic

Authored by tianshilei1992 on Apr 13 2020, 7:48 PM.



Previously for nowait target, CG emitted a function call to
__tgt_target_nowait, etc. However, in OpenMP RTL, these functions just
directly call the no-nowait version, which means nowait is not working as

OpenMP specification says a target is acutally a target task, which is an untied
and detachable task. It is natural to go to the direction that generates a task
for a nowait target. However, OpenMP task has a problem that it must be within
to a parallel region; otherwise the task will be executed immediately. As a
result, if we directly wrap to a regular task, the nowait target outside of a
parallel region is still a synchronous version.

In D77609, I added the support for unshackled task in OpenMP RTL. Basically,
unshackled task is a task that is not bound to any parallel region. So all
nowait target will be tranformed into an unshackled task. In order to
distinguish from regular task, a new flag bit is set for unshackled task. This
flag will be used by RTL for later process.

Signed-off-by: Shilei Tian <>

Diff Detail

Event Timeline

tianshilei1992 created this revision.Apr 13 2020, 7:48 PM
Herald added a project: Restricted Project. · View Herald Transcript

You need to update the tests too.

You need to update the tests too.

Yeah, I will do that. Basically I would like to do that if this direction is not wrong... :-)

Will update failed tests later