diff options
author | Tom de Vries <tdevries@suse.de> | 2019-01-12 10:27:23 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2019-01-12 10:27:23 +0000 |
commit | d6f528e70ad88ddcc9786e6050d92e003d19d0a3 (patch) | |
tree | 5b5868ba8c1ea9e98c9b85cebc9eb438b7c082ef | |
parent | 980af7cd8fb385f9bb818e29d08fe4af73cd2788 (diff) | |
download | gcc-d6f528e70ad88ddcc9786e6050d92e003d19d0a3.zip gcc-d6f528e70ad88ddcc9786e6050d92e003d19d0a3.tar.gz gcc-d6f528e70ad88ddcc9786e6050d92e003d19d0a3.tar.bz2 |
[nvptx] Allow default vl to be overridden in nvptx_goacc_validate_dims_1
In nvptx_goacc_validate_dims_1, allow oacc_default_dims[DIM_VECTOR] to be
overridden, by assigning it to a new variable default_vector_length at the
start, and using it at the end.
2019-01-12 Tom de Vries <tdevries@suse.de>
* config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1): Add an use new
variable default_vector_length.
From-SVN: r267878
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/nvptx/nvptx.c | 17 |
2 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80c3bf2..87697c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2019-01-12 Tom de Vries <tdevries@suse.de> + * config/nvptx/nvptx.c (nvptx_goacc_validate_dims_1): Add an use new + variable default_vector_length. + +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 diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c index a4c7953..95d72d0 100644 --- a/gcc/config/nvptx/nvptx.c +++ b/gcc/config/nvptx/nvptx.c @@ -5556,6 +5556,7 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level, unsigned used) bool offload_region_p = false; bool routine_p = false; bool routine_seq_p = false; + int default_vector_length = -1; if (decl == NULL_TREE) { @@ -5654,6 +5655,12 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level, unsigned used) gcc_assert (dims[GOMP_DIM_GANG] >= -1); } + if (offload_region_p) + default_vector_length = oacc_get_default_dim (GOMP_DIM_VECTOR); + else + /* oacc_default_dims_p. */ + default_vector_length = PTX_DEFAULT_VECTOR_LENGTH; + int old_dims[GOMP_DIM_MAX]; unsigned int i; for (i = 0; i < GOMP_DIM_MAX; ++i) @@ -5673,12 +5680,12 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level, unsigned used) if (dims[GOMP_DIM_VECTOR] == 0) { vector_reason = G_("using vector_length (%d), ignoring runtime setting"); - dims[GOMP_DIM_VECTOR] = PTX_DEFAULT_VECTOR_LENGTH; + dims[GOMP_DIM_VECTOR] = default_vector_length; } if (dims[GOMP_DIM_VECTOR] > 0 && !nvptx_welformed_vector_length_p (dims[GOMP_DIM_VECTOR])) - dims[GOMP_DIM_VECTOR] = PTX_DEFAULT_VECTOR_LENGTH; + dims[GOMP_DIM_VECTOR] = default_vector_length; nvptx_apply_dim_limits (dims); @@ -5696,7 +5703,7 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level, unsigned used) if (oacc_default_dims_p) { - dims[GOMP_DIM_VECTOR] = PTX_DEFAULT_VECTOR_LENGTH; + dims[GOMP_DIM_VECTOR] = default_vector_length; if (dims[GOMP_DIM_WORKER] < 0) dims[GOMP_DIM_WORKER] = PTX_DEFAULT_RUNTIME_DIM; if (dims[GOMP_DIM_GANG] < 0) @@ -5715,7 +5722,9 @@ nvptx_goacc_validate_dims_1 (tree decl, int dims[], int fn_level, unsigned used) /* Function oacc_validate_dims will apply the minimal dimension. */ continue; - dims[i] = oacc_get_default_dim (i); + dims[i] = (i == GOMP_DIM_VECTOR + ? default_vector_length + : oacc_get_default_dim (i)); } nvptx_apply_dim_limits (dims); |