Re: [gomp4] fiuxup openacc default handling
On 07/27/15 11:21, Tom de Vries wrote: On 26/07/15 19:09, Nathan Sidwell wrote: I've committed this update to my earlier breakout of default handling. After complaining about something because of 'none', we should fall through to the default handling, to prevent ICEing later (on patch seriesI'm working on). This matches the OMP default handling. Also tweaked the setting of GOVD_ flags slightly, to make the firstprivate handling I'm working on less invasive. Hi, this causes PR 67027 - [gomp4] FAIL: gfortran.dg/goacc/modules.f95 -O (internal compiler error). Fixed thusly. committed to gomp4 2015-07-28 Nathan Sidwell nat...@acm.org * gimplify.c (oacc_default_clause): Always set GOVD_MAP if found in outer scope. Index: gcc/gimplify.c === --- gcc/gimplify.c (revision 226250) +++ gcc/gimplify.c (working copy) @@ -5948,7 +5948,7 @@ oacc_default_clause (struct gimplify_omp = splay_tree_lookup (octx-variables, (splay_tree_key) decl); if (n2) { - flags |= n2-value GOVD_MAP; + flags |= GOVD_MAP; goto found_outer; } }
Re: [gomp4] fiuxup openacc default handling
On 26/07/15 19:09, Nathan Sidwell wrote: I've committed this update to my earlier breakout of default handling. After complaining about something because of 'none', we should fall through to the default handling, to prevent ICEing later (on patch seriesI'm working on). This matches the OMP default handling. Also tweaked the setting of GOVD_ flags slightly, to make the firstprivate handling I'm working on less invasive. Hi, this causes PR 67027 - [gomp4] FAIL: gfortran.dg/goacc/modules.f95 -O (internal compiler error). Thanks, - Tom nathan gomp4-gimp-fix.patch 2015-07-26 Nathan Sidwellnat...@codesourcery.com * gimplify.c (oacc_default_clause): Fallthrough to unspecified handling. Propagate mapping from outer scope. Index: gcc/gimplify.c === --- gcc/gimplify.c (revision 226226) +++ gcc/gimplify.c (working copy) @@ -5930,7 +5930,7 @@ oacc_default_clause (struct gimplify_omp DECL_NAME (lang_hooks.decls.omp_report_decl (decl)), rkind); error_at (ctx-location, enclosing OpenACC %s construct, rkind); } -break; + /* FALLTHRU. */ case OMP_CLAUSE_DEFAULT_UNSPECIFIED: { @@ -5944,33 +5944,39 @@ oacc_default_clause (struct gimplify_omp continue; if (!(octx-region_type (ORT_TARGET_DATA | ORT_TARGET))) break; - if (splay_tree_lookup (octx-variables, (splay_tree_key) decl)) + splay_tree_node n2 + = splay_tree_lookup (octx-variables, (splay_tree_key) decl); + if (n2) + { + flags |= n2-value GOVD_MAP; goto found_outer; + } } } - { - tree type = TREE_TYPE (decl); - /* Should this be REFERENCE_TYPE_P? */ - if (POINTER_TYPE_P (type)) - type = TREE_TYPE (type); + if (is_global_var (decl) device_resident_p (decl)) + flags |= GOVD_MAP_TO_ONLY | GOVD_MAP; + /* Scalars under kernels are default 'copy'. */ + else if (ctx-acc_region_kind == ARK_KERNELS) + flags |= GOVD_FORCE_MAP | GOVD_MAP; + else if (ctx-acc_region_kind == ARK_PARALLEL) + { + tree type = TREE_TYPE (decl); + + /* Should this be REFERENCE_TYPE_P? */ + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); - /* For OpenACC regions, array and aggregate variables -default to present_or_copy, while scalar variables -by default are firstprivate (gang-local) in parallel. */ - if (!AGGREGATE_TYPE_P (type)) - { - if (is_global_var (decl) device_resident_p (decl)) - flags |= GOVD_MAP_TO_ONLY; - else if (ctx-acc_region_kind == ARK_PARALLEL) - flags |= (GOVD_GANGLOCAL | GOVD_MAP_TO_ONLY); - /* Scalars under kernels are default 'copy'. */ - else if (ctx-acc_region_kind == ARK_KERNELS) - flags |= GOVD_FORCE_MAP; - else - gcc_unreachable (); - } + if (AGGREGATE_TYPE_P (type)) + /* Aggregates default to 'copy'. This should really +include GOVD_FORCE_MAP. */ + flags |= GOVD_MAP; + else + /* Scalars default tp 'firstprivate'. */ + flags |= GOVD_GANGLOCAL | GOVD_MAP_TO_ONLY | GOVD_MAP; } + else + gcc_unreachable (); found_outer:; } break; @@ -6020,7 +6026,8 @@ omp_notice_variable (struct gimplify_omp if (is_oacc) flags = oacc_default_clause (ctx, decl, in_code, flags); - flags |= GOVD_MAP; + else + flags |= GOVD_MAP; if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (decl), is_oacc)) {
Re: [gomp4] fiuxup openacc default handling
On 07/27/15 11:21, Tom de Vries wrote: On 26/07/15 19:09, Nathan Sidwell wrote: I've committed this update to my earlier breakout of default handling. After complaining about something because of 'none', we should fall through to the default handling, to prevent ICEing later (on patch seriesI'm working on). This matches the OMP default handling. Also tweaked the setting of GOVD_ flags slightly, to make the firstprivate handling I'm working on less invasive. Hi, this causes PR 67027 - [gomp4] FAIL: gfortran.dg/goacc/modules.f95 -O (internal compiler error). Will take a look ...
[gomp4] fiuxup openacc default handling
I've committed this update to my earlier breakout of default handling. After complaining about something because of 'none', we should fall through to the default handling, to prevent ICEing later (on patch seriesI'm working on). This matches the OMP default handling. Also tweaked the setting of GOVD_ flags slightly, to make the firstprivate handling I'm working on less invasive. nathan 2015-07-26 Nathan Sidwell nat...@codesourcery.com * gimplify.c (oacc_default_clause): Fallthrough to unspecified handling. Propagate mapping from outer scope. Index: gcc/gimplify.c === --- gcc/gimplify.c (revision 226226) +++ gcc/gimplify.c (working copy) @@ -5930,7 +5930,7 @@ oacc_default_clause (struct gimplify_omp DECL_NAME (lang_hooks.decls.omp_report_decl (decl)), rkind); error_at (ctx-location, enclosing OpenACC %s construct, rkind); } -break; + /* FALLTHRU. */ case OMP_CLAUSE_DEFAULT_UNSPECIFIED: { @@ -5944,33 +5944,39 @@ oacc_default_clause (struct gimplify_omp continue; if (!(octx-region_type (ORT_TARGET_DATA | ORT_TARGET))) break; - if (splay_tree_lookup (octx-variables, (splay_tree_key) decl)) + splay_tree_node n2 + = splay_tree_lookup (octx-variables, (splay_tree_key) decl); + if (n2) + { + flags |= n2-value GOVD_MAP; goto found_outer; + } } } - { - tree type = TREE_TYPE (decl); - /* Should this be REFERENCE_TYPE_P? */ - if (POINTER_TYPE_P (type)) - type = TREE_TYPE (type); + if (is_global_var (decl) device_resident_p (decl)) + flags |= GOVD_MAP_TO_ONLY | GOVD_MAP; + /* Scalars under kernels are default 'copy'. */ + else if (ctx-acc_region_kind == ARK_KERNELS) + flags |= GOVD_FORCE_MAP | GOVD_MAP; + else if (ctx-acc_region_kind == ARK_PARALLEL) + { + tree type = TREE_TYPE (decl); + + /* Should this be REFERENCE_TYPE_P? */ + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); - /* For OpenACC regions, array and aggregate variables - default to present_or_copy, while scalar variables - by default are firstprivate (gang-local) in parallel. */ - if (!AGGREGATE_TYPE_P (type)) - { - if (is_global_var (decl) device_resident_p (decl)) - flags |= GOVD_MAP_TO_ONLY; - else if (ctx-acc_region_kind == ARK_PARALLEL) - flags |= (GOVD_GANGLOCAL | GOVD_MAP_TO_ONLY); - /* Scalars under kernels are default 'copy'. */ - else if (ctx-acc_region_kind == ARK_KERNELS) - flags |= GOVD_FORCE_MAP; - else - gcc_unreachable (); - } + if (AGGREGATE_TYPE_P (type)) + /* Aggregates default to 'copy'. This should really + include GOVD_FORCE_MAP. */ + flags |= GOVD_MAP; + else + /* Scalars default tp 'firstprivate'. */ + flags |= GOVD_GANGLOCAL | GOVD_MAP_TO_ONLY | GOVD_MAP; } + else + gcc_unreachable (); found_outer:; } break; @@ -6020,7 +6026,8 @@ omp_notice_variable (struct gimplify_omp if (is_oacc) flags = oacc_default_clause (ctx, decl, in_code, flags); - flags |= GOVD_MAP; + else + flags |= GOVD_MAP; if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (decl), is_oacc)) {