Allow try_split to split RTX_FRAME_RELATED_P insns
[gcc.git] / libgomp / omp_lib.f90.in
1 ! Copyright (C) 2005-2020 Free Software Foundation, Inc.
2 ! Contributed by Jakub Jelinek <jakub@redhat.com>.
3
4 ! This file is part of the GNU Offloading and Multi Processing Library
5 ! (libgomp).
6
7 ! Libgomp is free software; you can redistribute it and/or modify it
8 ! under the terms of the GNU General Public License as published by
9 ! the Free Software Foundation; either version 3, or (at your option)
10 ! any later version.
11
12 ! Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
13 ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 ! FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 ! more details.
16
17 ! Under Section 7 of GPL version 3, you are granted additional
18 ! permissions described in the GCC Runtime Library Exception, version
19 ! 3.1, as published by the Free Software Foundation.
20
21 ! You should have received a copy of the GNU General Public License and
22 ! a copy of the GCC Runtime Library Exception along with this program;
23 ! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24 ! <http://www.gnu.org/licenses/>.
25
26 module omp_lib_kinds
27 use iso_c_binding, only: c_int, c_intptr_t
28 implicit none
29 private :: c_int, c_intptr_t
30 integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@
31 integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@
32 integer, parameter :: omp_sched_kind = 4
33 integer, parameter :: omp_proc_bind_kind = 4
34 integer, parameter :: omp_sync_hint_kind = 4
35 integer, parameter :: omp_lock_hint_kind = omp_sync_hint_kind
36 integer, parameter :: omp_pause_resource_kind = 4
37 integer, parameter :: omp_allocator_handle_kind = c_intptr_t
38 integer, parameter :: omp_alloctrait_key_kind = c_int
39 integer, parameter :: omp_alloctrait_val_kind = c_intptr_t
40 integer, parameter :: omp_memspace_handle_kind = c_intptr_t
41 integer, parameter :: omp_depend_kind = @OMP_DEPEND_KIND@
42 integer (omp_sched_kind), parameter :: omp_sched_static = 1
43 integer (omp_sched_kind), parameter :: omp_sched_dynamic = 2
44 integer (omp_sched_kind), parameter :: omp_sched_guided = 3
45 integer (omp_sched_kind), parameter :: omp_sched_auto = 4
46 integer (omp_proc_bind_kind), &
47 parameter :: omp_proc_bind_false = 0
48 integer (omp_proc_bind_kind), &
49 parameter :: omp_proc_bind_true = 1
50 integer (omp_proc_bind_kind), &
51 parameter :: omp_proc_bind_master = 2
52 integer (omp_proc_bind_kind), &
53 parameter :: omp_proc_bind_close = 3
54 integer (omp_proc_bind_kind), &
55 parameter :: omp_proc_bind_spread = 4
56 integer (omp_lock_hint_kind), &
57 parameter :: omp_sync_hint_none = 0
58 integer (omp_lock_hint_kind), &
59 parameter :: omp_lock_hint_none = omp_sync_hint_none
60 integer (omp_lock_hint_kind), &
61 parameter :: omp_sync_hint_uncontended = 1
62 integer (omp_lock_hint_kind), &
63 parameter :: omp_lock_hint_uncontended &
64 = omp_sync_hint_uncontended
65 integer (omp_lock_hint_kind), &
66 parameter :: omp_sync_hint_contended = 2
67 integer (omp_lock_hint_kind), &
68 parameter :: omp_lock_hint_contended &
69 = omp_sync_hint_contended
70 integer (omp_lock_hint_kind), &
71 parameter :: omp_sync_hint_nonspeculative = 4
72 integer (omp_lock_hint_kind), &
73 parameter :: omp_lock_hint_nonspeculative &
74 = omp_sync_hint_nonspeculative
75 integer (omp_lock_hint_kind), &
76 parameter :: omp_sync_hint_speculative = 8
77 integer (omp_lock_hint_kind), &
78 parameter :: omp_lock_hint_speculative &
79 = omp_sync_hint_speculative
80 integer (kind=omp_pause_resource_kind), &
81 parameter :: omp_pause_soft = 1
82 integer (kind=omp_pause_resource_kind), &
83 parameter :: omp_pause_hard = 2
84 integer (kind=omp_alloctrait_key_kind), &
85 parameter :: omp_atk_sync_hint = 1
86 integer (kind=omp_alloctrait_key_kind), &
87 parameter :: omp_atk_alignment = 2
88 integer (kind=omp_alloctrait_key_kind), &
89 parameter :: omp_atk_access = 3
90 integer (kind=omp_alloctrait_key_kind), &
91 parameter :: omp_atk_pool_size = 4
92 integer (kind=omp_alloctrait_key_kind), &
93 parameter :: omp_atk_fallback = 5
94 integer (kind=omp_alloctrait_key_kind), &
95 parameter :: omp_atk_fb_data = 6
96 integer (kind=omp_alloctrait_key_kind), &
97 parameter :: omp_atk_pinned = 7
98 integer (kind=omp_alloctrait_key_kind), &
99 parameter :: omp_atk_partition = 8
100 integer (kind=omp_alloctrait_val_kind), &
101 parameter :: omp_atv_default = -1
102 integer (kind=omp_alloctrait_val_kind), &
103 parameter :: omp_atv_false = 0
104 integer (kind=omp_alloctrait_val_kind), &
105 parameter :: omp_atv_true = 1
106 integer (kind=omp_alloctrait_val_kind), &
107 parameter :: omp_atv_contended = 3
108 integer (kind=omp_alloctrait_val_kind), &
109 parameter :: omp_atv_uncontended = 4
110 integer (kind=omp_alloctrait_val_kind), &
111 parameter :: omp_atv_serialized = 5
112 integer (kind=omp_alloctrait_val_kind), &
113 parameter :: omp_atv_sequential = omp_atv_serialized
114 integer (kind=omp_alloctrait_val_kind), &
115 parameter :: omp_atv_private = 6
116 integer (kind=omp_alloctrait_val_kind), &
117 parameter :: omp_atv_all = 7
118 integer (kind=omp_alloctrait_val_kind), &
119 parameter :: omp_atv_thread = 8
120 integer (kind=omp_alloctrait_val_kind), &
121 parameter :: omp_atv_pteam = 9
122 integer (kind=omp_alloctrait_val_kind), &
123 parameter :: omp_atv_cgroup = 10
124 integer (kind=omp_alloctrait_val_kind), &
125 parameter :: omp_atv_default_mem_fb = 11
126 integer (kind=omp_alloctrait_val_kind), &
127 parameter :: omp_atv_null_fb = 12
128 integer (kind=omp_alloctrait_val_kind), &
129 parameter :: omp_atv_abort_fb = 13
130 integer (kind=omp_alloctrait_val_kind), &
131 parameter :: omp_atv_allocator_fb = 14
132 integer (kind=omp_alloctrait_val_kind), &
133 parameter :: omp_atv_environment = 15
134 integer (kind=omp_alloctrait_val_kind), &
135 parameter :: omp_atv_nearest = 16
136 integer (kind=omp_alloctrait_val_kind), &
137 parameter :: omp_atv_blocked = 17
138 integer (kind=omp_alloctrait_val_kind), &
139 parameter :: omp_atv_interleaved = 18
140 integer (kind=omp_allocator_handle_kind), &
141 parameter :: omp_null_allocator = 0
142 integer (kind=omp_allocator_handle_kind), &
143 parameter :: omp_default_mem_alloc = 1
144 integer (kind=omp_allocator_handle_kind), &
145 parameter :: omp_large_cap_mem_alloc = 2
146 integer (kind=omp_allocator_handle_kind), &
147 parameter :: omp_const_mem_alloc = 3
148 integer (kind=omp_allocator_handle_kind), &
149 parameter :: omp_high_bw_mem_alloc = 4
150 integer (kind=omp_allocator_handle_kind), &
151 parameter :: omp_low_lat_mem_alloc = 5
152 integer (kind=omp_allocator_handle_kind), &
153 parameter :: omp_cgroup_mem_alloc = 6
154 integer (kind=omp_allocator_handle_kind), &
155 parameter :: omp_pteam_mem_alloc = 7
156 integer (kind=omp_allocator_handle_kind), &
157 parameter :: omp_thread_mem_alloc = 8
158 integer (omp_memspace_handle_kind), &
159 parameter :: omp_default_mem_space = 0
160 integer (omp_memspace_handle_kind), &
161 parameter :: omp_large_cap_mem_space = 1
162 integer (omp_memspace_handle_kind), &
163 parameter :: omp_const_mem_space = 2
164 integer (omp_memspace_handle_kind), &
165 parameter :: omp_high_bw_mem_space = 3
166 integer (omp_memspace_handle_kind), &
167 parameter :: omp_low_lat_mem_space = 4
168
169 type omp_alloctrait
170 integer (kind=omp_alloctrait_key_kind) key
171 integer (kind=omp_alloctrait_val_kind) value
172 end type omp_alloctrait
173 end module
174
175 module omp_lib
176 use omp_lib_kinds
177 implicit none
178 integer, parameter :: openmp_version = 201511
179
180 interface
181 subroutine omp_init_lock (svar)
182 use omp_lib_kinds
183 integer (omp_lock_kind), intent (out) :: svar
184 end subroutine omp_init_lock
185 end interface
186
187 interface
188 subroutine omp_init_lock_with_hint (svar, hint)
189 use omp_lib_kinds
190 integer (omp_lock_kind), intent (out) :: svar
191 integer (omp_lock_hint_kind), intent (in) :: hint
192 end subroutine omp_init_lock_with_hint
193 end interface
194
195 interface
196 subroutine omp_init_nest_lock (nvar)
197 use omp_lib_kinds
198 integer (omp_nest_lock_kind), intent (out) :: nvar
199 end subroutine omp_init_nest_lock
200 end interface
201
202 interface
203 subroutine omp_init_nest_lock_with_hint (nvar, hint)
204 use omp_lib_kinds
205 integer (omp_nest_lock_kind), intent (out) :: nvar
206 integer (omp_lock_hint_kind), intent (in) :: hint
207 end subroutine omp_init_nest_lock_with_hint
208 end interface
209
210 interface
211 subroutine omp_destroy_lock (svar)
212 use omp_lib_kinds
213 integer (omp_lock_kind), intent (inout) :: svar
214 end subroutine omp_destroy_lock
215 end interface
216
217 interface
218 subroutine omp_destroy_nest_lock (nvar)
219 use omp_lib_kinds
220 integer (omp_nest_lock_kind), intent (inout) :: nvar
221 end subroutine omp_destroy_nest_lock
222 end interface
223
224 interface
225 subroutine omp_set_lock (svar)
226 use omp_lib_kinds
227 integer (omp_lock_kind), intent (inout) :: svar
228 end subroutine omp_set_lock
229 end interface
230
231 interface
232 subroutine omp_set_nest_lock (nvar)
233 use omp_lib_kinds
234 integer (omp_nest_lock_kind), intent (inout) :: nvar
235 end subroutine omp_set_nest_lock
236 end interface
237
238 interface
239 subroutine omp_unset_lock (svar)
240 use omp_lib_kinds
241 integer (omp_lock_kind), intent (inout) :: svar
242 end subroutine omp_unset_lock
243 end interface
244
245 interface
246 subroutine omp_unset_nest_lock (nvar)
247 use omp_lib_kinds
248 integer (omp_nest_lock_kind), intent (inout) :: nvar
249 end subroutine omp_unset_nest_lock
250 end interface
251
252 interface omp_set_dynamic
253 subroutine omp_set_dynamic (dynamic_threads)
254 logical (4), intent (in) :: dynamic_threads
255 end subroutine omp_set_dynamic
256 subroutine omp_set_dynamic_8 (dynamic_threads)
257 logical (8), intent (in) :: dynamic_threads
258 end subroutine omp_set_dynamic_8
259 end interface
260
261 interface omp_set_nested
262 subroutine omp_set_nested (nested)
263 logical (4), intent (in) :: nested
264 end subroutine omp_set_nested
265 subroutine omp_set_nested_8 (nested)
266 logical (8), intent (in) :: nested
267 end subroutine omp_set_nested_8
268 end interface
269
270 interface omp_set_num_threads
271 subroutine omp_set_num_threads (num_threads)
272 integer (4), intent (in) :: num_threads
273 end subroutine omp_set_num_threads
274 subroutine omp_set_num_threads_8 (num_threads)
275 integer (8), intent (in) :: num_threads
276 end subroutine omp_set_num_threads_8
277 end interface
278
279 interface
280 function omp_get_dynamic ()
281 logical (4) :: omp_get_dynamic
282 end function omp_get_dynamic
283 end interface
284
285 interface
286 function omp_get_nested ()
287 logical (4) :: omp_get_nested
288 end function omp_get_nested
289 end interface
290
291 interface
292 function omp_in_parallel ()
293 logical (4) :: omp_in_parallel
294 end function omp_in_parallel
295 end interface
296
297 interface
298 function omp_test_lock (svar)
299 use omp_lib_kinds
300 logical (4) :: omp_test_lock
301 integer (omp_lock_kind), intent (inout) :: svar
302 end function omp_test_lock
303 end interface
304
305 interface
306 function omp_get_max_threads ()
307 integer (4) :: omp_get_max_threads
308 end function omp_get_max_threads
309 end interface
310
311 interface
312 function omp_get_num_procs ()
313 integer (4) :: omp_get_num_procs
314 end function omp_get_num_procs
315 end interface
316
317 interface
318 function omp_get_num_threads ()
319 integer (4) :: omp_get_num_threads
320 end function omp_get_num_threads
321 end interface
322
323 interface
324 function omp_get_thread_num ()
325 integer (4) :: omp_get_thread_num
326 end function omp_get_thread_num
327 end interface
328
329 interface
330 function omp_test_nest_lock (nvar)
331 use omp_lib_kinds
332 integer (4) :: omp_test_nest_lock
333 integer (omp_nest_lock_kind), intent (inout) :: nvar
334 end function omp_test_nest_lock
335 end interface
336
337 interface
338 function omp_get_wtick ()
339 double precision :: omp_get_wtick
340 end function omp_get_wtick
341 end interface
342
343 interface
344 function omp_get_wtime ()
345 double precision :: omp_get_wtime
346 end function omp_get_wtime
347 end interface
348
349 interface omp_set_schedule
350 subroutine omp_set_schedule (kind, chunk_size)
351 use omp_lib_kinds
352 integer (omp_sched_kind), intent (in) :: kind
353 integer (4), intent (in) :: chunk_size
354 end subroutine omp_set_schedule
355 subroutine omp_set_schedule_8 (kind, chunk_size)
356 use omp_lib_kinds
357 integer (omp_sched_kind), intent (in) :: kind
358 integer (8), intent (in) :: chunk_size
359 end subroutine omp_set_schedule_8
360 end interface
361
362 interface omp_get_schedule
363 subroutine omp_get_schedule (kind, chunk_size)
364 use omp_lib_kinds
365 integer (omp_sched_kind), intent (out) :: kind
366 integer (4), intent (out) :: chunk_size
367 end subroutine omp_get_schedule
368 subroutine omp_get_schedule_8 (kind, chunk_size)
369 use omp_lib_kinds
370 integer (omp_sched_kind), intent (out) :: kind
371 integer (8), intent (out) :: chunk_size
372 end subroutine omp_get_schedule_8
373 end interface
374
375 interface
376 function omp_get_thread_limit ()
377 integer (4) :: omp_get_thread_limit
378 end function omp_get_thread_limit
379 end interface
380
381 interface omp_set_max_active_levels
382 subroutine omp_set_max_active_levels (max_levels)
383 integer (4), intent (in) :: max_levels
384 end subroutine omp_set_max_active_levels
385 subroutine omp_set_max_active_levels_8 (max_levels)
386 integer (8), intent (in) :: max_levels
387 end subroutine omp_set_max_active_levels_8
388 end interface
389
390 interface
391 function omp_get_max_active_levels ()
392 integer (4) :: omp_get_max_active_levels
393 end function omp_get_max_active_levels
394 end interface
395
396 interface
397 function omp_get_level ()
398 integer (4) :: omp_get_level
399 end function omp_get_level
400 end interface
401
402 interface omp_get_ancestor_thread_num
403 function omp_get_ancestor_thread_num (level)
404 integer (4), intent (in) :: level
405 integer (4) :: omp_get_ancestor_thread_num
406 end function omp_get_ancestor_thread_num
407 function omp_get_ancestor_thread_num_8 (level)
408 integer (8), intent (in) :: level
409 integer (4) :: omp_get_ancestor_thread_num_8
410 end function omp_get_ancestor_thread_num_8
411 end interface
412
413 interface omp_get_team_size
414 function omp_get_team_size (level)
415 integer (4), intent (in) :: level
416 integer (4) :: omp_get_team_size
417 end function omp_get_team_size
418 function omp_get_team_size_8 (level)
419 integer (8), intent (in) :: level
420 integer (4) :: omp_get_team_size_8
421 end function omp_get_team_size_8
422 end interface
423
424 interface
425 function omp_get_active_level ()
426 integer (4) :: omp_get_active_level
427 end function omp_get_active_level
428 end interface
429
430 interface
431 function omp_in_final ()
432 logical (4) :: omp_in_final
433 end function omp_in_final
434 end interface
435
436 interface
437 function omp_get_cancellation ()
438 logical (4) :: omp_get_cancellation
439 end function omp_get_cancellation
440 end interface
441
442 interface
443 function omp_get_proc_bind ()
444 use omp_lib_kinds
445 integer (omp_proc_bind_kind) :: omp_get_proc_bind
446 end function omp_get_proc_bind
447 end interface
448
449 interface
450 function omp_get_num_places ()
451 integer (4) :: omp_get_num_places
452 end function omp_get_num_places
453 end interface
454
455 interface omp_get_place_num_procs
456 function omp_get_place_num_procs (place_num)
457 integer (4), intent(in) :: place_num
458 integer (4) :: omp_get_place_num_procs
459 end function omp_get_place_num_procs
460
461 function omp_get_place_num_procs_8 (place_num)
462 integer (8), intent(in) :: place_num
463 integer (4) :: omp_get_place_num_procs_8
464 end function omp_get_place_num_procs_8
465 end interface
466
467 interface omp_get_place_proc_ids
468 subroutine omp_get_place_proc_ids (place_num, ids)
469 integer (4), intent(in) :: place_num
470 integer (4), intent(out) :: ids(*)
471 end subroutine omp_get_place_proc_ids
472
473 subroutine omp_get_place_proc_ids_8 (place_num, ids)
474 integer (8), intent(in) :: place_num
475 integer (8), intent(out) :: ids(*)
476 end subroutine omp_get_place_proc_ids_8
477 end interface
478
479 interface
480 function omp_get_place_num ()
481 integer (4) :: omp_get_place_num
482 end function omp_get_place_num
483 end interface
484
485 interface
486 function omp_get_partition_num_places ()
487 integer (4) :: omp_get_partition_num_places
488 end function omp_get_partition_num_places
489 end interface
490
491 interface omp_get_partition_place_nums
492 subroutine omp_get_partition_place_nums (place_nums)
493 integer (4), intent(out) :: place_nums(*)
494 end subroutine omp_get_partition_place_nums
495
496 subroutine omp_get_partition_place_nums_8 (place_nums)
497 integer (8), intent(out) :: place_nums(*)
498 end subroutine omp_get_partition_place_nums_8
499 end interface
500
501 interface omp_set_default_device
502 subroutine omp_set_default_device (device_num)
503 integer (4), intent (in) :: device_num
504 end subroutine omp_set_default_device
505 subroutine omp_set_default_device_8 (device_num)
506 integer (8), intent (in) :: device_num
507 end subroutine omp_set_default_device_8
508 end interface
509
510 interface
511 function omp_get_default_device ()
512 integer (4) :: omp_get_default_device
513 end function omp_get_default_device
514 end interface
515
516 interface
517 function omp_get_num_devices ()
518 integer (4) :: omp_get_num_devices
519 end function omp_get_num_devices
520 end interface
521
522 interface
523 function omp_get_num_teams ()
524 integer (4) :: omp_get_num_teams
525 end function omp_get_num_teams
526 end interface
527
528 interface
529 function omp_get_team_num ()
530 integer (4) :: omp_get_team_num
531 end function omp_get_team_num
532 end interface
533
534 interface
535 function omp_is_initial_device ()
536 logical (4) :: omp_is_initial_device
537 end function omp_is_initial_device
538 end interface
539
540 interface
541 function omp_get_initial_device ()
542 integer (4) :: omp_get_initial_device
543 end function omp_get_initial_device
544 end interface
545
546 interface
547 function omp_get_max_task_priority ()
548 integer (4) :: omp_get_max_task_priority
549 end function omp_get_max_task_priority
550 end interface
551
552 interface
553 subroutine omp_set_affinity_format (format)
554 character(len=*), intent(in) :: format
555 end subroutine omp_set_affinity_format
556 end interface
557
558 interface
559 function omp_get_affinity_format (buffer)
560 integer (4) :: omp_get_affinity_format
561 character(len=*), intent(out) :: buffer
562 end function omp_get_affinity_format
563 end interface
564
565 interface
566 subroutine omp_display_affinity (format)
567 character(len=*), intent(in) :: format
568 end subroutine omp_display_affinity
569 end interface
570
571 interface
572 function omp_capture_affinity (buffer, format)
573 integer (4) :: omp_capture_affinity
574 character(len=*), intent(out) :: buffer
575 character(len=*), intent(in) :: format
576 end function omp_capture_affinity
577 end interface
578
579 interface
580 function omp_pause_resource (kind, device_num)
581 use omp_lib_kinds
582 integer (4) :: omp_pause_resource
583 integer (kind=omp_pause_resource_kind), &
584 intent(in) :: kind
585 integer (4) :: device_num
586 end function
587 end interface
588
589 interface
590 function omp_pause_resource_all (kind)
591 use omp_lib_kinds
592 integer (4) :: omp_pause_resource_all
593 integer (kind=omp_pause_resource_kind), &
594 intent(in) :: kind
595 end function
596 end interface
597
598 interface omp_init_allocator
599 function omp_init_allocator (memspace, ntraits, traits)
600 use omp_lib_kinds
601 integer (kind=omp_allocator_handle_kind) omp_init_allocator
602 integer (kind=omp_memspace_handle_kind), &
603 intent(in) :: memspace
604 integer (4), intent(in) :: ntraits
605 type (omp_alloctrait), intent(in) :: traits(*)
606 end function
607 function omp_init_allocator_8 (memspace, ntraits, traits)
608 use omp_lib_kinds
609 integer (kind=omp_allocator_handle_kind) omp_init_allocator_8
610 integer (kind=omp_memspace_handle_kind), &
611 intent(in) :: memspace
612 integer (8), intent(in) :: ntraits
613 type (omp_alloctrait), intent(in) :: traits(*)
614 end function
615 end interface
616
617 interface
618 subroutine omp_destroy_allocator (allocator)
619 use omp_lib_kinds
620 integer (kind=omp_allocator_handle_kind), &
621 intent(in) :: allocator
622 end subroutine
623 end interface
624
625 interface
626 subroutine omp_set_default_allocator (allocator)
627 use omp_lib_kinds
628 integer (kind=omp_allocator_handle_kind), &
629 intent(in) :: allocator
630 end subroutine
631 end interface
632
633 interface
634 function omp_get_default_allocator ()
635 use omp_lib_kinds
636 integer (kind=omp_allocator_handle_kind) &
637 omp_get_default_allocator
638 end function
639 end interface
640
641 end module omp_lib