https://gcc.gnu.org/g:1904112175e0822aba55d2dc0892c7b932e6e430
commit 1904112175e0822aba55d2dc0892c7b932e6e430 Author: Sandra Loosemore <sloosem...@baylibre.com> Date: Fri May 10 02:39:03 2024 +0000 OpenMP: Fix GIMPLE_OMP_METADIRECTIVE in nested functions at -O0 gcc/ChangeLog * tree-nested.cc (convert_nonlocal_reference_stmt): Handle GIMPLE_OMP_METADIRECTIVE specially. (convert_local_reference_stmt): Likewise. (convert_tramp_reference_stmt): Likewise. (convert_gimple_call): Likewise. Diff: --- gcc/ChangeLog.omp | 9 +++++++++ gcc/tree-nested.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 2ad1324cba1..16e07e7ad95 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,12 @@ +2024-05-10 Sandra Loosemore <sloosem...@baylibre.com> + + * tree-nested.cc (convert_nonlocal_reference_stmt): Handle + GIMPLE_OMP_METADIRECTIVE specially. + (convert_local_reference_stmt): Likewise. + (convert_tramp_reference_stmt): Likewise. + (convert_gimple_call): Likewise. + + 2024-04-22 Sandra Loosemore <sloosem...@baylibre.com> * tree-nested.cc (convert_tramp_reference_stmt): Use the correct diff --git a/gcc/tree-nested.cc b/gcc/tree-nested.cc index 753163189a3..e466b6f63d2 100644 --- a/gcc/tree-nested.cc +++ b/gcc/tree-nested.cc @@ -1832,6 +1832,17 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, info, gimple_omp_body_ptr (stmt)); break; + case GIMPLE_OMP_METADIRECTIVE: + { + gimple_seq variant_seq = gimple_omp_variants (stmt); + for (gimple_stmt_iterator gsi = gsi_start (variant_seq); + !gsi_end_p (gsi); gsi_next (&gsi)) + walk_body (convert_nonlocal_reference_stmt, + convert_nonlocal_reference_op, + info, gimple_omp_body_ptr (gsi_stmt (gsi))); + } + break; + case GIMPLE_BIND: { gbind *bind_stmt = as_a <gbind *> (stmt); @@ -2567,6 +2578,17 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, info, gimple_omp_body_ptr (stmt)); break; + case GIMPLE_OMP_METADIRECTIVE: + { + gimple_seq variant_seq = gimple_omp_variants (stmt); + for (gimple_stmt_iterator gsi = gsi_start (variant_seq); + !gsi_end_p (gsi); gsi_next (&gsi)) + walk_body (convert_local_reference_stmt, + convert_local_reference_op, + info, gimple_omp_body_ptr (gsi_stmt (gsi))); + } + break; + case GIMPLE_COND: wi->val_only = true; wi->is_lhs = false; @@ -2944,6 +2966,17 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, } break; + case GIMPLE_OMP_METADIRECTIVE: + { + gimple_seq variant_seq = gimple_omp_variants (stmt); + for (gimple_stmt_iterator gsi = gsi_start (variant_seq); + !gsi_end_p (gsi); gsi_next (&gsi)) + walk_body (convert_tramp_reference_stmt, + convert_tramp_reference_op, + info, gimple_omp_body_ptr (gsi_stmt (gsi))); + } + break; + default: *handled_ops_p = false; return NULL_TREE; @@ -3093,6 +3126,16 @@ convert_gimple_call (gimple_stmt_iterator *gsi, bool *handled_ops_p, walk_body (convert_gimple_call, NULL, info, gimple_omp_body_ptr (stmt)); break; + case GIMPLE_OMP_METADIRECTIVE: + { + gimple_seq variant_seq = gimple_omp_variants (stmt); + for (gimple_stmt_iterator gsi = gsi_start (variant_seq); + !gsi_end_p (gsi); gsi_next (&gsi)) + walk_body (convert_gimple_call, NULL, + info, gimple_omp_body_ptr (gsi_stmt (gsi))); + } + break; + default: /* Keep looking for other operands. */ *handled_ops_p = false;