Commit 980af7cd by Tom de Vries Committed by Tom de Vries

[nvptx] Verify dimension limits after applying defaults

There's a problem in oacc_validate_dims that when f.i. the worker dimension
is set using -fopenacc-dim=:32, and the vector_length is set using a
"vector_length (128)" clause, the compiler combines, accepts and emits the
values, while the combination of the two is invalid.

The reason for this is that while oacc_validate_dims validates the dimensions
using targetm.goacc.validate_dims before applying default or minimum values,
it does not do so afterwards.

Work around this in the nvptx port by applying the defaults from
oacc_default_dims at the end of nvptx_goacc_validate_dims_1, as
oacc_validate_dims would do it, and then apply the dimensions limits.

2019-01-12  Tom de Vries  <tdevries@suse.de>

	PR middle-end/88703
	* config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1): Apply defaults
	from oacc_default_dims, as oacc_validate_dims would do it, and apply
	dimensions limits.

From-SVN: r267877
parent 46dedae6
2019-01-12 Tom de Vries <tdevries@suse.de> 2019-01-12 Tom de Vries <tdevries@suse.de>
PR middle-end/88703
* config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1): Apply defaults
from oacc_default_dims, as oacc_validate_dims would do it, and apply
dimensions limits.
2019-01-12 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1) * config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1)
(nvptx_goacc_validate_dims): Add used parameter. (nvptx_goacc_validate_dims): Add used parameter.
* doc/tm.texi: Regenerate. * doc/tm.texi: Regenerate.
......
...@@ -5703,6 +5703,23 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level, unsigned used) ...@@ -5703,6 +5703,23 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level, unsigned used)
dims[GOMP_DIM_GANG] = PTX_DEFAULT_RUNTIME_DIM; dims[GOMP_DIM_GANG] = PTX_DEFAULT_RUNTIME_DIM;
nvptx_apply_dim_limits (dims); nvptx_apply_dim_limits (dims);
} }
if (offload_region_p)
{
for (i = 0; i < GOMP_DIM_MAX; i++)
{
if (!(dims[i] < 0))
continue;
if ((used & GOMP_DIM_MASK (i)) == 0)
/* Function oacc_validate_dims will apply the minimal dimension. */
continue;
dims[i] = oacc_get_default_dim (i);
}
nvptx_apply_dim_limits (dims);
}
} }
/* Validate compute dimensions of an OpenACC offload or routine, fill /* Validate compute dimensions of an OpenACC offload or routine, fill
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment