3
3
// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7
4
4
#define TEST_NEED_PRINT_FRAME_FROM_OUTLINED_FN
5
5
#include "callback.h"
6
- #include <omp.h>
6
+ #include <omp.h>
7
7
#include <math.h>
8
8
9
- int main ()
10
- {
9
+ int main () {
11
10
omp_set_nested (0 );
12
11
print_frame (0 );
13
- #pragma omp parallel num_threads(2)
12
+ #pragma omp parallel num_threads(2)
14
13
{
15
14
print_frame_from_outlined_fn (1 );
16
15
print_ids (0 );
17
16
print_ids (1 );
18
17
print_frame (0 );
19
- #pragma omp master
18
+ #pragma omp master
20
19
{
21
20
print_ids (0 );
21
+ void * creator_frame = get_frame_address (0 );
22
22
int t = (int )sin (0.1 );
23
- #pragma omp task if(t)
23
+ #pragma omp task if (t)
24
24
{
25
- print_frame (1 );
25
+ void * task_frame = get_frame_address (0 );
26
+ if (creator_frame == task_frame ) {
27
+ // Assume this code was inlined which the compiler is allowed to do.
28
+ print_frame (0 );
29
+ } else {
30
+ // The exit frame must be our parent!
31
+ print_frame_from_outlined_fn (1 );
32
+ }
26
33
print_ids (0 );
27
34
print_ids (1 );
28
35
print_ids (2 );
@@ -33,63 +40,115 @@ int main()
33
40
print_ids (0 );
34
41
}
35
42
36
-
37
43
// Check if libomp supports the callbacks for this test.
38
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_create'
39
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_task_schedule'
40
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_parallel_begin'
41
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_parallel_end'
42
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_implicit_task'
43
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_mutex_acquire'
44
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_mutex_acquired'
45
- // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_mutex_released'
46
-
47
-
44
+ // CHECK-NOT: {{^}}0: Could not register callback
45
+
48
46
// CHECK: {{^}}0: NULL_POINTER=[[NULL:.*$]]
49
47
50
48
// make sure initial data pointers are null
51
49
// CHECK-NOT: 0: new_task_data initially not null
52
-
53
- // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_task_create: parent_task_id={{[0-9]+}}, parent_task_frame.exit=[[NULL]], parent_task_frame.reenter=[[NULL]], new_task_id={{[0-9]+}}, codeptr_ra=[[NULL]], task_type=ompt_task_initial=1, has_dependences=no
54
- // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(0)=[[MAIN_REENTER:0x[0-f]+]]
55
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin: parent_task_id=[[PARENT_TASK_ID:[0-9]+]], parent_task_frame.exit=[[NULL]], parent_task_frame.reenter=[[MAIN_REENTER]], parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=2, codeptr_ra=0x{{[0-f]+}}, invoker=[[PARALLEL_INVOKER:[0-9]+]]
50
+
51
+ // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_task_create
52
+ // CHECK-SAME: parent_task_id={{[0-9]+}}, parent_task_frame.exit=[[NULL]]
53
+ // CHECK-SAME: parent_task_frame.reenter=[[NULL]]
54
+ // CHECK-SAME: new_task_id={{[0-9]+}}, codeptr_ra=[[NULL]]
55
+ // CHECK-SAME: task_type=ompt_task_initial=1, has_dependences=no
56
+ // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(0)
57
+ // CHECK-SAME: =[[MAIN_REENTER:0x[0-f]+]]
58
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_parallel_begin
59
+ // CHECK-SAME: parent_task_id=[[PARENT_TASK_ID:[0-9]+]]
60
+ // CHECK-SAME: parent_task_frame.exit=[[NULL]]
61
+ // CHECK-SAME: parent_task_frame.reenter=[[MAIN_REENTER]]
62
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID:[0-9]+]], requested_team_size=2
63
+ // CHECK-SAME: codeptr_ra=0x{{[0-f]+}}, invoker={{[0-9]+}}
56
64
57
65
// nested parallel masters
58
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
59
- // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address({{.}})=[[EXIT:0x[0-f]+]]
60
- // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reenter_frame=[[NULL]]
61
- // CHECK: {{^}}[[MASTER_ID]]: task level 1: parallel_id=[[IMPLICIT_PARALLEL_ID:[0-9]+]], task_id=[[PARENT_TASK_ID]], exit_frame=[[NULL]], reenter_frame=[[MAIN_REENTER]]
66
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_begin
67
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]]
68
+ // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
69
+ // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address
70
+ // CHECK-SAME: =[[EXIT:0x[0-f]+]]
71
+
72
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0
73
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
74
+ // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]
75
+
76
+ // CHECK: {{^}}[[MASTER_ID]]: task level 1
77
+ // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID:[0-9]+]]
78
+ // CHECK-SAME: task_id=[[PARENT_TASK_ID]],
79
+ // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[MAIN_REENTER]]
80
+
62
81
// CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(0)=[[REENTER:0x[0-f]+]]
63
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create: parent_task_id=[[IMPLICIT_TASK_ID]], parent_task_frame.exit=[[EXIT]], parent_task_frame.reenter=[[REENTER]], new_task_id=[[TASK_ID:[0-9]+]], codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
64
- // <- ompt_event_task_schedule ([[IMPLICIT_TASK_ID]], [[TASK_ID]]) would be expected here
65
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule: first_task_id=[[IMPLICIT_TASK_ID]], second_task_id=[[TASK_ID]]
66
- // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address(1)=[[TASK_EXIT:0x[0-f]+]]
67
- // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[TASK_ID]], exit_frame=[[TASK_EXIT]], reenter_frame=[[NULL]]
68
- // CHECK: {{^}}[[MASTER_ID]]: task level 1: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reenter_frame=[[REENTER]]
69
- // CHECK: {{^}}[[MASTER_ID]]: task level 2: parallel_id=[[IMPLICIT_PARALLEL_ID]], task_id=[[PARENT_TASK_ID]], exit_frame=[[NULL]], reenter_frame=[[MAIN_REENTER]]
70
- // <- ompt_event_task_schedule ([[TASK_ID]], [[IMPLICIT_TASK_ID]]) would be expected here
71
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule: first_task_id=[[TASK_ID]], second_task_id=[[IMPLICIT_TASK_ID]]
82
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_create
83
+ // CHECK-SAME: parent_task_id=[[IMPLICIT_TASK_ID]]
84
+ // CHECK-SAME: parent_task_frame.exit=[[EXIT]]
85
+ // CHECK-SAME: parent_task_frame.reenter=[[REENTER]]
86
+ // CHECK-SAME: new_task_id=[[TASK_ID:[0-9]+]]
87
+ // CHECK-SAME: codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
88
+
89
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule:
90
+ // CHECK-SAME: first_task_id=[[IMPLICIT_TASK_ID]], second_task_id=[[TASK_ID]]
91
+ // CHECK: {{^}}[[MASTER_ID]]: __builtin_frame_address
92
+ // CHECK-SAME: =[[TASK_EXIT:0x[0-f]+]]
93
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0
94
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[TASK_ID]]
95
+ // CHECK-SAME: exit_frame=[[TASK_EXIT]], reenter_frame=[[NULL]]
96
+
97
+ // CHECK: {{^}}[[MASTER_ID]]: task level 1
98
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
99
+ // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[REENTER]]
100
+
101
+ // CHECK: {{^}}[[MASTER_ID]]: task level 2
102
+ // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]]
103
+ // CHECK-SAME: task_id=[[PARENT_TASK_ID]]
104
+ // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[MAIN_REENTER]]
105
+
106
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_schedule
107
+ // CHECK-SAME: first_task_id=[[TASK_ID]], second_task_id=[[IMPLICIT_TASK_ID]]
72
108
// CHECK: {{^}}[[MASTER_ID]]: ompt_event_task_end: task_id=[[TASK_ID]]
73
109
// CHECK: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
74
- // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reen
110
+
111
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0
112
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
113
+ // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]
75
114
76
115
// implicit barrier parallel
77
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
78
- // CHECK: {{^}}[[MASTER_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[NULL]], reenter_frame=[[NULL]]
79
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_end: parallel_id={{[0-9]+}}, task_id=[[IMPLICIT_TASK_ID]]
80
- // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end: parallel_id={{[0-9]+}}, task_id=[[IMPLICIT_TASK_ID]]
81
-
82
- // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
83
- // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address({{.}})=[[EXIT:0x[0-f]+]]
84
- // CHECK: {{^}}[[THREAD_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[EXIT]], reenter_frame=[[NULL]]
85
- // CHECK: {{^}}[[THREAD_ID]]: task level 1: parallel_id=[[IMPLICIT_PARALLEL_ID]], task_id=[[PARENT_TASK_ID]], exit_frame=[[NULL]], reenter_frame=[[MAIN_REENTER]]
86
- // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address(0)=[[REENTER:0x[0-f]+]]
87
- // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
88
- // CHECK: {{^}}[[THREAD_ID]]: task level 0: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]], exit_frame=[[NULL]], reenter_frame=[[NULL]]
89
- // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_end: parallel_id={{[0-9]+}}, task_id=[[IMPLICIT_TASK_ID]]
90
- // CHECK: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end: parallel_id={{[0-9]+}}, task_id=[[IMPLICIT_TASK_ID]]
116
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_begin
117
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
118
+ // CHECK: {{^}}[[MASTER_ID]]: task level 0
119
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
120
+ // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[NULL]]
121
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_barrier_end
122
+ // FIXME: parallel_id should be 0 because the region ended in the barrier!
123
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
124
+ // CHECK: {{^}}[[MASTER_ID]]: ompt_event_implicit_task_end
125
+ // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]
126
+
127
+ // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_implicit_task_begin
128
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]]
129
+ // CHECK-SAME: task_id=[[IMPLICIT_TASK_ID:[0-9]+]]
130
+ // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address
131
+ // CHECK-SAME: =[[EXIT:0x[0-f]+]]
132
+ // CHECK: {{^}}[[THREAD_ID]]: task level 0
133
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
134
+ // CHECK-SAME: exit_frame=[[EXIT]], reenter_frame=[[NULL]]
135
+ // CHECK: {{^}}[[THREAD_ID]]: task level 1
136
+ // CHECK-SAME: parallel_id=[[IMPLICIT_PARALLEL_ID]]
137
+ // CHECK-SAME: task_id=[[PARENT_TASK_ID]]
138
+ // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[MAIN_REENTER]]
91
139
140
+ // CHECK: {{^}}[[THREAD_ID]]: __builtin_frame_address(0)={{0x[0-f]+}}
141
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_begin
142
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
143
+ // CHECK: {{^}}[[THREAD_ID]]: task level 0
144
+ // CHECK-SAME: parallel_id=[[PARALLEL_ID]], task_id=[[IMPLICIT_TASK_ID]]
145
+ // CHECK-SAME: exit_frame=[[NULL]], reenter_frame=[[NULL]]
146
+ // parallel_id is 0 because the region ended in the barrier!
147
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_barrier_end
148
+ // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]
92
149
150
+ // CHECK: {{^}}[[THREAD_ID]]: ompt_event_implicit_task_end
151
+ // CHECK-SAME: parallel_id=0, task_id=[[IMPLICIT_TASK_ID]]
93
152
94
153
return 0 ;
95
154
}
0 commit comments