Skip to content

Commit 4e98c1c

Browse files
Use the same OpenMP API as Clang for target parallel for pragma
Clang uses kmpc_parallel_51 function for handlig target parallel for pragma. Flang should use the same functions as Clang for pragma target parallel Signed-off-by: Dominik Adamski <[email protected]>
1 parent d5dee8c commit 4e98c1c

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

tools/flang2/flang2exe/cgmain.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14406,7 +14406,8 @@ INLINE void static add_property_struct(char *func_name,
1440614406
print_token("@");
1440714407
print_token(func_name);
1440814408

14409-
if (is_SPMD_mode(mode)) {
14409+
if (mode >= mode_target_teams_distribute_parallel_for
14410+
&& mode <= mode_target_parallel_for_simd) {
1441014411
print_token("__exec_mode = weak constant i8 2\n");
1441114412
}
1441214413
else {

tools/flang2/flang2exe/kmpcutil.cpp

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,11 +1736,19 @@ ll_make_kmpc_target_init(OMP_TARGET_MODE mode)
17361736
int args[4];
17371737

17381738
args[3] = gen_null_arg(); /* ident */
1739-
if (is_SPMD_mode(mode)) {
1739+
if (mode >= mode_target_teams_distribute_parallel_for &&
1740+
mode <= mode_target_parallel_for_simd) {
17401741
args[2] = ad_icon(2); /* SPMD Mode */
17411742
args[1] = ad_icon(0); /* UseGenericStateMachine */
1742-
args[0] = ad_icon(0); /* RequiresFullRuntime */
1743-
// args[0] = ad_icon(1); /* RequiresFullRuntime */
1743+
if (mode == mode_target_parallel) {
1744+
/* RequiresFullRuntime - kmpc_parallel_51 requires full runtime */
1745+
args[0] = ad_icon(1);
1746+
}
1747+
else {
1748+
/* RequiresFullRuntime - Old Fortran OpenMP API does not require
1749+
* full runtime */
1750+
args[0] = ad_icon(0);
1751+
}
17441752
} else {
17451753
args[2] = ad_icon(1); /* Generic mode */
17461754
args[1] = ad_icon(1); /* UseGenericStateMachine */
@@ -1851,10 +1859,18 @@ ll_make_kmpc_target_deinit(OMP_TARGET_MODE mode)
18511859
int args[3];
18521860

18531861
args[2] = gen_null_arg(); /* ident */
1854-
if (is_SPMD_mode(mode)) {
1862+
if (mode >= mode_target_teams_distribute_parallel_for &&
1863+
mode <= mode_target_parallel_for_simd) {
18551864
args[1] = ad_icon(2); /* SPMD Mode */
1856-
args[0] = ad_icon(0); /* RequiresFullRuntime */
1857-
// args[0] = ad_icon(1); /* RequiresFullRuntime */
1865+
if (mode == mode_target_parallel) {
1866+
/* RequiresFullRuntime - kmpc_parallel_51 requires full runtime */
1867+
args[0] = ad_icon(1);
1868+
}
1869+
else {
1870+
/* RequiresFullRuntime - Old Fortran OpenMP API does not require
1871+
* full runtime */
1872+
args[0] = ad_icon(0);
1873+
}
18581874
} else {
18591875
args[1] = ad_icon(1); /* Generic mode */
18601876
args[0] = ad_icon(1); /* RequiresFullRuntime */

tools/flang2/flang2exe/ompaccel.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3726,8 +3726,7 @@ ompaccel_set_target_declare() {
37263726
}
37273727

37283728
bool is_SPMD_mode(OMP_TARGET_MODE mode) {
3729-
if (mode >= mode_target_teams_distribute_parallel_for
3730-
&& mode <= mode_target_parallel_for_simd) {
3729+
if (mode == mode_target_parallel) {
37313730
return true;
37323731
}
37333732
return false;

0 commit comments

Comments
 (0)