mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-11 18:36:55 +00:00
[OMPT] Set and reset frame address when creating a task with dependences
As for normal task creation, the task frame addresses need to be stored for the encountering task. Differential Revision: https://reviews.llvm.org/D41165 llvm-svn: 321421
This commit is contained in:
parent
2d1d9a11c1
commit
265fb584a5
@ -475,15 +475,15 @@ kmp_int32 __kmpc_omp_task_with_deps(ident_t *loc_ref, kmp_int32 gtid,
|
||||
kmp_taskdata_t *current_task = thread->th.th_current_task;
|
||||
|
||||
#if OMPT_SUPPORT
|
||||
OMPT_STORE_RETURN_ADDRESS(gtid);
|
||||
|
||||
if (ompt_enabled.enabled) {
|
||||
OMPT_STORE_RETURN_ADDRESS(gtid);
|
||||
if (!current_task->ompt_task_info.frame.enter_frame)
|
||||
current_task->ompt_task_info.frame.enter_frame = OMPT_GET_FRAME_ADDRESS(1);
|
||||
if (ompt_enabled.ompt_callback_task_create) {
|
||||
kmp_taskdata_t *parent = new_taskdata->td_parent;
|
||||
ompt_data_t task_data = ompt_data_none;
|
||||
ompt_callbacks.ompt_callback(ompt_callback_task_create)(
|
||||
parent ? &(parent->ompt_task_info.task_data) : &task_data,
|
||||
parent ? &(parent->ompt_task_info.frame) : NULL,
|
||||
current_task ? &(current_task->ompt_task_info.task_data) : &task_data,
|
||||
current_task ? &(current_task->ompt_task_info.frame) : NULL,
|
||||
&(new_taskdata->ompt_task_info.task_data),
|
||||
ompt_task_explicit | TASK_TYPE_DETAILS_FORMAT(new_taskdata), 1,
|
||||
OMPT_LOAD_RETURN_ADDRESS(gtid));
|
||||
@ -574,6 +574,11 @@ kmp_int32 __kmpc_omp_task_with_deps(ident_t *loc_ref, kmp_int32 gtid,
|
||||
"dependencies: "
|
||||
"loc=%p task=%p, return: TASK_CURRENT_NOT_QUEUED\n",
|
||||
gtid, loc_ref, new_taskdata));
|
||||
#if OMPT_SUPPORT
|
||||
if (ompt_enabled.enabled) {
|
||||
current_task->ompt_task_info.frame.enter_frame = NULL;
|
||||
}
|
||||
#endif
|
||||
return TASK_CURRENT_NOT_QUEUED;
|
||||
}
|
||||
} else {
|
||||
@ -588,7 +593,13 @@ kmp_int32 __kmpc_omp_task_with_deps(ident_t *loc_ref, kmp_int32 gtid,
|
||||
"loc=%p task=%p, transferring to __kmpc_omp_task\n",
|
||||
gtid, loc_ref, new_taskdata));
|
||||
|
||||
return __kmp_omp_task(gtid, new_task, true);
|
||||
kmp_int32 ret = __kmp_omp_task(gtid, new_task, true);
|
||||
#if OMPT_SUPPORT
|
||||
if (ompt_enabled.enabled) {
|
||||
current_task->ompt_task_info.frame.enter_frame = NULL;
|
||||
}
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -14,17 +14,20 @@ int main()
|
||||
{
|
||||
#pragma omp master
|
||||
{
|
||||
print_ids(0);
|
||||
#pragma omp task depend(out:x)
|
||||
{
|
||||
x++;
|
||||
delay(100);
|
||||
}
|
||||
print_fuzzy_address(1);
|
||||
print_ids(0);
|
||||
|
||||
#pragma omp task depend(in:x)
|
||||
{
|
||||
x = -1;
|
||||
}
|
||||
print_ids(0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,13 +44,17 @@ int main()
|
||||
// make sure initial data pointers are null
|
||||
// CHECK-NOT: 0: new_task_data initially not null
|
||||
|
||||
// CHECK: {{^}}{{[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter=[[NULL]], new_task_id=[[FIRST_TASK:[0-f]+]], codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}, task_type=ompt_task_explicit=4, has_dependences=yes
|
||||
// CHECK: {{^}}{{[0-9]+}}: ompt_event_task_dependences: task_id=[[FIRST_TASK]], deps={{0x[0-f]+}}, ndeps=1
|
||||
// CHECK: {{^}}{{[0-9]+}}: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
|
||||
// CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID:[0-9]+]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
|
||||
// CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT:0x[0-f]+]], reenter_frame=[[NULL]]
|
||||
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit=[[EXIT]], parent_task_frame.reenter={{0x[0-f]+}}, new_task_id=[[FIRST_TASK:[0-f]+]], codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}, task_type=ompt_task_explicit=4, has_dependences=yes
|
||||
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_dependences: task_id=[[FIRST_TASK]], deps={{0x[0-f]+}}, ndeps=1
|
||||
// CHECK: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
|
||||
// CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reenter_frame=[[NULL]]
|
||||
|
||||
// CHECK: {{^}}{{[0-9]+}}: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit={{0x[0-f]+}}, parent_task_frame.reenter=[[NULL]], new_task_id=[[SECOND_TASK:[0-f]+]], codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit=4, has_dependences=yes
|
||||
// CHECK: {{^}}{{[0-9]+}}: ompt_event_task_dependences: task_id=[[SECOND_TASK]], deps={{0x[0-f]+}}, ndeps=1
|
||||
// CHECK: {{^}}{{[0-9]+}}: ompt_event_task_dependence_pair: first_task_id=[[FIRST_TASK]], second_task_id=[[SECOND_TASK]]
|
||||
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit=[[EXIT]], parent_task_frame.reenter={{0x[0-f]+}}, new_task_id=[[SECOND_TASK:[0-f]+]], codeptr_ra={{0x[0-f]+}}, task_type=ompt_task_explicit=4, has_dependences=yes
|
||||
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_dependences: task_id=[[SECOND_TASK]], deps={{0x[0-f]+}}, ndeps=1
|
||||
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_dependence_pair: first_task_id=[[FIRST_TASK]], second_task_id=[[SECOND_TASK]]
|
||||
// CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reenter_frame=[[NULL]]
|
||||
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user