Hi! On 2021-02-26T04:34:50-0800, Julian Brown <jul...@codesourcery.com> wrote: > --- a/gcc/internal-fn.c > +++ b/gcc/internal-fn.c > @@ -2957,6 +2957,8 @@ expand_UNIQUE (internal_fn, gcall *stmt) > else > gcc_unreachable (); > break; > + case IFN_UNIQUE_OACC_PRIVATE: > + break; > } > > if (pattern)
That's unexpected. Meaning: better if this doesn't happen. > --- a/gcc/omp-offload.c > +++ b/gcc/omp-offload.c > @@ -1998,6 +2133,45 @@ execute_oacc_device_lower () > case IFN_UNIQUE_OACC_TAIL_MARK: > remove = true; > break; > + > + case IFN_UNIQUE_OACC_PRIVATE: > + { > + HOST_WIDE_INT level > + = TREE_INT_CST_LOW (gimple_call_arg (call, 2)); > + if (level == -1) > + break; They should be all "handled" here (meaning: also for 'level == -1', do 'remove = true' after the real handling): > + for (unsigned i = 3; > + i < gimple_call_num_args (call); > + i++) > + { > + [...] > + } > + remove = true; > + } > + break; > } > break; > } Why we at all can have 'level == -1' cases is a separate bug to be fixed. I've pushed "[OpenACC privatization] Don't let unhandled 'IFN_UNIQUE_OACC_PRIVATE' linger [PR90115]" to master branch in commit ff451ea723deb3fe8471eb96ac9381c063ec6533, see attached. Grüße Thomas ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Frank Thürauf
>From ff451ea723deb3fe8471eb96ac9381c063ec6533 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tho...@codesourcery.com> Date: Thu, 20 May 2021 15:37:07 +0200 Subject: [PATCH] [OpenACC privatization] Don't let unhandled 'IFN_UNIQUE_OACC_PRIVATE' linger [PR90115] Make sure they're all handled in 'execute_oacc_device_lower'. Why we at all can have 'level == -1' cases is a separate bug to be fixed. gcc/ PR middle-end/90115 * omp-offload.c (execute_oacc_device_lower) <IFN_UNIQUE_OACC_PRIVATE>: Diagnose and handle for 'level == -1' case, too. * internal-fn.c (expand_UNIQUE): Don't expect 'IFN_UNIQUE_OACC_PRIVATE'. --- gcc/internal-fn.c | 2 -- gcc/omp-offload.c | 10 ++++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c index d92080c8077..d209a52f823 100644 --- a/gcc/internal-fn.c +++ b/gcc/internal-fn.c @@ -2969,8 +2969,6 @@ expand_UNIQUE (internal_fn, gcall *stmt) else gcc_unreachable (); break; - case IFN_UNIQUE_OACC_PRIVATE: - break; } if (pattern) diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index 080bdddfe88..36bd2e44d81 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -2139,8 +2139,9 @@ execute_oacc_device_lower () { HOST_WIDE_INT level = TREE_INT_CST_LOW (gimple_call_arg (call, 2)); - if (level == -1) - break; + gcc_checking_assert (level == -1 + || (level >= 0 + && level < GOMP_DIM_MAX)); for (unsigned i = 3; i < gimple_call_num_args (call); i++) @@ -2156,11 +2157,12 @@ execute_oacc_device_lower () { "gang", "worker", "vector" }; fprintf (dump_file, "Decl UID %u has %s " "partitioning:", DECL_UID (decl), - axes[level]); + (level == -1 ? "UNKNOWN" : axes[level])); print_generic_decl (dump_file, decl, TDF_SLIM); fputc ('\n', dump_file); } - if (targetm.goacc.adjust_private_decl) + if (level != -1 + && targetm.goacc.adjust_private_decl) { tree oldtype = TREE_TYPE (decl); tree newdecl -- 2.30.2